カスタム ステージを使用してクラスタのアップグレードのロールアウトを順序付ける

このドキュメントでは、カスタム ステージでロールアウト シーケンスを使用する Google Kubernetes Engine(GKE)クラスタのアップグレードを管理する方法について説明します。ロールアウト シーケンスは、フリートに編成されたクラスタのグループと、必要に応じて、それらのフリートのクラスタのサブセットを使用して作成します。1 つのグループ内でクラスタのアップグレードが完了した後のソークテスト時間(最大 30 日)を選択できます。これには Autopilot クラスタと Standard クラスタの両方を含めることができます。この機能の仕組みの詳細については、カスタム ステージを使用したロールアウト シーケンスについてをご覧ください。

複数のフリートにわたってロールアウトを管理する場合は、専用のプロジェクトを使用して RolloutSequence オブジェクトをホストすることをおすすめします。このプロジェクトは、シーケンス全体のロールアウトの親とコーディネーターとして機能します。通常、このプロジェクトはシーケンスの一部ではありません。つまり、このプロジェクトにはシーケンスの一部であるフリートやクラスタは含まれていません。

始める前に

必要なロール

プロジェクトを作成するには、resourcemanager.projects.create 権限を含むプロジェクト作成者のロール(roles/resourcemanager.projectCreator)が必要です。詳しくは、ロールを付与する方法をご覧ください。

ロールアウト シーケンスを作成または変更するには、ロールアウト シーケンス内の各フリート ホスト プロジェクトとロールアウト シーケンス ホスト プロジェクトに対するフリート編集者 IAM ロール(roles/gkehub.editor)が必要です。このロールには次の権限が付与されます。

  • gkehub.rolloutsequences.create
  • gkehub.rolloutsequences.get
  • gkehub.rolloutsequences.list
  • gkehub.rolloutsequences.update
  • gkehub.rolloutsequences.delete
  • gkehub.fleet.update

これらの権限により、RolloutSequence オブジェクトの作成、アクセス、変更と、ロールアウト シーケンスでのフリートの使用が可能になります。

クラスタをフリートに登録または登録解除するには、次のすべての権限が必要です。

1 つ以上の組織のプロジェクトでホストされているフリートを使用して、ロールアウト シーケンスを作成できます。ただし、これらのプロジェクトに必要な権限が必要です。

さまざまなタスクに必要な最小権限の IAM ロールについては、Gemini アシスタンスを使用して事前定義ロールの候補を取得するをご覧ください。

ロールアウト シーケンスを構成する

ロールアウト シーケンスを作成するには、クラスタをフリートのグループに編成する必要があります。Kubernetes ラベルを使用して、フリート内のクラスタの特定のサブセットをターゲットにできる詳細なステージを作成することもできます。クラスタの編成方法については、コミュニティ バンクの例をご覧ください。クラスタをグループに整理し、必要に応じてラベルを付けた後、ステージの順序付きリストと各グループのソーク時間を定義して、ロールアウト シーケンスを作成します。

クラスタをフリートに編成する

ロールアウト シーケンスでは、すべてのクラスタを同じリリース チャンネルに登録することをおすすめします。クラスタが同じチャンネルに登録されていない場合、GKE はシーケンス内の最も保守的なチャンネルからバージョンを選択します。たとえば、クラスタが Stable チャンネルと Regular チャンネルの両方に登録されている場合、GKE は Stable チャンネルのバージョンを選択します。また、同じ自動アップグレード ターゲット バージョンの対象となるように、すべてのクラスタで同じマイナー バージョンを実行することをおすすめします。

すでにクラスタをフリートに編成している場合は、次の手順をスキップして、クラスタのサブセットを作成するセクションに進むことができます。

  1. クラスタをフリートにグループ化します。テスト、ステージング、本番環境などのデプロイ環境ごとにクラスタを編成できます(推奨)。
  2. 選択したグループ化に基づいて、各クラスタをフリートに登録します。

クラスタのサブセットを作成する(省略可)

ロールアウト シーケンスのステージで特定のクラスタをターゲットにするには、それらのクラスタにラベルを付ける必要があります。

たとえば、完全なロールアウトの前にクラスタの小さなサブセットで新しいバージョンをテストするには、それらのクラスタに canary ラベルを適用します。Google Cloud CLI を使用して値 truecanary ラベルをクラスタに追加するには、次のコマンドを実行します。

gcloud container clusters update CLUSTER_NAME \
    --location=CLUSTER_LOCATION\
    --update-labels=canary=true

次のように置き換えます。

--update-labels=canary=true フラグを指定すると、GKE はクラスタに canary ラベルを適用します。

