VM ホスト メンテナンス ポリシーを設定する


このドキュメントでは、ホストイベントが発生したときに VM の動作を制御するために、仮想マシン(VM)インスタンスのホスト メンテナンス ポリシーを設定する方法について説明します。

始める前に

  • まだ設定していない場合は、認証を設定します。認証とは、Google Cloud サービスと API にアクセスするために ID を確認するプロセスです。ローカル開発環境からコードまたはサンプルを実行するには、次のように Compute Engine に対する認証を行います。

    このページのサンプルをどのように使うかに応じて、タブを選択してください。

    コンソール

    Google Cloud コンソールを使用して Google Cloud サービスと API にアクセスする場合、認証を設定する必要はありません。

    gcloud

    1. Google Cloud CLI をインストールし、次のコマンドを実行して初期化します。

      gcloud init
    2. デフォルトのリージョンとゾーンを設定します

    REST

    このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。

      Google Cloud CLI をインストールし、次のコマンドを実行して初期化します。

      gcloud init

制限事項

  • プリエンプティブル VM のホスト メンテナンス ポリシーは変更できません。メンテナンス イベントが発生すると、プリエンプティブル VM は停止し、移行されません。プリエンプトされた VM は手動で再起動する必要があります。
  • E2 マシンタイプを使用して VM を作成すると、VM のホスト メンテナンス設定を MIGRATE から TERMINATE(またはその逆)に変更することはできません。

利用可能なホスト メンテナンス プロパティ

次のプロパティを使用して、VM のメンテナンス動作、再起動動作、ホストエラー発生後の動作を構成できます。

特に指定しない限り、Compute Engine は各 VM をデフォルト値で構成します。

ホストイベント中に、構成済みのホスト メンテナンス ポリシーに応じて、ライブ マイグレーションをサポートしていない VM は終了または自動的に再起動されます。

  • onHostMaintenance: VM の再起動が必要になるメンテナンス イベントが発生したときの動作を指定します。

    • MIGRATEデフォルト)では、Compute Engine はメンテナンス イベント発生時にインスタンスをライブ マイグレーションします。
    • TERMINATE: VM は移行せずに停止します。
  • automaticRestart: VM がクラッシュしたか、システムによって停止された場合の動作を指定します。

    • trueデフォルト)では、インスタンスがクラッシュまたは停止した場合、Compute Engine はインスタンスを再起動します。
    • false: VM がクラッシュまたは停止しても、Compute Engine は VM を再起動しません。
  • localSsdRecoveryTimeout: ローカル SSD のリカバリ タイムアウトを設定します。これは、ホストのエラー後に Compute Engine がローカル SSD データの復元を待機する最大時間(時間単位)です。この設定は、ローカル SSD ディスクがアタッチされている VM にのみ適用されます。

    • 設定されていない場合(デフォルト): Compute Engine はディスクを復元するために最大 1 時間待機します。Z3 VM(プレビュー)の場合、デフォルトの待機時間は 6 時間です。
    • 0 から 168 までの数値: Compute Engine がディスクを復元するために待機する時間を指定します。この数値は 1 時間単位の整数にする必要があります。最大値は 7 日です。値が 0 の場合、Compute Engine はデータの復元を待機しません。
  • hostErrorTimeoutSecondsプレビュー): VM が応答していないことを検出した後、Compute Engine が VM を再起動または終了するのを待機する最大時間を秒単位で設定します。

    • 設定されていない場合(デフォルト): Compute Engine は最大 5.5 分(330 秒)待機してから、応答しない VM を再起動します。
    • 90 から 330 までの数値: Compute Engine が応答しない VM を再起動するまで待機する秒数を 30 秒単位で指定します。

VM のホスト メンテナンス ポリシーを設定する

VM のホスト メンテナンス ポリシーは、最初に VM を作成するとき、または VM の作成後に変更できます。

VM 作成時にホスト メンテナンス ポリシーを設定する

