起動スクリプトは、仮想マシン(VM)の起動プロセス中にタスクを実行します。このページでは、VM インスタンスで起動スクリプトを使用する手順について説明します。
始める前に
gdcloud
コマンドライン インターフェース(CLI)コマンドを使用するには、gdcloud
CLI をダウンロード、インストール、構成していることを確認してください。Distributed Cloud のすべてのコマンドは gdcloud
または kubectl
CLI を使用し、オペレーティング システム(OS)環境が必要です。
kubeconfig ファイルのパスを取得する
Management API サーバーに対してコマンドを実行するには、次のリソースがあることを確認します。
Management API サーバーの kubeconfig ファイルがない場合は、ログインして生成します。
これらの手順では、Management API サーバーの kubeconfig ファイルのパスを使用して
MANAGEMENT_API_SERVER
を置き換えます。
権限とアクセス権をリクエストする
このページに記載されているタスクを行うには、プロジェクトの VirtualMachine 管理者ロールが必要です。アクセスを確認するか、VM が存在するプロジェクトの Namespace でプロジェクト IAM 管理者にプロジェクト VirtualMachine 管理者(project-vm-admin
)ロールを割り当ててもらう手順に沿って操作します。
起動スクリプトを渡す
起動スクリプトとして bash スクリプトまたは bash 以外のスクリプトを使用できます。そのためには、スクリプトの先頭に #!/bin/…
を追加して、スクリプト インタープリタを指定します。たとえば、Python 3 の起動スクリプトを使用する場合は、スクリプトの先頭に #! /usr/bin/python3
を追加します。
Google Distributed Cloud(GDC)エアギャップは、各起動スクリプトの名前に基づいて、起動スクリプトをアルファベット順に実行します。
次の表に、スクリプトのサイズに基づいて使用するスクリプト形式を示します。
スクリプトのサイズ | スクリプトの形式 |
---|---|
2,048 バイトまでのスクリプト | テキストを消去 |
2,048 バイトを超えるスクリプト | Kubernetes Secret |
起動スクリプトを定義する
起動スクリプトを使用するには、VM の spec
フィールドに startupScripts
フィールドを追加する必要があります。このフィールドでは、複数の起動スクリプトをクリアテキストまたは Kubernetes Secret として指定できます。
次の例では、起動スクリプトをクリアテキストと Kubernetes Secret として指定します。
apiVersion: virtualmachine.gdc.goog/v1
kind: VirtualMachine
metadata:
name: "my-vm"
spec:
…
startupScripts:
- name: hello-world
script: |
#!/bin/bash
echo hello
- name: add-user
scriptSecretRef:
name: add-user
---
apiVersion: v1
kind: Secret
type: Opaque
metadata:
name: add-user
data:
script:
IyEvYmluL2Jhc2gKYWRkdXNlciB1c2VyCg==
次の考慮事項を確認してください。
- 起動スクリプトは起動のたびに実行されます。
- 起動スクリプトにはデフォルトの root 権限があります。
- Kubernetes Secret では、VM
spec
のscriptSecretRef
の名前がmetadata.name
フィールドと一致する必要があります。 - Kubernetes Secret で、
data
フィールドにキーscript
を追加して、起動スクリプトの内容を指定します。
起動スクリプトを使用して新しい VM を作成する
これらの手順は、VM の作成に使用するイメージに関係なく適用されます。次の手順に沿って操作します。
起動スクリプトを Kubernetes Secret として作成するには、次のコマンドを実行します。
cat <<EOF >>FILE_NAME STARTUP_SCRIPT_CONTENT EOF
kubectl --kubeconfig MANAGEMENT_API_SERVER create secret -n PROJECT generic SECRET_NAME --from-file=script=FILE_NAME
rm FILE_NAME
VM を作成するページに記載されている VM を作成する手順を参照してください。ステップ 1 で、VM を作成するコマンドを実行する前に、起動スクリプトを
spec
フィールドに追加します。この例では、クリアテキストと Kubernetes シークレットの両方を含む起動スクリプトを定義します。
apiVersion: virtualmachine.gdc.goog/v1 kind: VirtualMachine metadata: name: VM_NAME namespace: PROJECT spec: … startupScripts: - name: CLEAR_TEXT_SCRIPT_NAME script: | #!/bin/bash CLEAR_TEXT_SCRIPT - name: SECRET_SCRIPT_NAME scriptSecretRef: name: SECRET_NAME
これらの変数は次のように定義されます。
変数 定義 MANAGEMENT_API_SERVER
Management API サーバーの kubeconfig ファイル。 PROJECT
VM を作成する Distributed Cloud プロジェクト。 VM_NAME
VM の名前。 FILE_NAME
起動スクリプトを保存するファイルの名前。 STARTUP_SCRIPT_CONTENT
起動スクリプトの一部として実行するコマンド CLEAR_TEXT_SCRIPT_NAME
クリアテキストの起動スクリプトの名前。 CLEAR_TEXT_SCRIPT
定義したクリアテキスト スクリプト。 SECRET_NAME
Kubernetes Secret の名前。 SECRET_SCRIPT_NAME
Kubernetes Secret としての起動スクリプトの名前。 次の手順で VM を作成します。
次の例は、Kubernetes Secret とクリアテキストを使用して新しいユーザーを追加する起動スクリプトで VM を作成する方法を示しています。
kubectl --kubeconfig MANAGEMENT_API_SERVER \ apply -n PROJECT -f - <<EOF apiVersion: virtualmachine.gdc.goog/v1 kind: VirtualMachineDisk metadata: name: VM_BOOT_DISK_NAME spec: source: image: name: BOOT_DISK_IMAGE_NAME namespace: vm-system size: BOOT_DISK_SIZE --- apiVersion: v1 kind: Secret type: Opaque metadata: name: add-user data: script: IyEvYmluL2Jhc2gKYWRkdXNlciB1c2VyCg== --- apiVersion: virtualmachine.gdc.goog/v1 kind: VirtualMachine metadata: name: VM_NAME spec: compute: virtualMachineType: MACHINE_TYPE disks: - virtualMachineDiskRef: name: VM_BOOT_DISK_NAME boot: true autoDelete: BOOT_DISK_AUTO_DELETE startupScripts: - name: add-user scriptSecretRef: name: add-user - name: add-to-sudoers script: | #!/bin/bash usermod -aG sudo user EOF
この例では、変数は次のように定義されています。
変数 定義 MANAGEMENT_API_SERVER
Management API サーバーの kubeconfig ファイル。 PROJECT
VM を作成する Distributed Cloud プロジェクト。 VM_NAME
新しい VM の名前。 VM_BOOT_DISK_NAME
新しい VM ブートディスクの名前。 BOOT_DISK_IMAGE_NAME
新しい VM ブートディスクに使用するイメージの名前。 BOOT_DISK_SIZE
ブートディスクのサイズ( 20G
など)。
この値は常に、ブートディスク イメージのminimumDiskSize
以上である必要があります。BOOT_DISK_AUTO_DELETE
true
またはfalse
。VM インスタンスが削除されたときにブートディスクが自動的に削除されるかどうかを示します。MACHINE_TYPE
新しい VM の事前定義されたマシンタイプ。使用可能なマシンタイプを選択するには、次のコマンドを実行します。
kubectl --kubeconfig MANAGEMENT_API_SERVER get virtualmachinetype.virtualmachine.gdc.goog --namespace vm-system
起動スクリプトを使用して既存の VM を更新する
起動スクリプトを使用して既存の VM を更新することもできます。更新を行う前に、VM をシャットダウンする必要があります。
VM プロパティを更新するの手順に沿って、実行するスタートアップ スクリプトで spec
フィールドを更新します。
起動スクリプトの出力を表示する
- 手順に沿って VM に接続します。
ゲスト VM 内で次のコマンドを実行して、実行した起動スクリプトのログを取得します。
sudo journalctl -u cloud-final
起動スクリプトのログは次のテキストで始まります。
Started to run the command: /var/lib/google/startup-scripts/<script-name> ...