Windows VM で起動スクリプトを使用する

起動スクリプトは、仮想マシン(VM)の起動プロセス中にタスクを実行します。このページでは、VM インスタンスで起動スクリプトを使用する手順について説明します。

始める前に

gdcloud コマンドライン インターフェース(CLI)コマンドを使用するには、gdcloud CLI をダウンロード、インストール、構成していることを確認してください。Distributed Cloud のすべてのコマンドは gdcloud または kubectl CLI を使用し、オペレーティング システム(OS)環境が必要です。

kubeconfig ファイルのパスを取得する

Management API サーバーに対してコマンドを実行するには、次のリソースがあることを確認します。

  1. Management API サーバーの kubeconfig ファイルがない場合は、ログインして生成します。

  2. これらの手順では、Management API サーバーの kubeconfig ファイルのパスを使用して MANAGEMENT_API_SERVER を置き換えます。

権限とアクセス権をリクエストする

このページに記載されているタスクを行うには、プロジェクトの VirtualMachine 管理者ロールが必要です。アクセスを確認するか、VM が存在するプロジェクトの Namespace でプロジェクト IAM 管理者にプロジェクト VirtualMachine 管理者(project-vm-admin)ロールを割り当ててもらう手順に沿って操作します。

Windows 起動スクリプト名の形式

Windows VM の起動スクリプトは、スクリプト名とファイル拡張子をダッシュで区切って付加する特定の命名形式に従う必要があります。たとえば、create-directory-ps1(スクリプト名が create-directory、ファイル拡張子が ps1)。形式が正しくない例としては、ダッシュの代わりにピリオドを使用したり、ファイル拡張子(create-directory.ps1create-directory など)を省略したりすることが挙げられます。

Windows 起動スクリプトで使用するファイル拡張子は次のとおりです。

  • ps1: PowerShell コマンドが含まれます。
  • cmd: コマンド プロンプト インタープリタのバッチ コマンドが含まれます。
  • bat: バッチ コマンドが含まれます。

Windows 起動スクリプトを順番に実行する

複数の起動スクリプトを使用できます。スクリプトを含むファイルの種類は、各スクリプトの実行順序に影響します。次の表に、Windows 起動スクリプトの実行順序を示します。

Windows スクリプト 実行する順序
Powershell スクリプト 起動ごとに最初に実行されます。
バッチ スクリプト 起動ごとに 2 番目。
コマンド スクリプト すべての起動時の 3 番目。

2 つの起動スクリプトのファイル拡張子が同じ場合、スクリプトはファイル拡張子と名前のアルファベット順に基づいて実行されます。たとえば、スタートアップ スクリプトの名前が alpha-script-ps1beta-script-ps1 の場合、alpha-script-ps1beta-script-ps1 の前に実行されます。

次の VM 仕様の例では、startupScripts フィールドの Windows 起動スクリプトの順序と構造を示します。

...
  startupScripts:
  - name: create-directory-ps1
    script: |-
      New-Item -ItemType Directory -Path C:\ -Name NewDir
      Get-ChildItem -Path C:\
  - name: hello-world-bat
    script: |-
      ECHO "Hello World!"
  - name: list-directories-cmd
    script: |-
      dir C:\Windows  > files.txt
...

起動スクリプトを渡す

Distributed Cloud は、各起動スクリプトの名前に基づいて、起動スクリプトをアルファベット順に実行します。

次の表に、スクリプトのサイズに基づいて使用するスクリプト形式を示します。

スクリプトのサイズ スクリプトの形式
2,048 バイトまでのスクリプト テキストを消去
2,048 バイトを超えるスクリプト Kubernetes Secret

起動スクリプトを定義する

起動スクリプトを使用するには、VM の spec フィールドに startupScripts フィールドを追加する必要があります。このフィールドでは、複数の起動スクリプトをクリアテキストまたは Kubernetes Secret として指定できます。

次の例では、起動スクリプトをクリアテキストと Kubernetes Secret として指定します。

apiVersion: virtualmachine.gdc.goog/v1
kind: VirtualMachine
metadata:
  name: "vm-test"
spec:
  ...
  startupScripts:
  - name: create-directory-ps1
    script: |-
      New-Item -ItemType Directory -Path C:\ -Name NewDir
      Get-ChildItem -Path C:\
  - name: list-directories-cmd
    scriptSecretRef:
      name: list-directories
---

apiVersion: v1
kind: Secret
type: Opaque
metadata:
  name: list-directories
data: 
  script:
    ZGlyIEM6XFdpbmRvd3MgID4gZmlsZXMudHh0Cg==

次の考慮事項を確認してください。

  • 起動スクリプトは起動のたびに実行されます。
  • 起動スクリプトにはデフォルトの root 権限があります。
  • Kubernetes Secret では、VM specscriptSecretRef の名前が metadata.name フィールドと一致する必要があります。
  • Kubernetes Secret で、data フィールドにキー script を追加して、起動スクリプトの内容を指定します。

Windows 起動スクリプトを使用して新しい VM を作成する

Windows 起動スクリプトを使用して VM を作成するには、起動スクリプトを使用して新しい VM を作成するの手順に沿って操作します。