このセクションでは、VM の作成時にホスト メンテナンス ポリシーを設定する方法について説明します。VM 作成の他の例については、VM インスタンスを作成して起動するをご覧ください。

VM のホスト メンテナンス ポリシーは、Google Cloud コンソール、gcloud CLI、または Compute Engine API を使用して VM の作成時に設定できます。

コンソール

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

    [インスタンスの作成] に移動

  2. VM の名前を指定します。

  3. VM のリージョンゾーンを選択します。

  4. [マシンの構成] セクションで、次の操作を行います。

    1. VM のマシンタイプの詳細を指定します。
    2. [VM プロビジョニング モデルの詳細設定] メニューを開きます。
    3. [ホスト メンテナンス時] メニューで、次のいずれかの手順を選択します。
    4. メンテナンス イベント中に VM を移行するには、[VM インスタンスを移行] を選択します。
    5. メンテナンス イベント中に VM を停止するには、[VM インスタンスを終了] を選択します。
  5. VM を作成するには、[作成] をクリックします。

gcloud

Google Cloud コンソールで、「Cloud Shell をアクティブにする」をクリックします。

Cloud Shell をアクティブにする

Google Cloud コンソールの下部で Cloud Shell セッションが開始し、コマンドライン プロンプトが表示されます。Cloud Shell はシェル環境です。Google Cloud CLI がすでにインストールされており、現在のプロジェクトの値もすでに設定されています。セッションが初期化されるまで数秒かかることがあります。

新しい VM のホスト メンテナンス ポリシーを設定するには、gcloud compute instances create コマンドを使用します。次のパラメータを 1 つ以上指定します。

  • --maintenance-policy: ホスト メンテナンス中に VM を移行するか停止するかを示します。このプロパティを省略すると、VM はデフォルトで移行されます。
  • --no-restart-on-failure または --restart-on-failure: ホストエラー後に VM を自動的に再起動するかを示します。デフォルトでは、障害が検出されると必ず VM が再起動されます。
  • --local-ssd-recovery-timeout: ホストエラーの発生後に Compute Engine がアタッチされたローカル SSD ディスクの復元に費やす時間。デフォルトは 1 時間です。

次のコマンドを使用して、新しい VM のホスト メンテナンス ポリシーを設定します。いずれかのフラグを省略すると、フラグのデフォルトが使用されます。

  gcloud compute instances create VM_NAME \
      --maintenance-policy=MAINTENANCE_POLICY \
      --RESTART_ON_FAILURE_BEHAVIOR \
      --local-ssd-recovery-timeout=SSD_RECOVERY_TIMEOUT

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

  • VM_NAME: VM 名。
  • MAINTENANCE_POLICY: この VM のメンテナンス ポリシー(TERMINATE または MIGRATE)。
  • RESTART_ON_FAILURE_BEHAVIOR: VM の再起動動作。--no-restart-on-failure または --restart-on-failure に設定します。
  • SSD_RECOVERY_TIMEOUT: 応答しない VM にアタッチされたローカル SSD の復元に費やす時間数。有効な値は 0 から 168 で、1 時間単位で指定します。

ホストエラー検出のタイムアウトを設定する

Compute Engine が応答しない VM の再起動や終了を待機する最大時間を設定するには、gcloud compute instances create コマンドを使用します。タイムアウトは --host-error-timeout-seconds フラグで指定します。

  gcloud beta compute instances create VM_NAME \
      --maintenance-policy=MAINTENANCE_POLICY \
      --RESTART_ON_FAILURE_BEHAVIOR \
      --local-ssd-recovery-timeout=SSD_RECOVERY_TIMEOUT \
      --host-error-timeout-seconds=ERROR_DETECTION_TIMEOUT

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

  • VM_NAME: VM 名。
  • MAINTENANCE_POLICY: この VM のメンテナンス ポリシー(TERMINATE または MIGRATE)。
  • RESTART_ON_FAILURE_BEHAVIOR: VM の再起動動作。--no-restart-on-failure または --restart-on-failure に設定します。
  • SSD_RECOVERY_TIMEOUT: 応答しない VM にアタッチされたローカル SSD の復元に Compute Engine が費やす時間数。有効な値は 0 から 168 で、1 時間単位で指定します。
  • ERROR_DETECTION_TIMEOUT: 応答しない VM を再起動するまで Compute Engine が待機する秒数(90~330)。30 秒単位で指定します。

