GKE
Google Cloud
Google kubernetes Engine
https://gyazo.com/53bdd7192fdca02fbb8959e6b2a75a61
https://cloud.google.com/kubernetes-engine/
クラスタの可用性
シングルゾーンクラスタ (default)
Master, Node を同じゾーンに配置
Master SLA 99.5%
アップグレード時にMasterが一時的に使えない
ゾーンクラスタ
Master は一つのゾーン, Nodeは複数ゾーン
Master SLA 99.5%
アップグレード時にMasterが一時的に使えない
リージョンクラスタ (recommended)
Master, Node ともに複数ゾーンで冗長化
Master SLA 99.95%
アップグレード時もMasterが継続利用可能
Zone間の通信は課金対象
マルチ
Release Channel を使用すると、Master/NodeのアップグレードをGoogle側に任せられる (recommended)
他の選択肢はバージョン指定、アルファクラスタ
ネットワークモード
ルートベースクラスタ
クラスタ内部(Service, Pod)のネットワークVPCから完全に独立
VPC Native クラスタ
NodeのセカンダリIPレンジがクラスタ内部(Service,Pod)で利用される
共有VPC, コンテナネイティブ負荷分散が可能
NEG (Network Endpoint Group) を使って効率的に負荷分散できる
プライベートクラスタ
NodeのIPアドレスをプライベートIPアドレスのみにする
デフォルトのクラスタだとNodeがインターネットから直接アクセス可能になる
inbound はService/Ingress経由
outbound
Cloud NAT
Googleサービスであれば Private Google Access
https://cloud.google.com/vpc/docs/configure-private-google-access
Masterエンドポイントの種類
Public Endpoint
Master Authorized Network でアクセス元IPを限定
Private Endpoint
原則VPC内部からしかアクセス不可能
PodからGCPサービスへのアクセス管理
NodeのGCPサービスアカウント
GCPサービスアカウントのキーをPodのコンテナにマウント
Workload Identity
KubernetesのサービスアカウントとGCPのサービスアカウントを Cloud IAM Policy Bind で紐付け
Node pool
マシンスペック
デフォルトでGKEがある程度のリソースを使用する
サービスアカウント
デフォルトではGCEサービスアカウント(強力)なので変更したほうが良い
バージョンアップ
Master
静的にバージョン指定していても自動アップグレードされる
Node
デフォルトで自動アップグレード
デフォルトでサージアップグレード (Cordon + Drain)
Maintenance Windows, Maintenance Exclusion でアップグレード時間を設定
ロギング
stdout/stderr, システムログ、イベントログはデフォルトで Cloud Logging に収集
fluentdも使える
Structured Log を使うと Cloud Logging 上でいい感じにフィルターできる
ヘルスチェックの設定
BackendConfigを使う
設定されていない場合はReadinessProbeが参照される
負荷分散
L4 (TCP/UDP)
LoadBalancer Service
L7 (HTTP/HTTPS)
NodePort Service + Ingress
GCPのExternal HTTP(S) Load Balancing が使われる
kube-proxy (iptables) によるLBも同時に行われるためオーバーヘッドが大きい
NEGを使う(VPC Native クラスタのみ)と直接podにロードバランシングできる
TLS終端
ref
https://event.cloudnativedays.jp/cndt2020/talks/58
https://www.slideshare.net/GoogleCloudPlatformJP/gke-10-google-cloud-inside-games-apps-online-232703444