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 CLI gdcloud
.
Tutti i comandi per Distributed Cloud utilizzano la CLI gdcloud
o
kubectl
e richiedono un ambiente del sistema operativo.
Recupera il percorso del file kubeconfig
Per eseguire comandi sul server API Management, assicurati di disporre delle seguenti risorse:
Accedi e genera il file kubeconfig per il server API Management se non ne hai uno.
Utilizza il percorso del file kubeconfig del server API Management per sostituire
MANAGEMENT_API_SERVER
in queste istruzioni.
Richiedere autorizzazioni e accesso
Per eseguire le attività elencate in questa pagina, devi disporre del ruolo Amministratore
macchina virtuale progetto. Segui i passaggi per verificare il tuo accesso o chiedi all'amministratore IAM progetto di assegnarti il ruolo Amministratore VirtualMachine progetto (project-vm-admin
) nello spazio dei nomi del progetto in cui si trova la VM.
Trasferire uno script di avvio
Puoi utilizzare script bash o non bash come script di avvio. A questo scopo,
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) air-gapped esegue gli script di avvio in ordine alfabetico, in base al nome di ogni script di avvio.
La seguente tabella mostra il formato del copione da utilizzare in base alle dimensioni del copione:
Dimensioni dello script | Formato dello script |
---|---|
Script fino a 2048 byte | Cancella testo |
Script superiori a 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 testo non crittografato 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
scriptSecretRef
nella VMspec
deve corrispondere al campometadata.name
. - Nel secret Kubernetes, specifica i contenuti dello script di avvio aggiungendo una chiave
script
al campodata
.
Crea una nuova VM con uno script di avvio
Queste istruzioni si applicano indipendentemente dall'immagine utilizzata per creare la VM. Completa i seguenti passaggi:
Per creare uno script di avvio come secret di Kubernetes, esegui:
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
Fai riferimento ai passaggi per creare una VM descritti nella pagina Crea una VM. Al passaggio 1 aggiungi lo script o gli script di avvio al campo
spec
prima di eseguire il comando per creare una VM.Questo esempio definisce uno script di avvio con testo 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_NAME
Queste variabili sono definite come segue:
Variabile Definizione MANAGEMENT_API_SERVER
Il file kubeconfig del server API di gestione. PROJECT
Il progetto Distributed Cloud in cui vuoi creare la VM. VM_NAME
Il nome della VM. FILE_NAME
Il nome del file in cui archiviare lo script di avvio. STARTUP_SCRIPT_CONTENT
I comandi da eseguire nell'ambito dello script di avvio CLEAR_TEXT_SCRIPT_NAME
Il nome dello script di avvio in testo normale. CLEAR_TEXT_SCRIPT
Lo script di cancellazione del testo che definisci. SECRET_NAME
Il nome del secret Kubernetes. SECRET_SCRIPT_NAME
Il 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 testo non crittografato.
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
Nell'esempio, le variabili sono definite come segue.
Variabile Definizione MANAGEMENT_API_SERVER
Il file kubeconfig del server API di gestione. PROJECT
Il progetto Distributed Cloud in cui vuoi creare la VM. VM_NAME
Il nome della nuova VM. VM_BOOT_DISK_NAME
Il nome del nuovo disco di avvio della VM. BOOT_DISK_IMAGE_NAME
Il nome dell'immagine da utilizzare per il disco di avvio della nuova VM. BOOT_DISK_SIZE
Le dimensioni del disco di avvio, ad esempio 20G
.
Questo valore deve essere sempre maggiore o uguale aminimumDiskSize
dell'immagine del disco di avvio.BOOT_DISK_AUTO_DELETE
true
ofalse
, che indica se il disco di avvio viene eliminato automaticamente quando viene eliminata l'istanza VM.MACHINE_TYPE
Il 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.
Visualizzare l'output di uno script di avvio
- Segui i passaggi per connetterti a una VM.
Esegui questo comando all'interno della VM guest per ottenere i log dello script di avvio che hai eseguito:
sudo journalctl -u cloud-final
I log dello script di avvio iniziano con quanto segue:
Started to run the command: /var/lib/google/startup-scripts/<script-name> ...