REST

Compute Engine API を使用して新しい VM のホスト メンテナンス ポリシーを設定するには、instances.insert メソッドを使用します。リクエスト本文の scheduling オブジェクトに次のプロパティを 1 つ以上含めます。

  • onHostMaintenance: ホスト メンテナンス中に VM を移行するか停止するかを示します。VM はデフォルトで移行されます。
  • automaticRestart: ホストエラー後に VM を自動的に再起動するかを示します。VM はデフォルトで自動的に再起動されます。
  • localSsdRecoveryTimeout: ホストエラーの検出後、Compute Engine がアタッチされたローカル SSD ディスクの復元に費やす時間。デフォルトは 1 時間です。
      POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances

      {
        "name": "VM_NAME",

        "scheduling": {
          "onHostMaintenance": "MAINTENANCE_POLICY",
          "automaticRestart": "RESTART_POLICY,
          "localSsdRecoveryTimeout": SSD_RECOVERY_TIMEOUT
        }
      }

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

  • PROJECT_ID: VM のプロジェクト。
  • ZONE: VM を作成するゾーン。
  • VM_NAME: VM 名。
  • MAINTENANCE_POLICY: この VM のメンテナンス ポリシー(TERMINATE または MIGRATE)。
  • RESTART_POLICY: この VM の再起動ポリシー(true または false)。
  • SSD_RECOVERY_TIMEOUT: 応答しない VM にアタッチされたローカル SSD ディスクの復元に Compute Engine が費やす時間数。有効な値は 0 から 168 で、1 時間単位で指定します。

ホストエラー検出のタイムアウトを設定する

Compute Engine が応答しない VM の再起動や終了を待機する最大時間を設定するには、ベータ版 instances.insert メソッドを使用します。このオプションはプレビューで利用可能なためです。

リクエスト本文の scheduling オブジェクトに hostErrorTimeoutSeconds プロパティを追加します。


   POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/instances

   {
      "name": "VM_NAME",

      "scheduling": {
        "onHostMaintenance": "MAINTENANCE_POLICY",
        "automaticRestart": "RESTART_POLICY,
        "localSsdRecoveryTimeout": SSD_RECOVERY_TIMEOUT
        "hostErrorTimeoutSeconds": HOST_ERROR_TIMEOUT,
      }
    }

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

  • PROJECT_ID: VM のプロジェクト。
  • ZONE: VM を作成するゾーン。
  • VM_NAME: VM 名。
  • MAINTENANCE_POLICY: この VM のメンテナンス ポリシー(TERMINATE または MIGRATE)。
  • RESTART_POLICY: この VM の再起動ポリシー(true または false)。
  • SSD_RECOVERY_TIMEOUT: 応答しない VM にアタッチされたローカル SSD ディスクの復元に Compute Engine が費やす時間数。有効な値は 0 から 168 で、1 時間単位で指定します。
  • HOST_ERROR_TIMEOUT: 応答しない VM を再起動または終了するまで Compute Engine が待機する秒数。有効な値は 90~330 で、30 秒単位で指定します。

既存の VM のホスト メンテナンス ポリシーを更新する

コンソール

  1. Google Cloud コンソールで [VM インスタンス] ページに移動します。

    [VM インスタンス] に移動

  2. 設定を変更する VM をクリックします。VM の詳細ページが表示されます。

  3. VM の詳細ページで、次の手順を実施します。

    1. ページの上部にある [編集] ボタンをクリックします。
    2. [管理] セクションに移動します。[可用性ポリシー] セクションから、[ホスト メンテナンス時] と [自動再起動] オプションを設定できます。
    3. [保存] をクリックします。

