はじめに
GKEについてなんとなくで理解していたことがいくつかあり、改めて調べると結構誤解していたので、備忘録的に書き留めていきたいと思います。
バージョン体系
GKE各バージョンのリリース日、各チャネルの自動アップグレード日、サポート終了日は下記。
https://cloud.google.com/kubernetes-engine/docs/release-schedule?hl=ja
自動バージョンアップのターゲット(リリースノート)は下記。利用可能になったバージョン情報を確認できる。
https://cloud.google.com/kubernetes-engine/docs/release-notes
GKEのバージョンはx.y.z-gke.N
で表される。
- x: メジャーバージョン
- 下位互換性のない変更が公開APIに導入された時に上がる。
- y: マイナーバージョン
- 年3回リリースされる。
- 過去のマイナーバージョンで利用されていたAPIが非推奨になったり、廃止になったりする。
- z: Kubernetesのパッチバージョン
- 毎週リリースされ、各ゾーンに段階的に適用される。(=各ゾーン内のクラスタが自動アップデートされる)
- N: GKEのパッチバージョン
- (オープンソースのK8s側ではなく)GKE側 のセキュリティやバグ対応のためのアップデート。
実はパッチバージョンが2種類あるので、知っておくとリリースノートが見やすいと思います。
cf: https://cloud.google.com/kubernetes-engine/versioning?hl=ja#versioning_scheme
リリースチャネルと自動アップデートの関係
コントロールプレーン
は、リリースチャネルに登録されているかどうかに関わらず、Google側で自動アップデートされる。これを無効にすることはできない。
リリースチャネルに登録すると、コントロールプレーンの自動アップデートに追随して、ノード
も自動アップデートをしてくれる。
リリースチャネルに登録していないクラスタにおいても、Googleのサポート終了したノードを使用している場合は、セキュリティと互換性を維持する目的で、ノード
が自動アップデートされる。
クラスタがリリース チャンネルに登録されているかどうかにかかわらず、GKE チームが定期的にクラスタ コントロール プレーンの自動アップグレードを行います。
アップデート時に注意すること
-
コントロールプレーン
そのクラスタ上のワークロードの可用性には影響しない。
ただし、コントロールプレーンのアップデート中はクラスタの設定変更やkubectlコマンドを受け付けなくなるため、エンジニアの作業に支障が出る可能性がある営業時間中などは避けた方が無難。 -
ノード
ノードプール中のノードが順番に停止→新規ノードが起動する。
サージアップグレード・Blue/Greenアップグレードいずれを選択しても可用性が大きく低下する可能性は低いが、Podの再起動は必ず発生するため、サービスに対するユーザアクティビティが少ない時間帯にアップデートするべき。
メンテナンスの時間枠と脆弱性
メンテナンス時間枠と除外時間枠を設定すると、基本的にはそれを守って自動アップデートする。
ただし、重大な脆弱性が発見された場合は、それを無視してアップデートされる可能性がある。
GKE は、重大なセキュリティ脆弱性に対するメンテナンス ポリシーをオーバーライドする権限を有します。
脆弱性の分類について、重大
は下記のように定義されている。
認証されていないリモートの攻撃者によってすべてのクラスタで簡単に悪用され、システム全体のセキュリティが侵害されることにつながる脆弱性。
Security bulletinsにて、脆弱性の情報が発表されている。
※ 日本語表示もできるが、英語版に比べて反映が遅れることがあるので英語版を確認するのが良いと思います。