Questo documento spiega come utilizzare gli script di avvio per avviare un'istanza di macchina virtuale (VM) e i relativi programmi associati in Google Distributed Cloud (GDC) con air gap.
Uno script di avvio è uno strumento di automazione che esegue attività durante il processo di avvio della VM. Utilizza gli script di avvio per automatizzare le attività di configurazione e deployment delle VM su istanze nuove o esistenti, risparmiando tempo e riducendo lo sforzo di configurazione manuale.
Questo documento è destinato agli sviluppatori dei gruppi di amministratori della piattaforma o operatori delle applicazioni che vogliono utilizzare gli script di avvio per le VM in un ambiente Distributed Cloud. Per saperne di più, consulta Pubblico della documentazione di GDC con air gap.
Prima di iniziare
Per utilizzare i comandi dell'interfaccia a riga di comando (CLI) gdcloud, assicurati di aver scaricato, installato,
e configurato la gdcloud CLI.
Tutti i comandi per Distributed Cloud utilizzano la CLI gdcloud o kubectl e richiedono un ambiente di sistema operativo (OS).
Recupera il percorso del file kubeconfig
Per eseguire i comandi sul server API di gestione, assicurati di disporre delle seguenti risorse:
Accedi e genera il file kubeconfig per il server API di gestione se non ne hai uno.
Utilizza il percorso del file kubeconfig del server API di gestione per sostituire
MANAGEMENT_API_SERVERin queste istruzioni.
Richiedi ruoli IAM
Per utilizzare gli script di avvio per una VM, contatta l'amministratore IAM del progetto per richiedere i seguenti ruoli nel progetto:
Amministratore del progetto di macchine virtuali (
project-vm-admin): crea, modifica, elenca ed elimina le VM nello spazio dei nomi del progetto.Amministratore dei secret (
secret-admin): recupera, elenca, crea, aggiorna, elimina, applica patch e monitora i secret di Kubernetes nello spazio dei nomi del progetto. Utilizza questo ruolo per specificare i secret degli script di avvio. Non hai bisogno di questo ruolo per specificare gli script di avvio in testo normale.
Tutti i ruoli VM devono essere associati allo spazio dei nomi del progetto in cui risiede la VM. Segui i passaggi per verificare l'accesso.
Trasmetti uno script di avvio
Puoi utilizzare script bash o non bash come script di avvio. Per farlo, includi #!/bin/… all'inizio dello script per indicare l'interprete dello script.
Ad esempio, per utilizzare uno script di avvio Python 3, aggiungi #! /usr/bin/python3 all'inizio dello script.
Google Distributed Cloud (GDC) con air gap esegue gli script di avvio nell'ordine in cui appaiono nell'array startupScripts.
La tabella seguente mostra il formato dello script da utilizzare in base alle dimensioni dello script:
| Dimensioni dello script | Formato dello script |
|---|---|
| Script fino a 2048 byte | Dati in chiaro |
| Script maggiori di 2048 byte | Secret Kubernetes |
Definisci uno script di avvio
Per utilizzare uno script di avvio, devi aggiungere il campo startupScripts al campo spec della VM. In questo campo puoi specificare più script di avvio come testo normale o come secret Kubernetes.
L'esempio seguente specifica gli script di avvio come dati in chiaro e un secret Kubernetes:
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==
Esamina le seguenti considerazioni:
- Lo script di avvio viene eseguito a ogni avvio.
- Lo script di avvio ha privilegi di root predefiniti.
- Nel secret Kubernetes, il nome di
scriptSecretRefnellaspecdella VM deve corrispondere al campometadata.name. - Nel secret Kubernetes, specifica il contenuto dello script di avvio aggiungendo una chiave
scriptal campodata.
Crea una nuova VM con uno script di avvio
Queste istruzioni si applicano indipendentemente da ciò che utilizzi come immagine per creare la VM. Completa i seguenti passaggi:
Per creare uno script di avvio come secret Kubernetes, esegui:
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_NAMEFai riferimento ai passaggi per creare una VM come descritto nella pagina Crea una VM. Al primo passaggio, aggiungi lo script o gli script di avvio al campo
specprima di eseguire il comando per creare una VM.Questo esempio definisce uno script di avvio con dati in chiaro e un secret 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_NAMEQueste variabili sono definite come segue:
Variabile Definizione MANAGEMENT_API_SERVERIl file kubeconfig del server API di gestione. PROJECTIl progetto Distributed Cloud in cui vuoi creare la VM. VM_NAMEIl nome della VM. FILE_NAMEIl nome del file in cui archiviare lo script di avvio. STARTUP_SCRIPT_CONTENTI comandi da eseguire come parte dello script di avvio CLEAR_TEXT_SCRIPT_NAMEIl nome dello script di avvio in dati in chiaro. CLEAR_TEXT_SCRIPTLo script in dati in chiaro che definisci. SECRET_NAMEIl nome del secret Kubernetes. SECRET_SCRIPT_NAMEIl nome dello script di avvio come secret Kubernetes. Procedi con i seguenti passaggi per creare una VM.
Di seguito è riportato un esempio di come creare una VM con script di avvio che aggiunge un nuovo utente utilizzando un secret Kubernetes e dati in chiaro.
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 EOFNell'esempio, le variabili sono definite come segue.
Variabile Definizione MANAGEMENT_API_SERVERIl file kubeconfig del server API di gestione. PROJECTIl progetto Distributed Cloud in cui vuoi creare la VM. VM_NAMEIl nome della nuova VM. VM_BOOT_DISK_NAMEIl nome del disco di avvio della nuova VM. BOOT_DISK_IMAGE_NAMEIl nome dell'immagine da utilizzare per il disco di avvio della nuova VM. BOOT_DISK_SIZELe dimensioni del disco di avvio, ad esempio 20G.
Questo valore deve essere sempre maggiore o uguale aminimumDiskSizedell'immagine del disco di avvio.BOOT_DISK_AUTO_DELETEtrueofalse, che indica se il disco di avvio viene eliminato automaticamente quando l'istanza VM viene eliminata.MACHINE_TYPEIl tipo di macchina predefinita per la nuova VM. Per selezionare un tipo di macchina disponibile, esegui questo comando:
kubectl --kubeconfig MANAGEMENT_API_SERVER get virtualmachinetype.virtualmachine.gdc.goog --namespace vm-system
Aggiorna una VM esistente con uno script di avvio
Puoi anche aggiornare una VM esistente con uno script di avvio. La VM deve essere arrestata prima di eseguire l'aggiornamento.
Segui i passaggi per aggiornare le proprietà della VM
e aggiorna il campo spec con lo script di avvio che vuoi eseguire.
Visualizza l'output di uno script di avvio
- Segui i passaggi per connetterti a una VM.
Esegui il comando seguente all'interno della VM guest per recuperare i log dello script di avvio che hai eseguito:
sudo journalctl -u cloud-finalI log degli script di avvio iniziano con quanto segue:
Started to run the command: /var/lib/google/startup-scripts/<script-name> ...