クラスタにラベルを追加する方法については、既存のクラスタのラベルを追加または更新するをご覧ください。

カスタム ステージを含むロールアウト シーケンスを作成する

カスタム ステージを含むロールアウト シーケンスは、ステージを宣言的に定義することでアップグレードの順序を定義します。gcloud CLI では YAML ファイルを使用し、Terraform では構成にリソース ブロックを追加します。このセクションで説明する手順を行うと、RolloutSequence が作成されます。

シーケンスがすべてのクラスタをキャプチャするようにするには、各フリートにキャッチオール ステージ(ラベル セレクタのないステージ)を含める必要があります。このキャッチオール ステージでは、前のステージで GKE が選択しなかった残りのすべてのクラスタがキャプチャされます。1 つの RolloutSequence 内の複数のステージに単一のクラスタを割り当てると、競合を解決するために、GKE はクラスタを最も早いステージにのみ暗黙的に割り当てます。

次の構成例では、3 つのステージを作成します。

  • 最初のステージは、dev フリート内のすべてのクラスタを対象としています。アップグレードが完了すると、7 日間のソーク時間(7d)があります。
  • 第 2 段階では、ラベル canary=true が設定されている prod フリート内のクラスタをターゲットにします。アップグレードが完了すると、7 日間のソーク時間(7d)があります。
  • 第 3 段階では、prod フリート内の残りのクラスタをターゲットにします。アップグレードが完了すると、7 日間のソーク時間(7d)があります。

gcloud

  1. 次のマニフェストを rollout-sequence.yaml として保存します。

    - stage:
      fleet-projects:
      - projects/dev
      soak-duration: 7d
    - stage:
      fleet-projects:
      - projects/prod
      soak-duration: 7d
      label-selector: resource.labels.canary=='true'
    - stage:
      fleet-projects:
      - projects/prod
      soak-duration: 7d
    

    次の点にご注意ください。

    • stage: フリートまたはフリート内のクラスタのサブセットが含まれます。シーケンスが次のステージに進む前に、前のステージのクラスタを完全にアップグレードしてソークする必要があります。ただし、アップグレード プロセスの開始から 30 日後にクラスタのアップグレードが完了していない場合、GKE はソーク期間を開始します。
    • fleet-projects: このステージのクラスタを選択するフリートのリスト。ステージごとに参照できるフリートは 1 つまでです。フリートは、フリートがホストされているプロジェクトによって識別されます。フリートにプロジェクト間のメンバーシップが含まれている場合、このプロジェクトはクラスタが存在するプロジェクトとは異なるプロジェクトにすることができます。フリート プロジェクトを指定する形式は projects/PROJECT_ID です。
    • label-selector(省略可): 指定されたフリートからクラスタのサブセットを選択します。このフィールドでは Common Expression Language(CEL)構文を使用し、resource.labels で始める必要があります。
    • soak-duration: 前のステージのすべてのクラスタをアップグレードした後、次のステージに進むまでの待機時間。秒、分、時間、日で表します。
  2. rollout-sequence.yaml マニフェストで定義したロールアウト シーケンスを作成するには、次のコマンドを実行します。

    gcloud container fleet rolloutsequences create ROLLOUT_SEQUENCE_NAME \
        --display-name=DISPLAY_NAME \
        --stage-config=rollout-sequence.yaml
    

    次のように置き換えます。

    • ROLLOUT_SEQUENCE_NAME: RFC-1034 の仕様に準拠する不変の識別子(例: test-rollout-sequence)。
    • DISPLAY_NAME: ロールアウト シーケンスの人が読める形式の文字列。

Terraform

このセクションでは、Terraform を使用してカスタム ステージでロールアウト シーケンスを作成する方法について説明します。このリソースを使用してシーケンスを更新することもできます。詳細については、google_gke_hub_rollout_sequence のリファレンス ドキュメントをご覧ください。

  1. 次のブロックを Terraform 構成に追加して、ロールアウト シーケンス リソースを作成します。

    resource "google_gke_hub_rollout_sequence" "rollout_sequence" {
      rollout_sequence_id = "ROLLOUT_SEQUENCE_NAME"
      display_name        = "DISPLAY_NAME"
      stages {
        fleet_projects = ["projects/dev"]
        soak_duration  = "7d"
      }
      stages {
        fleet_projects = ["projects/prod"]
        cluster_selector {
          label_selector = "resource.labels.canary=='true'"
        }
        soak_duration  = "7d"
      }
      stages {
        fleet_projects = ["projects/prod"]
        soak_duration  = "7d"
      }
    }
    

    次のように置き換えます。

    • ROLLOUT_SEQUENCE_NAME: RFC-1034 の仕様に準拠する不変の識別子(例: test-rollout-sequence)。
    • DISPLAY_NAME: ロールアウト シーケンスの人が読める形式の文字列。

