拡張機能ポリシーを使用して VM 拡張機能を管理する

VM Extension Manager は、拡張機能ポリシーを使用して VM 拡張機能を大規模に管理します。詳細については、VM Extension Manager についてをご覧ください。このドキュメントでは、VM 拡張機能ポリシーを表示、更新、削除する方法について説明します。

IAM のロールと権限

VM 拡張機能ポリシーの表示、変更、削除に必要な権限を取得するには、プロジェクトに対する次の IAM ロールを付与するよう管理者に依頼してください。

ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。

これらの事前定義ロールには、VM 拡張機能ポリシーの表示、変更、削除に必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。

必要な権限

VM 拡張機能ポリシーを表示、変更、削除するには、次の権限が必要です。

  • 拡張機能ポリシーを表示するには: compute.vmExtensionPolicies.list
  • 拡張機能ポリシーの詳細を表示するには: compute.vmExtensionPolicies.get
  • 拡張機能ポリシーを変更する: compute.vmExtensionPolicies.update
  • 拡張機能ポリシーを削除するには: compute.vmExtensionPolicies.delete

カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。

Compute Engine の IAM ロールと権限の詳細については、Compute Engine のロールと権限をご覧ください。

拡張機能ポリシーを表示する

プロジェクトの VM 拡張機能ポリシーのリストを表示したり、 Google Cloud コンソールまたは Google Cloud CLI を使用して特定のポリシーの詳細を表示したりできます。

コンソール

  1. Google Cloud コンソールで、[VM 拡張機能ポリシー] ページに移動します。

    VM 拡張機能ポリシーに移動

    このページには、プロジェクト内のすべての VM 拡張機能ポリシーが一覧表示されます。
  2. 特定の拡張機能ポリシーの詳細を表示するには、ポリシーの名前をクリックします。

gcloud

プロジェクト内のすべての拡張機能ポリシーを表示するには、gcloud beta compute zone-vm-extension-policies list コマンドを使用します。

gcloud beta compute zone-vm-extension-policies list \
  --project=PROJECT_ID \
  --zone=ZONE \
  --page-size=PAGE_SIZE

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

  • PROJECT_ID: 実際の Google Cloud プロジェクト ID。
  • ZONE: VM 拡張機能ポリシーを一覧表示するゾーンの名前。
  • PAGE_SIZE: ページごとに返す結果の最大数。

特定のエクステンション ポリシーの詳細を表示するには、gcloud beta compute zone-vm-extension-policies describe コマンドを使用します。

gcloud beta compute zone-vm-extension-policies describe POLICY_NAME \
  --project=PROJECT_ID \
  --zone=ZONE

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

  • POLICY_NAME: 説明する VM 拡張機能ポリシーの名前。
  • PROJECT_ID: 実際の Google Cloud プロジェクト ID。
  • ZONE: VM 拡張機能ポリシーが配置されている Google Cloud ゾーン。

VM 拡張機能ポリシーを更新して拡張機能を変更する

ポリシーを更新すると、VM 拡張機能マネージャーは通常 1 分以内に、該当するすべての VM に変更をロールアウトします。包含ラベルを変更すると、更新されたラベルと一致するかどうかに基づいて、新しい VM に拡張機能がインストールされたり、既存の VM からアンインストールされたりする可能性があります。

コンソール

  1. Google Cloud コンソールで、[VM 拡張機能ポリシー] ページに移動します。

    VM 拡張機能ポリシーに移動

  2. 更新するポリシーを選択します。
  3. [編集] をクリックします。
  4. [説明]、[優先度]、[拡張機能]、[ターゲット VM インスタンス] を変更します。
  5. [保存] をクリックします。

gcloud

既存の VM 拡張機能ポリシーを変更するには、gcloud beta compute zone-vm-extension-policies update コマンドを使用します。gcloud を使用してポリシーを更新すると、リクエストは完全な置換として機能します。省略した省略可能なフィールドは、変更されたポリシーの既存の値を保持するのではなく、デフォルト値に戻ります。

