本番環境間でのクラスタのアップグレードを管理する


このページでは、ロールアウト シーケンスを使用して GKE クラスタのアップグレードを管理する方法を説明します。詳細については、ロールアウト シーケンスによるクラスタのアップグレードについてをご覧ください。

始める前に

作業を始める前に、次のことを確認してください。

  • Google Kubernetes Engine API を有効にします。
  • Google Kubernetes Engine API の有効化
  • このタスクに Google Cloud CLI を使用する場合は、gcloud CLI をインストールして初期化します。

ロールアウト シーケンスの構成

このドキュメントでは、フリートフリート スコープを使用してクラスタを整理し、ロールアウト シーケンスを作成する方法について説明します。

ロールアウトのシーケンスでは、同じリリース チャネル上の一連のクラスタにバージョンがロールアウトされる順序とタイミングを選択します。最大 3 つのスコープのシーケンスを作成できます。

ロールアウト シーケンスを作成するには、クラスタをスコープに整理する必要があります。クラスタをスコープに整理する方法については、こちらの例をご覧ください。 スコープに整理したら、アップストリーム スコープの関係と各スコープのソーク時間を定義することで、ロールアウト シーケンスを作成できます。この仕組みの詳細については、ロールアウト シーケンスの作成方法をご覧ください。

クラスタをスコープにまとめる

ロールアウト シーケンスでは、すべてのスコープ内のすべてのクラスタが同じリリース チャンネルに登録され、同じマイナー バージョンに存在する必要があります。これらの要件が満たされておらず、クラスタ間でバージョンの不一致がある場合は、バージョンのロールアウトで問題が発生する可能性があります。詳細については、ロールアウトの適格性をご覧ください。

スコープはフリート内の組織部門です。クラスタは、別のプロジェクトでホストされているフリートとスコープに登録できます。複数のフリートにわたってスコープを設定してロールアウト シーケンスを作成できます。

すでにクラスタをスコープに整理している場合は、次の手順をスキップしてロールアウト シーケンスを作成するに進んでください。

  1. シーケンスの各クラスタについて、クラスタをフリートに登録します。クラスタは、このクラスタのスコープを作成するプロジェクト内のフリートに登録する必要があります。別のホスト プロジェクトのフリートにクラスタを登録する場合は、プロジェクト間の登録に必要な権限が設定されていることを確認してください。
  2. 2~3 個のスコープを作成して、クラスタを整理します。スコープのフリートのホスト プロジェクトでコマンドを実行します。ロールアウト シーケンスには、最大 3 つのスコープを設定できます。作成するスコープごとにこのコマンドを繰り返します。

    フラグの全一覧については、gcloud alpha container fleet scopes create のリファレンスをご覧ください。create コマンドのフラグを使用すると、ロールアウト シーケンスの作成の手順を使用できます。

  3. 各クラスタをスコープに追加します

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

ロールアウトのシーケンスは、リンクされたリストとして整理されます。詳細については、ロールアウト シーケンスの作成をご覧ください。ロールアウト シーケンスを作成するときは、各スコープに次のプロパティを設定します。

  • アップストリーム スコープ: projects/{project-number}/locations/global/scopes/{scope-name} 形式のアップストリーム スコープのリソースパス。シーケンスの最初のスコープでは、アップストリーム スコープを設定しません。アップストリーム スコープにより、ダウンストリーム スコープの新しいバージョンが認定されます。
  • 浸す時間: スコープのソーク時間は、アップグレードが完了する(またはロールアウトに 30 日かかる)から、ダウンストリーム スコープでアップグレードが開始されるまでの時間です。詳細については、ロールアウト シーケンスでのバージョン評価の仕組みをご覧ください。

これらのプロパティはスコープを作成または更新するときに設定できます。次の手順では update コマンドを使用しますが、create コマンドでスコープを作成するときに同じプロパティを設定できます。

