Utilizza uno script di avvio nelle VM Linux

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:

  1. Accedi e genera il file kubeconfig per il server API Management se non ne hai uno.

  2. 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 VM spec deve corrispondere al campo metadata.name.
  • Nel secret Kubernetes, specifica i contenuti dello script di avvio aggiungendo una chiave script al campo data.

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:

  1. 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
    
  2. 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:

    VariabileDefinizione
    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.
  3. 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.

    VariabileDefinizione
    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 a minimumDiskSize dell'immagine del disco di avvio.
    BOOT_DISK_AUTO_DELETE true o false, 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

  1. Segui i passaggi per connetterti a una VM.
  2. 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> ...