VM 拡張機能ポリシーを更新するには、次のコマンドを実行します。

  gcloud beta compute zone-vm-extension-policies update POLICY_NAME \
      --zone=ZONE \
      --extensions=EXTENSION_NAME_1,EXTENSION_NAME_2 \
      --version=EXTENSION_NAME_1=VERSION_1,EXTENSION_NAME_2=VERSION_2 \
      --config-from-file=EXTENSION_NAME_1=CONFIG_FILE_PATH_1,EXTENSION_NAME_2=CONFIG_FILE_PATH_2 \
      --inclusion-labels=KEY_1=VALUE_1 \
      --priority=PRIORITY_NUMBER \
      --description="DESCRIPTION"

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

  • POLICY_NAME: 更新する VM 拡張機能ポリシーの名前。
  • ZONE: ポリシーが適用される Google Cloud ゾーン。
  • EXTENSION_NAME_1EXTENSION_NAME_2: 更新する拡張機能の名前。拡張機能を少なくとも 1 つ指定する必要があります。
  • VERSION_1: 最初の VM 拡張機能のバージョン。
  • VERSION_2: 2 番目の VM 拡張機能のバージョン。
  • EXTENSION_NAME_1=CONFIG_FILE_PATH_1EXTENSION_NAME_2=CONFIG_FILE_PATH_2: 拡張機能名がキーで、その拡張機能の構成ファイルへのパスが値である Key-Value ペアのカンマ区切りリスト。このパスは、拡張機能をインストールする VM ではなく、gcloud コマンドを実行する VM にあります。

    構成をインライン文字列として指定する場合は、--config-from-file ではなく --config フラグを使用します(例: EXTENSION_NAME_1="CONFIG_1")。--config-from-file または --config のいずれかを使用できますが、同じコマンドで両方を使用することはできません。

  • KEY_1=VALUE_1: セレクタの包含ラベルを定義する Key-Value ペアのカンマ区切りのリスト。VM がターゲットになるには、セレクタで指定されたすべてのラベルが VM に設定されている必要があります。--inclusion-labels を複数回指定すると、ポリシーは、指定されたセレクタのいずれかに一致する VM をターゲットにします(論理 OR)。このフラグを省略すると、ポリシーは指定されたゾーン内のすべての VM をターゲットにします。

  • PRIORITY_NUMBER: VM 拡張機能ポリシーの優先度番号。

  • DESCRIPTION: VM 拡張機能ポリシーの説明。

VM 拡張機能ポリシーを削除して拡張機能をアンインストールする

ポリシーを削除すると、VM Extension Manager は、そのポリシーによって管理されている VM から拡張機能をアンインストールします。ただし、別の優先度の低いアクティブ ポリシーが VM に適用され、同じ拡張機能が宣言されている場合、優先度の低いポリシーに基づいて、その拡張機能は VM にインストールされたままになります。

VM Extension Manager は、ポリシーの削除後 1 分以内に、アクセス可能なすべての VM から拡張機能を削除します。ゲスト エージェントが削除されたか、VM が削除されたために VM にアクセスできない場合、VM 拡張機能マネージャーは拡張機能の削除をスキップします。このような VM が再び利用可能になると、VM Extension Manager はその時点で拡張機能を削除します。

コンソール

  1. Google Cloud コンソールで、[VM 拡張機能ポリシー] ページに移動します。

    VM 拡張機能ポリシーに移動

  2. 削除するポリシーをクリックします。
  3. [削除] をクリックします。
  4. 確認ダイアログで [削除] をクリックします。

gcloud

既存の VM 拡張機能ポリシーを削除するには、gcloud beta compute zone-vm-extension-policies delete コマンドを使用します。

gcloud beta compute zone-vm-extension-policies delete POLICY_NAME \
  --project=PROJECT_ID \
  --zone=ZONE

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

  • POLICY_NAME: 削除する VM 拡張機能ポリシーの名前。
  • PROJECT_ID: 実際の Google Cloud プロジェクト ID。
  • ZONE: ポリシーが配置されている Google Cloud ゾーン。

VM 拡張機能のトラブルシューティング

このセクションでは、VM 拡張機能に関する問題のトラブルシューティング方法について説明します。

拡張機能がインストールされていることを確認する

