メンテナンスの時間枠と除外を構成する

メンテナンスの時間枠とメンテナンスの除外を使用することで、Google Kubernetes Engine(GKE)クラスタで自動アップグレードなどのクラスタの自動メンテナンスを実行するタイミング(実行の可否を含む)を制御できます。こうしたメンテナンス ポリシーを構成する前に、GKE メンテナンス ポリシーが適用される変更と適用されない変更を確認してください。

始める前に

作業を始める前に、次のタスクが完了していることを確認してください。

  • Google Kubernetes Engine API を有効にする。
  • Google Kubernetes Engine API を有効化
  • このタスクに Google Cloud CLI を使用する場合は、gcloud CLI をインストールして初期化する。gcloud CLI をインストール済みの場合は、gcloud components update コマンドを実行して最新のバージョンを取得します。以前のバージョンの gcloud CLI では、このドキュメントのコマンドを実行できない場合があります。
  • 既存の Autopilot クラスタまたは Standard クラスタがあることを確認します。必要な場合は、Autopilot クラスタを作成します。

メンテナンスの時間枠を構成する

メンテナンスの時間枠を構成するには、メンテナンスの開始時間、期間、繰り返しの回数を指定します。たとえば、月曜日から金曜日まで毎日 4 時間、毎週繰り返すメンテナンスの時間枠を構成できます。

メンテナンスの時間枠の構成には、 Google Cloud コンソールまたは Google Cloud CLI を使用できます。

メンテナンスの時間枠を構成する際の考慮事項

メンテナンスの時間枠を構成する際は、次のガイダンスに従ってください。

  • GKE のメンテナンスの時間枠が適用されるメンテナンス イベントのタイプと、適用されないタイプを把握します。詳細については、GKE のメンテナンス ポリシーが適用される自動メンテナンスGKE のメンテナンス ポリシーが適用されない自動メンテナンスをご覧ください。
  • クラスタに構成できるメンテナンスの時間枠は 1 つだけです。新しい時間枠を構成すると、以前の時間枠が上書きされます。
  • 32 日間のローリング ウィンドウ内で少なくとも 48 時間はメンテナンスが可能な状態にする必要があります。メンテナンスに 4 時間以上連続する時間を用意してください。
  • Google Cloud コンソールを使用する場合、時刻は常にローカル タイムゾーンで表示されます。
  • 曜日の繰り返しは、常に UTC に基づきます。このため、こうした繰り返しを伴うメンテナンスの時間枠は gcloud CLI を使用して、すべて UTC で設定することをおすすめします。フラグを設定する際は現地時間を使用できますが、そのタイムゾーンは保存されません。たとえば、タイムゾーンが UTC+6 で、メンテナンスの時間枠を水曜日の 02:00 から開始する場合、UTC での値には火曜日の 20:00 を指定します。詳細については、メンテナンスの時間枠のタイムゾーンをご覧ください。

メンテナンスの時間枠を構成する

メンテナンスの時間枠は、Google Cloud コンソールまたは gcloud CLI を使用して既存のクラスタに構成できます。

gcloud

既存のクラスタのメンテナンスの時間枠を作成または更新します。

gcloud container clusters update CLUSTER_NAME \
    --maintenance-window-start START_TIME \
    --maintenance-window-end END_TIME \
    --maintenance-window-recurrence RRULE

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

  • CLUSTER_NAME: クラスタの名前。
  • START_TIME: 定期的なメンテナンスの時間枠が有効になっている日時。RFC-5545 の DTSTART 値で表されます。この時間が経過すると、RRULE に従ってメンテナンスの時間枠が繰り返されます。START_TIME には、メンテナンスの時間枠を開始する時刻も指定します。
  • END_TIME: メンテナンスの時間枠の期間を計算するための終了時間。START_TIME より後の時間を同じ形式で指定します。END_TIME の値は、START_TIME より後の日時でなければなりません。これにより、時間枠の長さのみが計算されますが、メンテナンスの時間枠の繰り返しを停止するタイミングは設定されません。メンテナンスの時間枠が繰り返されなくなるのは、削除された場合のみです。
  • RRULE: RFC-5545 RRULE で表されるメンテナンスの時間枠の繰り返し。これは柔軟な形式で、複数の方法で繰り返しルールを指定し、メンテナンスの時間枠の開始日を指定できます。たとえば、1 週間や 1 か月などの繰り返しを指定できます。END_TIME の日付が START_TIME の日付より後の日付の場合、メンテナンスの時間枠は複数の日にまたがります。たとえば、日曜日に始まるメンテナンスの時間枠は、月曜日まで継続します。

