blueprint

5分でまとめる技術メモ

Kubernetes

Kubernetesとは

複数マシンから構成されるマシン基盤上でのコンテナ管理に用いられるプラットフォームです。 例えばアプリケーションAPIサーバーを起動するコンテナを常にn台に分散してデプロイさせたいとき、定義ファイルにそのようなデプロイ指示を記述すればKubernetesがよしなにデプロイを実施してくれます。

特徴

理想とするコンテナデプロイ状況を宣言的に記述できます。

先程の例のように、コンテナをどのようにデプロイしていくかをYAMLJSON等のファイルに宣言し、それをもとにKubernetesを使用しでデプロイを実施できます。理想とするデプロイ状況がファイル上に定義されているので、定義ファイルがあればデプロイ状況が再現可能になります。またIaCの文脈で、コードとして管理することが可能です。これにより、Kubernetes上の定義をGitで管理したり、CLIの入力に使用するなどが可能になります。

Node

Kubernetesから見た(仮想・物理)マシンの単位です。マシンはオンプレミスにおける一台一台の物理サーバーや、クラウドプラットフォーム上のサーバーインスタンスに該当します。

Pod

Kubernetes上のデプロイ単位です。デプロイする単位なので、複数のコンテナをまとめて起動する場合も1Podとなります。 例えばdocker-composeで複数コンテナを連携してデプロイするような単位を1Podでまとめます。

Pod内ではネットワークインタフェース及びストレージが共有されます。そのため、Podを一つのコンテナホストとみなすこともできます。

Controller

Kubernetesではコンテナクラスタを制御するための仕組みをControllerとして提供します。

Deployment

Deploymentは基本的なResourceの一種で、Podを一定数維持しつつデプロイを実施するのに使用できます。 セルフヒーリング機能を持ち、もしNode障害などで一部のPodが機能しなくなっても、予め宣言しておいたPod数を維持するように生存が確認できるNodeに新たにPodがデプロイされます。

StatefulSet

本来コンテナはステートレス、すなわち状態を持たずコンテナが破棄された場合は内部のファイルシステムも破棄されます。 StatefulSetで管理されたPodは一意の識別子を割り当てられ、明確に区別されます。Node障害などで特定のPodがダウンしても、例えばそのPodに対応したVolumeは復帰後同じ識別子を持つPodに割り当てられます。このように、永続的な状態を持たせるためにStatefulSetを使用することができます。

参考

イラストでわかるDockerとKubernetes (Software Design plus) | 徳永 航平 |本 | 通販 | Amazon

更新履歴

2021/03/28 初版 2021/03/29 Pod,Deployment,StatefulSet 記述追加