特定のバージョンをロールアウトする

特定のバージョンをロールアウト シーケンスにロールアウトできます。詳細については、特定のバージョンのロールアウトをご覧ください。

ロールアウト シーケンス内のクラスタのコントロール プレーンまたはノードにバージョンをロールアウトできます。コントロール プレーンまたはノードにロールアウトするバージョンを個別に選択できます。

GKE は、ステージで一度に 1 つのバージョンのみをコントロール プレーンまたはノードにロールアウトできます。ロールアウト シーケンスの最初のステージで実行されている既存のロールアウトがある場合、ロールアウト シーケンスを gcloud CLI または Terraform で管理するかどうかに応じて、GKE は次の処理を行います。

  • gcloud CLI: コマンドを実行すると、既存のロールアウトをキャンセルして、指定したバージョンへのロールアウトを作成するかどうかを尋ねるインタラクティブ プロンプトが表示されます。肯定的な回答をすると、GKE は既存のロールアウトをキャンセルして、新しいロールアウトを作成します。そうでない場合、GKE は既存のロールアウトを保持し、コマンドで最初にリクエストした新しいロールアウトを作成しません。
  • Terraform: 次のセクションで説明するように Terraform 構成を更新すると、ロールアウトが最初のステージで実行されている場合、GKE は既存のロールアウトをキャンセルします。

ロールアウト シーケンスでコントロール プレーンにバージョンをロールアウトする

gcloud

次のコマンドを実行します。

gcloud container fleet rolloutsequences upgrade ROLLOUT_SEQUENCE_NAME \
    --control-plane-version="CONTROL_PLANE_VERSION"

次のように置き換えます。

  • ROLLOUT_SEQUENCE_NAME: ロールアウト シーケンスの名前。
  • CONTROL_PLANE_VERSION: ロールアウトするバージョン。1.34.7-gke.1055000 などの特定のバージョンを選択することも、バージョンのエイリアスを使用することもできます。詳細については、クラスタ バージョンの指定をご覧ください。

Terraform

Terraform を使用してロールアウト シーケンスを管理する場合は、ロールアウト シーケンスの作成に使用したブロックに追加することで、特定のバージョンをロールアウトできます。

ブロックに次のフィールドを追加します。フィールドは、連続している必要がある stages ブロックの間を除き、どこにでも追加できます。

min_control_plane_version = "CONTROL_PLANE_VERSION"

CONTROL_PLANE_VERSION は、ロールアウトするバージョンに置き換えます。1.34.7-gke.1055000 などの特定のバージョンを選択することも、バージョンのエイリアスを使用することもできます。詳細については、クラスタ バージョンの指定をご覧ください。

このフィールドを使用してコントロール プレーン バージョンをロールアウトしたことがある場合、このフィールドはブロックに残ります。以前にロールアウトしたバージョンを、今回ロールアウトする CONTROL_PLANE_VERSION に置き換えます。

ロールアウト シーケンスのノードにバージョンをロールアウトする

gcloud

次のコマンドを実行します。

gcloud container fleet rolloutsequences upgrade ROLLOUT_SEQUENCE_NAME \
    --node-version="NODE_VERSION"

次のように置き換えます。

  • ROLLOUT_SEQUENCE_NAME: ロールアウト シーケンスの名前。
  • NODE_VERSION: ロールアウトするバージョン(例: 1.34.7-gke.1055000)。

Terraform

Terraform を使用してロールアウト シーケンスを管理する場合は、ロールアウト シーケンスの作成に使用したブロックに追加することで、特定のバージョンをロールアウトできます。

ブロックに次のフィールドを追加します。フィールドは、連続している必要がある stages ブロックの間を除き、どこにでも追加できます。

min_node_version = "NODE_VERSION"

NODE_VERSION は、ロールアウトするバージョン(1.34.7-gke.1055000 など)に置き換えます。このフィールドを使用してノード バージョンをロールアウトしたことがある場合、フィールドはブロックに残ります。以前にロールアウトしたバージョンを、今回ロールアウトする NODE_VERSION に置き換えます。

ロールアウトのステータスを確認する

ロールアウト シーケンスを構成すると、アップグレードを管理するために Rollout オブジェクトが自動的に作成されます。これらのオブジェクトの進行状況は、Google Cloud CLI コマンドを使用してモニタリングおよび追跡できます。