たとえば、次のコマンドを実行すると、2024 年 8 月 23 日金曜日の午前 2 時(UTC)に始まるメンテナンスの時間枠が設定された my-cluster というクラスタが編集されます。このメンテナンスの時間枠は毎週月曜日と金曜日に繰り返され、30 時間後に終了します。最初のメンテナンスの時間枠は、8 月 23 日(金)午前 2 時に始まり、8 月 24 日(土)午前 8 時に終了します。詳しくは、日付と時刻の形式をご覧ください。

gcloud container clusters update my-cluster \
    --maintenance-window-start 2024-08-23T02:00:00Z \
    --maintenance-window-end 2024-08-24T08:00:00Z \
    --maintenance-window-recurrence 'FREQ=WEEKLY;BYDAY=MO,FR'

その他のシナリオについては、メンテナンスの時間枠の例をご覧ください。

コンソール

既存のクラスタのメンテナンスの時間枠を作成または変更するには:

  1. Google Cloud コンソールで [Google Kubernetes Engine] ページに移動します。

    Google Kubernetes Engine に移動

  2. クラスタのリストで、変更するクラスタの名前をクリックします。

  3. [自動化] で、[メンテナンスの時間枠] フィールドの横にある [メンテナンス ポリシーを編集] をクリックします。

  4. [メンテナンスの時間枠を有効化] チェックボックスをオンにします。

  5. 開始時間と期間を選択し、メンテナンスの時間枠が発生する曜日を選択します。RRule を直接編集するには、[カスタム エディタ] を選択します。

  6. [変更を保存] をクリックします。

未完了のメンテナンスを手動で終了する

アップグレードなどの自動メンテナンスがメンテナンスの時間枠よりも長くかかる場合、GKE は実行中のメンテナンス タスクを終了し、次のメンテナンスの時間枠の中でメンテナンス タスクを再開しようとします。自動アップグレードがキャンセルされ、ノードの自動アップグレードが有効になっている場合、ノードのバージョンが混在する可能性がありますが、クラスタは正常に動作します。

クラスタを手動でアップグレードするか、部分的なアップグレードをキャンセルまたはロールバックする場合は、クラスタの手動アップグレードをご覧ください。

メンテナンスの時間枠を削除する

gcloud

クラスタからメンテナンスの時間枠を削除します。

gcloud container clusters update CLUSTER_NAME --clear-maintenance-window

CLUSTER_NAME を、既存のクラスタの名前に置き換えます。

Console

メンテナンスの時間枠を削除するには:

  1. Google Cloud コンソールで [Google Kubernetes Engine] ページに移動します。

    Google Kubernetes Engine に移動

  2. クラスタのリストで、変更するクラスタの名前をクリックします。

  3. [自動化] で、[メンテナンスの時間枠] フィールドの横にある [メンテナンス ポリシーを編集] をクリックします。

  4. [メンテナンスの時間枠を有効化] チェックボックスをオフにします。

  5. [変更を保存] をクリックします。

メンテナンスの時間枠の例

次の例では、メンテナンスの時間枠を構成する方法をいくつか説明します。コマンドのフラグは、クラスタの新規作成や更新と同じ構文を使用するので、ここでは関連するフラグのみを示します。

週末(2026 年 8 月 22 日より)

