起動スクリプトは、仮想マシン(VM)の起動プロセス中にタスクを実行します。このドキュメントでは、VM インスタンスで起動スクリプトを使用する手順について説明します。
起動スクリプトは、VM の起動プロセス中にタスクを実行する自動化ツールです。起動スクリプトを使用して、新規または既存のインスタンスで VM の構成タスクとデプロイタスクを自動化することで、時間を節約し、手動構成の手間を軽減します。
このドキュメントは、Distributed Cloud 環境で VM の起動スクリプトを使用するプラットフォーム管理者またはアプリケーション オペレーター グループの開発者を対象としています。詳細については、GDC エアギャップ ドキュメントの対象読者をご覧ください。
始める前に
gdcloud コマンドライン インターフェース(CLI)コマンドを使用するには、gdcloud CLI をダウンロード、インストール、構成していることを確認してください。Distributed Cloud のすべてのコマンドは gdcloud または kubectl CLI を使用し、オペレーティング システム(OS)環境を必要とします。
kubeconfig ファイルのパスを取得する
Management API サーバーに対してコマンドを実行するには、次のリソースが必要です。
Management API サーバーの kubeconfig ファイルがない場合は、ログインして生成します。
これらの手順では、
MANAGEMENT_API_SERVERを Management API サーバーの kubeconfig ファイルのパスに置き換えます。
IAM ロールをリクエストする
VM で起動スクリプトを使用するには、IAM プロジェクト管理者に連絡して、プロジェクトに対する次のロールをリクエストしてください。
仮想マシン プロジェクト管理者(
project-vm-admin): プロジェクトの名前空間で VM を作成、変更、一覧表示、削除します。Secret 管理者(
secret-admin): プロジェクトの名前空間で Kubernetes Secret の取得、一覧表示、作成、更新、削除、パッチ適用、監視を行います。このロールを使用して、起動スクリプトのシークレットを指定します。書式なしテキストの起動スクリプトを指定する場合、このロールは必要ありません。
すべての VM ロールは、VM が存在するプロジェクトの Namespace にバインドする必要があります。手順に沿ってアクセス権を確認します。
Windows 起動スクリプトの名前の形式
Windows VM の起動スクリプトは、スクリプト名とファイル拡張子をダッシュで区切って追加した特定の命名形式に従う必要があります。たとえば、create-directory-ps1 の場合、create-directory がスクリプト名、ps1 がファイル拡張子です。正しくない形式には、ダッシュの代わりにピリオドを使用する、ファイル拡張子を省略する(create-directory.ps1 や create-directory など)などがあります。
Windows 起動スクリプトに使用するファイル拡張子は次のとおりです。
ps1: PowerShell コマンドが含まれています。cmd: コマンド プロンプト インタープリタのバッチコマンドが含まれます。bat: バッチコマンドが含まれます。
Windows 起動スクリプトを順番に実行する
複数の起動スクリプトを使用できます。スクリプトを含むファイルの種類は、各スクリプトの実行順序に影響します。次の表に、Windows 起動スクリプトの実行順序を示します。
| Windows スクリプト | 実行順序 |
|---|---|
| PowerShell スクリプト | 起動時に最初に実行。 |
| バッチ スクリプト | 起動ごとに 2 回目。 |
| コマンド スクリプト | 3 つ目は、起動のたびに実行されることです。 |
2 つの起動スクリプトのファイル拡張子が同じ場合、スクリプトはファイル拡張子と名前のアルファベット順に実行されます。たとえば、起動スクリプトの名前が alpha-script-ps1 と beta-script-ps1 の場合、alpha-script-ps1 は beta-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
specのscriptSecretRefの名前がmetadata.nameフィールドと一致する必要があります。 - Kubernetes Secret で、
dataフィールドにキーscriptを追加して、起動スクリプトの内容を指定します。
Windows 起動スクリプトを使用して新しい VM を作成する
Windows 起動スクリプトを使用して VM を作成するには、起動スクリプトを使用して新しい VM を作成するの手順に沿って操作します。