gcloud

Google Cloud コンソールで、「Cloud Shell をアクティブにする」をクリックします。

Cloud Shell をアクティブにする

Google Cloud コンソールの下部で Cloud Shell セッションが開始し、コマンドライン プロンプトが表示されます。Cloud Shell はシェル環境です。Google Cloud CLI がすでにインストールされており、現在のプロジェクトの値もすでに設定されています。セッションが初期化されるまで数秒かかることがあります。

gcloud compute instances set-scheduling コマンドを使用して、既存の VM のホスト メンテナンス ポリシーを更新します。前のセクションの VM 作成コマンドで説明したものと同じパラメータを使用します。

    gcloud compute instances set-scheduling VM_NAME \
      --maintenance-policy=MAINTENANCE_POLICY \
      --RESTART_ON_FAILURE_BEHAVIOR \
      --local-ssd-recovery-timeout=SSD_RECOVERY_TIMEOUT

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

  • VM_NAME: VM 名。
  • MAINTENANCE_POLICY: この VM のポリシー(TERMINATE または MIGRATE)。
  • RESTART_ON_FAILURE_BEHAVIOR: VM の再起動動作(--no-restart-on-failure または --restart-on-failure)。
  • SSD_RECOVERY_TIMEOUT: 応答しない VM にアタッチされたローカル SSD ディスクの復元に Compute Engine が費やす時間(時間単位)。有効な値は 0~168 です。

ホストエラー検出タイムアウトを更新する

Compute Engine が応答しない VM の再起動や終了を待機する最大時間を更新するには、gcloud beta compute instances set-scheduling コマンドを使用します。この機能はプレビューでのみ利用可能なためです。

--host-error-timeout-seconds パラメータでタイムアウトを更新します。次に例を示します。

    gcloud beta compute instances set-scheduling VM_NAME \
      --maintenance-policy=MAINTENANCE_POLICY \
      --RESTART_ON_FAILURE_BEHAVIOR \
      --local-ssd-recovery-timeout=SSD_RECOVERY_TIMEOUT \
      --host-error-timeout-seconds=NUMBER_OF_SECONDS

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

  • VM_NAME: VM 名。
  • MAINTENANCE_POLICY: この VM のメンテナンス ポリシー(TERMINATE または MIGRATE)。
  • RESTART_ON_FAILURE_BEHAVIOR: VM の再起動動作。--no-restart-on-failure または --restart-on-failure に設定します。
  • SSD_RECOVERY_TIMEOUT: 応答しない VM にアタッチされたローカル SSD ディスクの復旧に Compute Engine が費やした時間(時間単位)。有効な値は 0~168 です。
  • NUMBER_OF_SECONDS: 応答しない VM を再起動または終了するまで Compute Engine が待機する秒数(90~330)。30 単位で指定します。

REST

instances.setScheduling メソッドへの POST リクエストで、既存の VM のホスト メンテナンス ポリシーを更新します。

リクエストの本文には以下のプロパティを 1 つ以上含めます。

  • onHostMaintenance: ホスト メンテナンス中に VM を移行するか停止するかを示します。VM はデフォルトで移行されます。
  • automaticRestart: ホストエラー後に VM を自動的に再起動するかを示します。VM はデフォルトで自動的に再起動されます。
  • localSsdRecoveryTimeout: ホストエラーの検出後、Compute Engine がアタッチされたローカル SSD ディスクの復元に費やす時間。省略した場合、デフォルトは 1 時間です。
    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setScheduling

    {
      "onHostMaintenance": "MAINTENANCE_POLICY",
      "automaticRestart": RESTART_POLICY,
      "localSsdRecoveryTimeout": SSD_RECOVERY_TIMEOUT
    }

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

  • PROJECT_ID: VM のプロジェクト。
  • ZONE: VM が配置されているゾーン。
  • VM_NAME: VM 名。
  • MAINTENANCE_POLICY: この VM のメンテナンス ポリシー(TERMINATE または MIGRATE)。
  • RESTART_POLICY: この VM の再起動ポリシー(true または false)。
  • SSD_RECOVERY_TIMEOUT: 応答しない VM にアタッチされたローカル SSD ディスクの復旧に Compute Engine が費やした時間(時間単位)。有効な値は 0~168 です。

