コンテナオーケストレーションツールであるKubernetesについて解説をします。コンテナを使用するうえでは最低限理解しておくべき内容を、図を用いながら、わかりやすく、解説できればと思います。
Kubernetes(クバネテェス)とは
Kubernetes(クバネテェス)とは、一言でいうと、複数のコンテナを管理するためのツールです。kとsの間に8つのアルファベットがあるので、k8sと呼んだりもします。
複数のコンテナを管理するのはとても大変です。例えば、障害が発生してコンテナが停止した場合には作り直す必要がありますし、メンテナンス時にコンテナを1つ1つをアップデートしていくのも手間がかかります。常にコンテナの状態を監視しなければなりません。
Kubernetesを使用することによって、コンテナの管理を容易にすることが出来ます。これからKubernetesの用語と構成について解説していきます。
まずはふわっと知りたい方は以下サイトを参照ください。
Kubernetesはマスターノードとワーカーノードで構成されている
Kubernetesはマスターノードとワーカーノードで構成されています。マスターノードのことをコントロールブレインとも呼びます。
ワーカーノードではコンテナが稼働しており、マスターノードではワーカーノード上で稼働しているコンテナの管理を行います。
マスターノードとワーカーノードで構成されたものをまとめてクラスタと呼びます。ユーザーがマスターノードに希望する構成の設定を行うことで、クラスタは自立して稼働をしてくれます。
Kubernetesはコンテナを望んだ状態に維持してくれる
Kubernetesはコンテナを望んだ状態にしてくれます。この望んだ状態の設定は、yamlファイルに記載します。
例えば、コンテナの数を4つに設定した場合、コンテナを4つに維持してくれます。コンテナが何らかの原因で削除された場合でも、新しくコンテナを作成してくれます。例えば、ユーザーが意図的にコンテナを削除したとしても、yamlファイルに記載されているコンテナの数を維持してくれるのです。
Podはコンテナとボリュームがセットになったもの
Kubernetesでは、Pod(ポッド)という単位で管理されます。Podとは、コンテナとボリュームがセットになったもので、Podでシステムが稼働しています。
基本的に、1つのPodに1つのコンテナが存在します。また、Podには、コンテナ固有のIPアドレスが割り当てられています。
Podについては以下の記事でも説明しています。
ServiceでPodへのアクセスを管理する
Service(サービス)はPodへの通信を振り分け、負荷分散をしてくれます。
Serviceには固定のIPアドレスが振り分けられており、そのIPアドレスにアクセスしてくる通信をPodへ振り分けます。Serviceの固定のIPアドレスをCluster IPと呼びます。ユーザーはCluster IPにアクセスすることで、勝手にサービスがPodへ処理を流してくれるのです。
DeploymentとReplicaSetでPodの数を管理する
Replicaset(レプリカセット)では、Podの数を管理します。Podを複製して、指定された数のPodを常に稼働させます。同一構成のPodのことをレプリカと呼びます。
Deployment(デプロイメント)は、Podのデプロイを管理します。Deploymentを作成すると、ReplicaSetが作成され、指定された数のPodが稼働します。DeploymentとReplicaSetでPodの数を管理するようなイメージです。
定義ファイル(マニュフェストファイル)とは
Kubernetesでは、定義ファイルに望ましい状態を記載し、アップロードします。そうすることで定義ファイルの内容に従ってPodが作成されます。定義ファイルはYAMLかJSON形式で記載します。
定義ファイルには主にデプロイメントとサービスの内容を記載します。前段で説明したように、デプロイメントには、希望するPodの数を記載します。サービスには、どのIPをエンドポイントにして、処理を振り分けるかなどのように、通信の振り分けについてを記載します。
Kubernetesの全体像
Kubernetesの全体像を以下の図に記載しました。Kubernetesはコンテナを使用するうえでは必須の技術です。最低限、本記事に記載している知識を知っておくことによってコンテナ開発への理解が進むと思います。
こちらの図は簡略化していますが、Kubernetesの構成や操作はかなり複雑だと思います。Kubernetesを使用する場合は、GKE(Google Kubernetes Engine)などのマネージドなクラウドサービスを使用することによって管理工数が削減されるため、マネージドなクラウドサービスを使用することがおすすめです。