この例では、start と end のタイムスタンプの差が丸 2 日であるため、メンテナンスの時間枠は週末全体(土曜日と日曜日)にわたって実行されます。時間枠を 48 時間とは異なる長さにする場合、時間枠の開始時間を変えるには -start を、時間枠の合計時間を変えるには -end を変更します。

  --maintenance-window-start 2026-08-22T00:00:00Z \
  --maintenance-window-end 2026-08-24T00:00:00Z \
  --maintenance-window-recurrence 'FREQ=WEEKLY;BYDAY=SA'

平日の午前 9 時から午後 5 時(UTC-4)

この例では、週末を除く、月曜日から金曜日までにメンテナンスの時間枠を設定しています。この例では、UTC 以外のタイムゾーンを指定しています。

   --maintenance-window-start 2026-09-02T09:00:00-04:00 \
   --maintenance-window-end 2026-09-02T17:00:00-04:00 \
   --maintenance-window-recurrence 'FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR'

毎週午後 4 時から 8 時間(UTC-7)

--maintenance-window-start にタイムゾーンを指定しない場合、 Google Cloud アカウントで構成されている現地時間が使用されます。 Google Cloud コンソールは常に現地時間を使用します。

   --maintenance-window-start 2026-08-13T16:00:00-7:00 \
   --maintenance-window-end 2026-08-14T00:00:00-7:00 \
   --maintenance-window-recurrence 'FREQ=WEEKLY'

平日の夜間

この例では、UTC-7 タイムゾーンの平日の夜間に実施される毎日のメンテナンスの時間枠を示しています。この例では、時間枠は 20:00 から翌朝の 4:00 まで続きます。

   --maintenance-window-start 2026-08-15T20:00:00-7:00 \
   --maintenance-window-end 2026-08-16T04:00:00-7:00 \
   --maintenance-window-recurrence 'FREQ=WEEKLY;BYDAY=MO,TU,WE,TH'

メンテナンスの除外を構成する

GKE では、クラスタ メンテナンスの除外とノードプール メンテナンスの除外という 2 種類のメンテナンスの除外を構成できます。詳細については、メンテナンス除外のタイプをご覧ください。

次の情報は、クラスタ メンテナンスの除外に適用されます。ノードプールのメンテナンス除外の要件の詳細については、ノードプールのメンテナンス除外をご覧ください。

クラスタのクラスタ メンテナンスの除外を設定するには、以下を指定する必要があります。

  • 名前: 除外の名前(省略可)。
  • 開始時間: 除外期間の開始日時。開始時間は現在または将来の日時を指定してください。
  • 終了時間: 除外期間の終了日時。 それぞれに使用可能な範囲の除外期間に対する制限については、次の表をご覧ください。メンテナンスの除外の特定のスコープでは、終了時刻を設定して、クラスタのマイナー バージョンのサポート終了日を追跡できます。
  • 範囲: 制限する自動アップグレードの範囲。次の表に、使用可能な除外スコープの一覧を示します。
範囲 コントロール プレーン ノード 除外の最大期間
自動マイナー アップグレード 自動パッチ アップグレード 自動マイナー アップグレード 自動パッチ アップグレード
アップグレードなし(デフォルト) 許可されていません 許可されていません 許可されていません 禁止 90 日を超えることはできません。
マイナー アップグレードなし 許可されていません 許可 許可されていません 許可

メンテナンスの除外は、次のいずれかの方法で構成できます。

  • 固定終了時刻: クラスタのマイナー バージョンと対応するリリース チャンネルのサポート終了日まで終了時刻を設定します。Rapid、Regular、Stable の各チャンネルに登録されているクラスタの場合、これは標準サポートの終了日です。Extended チャンネルの場合は、延長サポートの終了日です。
  • サポートの終了を追跡する: クラスタのマイナー バージョンのサポートの終了を追跡するように終了時刻を構成します。サポートが終了する前にクラスタを次のマイナー バージョンに手動でアップグレードしない場合、GKE はサポート終了時に必要な自動アップグレードを実行し、新しいマイナー バージョンのサポート終了日を追跡する終了時刻でメンテナンスの除外を再度有効にします。詳細については、メンテナンスの除外でサポートの終了を追跡する方法をご覧ください。
