Kubernetes クラスタ
Kubernetes クラスタとは
Kubernetes クラスタは、コンテナ化されたアプリケーションを実行するノードの集合体です。アプリケーションをコンテナ化するとは、アプリケーションの依存関係と必要な複数のサービスをまとめてアプリケーションをパッケージングすることです。コンテナは仮想マシンよりも軽量で柔軟であるため、Kubernetes クラスタでは、アプリケーションの開発、移動、管理がより簡単になります。
Kubernetes クラスタでは、仮想、物理、クラウドベース、オンプレミスといった、複数のマシンや環境をまたいでコンテナを実行できます。Kubernetes コンテナは仮想マシンとは異なり、特定のオペレーティング システムに依存せず、オペレーティング システムを共有し、どこでも実行できます。
Kubernetes クラスタは 1 つのプライマリ ノードと複数のワーカー ノードで構成されます。これらのノードは、クラスタによって物理マシンであることも仮想マシンであることもあります。
プライマリ ノードは、実行するアプリケーションやそのコンテナ イメージなど、クラスタの状態を制御します。すべてのタスクの割り当ては、プライマリ ノードによって行われます。プライマリ ノードは次のようなプロセスを調整します。
- アプリケーションのスケジューリングおよびスケーリング
- クラスタの状態の維持
- アップデートの適用
ワーカー ノードは、これらのアプリケーションを実行するコンポーネントです。ワーカー ノードはプライマリ ノードによって割り当てられたタスクを実行します。ワーカー ノードには仮想マシンも物理マシンも使用でき、すべてが 1 つのシステムの一部として動作します。
Kubernetes クラスタを動作させるには、少なくとも 1 つのプライマリ ノードと 1 つのワーカー ノードが必要です。一般に、本番環境やステージング環境では、クラスタは分散された複数のワーカー ノードで構成されます。テスト環境では、すべてのコンポーネントを同じ物理ノードまたは仮想ノードで実行できます。
ネームスペースを使用すると、1 つの物理クラスタ内の多くのクラスタを整理することができます。ネームスペースを使用することで、リソース クォータを通して、物理クラスタ内のクラスタ リソースをチームごとに分割できます。これは、複雑なプロジェクトや複数のチームが関与している状況で役立ちます。
Kubernetes クラスタの構成要素
Kubernetes クラスタには次の 6 つの主要なコンポーネントが含まれます。
- API サーバ:Kubernetes のすべてのリソースに対して REST インターフェイスを提供します。Kubernetes 制御プレーンのフロント エンドとなります。
- スケジューラ:リソース要件およびメトリックに従ってコンテナを配置します。ノードに割り当てられていないポッドを監視し、それらを実行させるノードを選択します。
- コントローラ マネージャ:コントローラ プロセスを実行し、クラスタの実際の状態が望ましい状態と一致するようにします。また、ノード コントローラ、エンドポイント コントローラ、レプリケーション コントローラなどのコントローラを管理します。
- kubelet:Docker エンジンと通信して、コンテナがポッドで実行されていることを確認します。コンテナの作成および管理では、このプログラムがデフォルトで使用されます。一連の PodSpecs を受け取り、そこに記述されているコンテナが正常に動作していることを確認します。
- kube-proxy:ネットワーク接続を管理し、ノード全体でネットワーク ルールを維持します。Kubernetes の Service コンセプトを特定のクラスタ内のすべてのノード全体に適用します。
- etcd:すべてのクラスタ データを格納します。一貫性があり、可用性に優れた Kubernetes のバッキング ストアです。
これらの 6 つのコンポーネントはそれぞれ、Linux 上でも Docker コンテナとしても実行できます。プライマリ ノードでは API サーバ、スケジューラ、コントローラ マネージャが実行され、ワーカー ノードでは kubelet および kube-proxy が実行されます。
Kubernetes クラスタの利用方法
Kubernetes クラスタを利用するには、まず望ましい状態を特定する必要があります。Kubernetes クラスタでは、次のような要素を含む多くの要素が望ましい状態によって定義されます:
- 実行されるアプリケーションとワークロード
- これらのアプリケーションで必要となるイメージ
- これらのアプリケーションに提供されるリソース
- 必要となるレプリカの数
望ましい状態を定義する際は、JSON または YAML ファイル(マニフェストと呼ばれます)を使用して、システムの実行に必要なアプリケーション タイプやレプリカ数を指定します。
クラスタの望ましい状態は Kubernetes API を使用して設定します。その際、CLI(kubectl)を使用するか、API を直接使用してクラスタと通信し、手動で望ましい状態を設定します。プライマリ ノードは API を介して、望ましい状態をワーカー ノードに伝えます。
Kubernetes 制御プレーンを通して、望ましい状態に合致するようにクラスタが自動管理されます。Kubernetes 制御プレーンの役割には、クラスタ アクティビティのスケジューリングやクラスタ イベントの検知や応答などがあります。
Kubernetes 制御プレーンは継続的な制御ループを稼動させ、クラスタの実際の状態が望ましい状態に一致するようにします。たとえば、5 つのレプリカで実行されるアプリケーションをデプロイしており、1 つのレプリカがクラッシュした場合、Kubernetes 制御プレーンはこのクラッシュを検知し、別のレプリカを展開することで、5 つのレプリカからなる望ましい状態が維持されます。
Pod Lifecycle Event Generator(PLEG)により各種タスクが自動化されます。自動化されるタスクには次のものが含まれます:
- コンテナの起動と再起動
- アプリケーションのレプリカ数の調整
- コンテナ イメージの検証
- コンテナの起動と管理
- アップデートとロールバックの適用
Kubernetes クラスタの作成方法
Kubernetes クラスタは物理マシンあるいは仮想マシン上で作成および展開できます。初めて使用するユーザーは、まずは Minikube を使用して Kubernetes クラスタを作成することを推奨します。Minikube はオープンソースのツールで、Linux、Mac、および Windows オペレーティング システムと互換性があります。Minikube では、1 つのワーカー ノードのみを含む、シンプルでスリムなクラスタを作成および展開できます。
さらに、Kubernetes パターンを使用すると、クラスタ拡張の管理を自動化できます。Kubernetes パターンにより、コンテナベースのアプリケーションでのクラウドベース アーキテクチャの再利用が促進されます。Kubernetes には数々の便利な API が用意されていますが、それらのツールを効果的にオペレーティング システムに取り入れるためのガイドラインは提供されていません。そこで、Kubernetes パターンを使用することで、統一された方法で既存の Kubernetes アーキテクチャにアクセスして再利用できます。これらのアーキテクチャやパターンは、自作することもできますが、再利用可能な Kubernetes クラスタ ブループリントのネットワークを活用することもできます。
Kubernetes クラスタに関連する VMware の製品、ソリューション、リソース
VMware NSX:業界をリードする、エンタープライズ向けネットワークおよびセキュリティ仮想化プラットフォーム
VMware NSX Data Center は、ネットワークとセキュリティに関する L2 ~ L7 の包括的な仮想化プラットフォームを提供します。これにより、ネットワーク全体を単一の管理画面から一括して管理できます。
vSphere Integrated Containers
vSphere Integrated Containers を導入すると、従来型アプリケーションとコンテナ化されたアプリケーションの両方を共通のプラットフォームで同時に実行できる、エンタープライズ コンテナ インフラストラクチャが実現します。
クラウド管理プラットフォーム(CMP)とは
VMware Cloud Management Platform は、従来型のワークロードから(クラウドネイティブの)コンテナベースのワークロードまで、さまざまなワークロードを実行するハイブリッド(マルチクラウド)環境の管理ツールです。ぜひ詳細をご覧ください。
VMware Cloud PKS:Kubernetes クラスタ
使いやすくてコスト効果の高い Kubernetes クラスタが、イノベーションを加速させます。
VMware NSX によるコンテナ ネットワーク
コンテナ化されたアプリケーションとマイクロサービスに、フルスタックの統合されたネットワークとセキュリティを提供します。