次の各コマンドでは、SOAK_TIME を更新するスコープのソーク時間に置き換えます。

  1. シーケンスの最初のクラスタのソーク時間を設定します。

    gcloud alpha container fleet scopes update FIRST_SCOPE \
        --default-upgrade-soaking=SOAK_TIME \
        --project=FIRST_SCOPE_PROJECT_ID
    

    FIRST_SCOPE は最初のスコープのフルパスに置き換え、FIRST_SCOPE_PROJECT_ID は最初のスコープがホストされているプロジェクトのプロジェクト ID に置き換えます。

  2. シーケンスの 2 番目のスコープにアップストリーム スコープとソーク時間を設定します。

    gcloud alpha container fleet scopes update SECOND_SCOPE \
        --upstream-scope=projects/FIRST_SCOPE_PROJECT_NUMBER/locations/global/scopes/FIRST_SCOPE \
        --default-upgrade-soaking=SOAK_TIME \
        --project=SECOND_SCOPE_PROJECT_ID
    

    SECOND_SCOPE は最初のスコープのフルパスに置き換え、SECOND_SCOPE_PROJECT_ID は 2 番目のスコープがホストされているプロジェクトのプロジェクト ID に置き換えます。

  3. 省略可: ロールアウト シーケンスで 3 つのスコープが必要な場合は、シーケンスの 3 番目のスコープのアップストリーム スコープを設定します。

    gcloud alpha container fleet scopes update THIRD_SCOPE \
        --upstream-scope=projects/SECOND_SCOPE_PROJECT/locations/global/scopes/SECOND_SCOPE \
        --default-upgrade-soaking=SOAK_TIME \
        --project=THIRD_SCOPE_PROJECT_ID
    

    THIRD_SCOPE は最初のスコープのフルパスに置き換え、THIRD_SCOPE_PROJECT_ID は 3 番目のスコープがホストされているプロジェクトのプロジェクト ID に置き換えます。

ロールアウトのシーケンスを確認する

シーケンスの最初のスコープを記述して、設定を確認します。各スコープについて、スコープを記述すると、アップストリーム スコープとダウンストリームのスコープを確認できます。

バージョン ロールアウトのプロセスを管理する

GKE を使用したクラスタ アップグレードでは、プロセスを手動で制御するためのメカニズムが多数用意されています。これらのコントロールに加えて、ロールアウトのシーケンスによってクラスタのアップグレードを制御する方法は他にもあります。このセクションでは、必要に応じてアップグレードを制御する方法について説明します。

ロールアウト シーケンスのステータスを確認します

ロールアウト シーケンスのステータスを確認します。

gcloud alpha container fleet scopes describe SCOPE_NAME \
    --show-linked-cluster-upgrade
    --project=SCOPE_PROJECT_ID

SCOPE_NAME はロールアウト シーケンス内の任意のスコープ名に置き換え、SCOPE_PROJECT_ID はこのスコープのプロジェクト ID に置き換えます。ロールアウト シーケンスに、異なるフリート間のプロジェクト間スコープがある場合、このコマンドを実行するには必要な権限が必要です。

出力では、clusterUpgrade(s).spec 属性と clusterUpgrade(s).state 属性にソーク時間、クラスタのアップグレード オーバーライド、アップグレード ステータスなどのクラスタ アップグレードに関する追加情報が含まれます。このコマンドで提供される情報の詳細については、一連のバージョン ロールアウトのステータスを確認するをご覧ください。

シーケンス内の 1 つのスコープに関する情報のみが必要な場合は、--show-linked-cluster-upgrade フラグを --show-cluster-upgrade に置き換えます。

フラグの全一覧については、gcloud alpha container fleet scopes describe のリファレンスをご覧ください。

スコープ内の個々のクラスタのステータスを表示するには、スコープが存在するフリートのプロジェクトで次のコマンドを実行します。

gcloud alpha container fleet features describe clusterupgrade

ロールアウトの利用資格に関するトラブルシューティング

ロールアウト シーケンス内のすべてのクラスタが同じアップグレード ターゲットでない場合、アップストリーム スコープのクラスタはクラスタに必要なアップグレード ターゲットを検証しないため、GKE はダウンストリーム スコープのクラスタのアップグレードを続行できない可能性があります

ロールアウト シーケンスにロールアウト資格の問題があるかどうかを確認するには、ロールアウト シーケンスのステータスを確認します。スコープが対象外の場合は、手順に沿ってスコープ内の個々のクラスタのステータスを確認します。

前のバージョンが原因でクラスタが対象外の場合(たとえば、スコープ内のほとんどのクラスタが 1.23 から 1.24 にアップグレードされ、クラスタがバージョン 1.22 である場合)は、手動でクラスタの差異を 1.24 に設定し、バージョンの不一致を解決します。

