Google Kubernetes Engine(GKE)はKubernetesのマネージドサービスで、マスターノードがホストされています。また、Webの管理コンソールからバージョンを選択するだけでアップグレードも可能です。
ただし、素朴にバージョン更新操作でアップグレードした場合の挙動は、以下のような流れとなり、ダウンタイムが発生します。
- クラスタ内の1ノード停止。ノード上で動作しているPodもTerminate
- 停止ノードのバージョン更新
- 起動中のノードでPodの再作成&起動。空きリソースがない場合はノード更新が終わってReadyステータスになるまでウェイト
- 残りのノードも順次同様の挙動
更新の過程で以下のような挙動となり、サービスが出揃うまで数分〜10分程度かかります。
- 新バージョンのノードにはコンテナイメージのキャッシュがないため、イメージのpullに時間がかかる
- サービスの依存性が解決されない状態を経るため、起動エラーになるコンテナもありうる。前提サービスが起動したあとの再起動で収束する
- dnsサービスなどkubernetesのネットワーク機能も同様のプロセスを減るため、外部ドメインの名前解決ができないタイミングがある
また、Controller経由で管理していないPodはTerminateされたまま消失するので、あらかじめDeploymentやReplicaSetなどを定義して動作させておくことが必要です。
ノード更新はローリングアップデートのため、更新の際だけ1ノード追加して更新後に1ノード削除することでダウンタイムを削減できるのかという点も検証しました。
結果的には、更新時のノード追加は効果的ではありませんでした。
起動中のノードがPodの合計要求値に対して不足する状況は避けられているはずですが、けっきょく別ノードで起動する際にはイメージのpullが走るため、起動までの時間はとくに短縮されません。
また、更新後のプロセスで元のノード数に戻す操作の際にも、起動しているPod数の多いノードも削除対象となります。
そのため、一度更新が終わったはずなのにもう一度Podの再起動(所要時間:数分)が実行され、ダウンタイムが増える結果となりました。
けっきょく、ダウンタイムを減らしたい場合にはブルーグリーンデプロイメントのようにもう1クラスタ用意する必要があります。
ただ、DBMSなどのデータをPersistentDiskに書き込む構成の場合は、新環境のPodでそのPersistentDiskをマウントすることになるため、別のクラスタをあらかじめ構築しておく手法もとりづらい面もあります。
⁋ 2017/08/04↻ 2023/10/09
Google Kubernetes Engineは、Pod/ServiceのIPをVPCのサブネット範囲で動的に設定しています(古いクラスタでVPCネイティブでない場合をのぞく)。
Podと …
GKE(Google Kubernetes Engine)は、HTTPS サービスを Kubernetes Gateway/Ingress を用いて公開できます。
非 HTTP のサービスを公開するに …
Google Kubernetes Engineのフロントエンドを ingress にする場合、自動でGCPのヘルスチェックが作られ、これを通過しないとPodが正常動作していたとしてもバックエンドサー …
Google Cloudはネットワーク製品のラインアップが充実していますが、製品ごとに機能と受け付けるオプションが異なるため製品理解が重要です。
まず、製品名が互いに似通っていて区別しづらいため、 …
Google Kubernetes Engineが提供する 垂直Pod自動スケーリング (Vertical Pod Autoscaling)は、Podのコンテナリソース(CPU/RAM)を自動調整する …
kubectlなどkubernetesクラスタとの通信は、クラスタごとのルートCAで署名されており、GKEのルートCAは5年で期限が切れるため手動更新が必要です。
Google Kubernetes …
Google Kubernetes Engine(GKE)は、Google Cloud Platform(GCP)上で動作するマネージドKubernetesです。GCPが提供する世界各国リージョンのデ …
Google Cloud Build は、CI/CD をホストするサービスです。
Artifact Registry と統合されており、GKE で動作させる docker イメージをビルドする用途に …
kubernetesのデフォルト挙動では、podが取得するリモートIPがクラスターネットワークのIPになっています。
そのため、httpサーバーのログにも、10.0.0.1などのプライベートIPアクセ …
Google Kubernetes Engine(GKE、2017秋にGoogle Container Engineから改称)はGCE上に構築されたkubernetesのマネージドクラスタです。 …
Google Container Engine(GKE)など、クラウドインフラ上でdockerコンテナを動作させる場合、データ確保のため外部ディスクを利用するケースが多々あります。
GKEでは、設定フ …
Google Kubernetes Engineを用いてWebサービスを公開している場合、DNS設定する外部IPを同一のアドレスに固定する必要があります。
kubernetesのデフォルト挙動では、外 …
EN contents
Google Kubernetes Engine (GKE) can expose HTTPS services using Kubernetes Gateway/Ingress.
To expose …