Kubernetes とは

Kubernetes(「K8s」とも示されます)は、オープンソースのソフトウェア プラットフォームで、コンテナの管理に使用されます。Kubernetes の自動化機能を利用することで、大規模なコンテナベースのアプリケーションをデプロイする際に、手動のエンジニアリング作業を軽減できます。

Kubernetes は、アプリケーションとインフラストラクチャの両方の要件に対応しながら場所に依存しないため、利用することで運用がシンプルになります。

Kubernetes を利用する理由

コンテナ化されたアプリケーションが必ず Kubernetes を利用しなければならないわけではありませんが、Kubernetes の一元化されたコントロールプレーンにより、コンテナと関連するインフラストラクチャ サービスを個別に管理する必要がなくなるため、運用がシンプルになって時間を短縮できます。

最新のアプリケーションが数十または数百のコンテナで構成される可能性があることを考えると、オーケストレータなしで大規模に展開することの問題は明らかです。

Kubernetes は、アプリケーションのライフサイクル全体で一貫した共有環境を維持できるため、DevOps チームと IT 運用チームにとって大きなメリットがあります。

Kubernetes のもう 1 つのメリットは、アプリケーションを移植しやすいという点です。コンテナ化されたアプリケーションは、オンプレミスのデータセンター、エッジ、パブリッククラウドのいずれの Kubernetes プラットフォームでも実行できます。そのためユーザーは、パフォーマンス、データの重要度、コンプライアンス要件などのビジネスニーズに基づいて、アプリケーションを実行するのに最適な場所を選択できます。

Kubernetes の仕組み

Kubernetes は、複数のノードで構成されたクラスタとして設計されていて、ノード上のコンテナは Pod にデプロイされます。

各 Pod には、1 つ以上のコンテナを含めることができます。Pod には、イメージ参照先、メモリ、CPU、ストレージ、ネットワークに関する要件など、コンテナの実行方法が定義されています。

各クラスタには、マスターノードとワーカーノードが含まれています。マスターノード(複数の場合もあり)は、どのワーカーノードでどの Pod を実行するかを決定したり、アプリケーションの望ましい状態を維持したりするなど、すべてのアクティビティを計画します。スケーリングや新しい更新のロールアウトなどのスケジュールも策定します。

アプリケーションはワーカーノードにデプロイされます。各クラスタ内には複数のワーカーノードが存在する場合があります。ワーカーノードを自動的に拡大/縮小することで、クラスタ内のキャパシティを追加/削除することができます。

マスターノードとワーカーノードのいずれも、仮想マシンまたはベアメタルサーバーとして展開できます。

Kubernetes とネットワーキング

Kubernetes は、さまざまな場所の異なるインフラストラクチャを利用することが多い多層分散システムを考慮しているため、ネットワーキングは、アーキテクチャの重要な機能の 1 つです。

ノード、Pod、コンテナ、アプリケーションなど、Kubernetes のさまざまなコンストラクトには、それぞれ独自の通信要件があります。

  • コンテナ間通信は、同じ Pod 内のコンテナ間で行われます。同じ Pod 内のコンテナは同じノードで実行され、ストレージボリュームや IP アドレスなどのリソースを共有します。また、同じ localhost IP(ポートは異なる)を使用して相互に通信できます。
  • Pod 間の通信は、ポッド専用 IP アドレスを使用して行われます。Kubernetes では、クラスタ内の各ノード(マスター/ワーカーノードのグループ)に IP アドレスのブロックが割り当てられ、そのノード内のすべての Pod に IP アドレスが指定されます。Pod 間のトラフィックは、その IP アドレスに基づいてルーティングされます。Pod の IP アドレスは独立しているか、ノードとコンテナの IP アドレスになります。
  • Pod とサービス間のネットワーキングについて説明すると、Pod は一時的なもので、Pod の IP アドレスも同様です。サービスは、Pod または Pod のグループに一定の IP を割り当てます。Pod 宛てのトラフィックはすべて、サービスの仮想 IP アドレスに基づいてルーティングされます。
  • 外部とサービス間の通信は、クラスタから外部環境への接続を担います。クラスタに接続するには、イングレス機能が必要です。イングレス機能は、負荷分散、SSL オフロード、名前ベースのルーティングなどの他の機能とともに、クラスタへの着信トラフィックを管理する機能です。イングレス機能を利用するには、コントローラ(通常は仮想デバイス)が必要です。

Kubernetes では、Container Network Interface(CNI)仕様に基づいてこのネットワークモデルを実装しています。CNI では、サードパーティがインターフェイスを開発することで、Kubernetes のネットワーキング機能にベンダー固有の機能を追加できます。