マイナー アップグレードまたはノード アップグレードなし 許可されていません 許可 許可されていません 禁止

メンテナンスの除外を構成する方法

Google Cloud コンソールを使用してクラスタ メンテナンスの除外を含むクラスタを作成することも、 Google Cloud コンソールまたは gcloud CLI を使用して既存のクラスタにクラスタ メンテナンスの除外を構成することもできます。gcloud CLI を使用すると、クラスタのマイナー バージョンのサポート終了日を追跡するために、クラスタのメンテナンスの除外の終了時刻を構成できます。

ノードプールのメンテナンスの除外は、gcloud CLI で作成できます。

クラスタ メンテナンスの除外を使用してクラスタを作成する

クラスタのメンテナンスの除外は、新しいクラスタを作成するときに、 Google Cloud コンソールで構成できます。このタスクは、gcloud CLI では行えません。

クラスタ メンテナンスの除外を使用して新しいクラスタを作成するには:

  1. Google Cloud コンソールで、[Autopilot クラスタの作成] ページに移動します。

    [Autopilot クラスタの作成] に移動

    Standard クラスタを作成することでも、このタスクを完了することができます。

  2. クラスタを構成します。

  3. ナビゲーション パネルの [クラスタ] の下の [自動化] をクリックします。

  4. [メンテナンスの除外] で [メンテナンスの除外を追加します] をクリックします。

  5. [範囲]、[開始時間]、[終了時間] を選択します。

  6. [作成] をクリックします。

ブラック フライデーのメンテナンスの除外の例をご覧ください。

既存のクラスタに対してクラスタ メンテナンスの除外を構成する

クラスタ メンテナンスの除外は、 Google Cloud コンソールまたは gcloud CLI を使用して既存のクラスタに構成できます。gcloud CLI を使用すると、クラスタのマイナー バージョンのサポート終了日を追跡するために、メンテナンスの除外の終了時刻を構成できます。

gcloud

  • 固定終了時刻: 固定終了時刻を使用して、既存のクラスタに対してメンテナンスの除外を構成します。

    gcloud container clusters update CLUSTER_NAME \
        --add-maintenance-exclusion-name EXCLUSION_NAME \
        [--add-maintenance-exclusion-start START_DATE_TIME \]
        --add-maintenance-exclusion-end END_DATE_TIME \
        --add-maintenance-exclusion-scope SCOPE
    

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

    • CLUSTER_NAME: クラスタの名前。
    • EXCLUSION_NAME: メンテナンスの除外の名前。
    • START_DATE_TIME: 必要に応じて、除外の開始日時を将来の日時に設定します。このフラグを省略すると、メンテナンスの除外がすぐに開始されます。
    • END_DATE_TIME: 除外の終了日時。
    • SCOPE: 除外するアップグレードの範囲。no_upgradesno_minor_upgradesno_minor_or_node_upgrades のいずれかになります。

    サポートされている日付と時刻の形式を表示するには、gcloud topic datetimes を実行します。

  • サポートの終了時に終了: クラスタのマイナー バージョンのサポート終了日を追跡するメンテナンスの除外を構成します。

    gcloud container clusters update CLUSTER_NAME \
        --add-maintenance-exclusion-name EXCLUSION_NAME \
        [--add-maintenance-exclusion-start START_DATE_TIME \]
        --add-maintenance-exclusion-until-end-of-support \
        --add-maintenance-exclusion-scope SCOPE
    

コンソール

既存のクラスタのメンテナンスの除外を構成するには:

  1. Google Cloud コンソールで [Google Kubernetes Engine] ページに移動します。

    Google Kubernetes Engine に移動

  2. クラスタのリストで、変更するクラスタの名前をクリックします。

  3. [自動化] の [メンテナンスの除外] フィールドの横にある [メンテナンスの除外を編集] をクリックします。

  4. [メンテナンスの除外] で [メンテナンスの除外を追加します] をクリックします。

  5. [範囲]、[開始時間]、[終了時間] を選択します。

  6. [変更を保存] をクリックします。

