GKE の Blue/Green アップグレードを試してみる
概要
GKE を用いてサービス運用を行っていく上で避けては通れないアップグレード戦略についてです。
GKE のノードプールのアップグレード戦略としては「サージアップグレード」と「Blue/Green アップグレード」の 2 つがあります。
今回は 2022 年 7 月 6 日に登場していた Blue/Green アップグレード戦略について実際に試しながら動作を確認していきます。
ゴール
GKE の Blue/Green アップグレード戦略についての基本的な動作と利用方法を確認することをこの記事のゴールとしています。
事前準備
まずは今回利用する GKE クラスタを作成していきます。
最初にいつも通り GKE に利用する VPC と Service Account を作成します。
locals {
name = "tetsuya28"
pod_cidr = "172.20.0.0/16"
service_cidr = "172.21.0.0/16"
}
resource "google_compute_network" "default" {
name = local.name
auto_create_subnetworks = false
}
resource "google_compute_subnetwork" "default" {
name = local.name
network = google_compute_network.default.name
ip_cidr_range = "10.0.0.0/8"
}
resource "google_service_account" "kubernetes" {
account_id = "${local.name}-kubernetes"
display_name = "${local.name}-kubernetes"
}
次に今回利用する GKE を作成します。
resource "google_container_cluster" "default" {
name = local.name
location = "asia-northeast1"
remove_default_node_pool = true
initial_node_count = 1
network = google_compute_network.default.name
subnetwork = google_compute_subnetwork.default.name
networking_mode = "VPC_NATIVE"
ip_allocation_policy {
cluster_ipv4_cidr_block = local.pod_cidr
services_ipv4_cidr_block = local.service_cidr
}
workload_identity_config {
workload_pool = "${local.project_id}.svc.id.goog"
}
min_master_version = "1.24.10-gke.2300"
release_channel {
channel = "UNSPECIFIED"
}
}
そして最後に今回 Blue/Green を行いたいノードプールを作成します。
Blue/Green アップグレードは 2023 年 4 月 13 日現在 google-beta provider でサポートされているため provider = google-beta
を指定しています。
resource "google_container_node_pool" "default" {
provider = google-beta
name = local.name
location = "asia-northeast1"
cluster = google_container_cluster.default.name
node_count = 1
# 今回利用する Blue/Green アップグレード戦略の設定
upgrade_settings {
strategy = "BLUE_GREEN"
blue_green_settings {
standard_rollout_policy {
batch_percentage = 0.5 # 0.0 ~ 1.0
batch_soak_duration = "0s"
}
node_pool_soak_duration = "180s" # 3 minutes
}
}
management {
auto_repair = true
auto_upgrade = false
}
node_config {
preemptible = true
machine_type = "e2-medium"
service_account = google_service_account.kubernetes.email
oauth_scopes = [
"https://www.googleapis.com/auth/cloud-platform",
]
}
}
設定値の説明
上記の Terraform で設定している Blue/Green アップグレード戦略の値について説明していきます。
batch_percentage
Blue ( 既存 ) のノードプールが drain される割合を設定します。
0.0
を設定すると drain フェーズはスキップされます。
batch_soak_duration
デフォルトでは 0s が設定されています。
node_pool_soak_duration
Blue のノードプールを削除するまでの様子見時間を設定することが出来ます。
デフォルトでは 1 時間が設定されています。
この期間の間でも以下の complete-upgrade
コマンドを利用することで様子見フェーズを完了し、次のフェーズ ( Blue のノードプールの削除 ) に移ることが出来ます。
アップグレード手順
-
コントロールプレーンをアップグレードする
GUI や Terraform、CLI などでコントロールプレーンをアップグレードします。 -
ノードプールに対してアップグレードを実行します
コントロールプレーンのアップグレードが完了したらいよいよノードプールのアップグレードです。
同様に GUI や Terraform、CLI でアップグレードを実行します。
その他
GKE ではアップグレード戦略に対して推奨されるタスクが公式から提示されています。
クラスタ管理する必要があり、何から手をつけていいか分からない場合はまずはこのリストに書かれていることを確実に実行出来るようにしましょう。
Discussion