Ein Startskript führt während des Startvorgangs einer virtuellen Maschine (VM) Aufgaben aus. Auf dieser Seite finden Sie die Schritte, die Sie ausführen müssen, um Startskripts auf VM-Instanzen zu verwenden.
Hinweise
Wenn Sie die Befehlszeilenbefehle (Command-Line Interface, CLI) von gdcloud
verwenden möchten, müssen Sie die gdcloud
-CLI heruntergeladen, installiert und konfiguriert haben.
Für alle Befehle für Distributed Cloud wird die gdcloud
- oder kubectl
-CLI verwendet. Außerdem ist eine Betriebssystemumgebung erforderlich.
Pfad der kubeconfig-Datei abrufen
Damit Sie Befehle für den Management API-Server ausführen können, benötigen Sie die folgenden Ressourcen:
Melden Sie sich an und generieren Sie die kubeconfig-Datei für den Management API-Server, falls Sie noch keine haben.
Verwenden Sie den Pfad zur kubeconfig-Datei des Management API-Servers, um
MANAGEMENT_API_SERVER
in dieser Anleitung zu ersetzen.
Berechtigungen und Zugriff anfordern
Zum Ausführen der auf dieser Seite aufgeführten Aufgaben benötigen Sie die Rolle „ProjectVirtualMachine Admin“. Folgen Sie der Anleitung, um entweder Ihren Zugriff zu bestätigen oder Ihren Projekt-IAM-Administrator zu bitten, Ihnen die Rolle „Project VirtualMachine Admin“ (project-vm-admin
) im Namespace des Projekts zuzuweisen, in dem sich die VM befindet.
Startskript übergeben
Sie können entweder Bash- oder Nicht-Bash-Skripts als Startskripts verwenden. Fügen Sie dazu #!/bin/…
am Anfang des Skripts ein, um den Skriptinterpreter anzugeben.
Wenn Sie beispielsweise ein Python 3-Startskript verwenden möchten, fügen Sie am Anfang des Skripts #! /usr/bin/python3
ein.
In Google Distributed Cloud (GDC) Air-Gapped werden Startskripts in alphabetischer Reihenfolge ausgeführt, basierend auf dem Namen des jeweiligen Startskripts.
In der folgenden Tabelle sehen Sie das Skriptformat, das Sie je nach Skriptgröße verwenden müssen:
Skriptgröße | Skriptformat |
---|---|
Skripts mit bis zu 2.048 Byte | Text löschen |
Skripts mit mehr als 2.048 Byte | Kubernetes-Secret |
Startskript definieren
Wenn Sie ein Startskript verwenden möchten, müssen Sie das Feld startupScripts
dem Feld spec
der VM hinzufügen. In diesem Feld können Sie mehrere Startskripts als Klartext oder als Kubernetes-Secret angeben.
Im folgenden Beispiel werden die Startskripts als Klartext und als Kubernetes-Secret angegeben:
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==
Beachten Sie Folgendes:
- Das Startskript wird bei jedem Start ausgeführt.
- Das Startskript hat standardmäßig Root-Berechtigungen.
- Im Kubernetes-Secret muss der Name des
scriptSecretRef
in der VMspec
mit dem Feldmetadata.name
übereinstimmen. - Geben Sie im Kubernetes-Secret den Inhalt des Startskripts an, indem Sie dem Feld
data
den Schlüsselscript
hinzufügen.
Neue VM mit einem Startskript erstellen
Diese Anleitung gilt unabhängig davon, welches Image Sie zum Erstellen Ihrer VM verwenden. Führen Sie Folgendes aus:
So erstellen Sie ein Startskript als 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
Folgen Sie der Anleitung zum Erstellen einer VM auf der Seite VM erstellen. Fügen Sie in Schritt 1 das Startskript oder die Startskripts dem Feld
spec
hinzu, bevor Sie den Befehl zum Erstellen einer VM ausführen.In diesem Beispiel wird ein Startskript mit Klartext und einem Kubernetes-Secret definiert:
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
Diese Variablen sind so definiert:
Variable Definition MANAGEMENT_API_SERVER
Die kubeconfig-Datei des Management API-Servers. PROJECT
Das Distributed Cloud-Projekt, in dem Sie die VM erstellen möchten. VM_NAME
Der Name der VM. FILE_NAME
Der Name der Datei, in der das Startskript gespeichert werden soll. STARTUP_SCRIPT_CONTENT
Die Befehle, die als Teil des Startskripts ausgeführt werden sollen CLEAR_TEXT_SCRIPT_NAME
Der Name des Start-up-Scripts im Klartext. CLEAR_TEXT_SCRIPT
Das von Ihnen definierte Klartext-Script. SECRET_NAME
Der Name des Kubernetes-Secrets. SECRET_SCRIPT_NAME
Der Name des Startskripts als Kubernetes-Secret. Fahren Sie mit den folgenden Schritten fort, um eine VM zu erstellen.
Im Folgenden sehen Sie ein Beispiel dafür, wie Sie eine VM mit Startskripten erstellen, die einen neuen Nutzer mit einem Kubernetes-Secret und im Klartext hinzufügen.
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
Im Beispiel sind die Variablen so definiert:
Variable Definition MANAGEMENT_API_SERVER
Die kubeconfig-Datei des Management API-Servers. PROJECT
Das Distributed Cloud-Projekt, in dem Sie die VM erstellen möchten. VM_NAME
Der Name der neuen VM. VM_BOOT_DISK_NAME
Der Name des neuen VM-Bootlaufwerks. BOOT_DISK_IMAGE_NAME
Der Name des Images, das für das neue VM-Bootlaufwerk verwendet werden soll. BOOT_DISK_SIZE
Die Größe des Bootlaufwerks, z. B. 20G
.
Dieser Wert muss immer größer oder gleich demminimumDiskSize
des Bootlaufwerk-Images sein.BOOT_DISK_AUTO_DELETE
Entweder true
oderfalse
, um anzugeben, ob das Bootlaufwerk automatisch gelöscht wird, wenn die VM-Instanz gelöscht wird.MACHINE_TYPE
Der vordefinierte Maschinentyp für die neue VM. Führen Sie den folgenden Befehl aus, um einen verfügbaren Maschinentyp auszuwählen:
kubectl --kubeconfig MANAGEMENT_API_SERVER get virtualmachinetype.virtualmachine.gdc.goog --namespace vm-system
Vorhandene VM mit einem Startskript aktualisieren
Sie können auch eine vorhandene VM mit einem Startskript aktualisieren. Die VM muss heruntergefahren werden, bevor Sie das Update durchführen.
Folgen Sie der Anleitung zum Aktualisieren von VM-Attributen und aktualisieren Sie das Feld spec
mit dem Startskript, das Sie ausführen möchten.
Ausgabe eines Startskripts ansehen
- Folgen Sie der Anleitung, um eine Verbindung zu einer VM herzustellen.
Führen Sie den folgenden Befehl in der Gast-VM aus, um die Logs des ausgeführten Startskripts abzurufen:
sudo journalctl -u cloud-final
Die Startskriptlogs beginnen mit Folgendem:
Started to run the command: /var/lib/google/startup-scripts/<script-name> ...