拡張機能がインストールされているかどうかは、VM で次のことを確認することで検証できます。

  • VM に接続して、実行中のプロセスを確認します。

    次の表に、各拡張機能のプロセス名を示します。

    拡張機能名 拡張機能のプロセス名
    google-cloud-sap-extension google_cloud_sap_agent
    google-cloud-workload-extension google_cloud_workload_agent
    ops-agent ops-agent

    Linux

    ps aux | grep 'EXTENSION_PROCESS_NAME'
    EXTENSION_PROCESS_NAME は、拡張機能のプロセス名に置き換えます。たとえば、Ops エージェント プロセスを確認するには、次のコマンドを実行します。
    ps aux | grep 'ops-agent'

    Windows

    tasklist | findstr "EXTENSION_PROCESS_NAME"
    EXTENSION_PROCESS_NAME は、拡張機能のプロセス名に置き換えます。たとえば、Ops エージェント プロセスを確認するには、次のコマンドを実行します。
    tasklist | findstr "ops-agent"

    Ops エージェントの Linux VM で ps コマンドの出力に、次のようなエントリが表示されることがあります。

    ....
    /var/lib/google-guest-agent/931374772276853249/plugins/ops-agent_baddabb3dac3
    ....
  • ゲスト エージェントのログを有効にして確認します。ゲスト エージェントのログには、拡張機能がインストールされて起動した日時が記録されます。

    次の例は、Ops エージェント拡張機能がインストールされている場合にゲスト エージェントのログに表示される出力の例です。

    my-instance google_guest_agent [14972]: Installing plugin "ops-agent", revision "2dfa648c1892da87"
    my-instance google_guest_agent [14972]: (client.go:181) Sent message [[type.googleapis.com/agent_controlplane.PluginEventMessage: (revision_id:"2dfa648c1892da87)]]
    my-instance google_guest_agent [14972]: (pluginengine.go:202) Running "DownloadPluginStep" on plugin "ops-agent_2dfa648c1892da87"
    my-instance google_guest_agent [14972]: (pluginengine.go:316) Successfully downloaded "https://storage.googleapis.com/acp-gcs-bucket-us-centrall-a/ops-agent
    my-instance google_guest_agent [14972]: (pluginengine.go:202) Running "UnpackPluginArchiveStep" on plugin "ops-agent_2dfa648c1892da87"
    my-instance google_guest_agent [14972]: (pluginengine.go:361) Successfully unpacked "/var/lib/google-guest-agent/ops-agent.tar.gz" to "/google-guest-agent/ops-agent_2dfa648c1892da87
    my-instance google_guest_agent [14972]: (pluginengine.go:202) Running "LaunchPluginStep" on plugin "ops-agent_2dfa648c1892da87"
    my-instance google_guest_agent [14972]: (run_linux.go:32) Attempting process start: (OutputType:0 Name:/var/lib/google-guest-agent/plugins/ops-agent_2dfa648c1892da87)
    my-instance google_guest_agent [14972]: (pluginlauncher.go:132) Launched a plugin process from "/var/lib/google-guest-agent/plugins/ops-agent_2dfa648c1892da87"
    my-instance google_guest_agent [14972]: (plugin.go:136) Dialing in on plugin "ops-agent 2dfa648c1892da87"
    my-instance google_guest_agent [14972]: (plugin.go:51) Executing start request on plugin "ops-agent_2dfa648c1892da87"

インストールに関する問題のトラブルシューティング

ポリシーの作成後に VM に拡張機能がインストールされない場合は、次の手順で問題をトラブルシューティングします。

  1. ポリシーの適用を待ちます。ポリシーが適用されるまでには、再試行を含めて 1 時間ほどかかることがあります。
  2. ポリシーで指定された包含ラベルが VM のラベルと一致することを確認します。
  3. インストール エラーの可能性を特定するには、ゲスト エージェントのデバッグ ロギングを有効にします
  4. 根本的な問題を修正したら、次のいずれかの方法でインストールを再試行します。

    • ポリシーを再作成する: ポリシーを削除してから、新しいポリシーを作成します。
    • 一時的な優先度の高いポリシーを使用する: 多くの VM に影響するポリシーの再作成を回避する場合は、一時的な優先度の高いポリシーを使用して、特定の VM でインストールを再試行します。

      1. インストールに失敗した VM に新しいラベルを追加します。たとえば、ラベル status=failed を追加します。
      2. 新しいラベルをターゲットとする優先度の高いポリシーを作成します。たとえば、失敗した元のポリシーのデフォルトの優先度が 1000 の場合は、500 などの優先度の高いポリシーを作成します。
        gcloud beta compute zone-vm-extension-policies create temp-policy  
        --project=test-project
        --zone=us-central1-f
        --extensions=ops-agent
        --config-from-file=ops-agent="/usr/ops-agent-config.yaml"
        --priority=500
        --inclusion-labels=status=failed
      3. 拡張機能が正常にインストールされたら、一時ポリシーを削除し、VM からラベルを削除します。元のポリシーがまだ有効であるため、拡張機能はインストールされたままになります。

ゲスト エージェントのデバッグログを表示する

デバッグ ロギングを有効にするには、次のように、ゲスト エージェント構成ファイルの Core セクションにログレベルと詳細設定を追加します。

Linux

  1. /etc/default/instance_configs.cfg にあるゲスト エージェントの構成ファイルを開きます。
  2. 次の行をファイルに追加します。[Core] セクションがすでに存在する場合は、log_level 設定と log_verbosity 設定を追加します。

    [Core]
    log_level = 4
    log_verbosity = 4
    
  3. 次のコマンドを実行して、ゲスト エージェント マネージャーを再起動します。

     sudo systemctl restart google-guest-agent-manager
    
  4. 拡張機能のインストール中のゲスト エージェント アクティビティのログを表示するには、次のコマンドを実行します。

    journalctl -u google-guest-agent-manager
    

Windows

  1. C:\Program Files\Google\Compute Engine\instance_configs.cfg にあるゲスト エージェントの構成ファイルを開きます。
  2. 次の行をファイルに追加します。[Core] セクションがすでに存在する場合は、log_level 設定と log_verbosity 設定を追加します。

    [Core]
    log_level = 4
    log_verbosity = 4
    
  3. Windows 管理者として次のコマンドを実行して、ゲスト エージェント マネージャーを再起動します。

     net stop GCEAgentManager
     net start GCEAgentManager
    
  4. 拡張機能のインストール中のゲスト エージェント アクティビティのログを表示するには、PowerShell で次のコマンドを実行します。

    Get-Eventlog -Source google_guest_agent_manager -LogName Application
    

デバッグログを有効にしたら、次の一般的なエラーを確認します。

  • ディスク容量が不足している: ログにディスク容量が不足していると報告された場合は、ディスクの空き容量を増やすか、ディスクのサイズを変更して容量を追加します。
  • リソースの使用量が多すぎる: ログに、メモリまたは CPU の使用量が多すぎるため、ゲスト エージェントが拡張機能を停止したことが示されている場合は、VM のマシンタイプをより多くのリソースを持つマシンタイプに変更します。

次のステップ