ロールアウトを一覧表示する

ロールアウト シーケンス ホスト プロジェクトのアクティブなロールアウトと過去のロールアウトをすべて一覧表示するには、次のコマンドを実行します。

gcloud container fleet rollouts list --project=HOST_PROJECT_ID

HOST_PROJECT_ID は、ロールアウト シーケンス ホスト プロジェクトの ID に置き換えます。

ロールアウト シーケンスがホストされているプロジェクトにすでにいる場合は、--project=HOST_PROJECT_ID フラグを省略できます。

出力は次のようになります。

NAME                                              STATE      CREATE_TIME
05eb251e4f19269e23-node-1-33-5-gke-1201000-t7mqd  COMPLETED  2025-10-30T20:07:46
05eb251e4f19269e23-kcp-1-33-5-gke-1201000-djwst   COMPLETED  2025-10-30T18:07:06
05eb251e4f19269e23-node-1-33-5-gke-1125000-6bxvu  COMPLETED  2025-10-23T17:46:54
05eb251e4f19269e23-kcp-1-33-5-gke-1125000-2f6ct   RUNNING    2025-10-23T16:41:33

上記の出力で、kcp を含むロールアウト名はコントロール プレーンのアップグレードを指し、node を含む名前はノードのアップグレードを指します。kcp または node の後のロールアウト名のセグメントは、GKE バージョンから取得されます。

ロールアウトの説明を取得する

特定のロールアウトの詳細情報(ターゲット バージョン、状態、アップグレードされたクラスタなど)を取得するには、前のコマンドで取得したロールアウト ID を指定して describe コマンドを使用します。

gcloud container fleet rollouts describe ROLLOUT_ID \
  --project=HOST_PROJECT_ID

次のように置き換えます。

  • ROLLOUT_ID: ロールアウトを一覧表示したときに取得したロールアウト ID。
  • HOST_PROJECT_ID: ロールアウト シーケンスがホストされているプロジェクト ID。

次に例を示します。

gcloud container fleet rollouts describe 927e9a989930cf3b55-kcp-1-32-4-gke-1106006 \
  --project=my-hostfleet

出力は次のようになります。

createTime: '2025-05-26T11:47:29.909959672Z'
membershipStates:
  projects/dev-project-id/locations/us-central1/memberships/c-1:
    lastUpdateTime: '2025-05-26T12:20:55.601542481Z'
    targets:
    - cluster:   projects/dev-project-id/locations/us-central1/clusters/c-1
      operation: //container.googleapis.com/v1/projects/dev-project-id/locations/us-central1/operations/operation-1234567890-abcdefg-hijklm-nopqrst
      state: SUCCEEDED
    stageAssignment: 1
  projects/dev-project-id/locations/us-central1/memberships/c-2:
    lastUpdateTime: '2025-05-26T12:22:57.151203493Z'
    targets:
    - cluster:   projects/dev-project-id/locations/us-central1/clusters/c-2
      operation: //container.googleapis.com/v1/projects/dev-project-id/locations/us-central1/operations/operation-987654321-ghijkl-mno-pqr-stu-vwxyz
      state: SUCCEEDED
    stageAssignment: 1
  projects/prod-project-id/locations/us-central1/memberships/c-1:
    lastUpdateTime: '2025-05-26T13:03:34.134308942Z'
    targets:
    - cluster: projects/prod-project-id/locations/us-central1/clusters/c-1
      operation: //container.googleapis.com/v1/projects/prod-project-id/locations/us-central1/operations/operation-567891234-efghij-klm-nopq-rstu-vwxyz
      state: SUCCEEDED
    stageAssignment: 2
  projects/prod-project-id/locations/us-central1/memberships/c-2:
    lastUpdateTime: '2025-05-26T13:06:34.025261641Z'
    targets:
    - cluster: projects/prod-project-id/locations/us-central1/clusters/c-1
      operation: //container.googleapis.com/v1/projects/prod-project-id/locations/us-central1/operations/operation-765432198-01a7b896-67c2-523-6fjjh4-icmdydh
      state: SUCCEEDED
    stageAssignment: 2
name: projects/user-hostfleet/locations/global/rollouts/05eb251e4f19269e23-kcp-1-32-4-gke-1106006
rolloutSequence: projects/project-id/locations/global/rolloutSequences/my-sequence
state: COMPLETED
updateTime: '2025-07-22T07:36:51.052691989Z'
versionUpgrade:
  desiredVersion: 1.32.4-gke.1106006
  type: TYPE_CONTROL_PLANE
