コンテナおよびKubernetesの概要
コンテナは、Linuxオペレーティング・システムを実行する軽量の仮想マシンです。通常、コンテナはイメージから起動された1つのアプリケーションを実行します。作成および変更されたファイルは、通常、永続的ではありません。ただし、永続記憶域は使用可能です。コンテナは、クラウド・コンピューティング環境の重要なコンポーネントです。
Kubernetesは、コンテナ化されたワークロードおよびサービスを管理するための移植可能で拡張可能なオープン・ソースのプラットフォームであり、宣言的な構成と自動化の両方を容易にします。Kubernetesには、クラスタ内の複数のホスト(ノードと呼ばれる)のリソースを管理し、必要に応じてこれらのノード間でコンテナを実行する機能があります。コンテナを自動的に生成して、様々な障害に対応できます。Kubernetesは、コンテナ間および外部へのネットワークも管理します。Kubernetesは、多くのクラウド環境およびオンプレミス環境間で移植可能です。
-
ポッド: IPアドレスを共有する1つ以上のコンテナ。ポッドの詳細は、次を参照してください。
-
デプロイメント:
n
個の同じポッドの名前付きコレクション(n
はポッドの数)。Kubernetesにより、n
個の同じポッドが確実に実行されます。デプロイメントの詳細は、次を参照してください。https://kubernetes.io/docs/concepts/workloads/controllers/deployment/
-
PersistentVolume: ポッドにマウントでき、ポッドの存続期間を超えて持続する記憶域。永続ボリュームの詳細は、次を参照してください。
https://kubernetes.io/docs/concepts/storage/persistent-volumes/
-
StatefulSet: デプロイメントと似ていますが、各ポッドにはPersistentVolumeが関連付けられています。StatefulSetsの詳細は、次を参照してください。
https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/
-
サービス: デプロイメントまたはStatefulSetのネットワーク・エンドポイント。Kubernetesクラスタ内のアプリケーションに公開する必要のあるアドレスとポートのセットを定義します。サービスの詳細は、次を参照してください。
https://kubernetes.io/docs/concepts/services-networking/service/
Kubernetesは、アプリケーションのデプロイに必要なポッドおよび他のKubernetesリソースをプロビジョニングするための機能を提供します。デプロイ後、オブジェクトを監視および管理する必要があります。
Kubernetesは、アプリケーションの監視と管理を行いますが、すべてではありません。ポッド・レベルの問題は、自動的に処理されます。たとえば、コンテナに障害が発生した場合、Kubernetesはそのコンテナを自動的に再起動します。ノード全体に障害が発生した場合、Kubernetesは他のノードの交換ポッドを開始します。ただし、Kubernetesにはコンテナ内の問題に関する情報はありません。これはステートレス・アプリケーションでは問題になりませんが、(ステートフルな)データベースの場合、Kubernetesはコンテナ内の内容を管理するための支援が必要です。
この支援は次の形式で提供されます。
カスタム・リソース定義
カスタム・リソース定義(一般的にCRDと呼ばれる)は、Kubernetesのオブジェクト・モデルを拡張します。ポッド、StatefulSetおよびネイティブにサポートするサービス・オブジェクト・タイプと同様の新しいオブジェクト・タイプをKubernetesクラスタに追加します。
Kubernetesオペレータ
Kubernetesオペレータ(オペレータとも呼ばれる)は、CRDの背後にある頭脳です。オペレータは、人間のコンピュータ・オペレータの機能を実行するアプリケーションです。他のアプリケーションを起動、停止、監視および管理します。
オペレータは1つ以上のポッド(1つはアクティブで、他はアイドル状態)で実行されます。アクティブなオペレータが作業を実行します。他のオペレータはアイドル状態で、アクティブなオペレータに障害が発生するまでアイドル状態のままです。アクティブなオペレータは、特定のタイプのオブジェクトをすべて管理し、CRDと組み合せることで、Kubernetesにカスタム機能を追加できます。