Kubernetesは、様々な種類の「リソース」と呼ばれるオブジェクトを管理することで、コンテナ化されたアプリケーションのデプロイ、運用、スケーリングを行います。これらのリソースは、機能や用途に応じていくつかのカテゴリに分類されます。
1. Workloads APIs (ワークロード)
コンテナ化されたアプリケーションの実行と管理に関わるリソースです。
- Pod: Kubernetesでデプロイ可能な最小の実行単位です。1つまたは複数のコンテナ、ストレージ、ネットワークリソース、およびコンテナの実行方法に関する仕様をカプセル化します。
- ReplicaSet: 指定された数のPodレプリカが常に実行されていることを保証します。
- Deployment: PodとReplicaSetを宣言的に管理するための高レベルなリソースです。アプリケーションのローリングアップデートやロールバックなどを容易にします。
- DaemonSet: 全ての(または指定された)ノード上にPodのコピーを1つだけ実行することを保証します。ロギングエージェントやモニタリングエージェントなどに利用されます。
- StatefulSet: ステートフルなアプリケーション(データベースなど)を管理するためのワークロードAPIです。Podの順序付け、一意なネットワーク識別子、永続ストレージなどを提供します。
- Job: 1回限りのタスクを実行し、正常に完了すると終了するPodを作成します。
- CronJob: スケジュールに基づいてJobを定期的に実行します。
2. Service APIs (サービスディスカバリとロードバランシング)
コンテナ化されたアプリケーションを外部に公開したり、内部でサービスディスカバリを提供したりするためのリソースです。
- Service: Podの論理的なセットを定義し、それらにアクセスするための安定したIPアドレスとDNS名を提供します。
ClusterIP
: クラスター内部からのみアクセス可能な仮想IPアドレスを割り当てます。NodePort
: 各ノードの特定のポートを開放し、外部からアクセスできるようにします。LoadBalancer
: クラウドプロバイダーのロードバランサーと連携し、外部からのアクセスをロードバランスします。ExternalName
: サービスを外部のDNS名にマッピングします。Headless
: ClusterIPを持たず、PodのIPアドレスを直接DNSで解決できるようにします。
- Ingress: クラスター内のサービスへのHTTP/HTTPSルーティングを管理します。外部からのアクセスを、パスやホスト名に基づいて複数のサービスに振り分けます。
3. Config & Storage APIs (設定とストレージ)
アプリケーションの設定情報や機密情報、永続ストレージに関するリソースです。
- ConfigMap: アプリケーションの設定データをKey-Value形式で保存します。機密情報を含まない設定に適しています。
- Secret: 機密情報(パスワード、APIキー、トークンなど)を安全に保存します。Base64でエンコードされますが、暗号化はされません。
- PersistentVolume (PV): クラスター内のストレージリソース(NFS、iSCSI、クラウドストレージなど)を抽象化したものです。
- PersistentVolumeClaim (PVC): Podがストレージを要求するためのリソースです。開発者はストレージの具体的な実装を知る必要なく、必要な容量やアクセスモードを要求できます。
4. Cluster APIs (クラスター管理)
クラスター自体の構成やセキュリティ、リソース管理に関するリソースです。
- Node: クラスター内のワーカーマシン(物理または仮想)を表します。
- Namespace: クラスター内のリソースを論理的に分離するための仮想的な区画です。
- ResourceQuota: Namespace内のリソース(CPU、メモリ、Pod数など)の使用量を制限します。
- ServiceAccount: Pod内で実行されるプロセスがKubernetes APIにアクセスするためのIDを提供します。
- Role: 特定のNamespace内で、リソースに対する操作(Podの読み取り、Deploymentの作成など)の権限を定義します。
- ClusterRole: クラスター全体のリソースに対する操作の権限を定義します。
- RoleBinding: Roleをユーザー、グループ、またはServiceAccountに紐付け、Namespace内で権限を付与します。
- ClusterRoleBinding: ClusterRoleをユーザー、グループ、またはServiceAccountに紐付け、クラスター全体で権限を付与します。
- NetworkPolicy: Pod間のネットワーク通信を制御するためのルールを定義します。
5. Metadata APIs (メタデータと拡張)
クラスター内の他のリソースを操作したり、Kubernetesの機能を拡張したりするためのリソースです。
- LimitRange: Namespace内のPodやコンテナが要求できるリソース(CPU、メモリ)の最小値と最大値を定義します。
- HorizontalPodAutoscaler (HPA): CPU使用率やカスタムメトリクスに基づいて、Podのレプリカ数を自動的にスケーリングします。
- PodDisruptionBudget (PDB): 自発的な中断(ノードのドレインなど)中に、指定された数のPodレプリカが常に利用可能であることを保証します。
- CustomResourceDefinition (CRD): Kubernetes APIを拡張し、独自のカスタムリソースを定義できるようにします。
参考
- 青山真也, 『Kubernetes完全ガイド 第2版 impress top gearシリーズ』, インプレス (2021)
- Kubernetes Concepts | Kubernetes