In diesem Dokument wird beschrieben, wie Sie Startskripts verwenden, um eine VM-Instanz und die zugehörigen Programme in Google Distributed Cloud (GDC) mit Air Gap zu starten.
Ein Startskript ist ein Automatisierungstool, das während des VM-Startvorgangs Aufgaben ausführt. Mit Startskripts können Sie VM-Konfigurations- und Bereitstellungsaufgaben auf neuen oder vorhandenen Instanzen automatisieren. Das spart Zeit und reduziert den manuellen Konfigurationsaufwand.
Dieses Dokument richtet sich an Entwickler in Plattformadministrator- oder Anwendungsoperatorgruppen, die Startskripts für VMs in einer Distributed Cloud-Umgebung verwenden möchten. Weitere Informationen finden Sie unter Dokumentation zu Zielgruppen für GDC mit Air Gap.
Hinweis
Wenn Sie gdcloud-Befehle der Befehlszeile (CLI) verwenden möchten, müssen Sie die gdcloud-Befehlszeile heruntergeladen, installiert und konfiguriert haben.
Alle Befehle für Distributed Cloud verwenden die gdcloud- oder kubectl-CLI und erfordern eine Betriebssystemumgebung.
Pfad der kubeconfig-Datei abrufen
Wenn Sie Befehle auf dem Management API-Server ausführen möchten, 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.
Ersetzen Sie
MANAGEMENT_API_SERVERin dieser Anleitung durch den Pfad zur kubeconfig-Datei des Management API-Servers.
IAM-Rollen anfordern
Wenn Sie Startskripts für eine VM verwenden möchten, wenden Sie sich an Ihren IAM-Projektadministrator, um die folgenden Rollen für Ihr Projekt anzufordern:
Virtual Machine Project Admin (
project-vm-admin): VMs im Projekt-Namespace erstellen, ändern, auflisten und löschen.Secret-Administrator (
secret-admin): Kubernetes-Secrets im Projekt-Namespace abrufen, auflisten, erstellen, aktualisieren, löschen, patchen und beobachten. Verwenden Sie diese Rolle, um Secrets für Startskripts anzugeben. Sie benötigen diese Rolle nicht, um Nur-Text-Startskripts anzugeben.
Alle VM-Rollen müssen an den Namespace des Projekts gebunden sein, in dem sich die VM befindet. Folgen Sie der Anleitung, um Ihren Zugriff zu bestätigen.
Startscript übergeben
Sie können entweder Bash- oder Nicht-Bash-Skripts als Startskripts verwenden. Fügen Sie dazu am Anfang des Skripts #!/bin/… 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 hinzu.
Google Distributed Cloud (GDC) mit Air Gap führt Startskripts in der Reihenfolge aus, in der sie im Array startupScripts angezeigt werden.
In der folgenden Tabelle sehen Sie, welches Skriptformat Sie je nach Skriptgröße verwenden sollten:
| Skriptgröße | Skriptformat |
|---|---|
| Skripts mit bis zu 2.048 Byte | Text löschen |
| Skripts mit mehr als 2.048 Byte | Kubernetes-Secret |
Startscript 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 Bootvorgang ausgeführt.
- Das Startscript hat standardmäßig Root-Berechtigungen.
- Im Kubernetes-Secret muss der Name des
scriptSecretRefin der VMspecmit dem Feldmetadata.nameübereinstimmen. - Geben Sie im Kubernetes-Secret den Inhalt des Startskripts an, indem Sie dem Feld
dataden Schlüsselscripthinzufügen.
Neue VM mit einem Startscript erstellen
Diese Anleitung gilt unabhängig davon, welches Image Sie zum Erstellen Ihrer VM verwenden. Führen Sie Folgendes aus:
So erstellen Sie ein Startscript als Kubernetes-Secret:
cat <<EOF >>FILE_NAME STARTUP_SCRIPT_CONTENT EOFkubectl --kubeconfig MANAGEMENT_API_SERVER \ -n PROJECT \ create secret generic SECRET_NAME \ --from-file=script=FILE_NAMErm FILE_NAMEFühren Sie die Schritte zum Erstellen einer VM aus, wie auf der Seite VM erstellen beschrieben. Fügen Sie in Schritt 1 das Startskript oder die Startskripts dem Feld
spechinzu, 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_NAMEDiese Variablen sind so definiert:
Variable Definition MANAGEMENT_API_SERVERDie kubeconfig-Datei des Management API-Servers. PROJECTDas Distributed Cloud-Projekt, in dem Sie die VM erstellen möchten. VM_NAMEDer Name der VM. FILE_NAMEDer Name der Datei, in der das Startskript gespeichert werden soll. STARTUP_SCRIPT_CONTENTDie Befehle, die als Teil des Startskripts ausgeführt werden sollen CLEAR_TEXT_SCRIPT_NAMEDer Name des Startskripts im Klartext. CLEAR_TEXT_SCRIPTDas von Ihnen definierte Klartextskript. SECRET_NAMEDer Name des Kubernetes-Secrets. SECRET_SCRIPT_NAMEDer Name des Startskripts als Kubernetes-Secret. Führen Sie die folgenden Schritte aus, um eine VM zu erstellen.
Im Folgenden finden Sie ein Beispiel für das Erstellen einer VM mit Startskripts, die einen neuen Nutzer mit einem Kubernetes-Secret und Klartext hinzufügt.
kubectl --kubeconfig MANAGEMENT_API_SERVER \ -n PROJECT \ apply -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 EOFIm Beispiel sind die Variablen so definiert:
Variable Definition MANAGEMENT_API_SERVERDie kubeconfig-Datei des Management API-Servers. PROJECTDas Distributed Cloud-Projekt, in dem Sie die VM erstellen möchten. VM_NAMEDer Name der neuen VM. VM_BOOT_DISK_NAMEDer Name des neuen VM-Bootlaufwerks. BOOT_DISK_IMAGE_NAMEDer Name des Images, das für das neue VM-Bootlaufwerk verwendet werden soll. BOOT_DISK_SIZEDie Größe des Bootlaufwerks, z. B. 20G.
Dieser Wert muss immer größer oder gleich derminimumDiskSizedes Bootlaufwerk-Images sein.BOOT_DISK_AUTO_DELETEEntweder trueoderfalse, um anzugeben, ob das Bootlaufwerk automatisch gelöscht wird, wenn die VM-Instanz gelöscht wird.MACHINE_TYPEDer vordefinierte Maschinentyp für die neue VM. Führen Sie diesen 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 ausfü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 zum Herstellen einer Verbindung zu einer VM.
Führen Sie den folgenden Befehl in der Gast-VM aus, um die Logs des ausgeführten Startskripts abzurufen:
sudo journalctl -u cloud-finalDie Startskript-Logs beginnen mit Folgendem:
Started to run the command: /var/lib/google/startup-scripts/<script-name> ...