stages:
- state: COMPLETED
  endTime: '2025-05-26T12:22:28.828506491Z'
  stageNumber: 1
  startTime: '2025-05-26T11:48:28.772658427Z'
  soakDuration: 600s
- state: COMPLETED
  endTime: '2025-05-26T13:06:20.026390832Z'
  stageNumber: 2
  startTime: '2025-05-26T12:32:38.419372153Z'
  soakDuration: 600s

ロールアウトのステータス情報

ロールアウトを記述すると、出力の stages フィールドと membershipStates フィールドに、それぞれ各ステージの進行状況と、そのステージ内のクラスタの進行状況が表示されます。

次の表に、ステージのステータスを示します。

ステータス 説明
PENDING このステージのアップグレードはまだ開始されていません。
RUNNING このステージのアップグレードが進行中です。ステージ内のクラスタにメンテナンスの時間枠を構成している場合、GKE は時間枠が開くまで待機してからクラスタをアップグレードします。
SOAKING このステージのすべてのクラスタでアップグレードが完了し、ステージは構成されたソーキング期間に入っています。
FORCED_SOAKING アップグレードに最長アップグレード時間(30 日間)を超える期間を要していたため、GKE はソークフェーズを強制的に開始しました。アップグレードは、残りのクラスタで続行されます。
COMPLETED ステージのテストが完了し、ロールアウトが次のステージに進みます。

次の表に、シーケンス内のクラスタの想定されるステータスを示します。

ステータス 説明
PENDING このクラスタでアップグレードが保留中です。
INELIGIBLE このクラスタはアップグレードの対象外です。バージョンの不一致が原因である可能性があります。不適格の理由は出力に表示されます。
RUNNING このクラスタでアップグレードが進行中です。
SUCCEEDED このクラスタでアップグレードが正常に完了しました。
FAILED このクラスタでアップグレードが失敗しました。ステージがアクティブ(RUNNING または FORCED_SOAKING 状態)の間、失敗したターゲットは無期限に再試行されます。

ロールアウトを管理する

個々のロールアウトは、以降のセクションの手順に沿って管理できます。ロールアウトの管理と、実行できる対応するアクションの詳細については、ロールアウトの管理をご覧ください。

特定のロールアウトだけでなく、ロールアウト シーケンス全体を管理する場合は、次のセクションのロールアウト シーケンスを管理するをご覧ください。

ロールアウトを一時停止する

アクティブなロールアウトを一時停止できます。このアクションの詳細については、ロールアウトの一時停止をご覧ください。

ロールアウトを一時停止するには、次のコマンドを実行します。

gcloud container fleet rollouts pause ROLLOUT_ID

ROLLOUT_ID は、一時停止するロールアウトの ID に置き換えます。ロールアウト シーケンスのロールアウトのロールアウト ID を取得するには、ロールアウトを一覧表示するをご覧ください。

ロールアウトを再開する

一時停止してから 90 日以内のロールアウトは再開できます。このアクションの詳細については、ロールアウトを再開するをご覧ください。

一時停止したロールアウトを再開するには、次のコマンドを実行します。

gcloud container fleet rollouts resume ROLLOUT_ID

ROLLOUT_ID は、再開するロールアウトの ID に置き換えます。ロールアウト シーケンス内のロールアウトのロールアウト ID を取得するには、ロールアウトを一覧表示するをご覧ください。

ロールアウトのキャンセル

ロールアウト(有効または一時停止中のロールアウトを含む)をキャンセルできます。必須の自動アップグレードのロールアウトをキャンセルすることはできません。ロールアウトのキャンセルについて詳しくは、ロールアウトをキャンセルするをご覧ください。

ロールアウトをキャンセルするには、次のコマンドを実行します。

gcloud container fleet rollouts cancel ROLLOUT_ID

ROLLOUT_ID は、キャンセルするロールアウトの ID に置き換えます。ロールアウト シーケンス内のロールアウトのロールアウト ID を取得するには、ロールアウトを一覧表示するをご覧ください。

ロールアウト ステージを完了する

アップグレードを次のステージに進める準備ができたら、ロールアウト ステージを完了できます。このアクションの詳細については、ロールアウト ステージを完了するをご覧ください。

ロールアウト ステージを完了するには、次のコマンドを実行します。

gcloud container fleet rollouts force-complete-stage ROLLOUT_ID \
    --stage=STAGE

次のように置き換えます。

  • ROLLOUT_ID: ステージを完了するロールアウトの ID。ロールアウト シーケンス内のロールアウトのロールアウト ID を取得するには、ロールアウトを一覧表示するをご覧ください。
  • STAGE: 今すぐ完了するステージ。たとえば、第 2 段階を完了する場合は「2」と入力します。このコマンドを使用するには、ステージが実行中または浸透中である必要があります。