ノードプールのメンテナンス除外を使用してノードプールを作成する

gcloud CLI を使用して、ノードプールのメンテナンス除外を含むノードプールを作成します。

gcloud container node-pools create POOL_NAME \
    --cluster CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION \
    --add-maintenance-exclusion-until-end-of-support

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

  • POOL_NAME: 新しいノードプールの名前。
  • CLUSTER_NAME: クラスタの名前。
  • CONTROL_PLANE_LOCATION: クラスタのコントロール プレーンの Compute Engine ロケーション。リージョン クラスタの場合はリージョン、ゾーンクラスタの場合はゾーンを指定します。

このコマンドを使用したノードプールの構成の詳細については、gcloud container node-pools create リファレンスをご覧ください。

既存のノードプールのノードプール メンテナンスの除外を追加する

gcloud CLI を使用して、既存のノードプールのノードプール メンテナンスの除外を構成します。

gcloud container node-pools update POOL_NAME \
    --cluster CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION \
    --add-maintenance-exclusion-until-end-of-support

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

  • POOL_NAME: 既存のノードプールの名前。
  • CLUSTER_NAME: クラスタの名前。
  • CONTROL_PLANE_LOCATION: クラスタのコントロール プレーンの Compute Engine ロケーション。リージョン クラスタの場合はリージョン、ゾーンクラスタの場合はゾーンを指定します。

このコマンドを使用したノードプールの構成の詳細については、gcloud container node-pools update リファレンスをご覧ください。

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

クラスタのメンテナンスの除外を削除するには、 Google Cloud コンソールまたは gcloud CLI を使用します。ノードプールのメンテナンス除外を削除するには、gcloud CLI を使用します。

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

gcloud

既存のクラスタ メンテナンスの除外を削除するには、次のコマンドを実行します。

gcloud container clusters update CLUSTER_NAME \
    --remove-maintenance-exclusion EXCLUSION_NAME

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

  • CLUSTER_NAME: 既存のクラスタの名前。
  • EXCLUSION_NAME: 削除するメンテナンスの除外の名前。

Console

既存のクラスタからメンテナンスの除外を削除するには:

  1. Google Cloud コンソールで [Google Kubernetes Engine] ページに移動します。

    Google Kubernetes Engine に移動

  2. クラスタのリストで、変更するクラスタの名前をクリックします。

  3. [自動化] の [メンテナンスの除外] フィールドの横にある [メンテナンスの除外を編集] をクリックします。

  4. [メンテナンスの除外] で、削除する除外の [終了時間] フィールドの横の [アイテムの削除] をクリックします。

  5. [変更を保存] をクリックします。

クラスタのメンテナンスの除外をすべて表示するには、クラスタのメンテナンス ポリシーを表示します。

ノードプールのメンテナンスの除外を削除する

既存のノードプールのノードプール メンテナンスの除外を削除します。

gcloud container node-pools update POOL_NAME \
    --cluster CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION \
    --remove-maintenance-exclusion-until-end-of-support

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

  • POOL_NAME: 既存のノードプールの名前。
  • CLUSTER_NAME: クラスタの名前。
  • CONTROL_PLANE_LOCATION: クラスタのコントロール プレーンの Compute Engine ロケーション。リージョン クラスタの場合はリージョン、ゾーンクラスタの場合はゾーンを指定します。

このコマンドを使用したノードプールの構成の詳細については、gcloud container node-pools update リファレンスをご覧ください。

メンテナンスの除外の例

次の例では、ブラック フライデーからサイバー マンデーまでの 4 日間にわたりメンテナンスを除外しています。多くの小売店にとって、この時期は 1 年で最も売り上げが見込める期間です。次の例は、2021 年のブラック フライデー(2021 年 11 月 26 日)から 2021 年のサイバー マンデー(2021 年 11 月 29 日)、東海岸の午前 0 時(UTC-5)から西海岸の 23:59:59(UTC-8)までの間、メンテナンスの時間枠の実行をブロックする方法を説明します。

