Ein Startskript führt während des Startvorgangs einer VM Aufgaben aus. Auf dieser Seite finden Sie die Schritte, die Sie ausführen müssen, um Startskripts auf VM-Instanzen zu verwenden.
Hinweis
Wenn Sie gdcloud Befehlszeilenbefehle verwenden möchten, müssen Sie die gdcloud Befehlszeile heruntergeladen, installiert,
und konfiguriert haben.
Alle Befehle für die GDC-Appliance mit Air-Gap verwenden die gdcloud- oder kubectl-Befehlszeile und erfordern eine Betriebssystemumgebung.
Pfad zur kubeconfig-Datei abrufen
Wenn Sie Befehle für den Management API-Server ausführen möchten, benötigen Sie die folgenden Ressourcen:
Suchen Sie den Namen des Management API-Servers oder fragen Sie Ihren Plattformadministrator nach dem Servernamen.
Melden Sie sich an und generieren Sie die kubeconfig-Datei für den Management API-Server, falls Sie noch keine haben.
Ersetzen Sie in dieser Anleitung
MANAGEMENT_API_SERVER{"</var>"}}durch den Pfad.
IAM-Rollen anfordern
Wenn Sie Startskripts für eine VM verwenden möchten, bitten Sie Ihren Projekt-IAM-Administrator, die folgenden Rollen für Ihr Projekt anzufordern:
Project VirtualMachine Admin (
project-vm-admin): VMs im Projekt-Namespace erstellen, ändern, auflisten und löschen.Secret Admin (
secret-admin): Kubernetes-Secrets im Projekt-Namespace abrufen, auflisten, erstellen, aktualisieren, löschen, patchen und beobachten. Mit dieser Rolle können Sie Secrets für Startskripts angeben. Sie benötigen diese Rolle nicht, um Startskripts im Klartext 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 prüfen.
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 #! /usr/bin/python3 am Anfang des Skripts ein.
Die Google Distributed Cloud (GDC)-Appliance mit Air-Gap führt Startskripts in alphabetischer Reihenfolge aus, basierend auf dem Namen der einzelnen Startskripts.
Die folgende Tabelle zeigt das Skriptformat, das je nach Skriptgröße verwendet werden muss:
| Skriptgröße | Skriptformat |
|---|---|
| Skripts bis zu 2048 Byte | Klartext |
| Skripts über 2048 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 von
scriptSecretRefin derspecder VM mit dem Feldmetadata.nameübereinstimmen. - Geben Sie im Kubernetes-Secret den Inhalt des Startskripts an, indem Sie dem Feld
dataeinen Schlüsselscripthinzufügen.
Neue VM mit einem Startskript erstellen
Diese Anleitung gilt unabhängig davon, was Sie als Image zum Erstellen Ihrer VM verwenden. Führen Sie Folgendes aus:
Führen Sie Folgendes aus, um ein Startskript als Kubernetes-Secret zu erstellen:
cat <<EOF >>FILE_NAME STARTUP_SCRIPT_CONTENT EOFkubectl --kubeconfig MANAGEMENT_API_SERVER create secret -n PROJECT generic SECRET_NAME --from-file=script=FILE_NAMErm FILE_NAMEFolgen Sie der Anleitung auf der Seite VM erstellen, um eine VM zu erstellen. Fügen Sie in Schritt 1 das oder die Startskripts dem
specFeld hinzu, bevor Sie den Befehl zum Erstellen einer VM ausführen.In diesem Beispiel wird ein Startskript sowohl mit Klartext als auch mit 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 wie folgt definiert:
Variable Definition MANAGEMENT_API_SERVERDie kubeconfig-Datei des Management API-Servers.PROJECTDas GDC-Projekt mit Air-Gap, 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 sehen Sie ein Beispiel für das Erstellen einer VM mit Startskripts, die einen neuen Nutzer mithilfe eines Kubernetes-Secrets und 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 EOFIm Beispiel sind die Variablen wie folgt definiert.
Variable Definition MANAGEMENT_API_SERVERDie kubeconfig-Datei des Management API-Servers.PROJECTDas GDC-Projekt mit Air-Gap, in dem Sie die VM erstellen möchten. VM_NAMEDer Name der neuen VM. VM_BOOT_DISK_NAMEDer Name des Bootlaufwerks der neuen VM. BOOT_DISK_IMAGE_NAMEDer Name des Images, das für das Bootlaufwerk der neuen VM verwendet werden soll. BOOT_DISK_SIZEDie Größe des Bootlaufwerks, z. B. 20G.
Dieser Wert muss immer größer oder gleich demminimumDiskSizedes Bootlaufwerk-Images sein.BOOT_DISK_AUTO_DELETEEntweder trueoderfalse. Gibt an, ob das Boot Laufwerk automatisch gelöscht wird, wenn die VM-Instanz gelöscht wird.MACHINE_TYPEDer 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 die Aktualisierung durchführen.
Folgen Sie der Anleitung, um die VM-Attribute zu aktualisieren
und das Feld spec mit dem Startskript zu aktualisieren, 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-finalDie Startskriptlogs beginnen mit Folgendem:
Started to run the command: /var/lib/google/startup-scripts/<script-name> ...