Uno script di avvio esegue attività durante il processo di avvio di una macchina virtuale (VM). Questa pagina fornisce i passaggi da seguire per utilizzare gli script di avvio sulle istanze VM.
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 l'appliance GDC con air gap utilizzano la CLI gdcloud o kubectl e richiedono un ambiente di sistema operativo (OS).
Recupera il percorso del file kubeconfig
Per eseguire comandi sul server API di gestione, assicurati di disporre delle seguenti risorse:
Individua il nome del server API di gestione o chiedi all'amministratore della piattaforma (PA) qual è il nome del server.
Accedi e genera il file kubeconfig per il server API di gestione se non ne hai uno.
Utilizza il percorso per sostituire
MANAGEMENT_API_SERVER{"</var>"}}in 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 sul tuo progetto:
Project VirtualMachine Admin (
project-vm-admin): crea, modifica, elenca ed elimina le VM nello spazio dei nomi del progetto.Secret Admin (
secret-admin): recupera, elenca, crea, aggiorna, elimina, applica patch e monitora i secret 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.
Passa 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.
L'appliance air-gapped Google Distributed Cloud (GDC) esegue gli script di avvio in ordine alfabetico, in base al nome di ogni script di avvio.
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 create secret -n PROJECT 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 kubeconfigdel server API di gestione.PROJECTIl progetto dell'appliance GDC con air gap 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 passaggi seguenti 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 \ 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 EOFNell'esempio, le variabili sono definite come segue.
Variabile Definizione MANAGEMENT_API_SERVERIl file kubeconfigdel server API di gestione.PROJECTIl progetto dell'appliance GDC con air gap 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 seguente comando all'interno della VM guest per recuperare i log dello script di avvio che hai eseguito:
sudo journalctl -u cloud-finalI log dello script di avvio iniziano con quanto segue:
Started to run the command: /var/lib/google/startup-scripts/<script-name> ...