特定のロールアウトのロールアウト シーケンスでクラスタを無視する

アクティブなロールアウトの一部としてクラスタをアップグレードしない場合は、ロールアウト シーケンスで GKE がクラスタを無視するように設定できます。ただし、このアクションでは、アクティブなロールアウトだけでなく、アクティブなロールアウトと今後のロールアウトのロールアウト シーケンスからクラスタが削除されます。

このアクションを実行して、アクティブなロールアウトでクラスタがアップグレードされないようにするには、ロールアウト シーケンスでクラスタを無視するをご覧ください。

ロールアウト シーケンスを管理する

以下の各セクションで説明するように、ロールアウト シーケンスを使用してクラスタの自動アップグレードを制御する方法はいくつかあります。

ロールアウト シーケンス全体とそのすべてのロールアウトではなく、ロールアウト シーケンスの 1 つのロールアウトを管理する場合は、ロールアウトを管理するをご覧ください。

ロールアウト シーケンスを一覧表示する

ホスト プロジェクトのすべてのロールアウト シーケンスを一覧表示するには、次のコマンドを実行します。

gcloud container fleet rolloutsequences list --project=HOST_PROJECT_ID

HOST_PROJECT_ID は、ロールアウト シーケンス ホスト プロジェクトの ID に置き換えます。

ロールアウト シーケンスの説明を取得する

特定のロールアウト シーケンスの詳細を表示するには、次のコマンドを実行します。

gcloud container fleet rolloutsequences describe ROLLOUT_SEQUENCE_NAME \
  --project=HOST_PROJECT_ID

次のように置き換えます。

  • ROLLOUT_SEQUENCE_NAME: ロールアウト シーケンスの名前。
  • HOST_PROJECT_ID: ロールアウト シーケンス ホスト プロジェクトの ID。

出力は次のようになります。

createTime: '2025-10-23T16:40:16.403871189Z'
displayName: my-display-name
name: projects/HOST_PROJECT_ID/locations/global/rolloutSequences/ROLLOUT_SEQUENCE_NAME
stages:
- clusterSelector:
    labelSelector: resource.labels.canary=='true'
  fleetProjects:
  - projects/FLEET_PROJECT_ID
  soakDuration: 600s
- fleetProjects:
  - projects/FLEET_PROJECT_ID
  soakDuration: 300s
uid: 5c5b2ac8-9d76-45f9-92ca-5e6bd3fbcaef
updateTime: '2025-10-23T17:11:57.285678399Z'

GKE がロールアウト シーケンスで実行するアップグレードのタイプを選択する

デフォルトでは、GKE はすべてのタイプのクラスタ アップグレードをロールアウト順序で実行します。ロールアウト シーケンスでクラスタ アップグレードの範囲を制限して、特定のタイプのアップグレードのみを実行できます。詳細については、ロールアウト シーケンスで GKE が実行するアップグレードの種類を選択するをご覧ください。

ロールアウト シーケンスで GKE に実行させるアップグレードの種類を指定するには、ロールアウト シーケンスの管理方法に応じて、次の手順を行います。

gcloud

次のコマンドを実行します。

gcloud container fleet rolloutsequences update ROLLOUT_SEQUENCE_NAME \
    --auto-rollout-scope=TYPES_OF_UPGRADES

次のように置き換えます。

Terraform

Terraform を使用してロールアウト シーケンスを管理する場合は、ロールアウト シーケンスの作成に使用したブロックに追加することで、そのロールアウト シーケンスで GKE に実行させるアップグレードのタイプを指定できます。

ブロックに次のフィールドを追加します。フィールドは、連続している必要がある stages ブロックの間を除き、どこにでも追加できます。

auto_upgrade_config {
  rollout_creation_scope {
    upgrade_types = [
      UPGRADE_TYPES
    ]
  }
}

UPGRADE_TYPES は、実行するアップグレードのリストに置き換えます。次のいずれか 1 つ以上を指定できます(それぞれ引用符で囲みます)。

たとえば、ロールアウト シーケンスでパッチ バージョンのみをロールアウトする場合は、upgrade_types = ["CONTROL_PLANE_PATCH", "NODE_PATCH"] 構成を指定します。

upgrade_types = [] を設定すると、GKE はロールアウト シーケンスでクラスタのアップグレードを実行しません(必須の自動アップグレードのロールアウトを除く)。

