Kubernetesの主要リソースカテゴリとオブジェクト

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を拡張し、独自のカスタムリソースを定義できるようにします。

参考