クラスタが新しいバージョンであるため対象外(たとえば、スコープ内のほとんどのクラスタが 1.23 から 1.24 にアップグレードされており、クラスタがバージョン 1.25 である場合)は、バージョンの不一致を解決するクラスタに手動でアップグレードできません。

クラスタのアップグレードをすぐに行うには、部分的に対象となるロールアウトを開始するの手順に従って、INELIGIBLE ステータスのクラスタを削除します。

浸す時間を変更する

特定のバージョン ロールアウトのソーク時間が、シーケンスに対して構成されたソーク時間と異なる場合は、次のコマンドで --add-upgrade-soaking-override フラグを使用して変更できます。

gcloud alpha container fleet scopes update SCOPE_NAME \
    --add-upgrade-soaking-override=SOAK_TIME \
    --upgrade-selector=name=UPGRADE_NAME,version=VERSION

以下を置き換えます。

  • SCOPE_NAME: 特定のバージョンのバージョン ロールアウトに使用されるソーク時間をオーバーライドするスコープの名前。
  • SOAK_TIME: デフォルト以外ので使用されるソーク時間(例: 1 つのバージョンのロールアウトのソーク時間をスキップする場合は「0d」)。
  • UPGRADE_NAME: アップグレードの名前(k8s_control_plane または k8s_node)。
  • VERSION: このスコープへのロールアウト後のソーク時間が必要な GKE バージョン(例: 1.25.2-gke.400)。

たとえば、すでに新しいバージョンを認定していて、次のスコープでアップグレードを開始する準備ができている場合、浸す時間をゼロに設定できます。また、デフォルトの時間を長くして特定のバージョンを認定する場合にも使用できます。

シーケンスの順序の変更

シーケンスの順序を変更する場合は、ロールアウト シーケンスを作成するの手順に従って、アップストリーム スコープを更新します。

スコープのバージョン ロールアウトの完了を遅らせる

スコープがクラスタへの新しいバージョンのロールアウトを完了することを一時的に防止する必要がある場合は、メンテナンスの除外をクラスタに追加しないクラスタに追加できます。ターゲット バージョンにアップグレードされました。これにより、スコープをシーク時間またはダウンストリーム スコープまで最大 30 日間一時停止できます。30 日後に、スコープの普及が開始されます。

スコープのソーク時間を 30 日に変更することもできます。これにより、次のスコープに進む前に、ロールアウト シーケンスの待機時間を最大化できます。

次のスコープでアップグレードの開始を遅らせる必要がある場合は、次のスコープのクラスタのメンテナンスの除外を使用します。

部分的に条件を満たすロールアウトを進める

スコープ上のクラスタ アップグレードが 30 日間の上限に達しておらず、ロールアウトの利用資格に関する問題(スコープ内のバージョンの不一致など)が原因で終了しない場合スコープからクラスタを削除してバージョンのロールアウトを完了し、ソーク時間を開始するか、ロールアウト シーケンスの次のスコープに進みます。たとえば、クラスタの使用状況がスコープ内の他のクラスタに関連付けられなくなったなどの理由で、スコープからクラスタを削除することもできます。

手順に従って、スコープからクラスタを削除します。

スコープのバージョン ロールアウトが完了しないすべてのクラスタを削除すると、スコープのバージョン ロールアウトが完了します。これを確認するには、バージョン ロールアウトのステータスを確認するの手順に従ってください。

シーケンスを削除する

シーケンスを削除するには、次のコマンドを使用して、2 番目のスコープ(このロールアウト シーケンスに 3 つのスコープが含まれている場合は 3 番目のスコープ)のアップストリーム スコープの関連付けを削除します。

gcloud alpha container fleet scopes update SCOPE_NAME --reset-upstream-scope

SCOPE_NAME は、削除するスコープの名前に置き換えます。

クリーンアップ

予期しない請求を防ぐため、Anthos API の無料トライアルに登録してロールアウト シーケンス機能をテストする場合は、非公開プレビューでこの機能のテストを終了した後に、API を無効にしてください。フリートホスト プロジェクトがこの機能の許可リストから削除される前に、API を無効にする必要があります。

次のステップ