GKE がロールアウト順序ですべてのタイプのクラスタ アップグレードを実行するデフォルトの動作に戻すには、upgrade_types = ["CONTROL_PLANE_PATCH", "CONTROL_PLANE_MINOR", "NODE_PATCH", "NODE_MINOR"] 構成を指定します。または、Terraform 構成から auto_upgrade_config ブロックを削除します。

ロールアウト シーケンスを変更する

既存のロールアウト シーケンスは、作成後に変更できます。ロールアウト シーケンスの管理方法に応じて、次の手順でロールアウト シーケンスを変更します。

gcloud

gcloud CLI を使用してロールアウト シーケンスを管理する場合は、シーケンスを定義した YAML 構成ファイルを編集できます。たとえば、ステージのソーク時間を更新したり、ステージを更新してアップグレードの順序を変更したりできます。ファイルを編集したら、変更を適用します。

たとえば、元のロールアウト シーケンスを rollout-sequence.yaml という名前のファイルで定義した場合は、必要に応じてファイルを編集します。次のコマンドを実行します。

gcloud container fleet rolloutsequences update test-rollout-sequence \
  --display-name="My Updated Rollout Sequence" \
  --stage-config=rollout-sequence.yaml

Terraform

Terraform を使用してロールアウト シーケンスを管理する場合は、ロールアウト シーケンスの作成に使用したブロックを変更して、ロールアウト シーケンスを変更します。

ロールアウト シーケンスでクラスタを無視する

GKE でロールアウト シーケンスのクラスタを無視できます。ロールアウト シーケンスで 1 つ以上のクラスタを無視できます。詳細については、ロールアウト シーケンスでクラスタを無視するをご覧ください。

ロールアウト順序で GKE がクラスタを無視するようにするには、次の操作を行います。

  1. GKE で無視するクラスタにラベルを追加するか、既存のラベルを使用します。たとえば、GKE で status などのラベルを無視したり、status=quarantine などの特定の値を持つラベルを無視したりできます。
  2. このラベルを持つクラスタを無視するようにロールアウト シーケンスを設定します。これを行うには、ロールアウト シーケンスの管理方法に応じて、次の手順を行います。

    gcloud

    次のコマンドを実行します。

    gcloud container fleet rolloutsequences update ROLLOUT_SEQUENCE_NAME \
        --ignored-clusters-selector="resource.labels.LABEL_TO_IGNORE"
    

    次のように置き換えます。

    • ROLLOUT_SEQUENCE_NAME: ロールアウト シーケンスの名前。
    • LABEL_TO_IGNORE: GKE がロールアウト シーケンスで無視するクラスタのラベルの名前。

    Terraform

    Terraform を使用してロールアウト シーケンスを管理する場合は、ロールアウト シーケンスの作成に使用したブロックに次のフィールドを追加します。フィールドは、連続している stages ブロックの間を除き、どこにでも追加できます。

    ignored_clusters_selector {
      label_selector = "resource.labels.LABEL_TO_IGNORE"
    }
    

    LABEL_TO_IGNORE は、ロールアウト シーケンスで GKE が無視するクラスタのラベルの名前に置き換えます。

この手順では、ロールアウト シーケンスで 1 種類のラベルを無視するように GKE を構成します。複数のラベルを無視する場合や、特定のラベルを持つクラスタを無視する方法についてより複雑な式を作成する場合は、CEL 式構文を使用してこのフィールドに値を渡すことができます。すべてのラベルで resource.labels. 接頭辞を使用する必要があります。

クラスタをロールアウト シーケンスに追加し直す

前のセクションの手順に沿って GKE でロールアウト シーケンスのクラスタを無視するように設定した場合は、この操作を元に戻すことができます。GKE でクラスタが無視されないようにするには、ロールアウト シーケンスの管理方法に応じて、次の手順で無視セレクタを削除します。

gcloud

次のコマンドを実行します。

gcloud container fleet rolloutsequences update ROLLOUT_SEQUENCE_NAME \
    --clear-ignored-clusters-selector

ROLLOUT_SEQUENCE_NAME は、ロールアウト シーケンスの名前に置き換えます。

このコマンドは、無視セレクタをリセットして、GKE がシーケンス内のクラスタを無視しないようにします。

Terraform

Terraform を使用してロールアウト シーケンスを管理する場合は、ロールアウト シーケンスの作成に使用したブロックから ignored_clusters_selector ブロックを削除します。

または、GKE で特定のクラスタを無視しないようにする場合は、クラスタからラベルを削除します。

ロールアウト シーケンスを削除する

ロールアウト シーケンスを削除するには、次のコマンドを実行します。

gcloud container fleet rolloutsequences delete ROLLOUT_SEQUENCE_NAME \
  --project=HOST_PROJECT_ID

