コンテナおよびKubernetesの概要

コンテナは、Linuxオペレーティング・システムを実行する軽量の仮想マシンです。通常、コンテナはイメージから起動された1つのアプリケーションを実行します。作成および変更されたファイルは、通常、永続的ではありません。ただし、永続記憶域は使用可能です。コンテナは、クラウド・コンピューティング環境の重要なコンポーネントです。

Kubernetesは、コンテナ化されたワークロードおよびサービスを管理するための移植可能で拡張可能なオープン・ソースのプラットフォームであり、宣言的な構成と自動化の両方を容易にします。Kubernetesには、クラスタ内の複数のホスト(ノードと呼ばれる)のリソースを管理し、必要に応じてこれらのノード間でコンテナを実行する機能があります。コンテナを自動的に生成して、様々な障害に対応できます。Kubernetesは、コンテナ間および外部へのネットワークも管理します。Kubernetesは、多くのクラウド環境およびオンプレミス環境間で移植可能です。

Kubernetesの主要な概念は次のとおりです。

Kubernetesは、アプリケーションのデプロイに必要なポッドおよび他のKubernetesリソースをプロビジョニングするための機能を提供します。デプロイ後、オブジェクトを監視および管理する必要があります。

Kubernetesは、アプリケーションの監視と管理を行いますが、すべてではありません。ポッド・レベルの問題は、自動的に処理されます。たとえば、コンテナに障害が発生した場合、Kubernetesはそのコンテナを自動的に再起動します。ノード全体に障害が発生した場合、Kubernetesは他のノードの交換ポッドを開始します。ただし、Kubernetesにはコンテナ内の問題に関する情報はありません。これはステートレス・アプリケーションでは問題になりませんが、(ステートフルな)データベースの場合、Kubernetesはコンテナ内の内容を管理するための支援が必要です。

この支援は次の形式で提供されます。

カスタム・リソース定義

カスタム・リソース定義(一般的にCRDと呼ばれる)は、Kubernetesのオブジェクト・モデルを拡張します。ポッド、StatefulSetおよびネイティブにサポートするサービス・オブジェクト・タイプと同様の新しいオブジェクト・タイプをKubernetesクラスタに追加します。

Kubernetesオペレータ

Kubernetesオペレータ(オペレータとも呼ばれる)は、CRDの背後にある頭脳です。オペレータは、人間のコンピュータ・オペレータの機能を実行するアプリケーションです。他のアプリケーションを起動、停止、監視および管理します。

オペレータは1つ以上のポッド(1つはアクティブで、他はアイドル状態)で実行されます。アクティブなオペレータが作業を実行します。他のオペレータはアイドル状態で、アクティブなオペレータに障害が発生するまでアイドル状態のままです。アクティブなオペレータは、特定のタイプのオブジェクトをすべて管理し、CRDと組み合せることで、Kubernetesにカスタム機能を追加できます。