ホストエラー検出タイムアウトを更新する

Compute Engine が応答しない VM の再起動や終了を待機する最大時間を更新するには、ベータ版 instances.setScheduling メソッドを使用する必要があります。この機能はプレビューで利用可能なためです。

リクエストの本文に hostErrorTimeoutSeconds パラメータを追加します。

  POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setScheduling

  {
    "hostErrorTimeoutSeconds": NUMBER_OF_SECONDS,
  }

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

  • PROJECT_ID: VM のプロジェクト。
  • ZONE: VM が配置されているゾーン。
  • VM_NAME: VM 名。
  • NUMBER_OF_SECONDS: 応答しない VM を再起動または終了するまで Compute Engine が待機する秒数(90~330)。30 単位で指定します。

VM のホスト メンテナンス ポリシー設定を表示する

コンソール

  1. [VM インスタンス] ページに移動します。

    [VM インスタンス] に移動

  2. 設定を表示する VM の名前をクリックします。[VM インスタンスの詳細] ページが開きます。

  3. [管理] セクションに移動します。[可用性ポリシー] サブセクションには、[ホスト メンテナンス] と [自動再起動] の現在の設定が表示されます。

gcloud

gcloud compute instances describe コマンドを使用して、VM のホスト メンテナンス オプションの設定を表示します。

    gcloud compute instances describe VM_NAME --format="yaml(scheduling)"

VM_NAME は、VM 名に置き換えます。

出力には、次のように VM のホストエラー検出タイムアウトが含まれます。

    scheduling:
      automaticRestart: true
      localSsdRecoveryTimeout:
        nanos: 0
        seconds: '10800'
      onHostMaintenance: MIGRATE
      preemptible: false
      provisioningModel: STANDARD

ホストエラー検出のタイムアウト設定を表示する

gcloud beta compute instances describe コマンドhostErrorTimeoutSeconds の現在の値を表示します。このオプションはプレビューでのみ利用可能なためです。

  gcloud beta compute instances describe VM_NAME --format="yaml(scheduling)"

VM_NAME は、VM 名に置き換えます。

出力には、次のように VM のホストエラー検出タイムアウトが含まれます。

  scheduling:
    automaticRestart: true
    hostErrorTimeoutSeconds: 120
    localSsdRecoveryTimeout:
      nanos: 0
      seconds: '10800'
    onHostMaintenance: MIGRATE
    preemptible: false
    provisioningModel: STANDARD

REST

VM のホスト メンテナンス設定を表示するには、instances.get メソッドを使用します。

  GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME

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

  • PROJECT_ID: VM が配置されているプロジェクト。
  • ZONE: VM が配置されているゾーン。
  • VM_NAME: VM 名。

出力の scheduling オブジェクトには、VM のホスト メンテナンス ポリシーが含まれます。次に例を示します。

  "scheduling": {
      "onHostMaintenance": "MIGRATE",
      "automaticRestart": true,
      "preemptible": false,
      "provisioningModel": "STANDARD",
      "localSsdRecoveryTimeout": {
        "seconds": "10800",
        "nanos": 0
      }
    }

ホストエラー タイムアウトの設定を表示する

ベータ版の instances.get メソッドに対して GET リクエストを使用して現在の hostErrorTimeoutSeconds 設定を表示します。このオプションはプレビューでのみ利用可能なためです。

 GET https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME

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

  • PROJECT_ID: VM のプロジェクト。
  • ZONE: VM が配置されているゾーン。
  • VM_NAME: VM 名。

出力の scheduling オブジェクトには、VM のホストエラー検出タイムアウトが含まれます。次に例を示します。

  "scheduling": {
    "hostErrorTimeoutSeconds": 120
  }

次のステップ