Kubernetesについて
Kubernetesには、さまざまな概念や専門用語が登場します。この先の説明を理解するには概念や専門用語の理解が必須になるので、ここで簡単に触れておきます。
クラスタ
クラスタはKubernetesの概念です。Kubernetesは必ず1つ以上のクラスタで構成され、クラスタは1つ以上のNodeとMasterで構成されています。
Master
Masterはクラスタ全体を参照することが可能で、Masterが公開しているエンドポイントを通して、クラスタを操作することができます。また、MasterではKubernetes APIサーバーが実行されており、RESTリクエストに応じて各リソース(Pod、Serviceなど)の作成や編集、削除などの各種操作を提供します。
Node
Nodeは1つ以上で構成され、Masterに管理されています。NodeはDockerコンテナをサポートしており、デプロイされたコンテナはNode上で動作します。
Nodeは同じスペックのマシンで構成されていますが、Google Container Engineでは独自の機能としてノードプールという機能があり、スペックが異なるNode群をノードプールとしてクラスタ上に複数持たせることができます。
kubectl
Kubernetesクラスタに対して、コマンドを実行するためのコマンドラインインターフェイスです。kubectlのコマンドをクライアントのマシンから実行することで、各リソース(Pod、Serviceなど)の作成、編集、削除などの操作が行えます。
Pod
Podはアプリケーションを構成するDockerコンテナのグループで、Dockerイメージを複数指定することができます。自由なメタ情報を持たせることが可能で、本連載ではversionというメタ情報を持たせて、そのメタ情報をServiceのselectorで指定するようにします。
Replica Set
Podの複製を保持する機能を提供します。指定した複製数に応じてPodが作成され、その数が維持されます。
Deployment
PodとReplica Setの設定をまとめたもので、アプリケーションをデプロイするときは、PodとReplica Setの設定をまとめて記述した、1つのDeploymentをデプロイする形が多いです。
Service
アプリケーション(Pod)を外部に公開するためのエンドポイントで、ClusterIPやNodePort、LoadBalancerなど、さまざまな種類があります。
また、selectorという機能でどのPodを公開するかを指定できます。
Serviceだけでもアプリケーションを外部に公開することができますが、次に紹介するIngressのほうが多機能なので、ServiceとIngressを併用して使うのがおすすめです。
Ingress
アプリケーションを外部に公開するためのリソースで、Serviceでは提供されていないURLマップやTLS対応など、さまざまな機能を提供します。
Ingressにはいくつか種類があります。Nginx Ingressと本記事で使うGKE(GCE)Ingressなどがあり、それぞれのIngressで使える機能が異なります。
IngressはService(NodePort)を指定して使うので、Ingressを使う場合は必ずServiceが必要です。
GKEであれば、GKE Ingressは特別なセットアップなしで使うことができるため、本連載ではこのIngressを使用します。
