Google Cloud Platformで使用するGoogle Kubernetes Engineの概要をまとめました。

Kubernetesの概要
Kubernetesはクーバーネティス、クベネティスなどと読み、k8sなどと書きます。
Kubernetesはコンテナをクラスター化させて管理することのできるソフトウェアです。
Google Kubernetes Engineの機能
Google Kubernetes Engineのドキュメントは以下です。

上記ドキュメントを参考に、GKEの機能をまとめました。
- GKEはKubernetesなので、コンテナのクラスターの作成が可能
- コンテナ上にアプリをデプロイ
- 自動スケーリング
- 詳細なネットワーク設定
- データベースのデプロイ
- 他
クラスターの作成
Kubernetesはコンテナのクラスター管理ができるソフトウェアです。
以下の公式ドキュメントにGKEのクラスターのアーキテクチャ(構造)についてまとめてあります。


図を引用します。
「Nodes」に記載されている「User Pod Containers」が各コンテナです。Control PlaneでGKEのストレージ設定やスケジューラ、CPU・メモリ等のリソース管理を行っています。Connected Google Servicesで詳細なネットワークの設定を行います。
イメージとしては、Control PlaneがハードウェアやOSのような機能のことで、Connected Google Servicesがネットワークの設定になります。
Control Planeはクラスタの統合エンドポイントと呼ばれ、 HTTP/gRPCで直接呼出し、kubectlなどのコマンドでの間接呼び出しを行います。
各ノードの管理について
GKEではノードの管理を以下から選択することができます。
- Autopilotモード
- Standardモード
上記の詳細は以下のGoogle公式ドキュメントでまとめられてます。

GKEではAutopilot モードが推奨されています。
AutopilotモードとStandardモードの違いは、AutopilotモードはGKEが「ノード構成、自動スケーリング、自動アップグレード、ベースライン セキュリティ構成、ベースライン ネットワーキング構成など」を自動で管理してくれるのに対して、Standardモードは「個々のノードの構成を含め、基盤となるインフラストラクチャをユーザーが管理」するモードということです。
GKEのAutopilotモードとStandardモードの比較は以下のドキュメントで確認できます。

GKEのネットワーク設定
GKEのネットワーク設定の概要は以下のページから確認できます。

公式ドキュメントがもっとも詳細に記載されているため、詳しくは上記のドキュメントを確認することをおすすめします。以下では上記ドキュメントからの一部の内容を引用して情報をまとめました。
KubernetesのIPアドレスについて
Kubernetesでは以下の種類のIPアドレスを使用します。
ClusterIP | サービスに割り当てられた IP アドレスのこと。このアドレスは Service の存続期間中は不変。 |
Pod IP アドレス | 特定の Pod に割り当てられた IP アドレスのこと。Pod IPアドレスは一時的なもの。 |
ノード IP アドレス | 特定のノードに割り振られた IP アドレスのこと。 |
Podのネットワーク設定について
図を引用します。

Kubernetes は、ノード上の Pod 用に予約されたアドレスの範囲から、Pod のネットワーク名前空間内の仮想ネットワーク インターフェースに IP アドレス(Pod IP アドレス)を割り当てます。このアドレス範囲は、Pod のクラスタに割り当てられる IP アドレス範囲のサブセットで、これはクラスタ作成時にも構成できます。
Kubernetesでのネットワークの設定について、上記の図を参照すると、ノード自体のIPアドレスは10.240.0.10ですが、PodのIPアドレスが10.255.255.101と0.255.255.102になっています。
Podは図のNode Interface: eth0のような物理的なインターフェースに接続されてPod間でのやり取りができるようになります。
GKEのServiceとネットワーク設定について
図を引用します。

GKEでは、上記の図のようにサービスをPod A、Pod Bのように複数のコンテナにトラフィックを分散して処理を行います。
一見すると、サービスはアプリケーションにとって単一の障害点のように見えます。ただし、Kubernetes は、多数のノードで実行されているすべての Pod にできるだけ均等にトラフィックを分散させます。このため、クラスタは、1 つ以上のノード(すべてではない)に影響する停止に耐えることができます。