次のように置き換えます。

  • ROLLOUT_SEQUENCE_NAME は、ロールアウト シーケンスの名前に置き換えます。
  • HOST_PROJECT_ID は、ロールアウト シーケンス ホスト プロジェクトの ID に置き換えます。

ロールアウト シーケンスを削除すると、そのシーケンスで進行中のロールアウトはすべてキャンセルされます。シーケンスの一部であったクラスタは、登録されているリリース チャンネルのデフォルトの自動アップグレード動作に戻ります。

カスタム ステージを使用するように既存のロールアウト シーケンスを移行する

フリートベースのロールアウト シーケンスを使用している場合は、既存のフリートを参照する新しい RolloutSequence を作成して、カスタム ステージを使用するシーケンスに移行できます。このバージョンのロールアウト シーケンスには Cloud de Confiance コンソールのサポートはありません。

ロールアウト シーケンスを移行する手順は次のとおりです。

  1. 必要に応じて、シーケンスを移行する前に、現在のロールアウト シーケンス構成のコピーを作成します。構成のコピーを作成するには、次のいずれかを行います。

    必要に応じて以前のバージョンのロールアウト シーケンスに簡単に戻せるように、フリートベースのロールアウト シーケンスは削除しないことをおすすめします。カスタム ステージを含むロールアウト順序が機能するために、フリートベースのロールアウト順序を削除する必要はありません。これは、両方が存在する場合、GKE はカスタム ステージを含むロールアウト順序のみに従うためです。

  2. ロールアウト シーケンスをホストする専用の Cloud de Confiance by S3NS プロジェクトを作成します。通常、このプロジェクトはシーケンスの一部ではありません。つまり、このプロジェクトにはシーケンスの一部であるフリートやクラスタは含まれていません。

  3. ロールアウト シーケンスにフリート内の特定のクラスタを含める場合は、それらのクラスタにラベルを追加します。この手順は省略可能です。

  4. カスタム ステージでロールアウト シーケンスを作成するの手順に沿って操作します。

    たとえば、rollout-sequence-migrate.yaml という名前の次のマニフェストは、以前のロールアウト シーケンスの既存のフリートを参照しています。このマニフェストでは、prod フリートの canary ステージを含む 3 つのステージを記述しています。

    - stage:
      fleet-projects:
      - projects/dev
      soak-duration: 604800s
    - stage:
      fleet-projects:
      - projects/prod
      soak-duration: 604800s
      label-selector: canary=true
    - stage:
      fleet-projects:
      - projects/prod
      soak-duration: 604800s
    

フリートの新しい RolloutSequence を定義すると、GKE は新しいシーケンスに従ってフリートのアップグレードを開始し、以前の構成を削除します。

カスタム ステージを含むロールアウト シーケンスを以前のロールアウト シーケンスに移行する

このセクションでは、カスタム ステージを使用したロールアウト シーケンスからフリートベースのロールアウト シーケンス モデルに戻す方法について説明します。このプロセスでは、新しい RolloutSequence を削除し、元のフリートベースの構成を復元します。

移行中の順序外アップグレードを防ぐ

シーケンスの再構成中に意図しないアップグレードや順序外のアップグレードが発生しないようにするには、本番環境クラスタにメンテナンスの除外を適用します。この手順では、これらのクラスタの自動アップグレードが一時的に一時停止されます。たとえば、本番環境クラスタで no upgrades タイプのメンテナンス除外を構成できます。

ロールアウト シーケンスを削除する

クラスタを管理する RolloutSequence オブジェクトを削除します。この削除により、カスタム ステージ機能が無効になります。

RolloutSequence を削除するには、次のコマンドを実行します。

gcloud container fleet rolloutsequences delete ROLLOUT_SEQUENCE_NAME

ROLLOUT_SEQUENCE_NAME は、ロールアウト シーケンスの名前に置き換えます。

以前のロールアウト シーケンス構成(カスタム ステージなし)を復元する

RolloutSequence を削除すると、元のフリートベースの構成を復元できます。このプロセスでは、シーケンス内の各フリートの upstreamFleet リンクとソーク時間など、元のパラメータを使用して clusterupgrade 機能を再作成します。詳細については、ロールアウト シーケンスを作成するをご覧ください。

メンテナンスの除外を削除する

元のフリートベースのロールアウト シーケンス構成を復元したら、このセクションの最初の手順で適用したメンテナンス除外を削除します。GKE は自動アップグレードを再開します。このアップグレードは、復元されたフリートベースのシーケンスによって管理されます。

次のステップ