gcloud container clusters update sample-cluster \
    --add-maintenance-exclusion-name black-friday \
    --add-maintenance-exclusion-start 2021-11-26T00:00:00-05:00 \
    --add-maintenance-exclusion-end 2021-11-29T23:59:59-08:00 \
    --add-maintenance-exclusion-scope no_upgrades

クラスタのメンテナンス ポリシーの表示

クラスタのメンテナンス ポリシーを表示するには、次のコマンドを使用します。これにより、メンテナンス ポリシーにメンテナンスの時間枠が設定されているかどうかと、すべてのメンテナンスの除外も表示されます。

gcloud container clusters describe CLUSTER_NAME

メンテナンスの時間枠が構成されていないクラスタを特定する

GKE は、クラスタのメンテナンスを行える定期的な時間枠を選択できるよう、メンテナンスの時間枠が構成されていないクラスタを特定します。そのためメンテナンスの時間枠を構成して、クラスタ環境にとって最も都合のよい時間帯に GKE が自動アップグレードやその他のクラスタ メンテナンスをメンテナンス ポリシーに従って行うようにすることをおすすめします。

GKE では、Recommender サービスを通じて分析情報や推奨事項とともにこのガイダンスが提供されます。Recommender からの分析情報と推奨事項を管理する方法については、分析情報と推奨事項で GKE の使用を最適化するをご覧ください。

メンテナンスの時間枠が構成されていないクラスタは、次のいずれかの方法で確認できます。

  • Google Cloud コンソールを使用する。
  • gcloud CLI または Recommender API を使用して、CLUSTER_MAINTENANCE_WINDOW_AND_EXCLUSIONS Recommender サブタイプを指定する

手順については、分析情報と推奨事項を表示するをご覧ください。

この推奨事項を実装するには、メンテナンスの時間枠を構成します。

トラブルシューティング

次の情報を使用して、メンテナンスの時間枠と除外に関する一般的な問題のトラブルシューティングを行います。

ノードの更新が完了しないメンテナンスの時間枠

予定されたメンテナンスの時間枠内にクラスタがノードの更新ノード バージョンのアップグレードなど)を完了できない場合、アップグレードの頻度の低下や、ノードへの変更の完了に遅れが生じる可能性があります。お使いの環境に対する速度と中断の最適なバランスを見つけるために、構成のテストが必要になることがあります。アップグレードの頻度に影響を与える可能性がある要因は次のとおりです。

メンテナンスの除外範囲の制限はリリース チャンネルにのみ適用可能

メンテナンスの除外で自動アップグレードの範囲を制限する場合、クラスタがリリース チャンネルに登録されている必要があります。登録しないと、次のエラーが発生することがあります。

ERROR: (gcloud.container.clusters.update) INVALID_ARGUMENT: Cannot update to
STATIC channel since following maintenancePolicy.maintenanceExclusions can only
apply to release channels. Please remove those maintenance exclusions.
ERROR: (gcloud.container.clusters.update) ResponseError: code=400,
message=MaintenancePolicy.maintenanceExclusions["no"] could not apply to cluster
in STATIC channel, only no_upgrades exclusions are allowed in STATIC channel.

上限を超えるメンテナンスの除外

すべてのアップグレードを除外する(つまり、「アップグレードなし」の範囲)メンテナンスの除外は 3 つまで指定できます。それ例外の場合、次のエラーが発生します。

ERROR: (gcloud.container.clusters.update) ResponseError: code=400,
message=Number of active maintenance exclusions exceeds limit (3).

メンテナンスの除外は合計で最大 20 個まで指定できます。それ以上指定すると、次のエラーが発生します。

ERROR: (gcloud.container.clusters.update) ResponseError: code=400,
message=Number of total maintenance exclusions exceeds limit (20).

次のステップ