Gestire le macchine virtuali sui server connessi di Distributed Cloud

Questa pagina descrive come gestire le macchine virtuali sui server Google Distributed Cloud connected che eseguono VM Runtime su Google Distributed Cloud. Prima di completare i passaggi di questa pagina, devi avere familiarità con VM Runtime su GDC. Per un elenco dei sistemi operativi guest supportati, vedi Sistemi operativi guest verificati per VM Runtime su GDC.

Per scoprire in che modo le macchine virtuali fungono da componente essenziale della piattaforma Distributed Cloud connected, consulta Estendere GKE Enterprise per gestire le VM edge on-premise.

I cluster Google Distributed Cloud connesso supportano i webhook delle macchine virtuali. Ciò consente a Distributed Cloud connesso di convalidare le richieste degli utenti effettuate al server API Kubernetes locale. Le richieste rifiutate generano informazioni dettagliate sul motivo del rifiuto.

Configura Symcloud Storage

I server Google Distributed Cloud connected utilizzano Rakuten Symcloud Storage come soluzione di archiviazione. Symcloud Storage è una soluzione di terze parti che funge da livello di astrazione dell'archiviazione locale su ogni nodo Distributed Cloud connesso e rende disponibile l'archiviazione locale ai carichi di lavoro in esecuzione su altri nodi Distributed Cloud connessi.

Symcloud Storage viene implementato da Google Cloud Marketplace ed è soggetto ai termini ivi indicati. Google fornisce un supporto limitato per l'utilizzo di Symcloud Storage con Distributed Cloud connesso e potrebbe coinvolgere il fornitore di terze parti per ricevere assistenza. Gli aggiornamenti software per Symcloud Storage sono inclusi negli aggiornamenti software connessi a Distributed Cloud.

Configura il cluster connesso a Google Distributed Cloud nel seguente modo per abilitare Symcloud Storage per le macchine virtuali:

  1. Crea lo spazio dei nomi robinio con il seguente comando:

    kubectl create ns robinio
    
  2. Ottieni il file di licenza di Symcloud Storage e applicalo al cluster con il comando seguente:

    kubectl apply LICENSE_FILE
    
  3. Verifica che Symcloud Storage sia in esecuzione con questo comando:

    kubectl apply LICENSE_FILE
    

    Il comando restituisce un output simile al seguente:

     Name:         robin
     Namespace:
     Labels:       app.kubernetes.io/instance=robin
                   app.kubernetes.io/managed-by=robin.io
                   app.kubernetes.io/name=robin
     Annotations:  <none>
     API Version:  manage.robin.io/v1
     Kind:         RobinCluster
     Metadata:
       
     Spec:
       
     Status:
       
       Phase:             Ready
       
    
  4. Crea la classe di archiviazione robin-block-immediate applicando la seguente configurazione al cluster:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: robin-block-immediate
    parameters:
      faultdomain: host
      replication: "3"
      blocksize:   "512"
    provisioner: robin
    reclaimPolicy: Delete
    volumeBindingMode: Immediate
    allowVolumeExpansion: true
    
  5. Crea la classe snapshot del volume robin-snapshotclass applicando la seguente configurazione al cluster:

    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshotClass
    metadata:
      name: robin-snapshotclass
      labels:
        app.kubernetes.io/instance: robin
        app.kubernetes.io/managed-by: robin.io
        app.kubernetes.io/name: robin
      annotations:
        snapshot.storage.kubernetes.io/is-default-class: "true"
    driver: robin
    deletionPolicy: Delete
    

Abilita il supporto del runtime delle VM su GDC su Distributed Cloud connected

Per impostazione predefinita, il supporto del runtime VM sulle macchine virtuali GDC è disabilitato su Distributed Cloud connected. Per attivarla, completa i passaggi descritti in questa sezione. Le istruzioni in questa sezione presuppongono che tu disponga di un cluster Distributed Cloud connesso completamente funzionante.

Per attivare VM Runtime nel sottosistema di macchine virtuali GDC, completa i seguenti passaggi:

  1. Modifica la risorsa personalizzata VMRuntime con i seguenti contenuti e applicala al cluster:

    apiVersion: vm.cluster.gke.io/v1
    kind: VMRuntime
    metadata:
      annotations:
        baremetal.cluster.gke.io/vmrumtime-force-disable: "false"
        vm.cluster.gke.io/enable-vm-backup: "true"
    spec:
      enabled: true
      storage:
        defaultStorageClass: robin-block-immediate
    haPolicy:
      defaultRecoveryStrategy: Reschedule
      nodeHeartbeatInterval: 15s
      nodeMonitorGracePeriod: 55s

    In genere, il completamento di questa procedura richiede diversi minuti.

  2. Utilizza questo comando per verificare che la risorsa personalizzata VMRuntime sia stata applicata al cluster:

    kubectl get vmruntime
    

    Il comando restituisce un output simile al seguente esempio:

    NAME        AGE   ENABLED   READY   PREFLIGHTCHECK
    vmruntime   5m   true      true    true
    
  3. Modifica storageprofile per la classe di archiviazione robin-block-immediate con i seguenti contenuti e applicala al cluster:

    apiVersion: cdi.kubevirt.io/v1beta1
    kind: StorageProfile
    metadata:
      name: robin-block-immediate
    spec:
      claimPropertySets:
        accessModes:
          ReadWriteMany
      volumeMode: Block

Installa lo strumento di gestione virtctl

Per gestire le macchine virtuali nel cluster Distributed Cloud connesso, devi utilizzare lo strumento client virtctl. Per installare lo strumento, completa i seguenti passaggi:

  1. Installa lo strumento client virtctl come plug-in kubectl:

    export VERSION=v0.59.0-anthos1.28-gke.8
    gcloud storage cp gs://anthos-baremetal-release/virtctl/${VERSION}/linux-amd64/virtctl/usr/local/bin/virtctl
    cd /usr/local/bin
    sudo ln -s virtctl kubectl-virt
    sudo chmod a+x virtctl
    cd -
  2. Verifica che il plug-in virt sia installato:

    kubectl plugin list

    Se il plug-in è stato installato correttamente, l'output del comando elenca kubectl-virt tra i plug-in.

Crea un bucket Cloud Storage per le immagini delle macchine virtuali

Completa i passaggi descritti in questa sezione per creare un bucket Cloud Storage per le immagini delle macchine virtuali. Se hai già un repository di immagini consolidato, salta questa sezione.

  1. Completa i passaggi descritti in Crea bucket per creare un bucket.

  2. Configura un account di servizio e una chiave per accedere al bucket con i seguenti comandi:

    export PROJECT_ID=$(gcloud config get-value project)
    gcloud iam service-accounts create image-access
    gcloud projects add-iam-policy-binding $PROJECT_ID \
      --member="serviceAccount:image-access@${PROJECT_ID}.iam.gserviceaccount.com" \
      --role="roles/storage.objectViewer" \
    gcloud iam service-accounts keys create ./image-access-gcr.json \
      --iam-account="image-access@${PROJECT_ID}.iam.gserviceaccount.com"
  3. Crea un secret nel cluster per accedere al bucket. Se il bucket è pubblico, salta questo passaggio. Questo secret deve esistere nello stesso spazio dei nomi dei dischi della macchina virtuale. Devi creare un secret in ogni spazio dei nomi interessato.

    kubectl create secret generic gcs-image-sa --from-file=creds-gcp.json=./image-access-gcr.json -n NAMESPACE

    Sostituisci CLUSTER_ID con il nome dello spazio dei nomi di destinazione.

  4. Archivia le immagini nel bucket.

Crea un disco della macchina virtuale da un'immagine della macchina virtuale

Completa i passaggi descritti in questa sezione per creare un disco della macchina virtuale da un'immagine della macchina virtuale.

Crea un disco da un'immagine archiviata in Cloud Storage

Crea un disco della macchina virtuale da una macchina virtuale archiviata nel bucket Cloud Storage applicando la seguente configurazione al cluster:

 apiVersion: vm.cluster.gke.io/v1
 kind: VirtualMachineDisk
 metadata:
   name: DISK_NAME
   namespace: NAMESPACE
 spec:
   source:
     gcs:
       url: gs://{PROJECT_ID}-vm-images/IMAGE_FILE
       secretRef: gcs-image-sa
   size: DISK_SIZE
   storageClassName: robin-block-immediate

Sostituisci quanto segue:

  • DISK_NAME: il nome del disco della macchina virtuale.
  • NAMESPACE: lo spazio dei nomi di destinazione.
  • IMAGE_FILE: il nome del file immagine della macchina virtuale.
  • DISK_SIZE: le dimensioni del disco desiderate. Questo valore deve essere maggiore del valore virtual-size del file immagine della macchina virtuale. Puoi trovare questo valore con il comando qemu-img info DISK_SIZE.

Se non specifichi un valore storageClassName, viene utilizzato il valore predefinito specificato nella risorsa VMRuntime.

Crea un disco da un'immagine del disco esistente

Crea un disco della macchina virtuale da un disco o un file immagine della macchina virtuale esistente sul cluster nel seguente modo.

  1. Crea il disco di destinazione applicando la seguente configurazione al cluster:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: IMAGE_DISK_NAME
      namespace: NAMESPACE
    spec:
      source:
        virtualMachineDisk:
          name: EXISTING_DISK_NAME
      size: DISK_SIZE
      storageClassName: robin-block-immediate

    Sostituisci quanto segue:

    • IMAGE_DISK_NAME: il nome del disco della macchina virtuale.
    • NAMESPACE: lo spazio dei nomi di destinazione.
    • EXISTING_DISK_NAME: il nome del disco della macchina virtuale esistente.
    • DISK_SIZE: le dimensioni del disco desiderate. Questo valore deve essere uguale o maggiore delle dimensioni del disco o del file immagine esistente.

    Puoi ottenere le dimensioni del file immagine o del disco esistente utilizzando lo strumento qemu-img come segue:

    qemu-img info EXISTING_DISK_NAME

    Se non specifichi un valore storageClassName, viene utilizzato il valore predefinito specificato nella risorsa VMRuntime.

  2. Crea un nuovo disco dal file immagine esistente applicando la seguente configurazione al cluster:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: DISK_NAME
      namespace: NAMESPACE
    spec:
      source:
        virtualMachineDisk:
          name: IMAGE_DISK_NAME
      size: DISK_SIZE
      storageClassName: robin-block-immediate

    Sostituisci quanto segue:

    • IMAGE_DISK_NAME: il nome del disco della macchina virtuale creato nel passaggio precedente.
    • NAMESPACE: lo spazio dei nomi di destinazione.
    • DISK_SIZE: le dimensioni del disco desiderate. che devono essere uguali alle dimensioni del disco della macchina virtuale creato nel passaggio precedente.
  3. Ridimensiona il disco di destinazione alle dimensioni desiderate utilizzando il seguente comando:

    kubectl edit gdisk DISK_NAME -n NAMESPACE

    Sostituisci quanto segue:

    • DISK_NAME: il nome del disco della macchina virtuale creato nel passaggio precedente.
    • NAMESPACE: lo spazio dei nomi di destinazione.
  4. Modifica il valore spec.size nella configurazione del disco e applicalo al cluster.

Crea un disco vuoto

Crea un disco della macchina virtuale vuoto applicando la seguente configurazione al cluster:

 apiVersion: vm.cluster.gke.io/v1
 kind: VirtualMachineDisk
 metadata:
   name: DISK_NAME
   namespace: NAMESPACE
 spec:
   size: DISK_SIZE
   storageClassName: robin-block-immediate

Sostituisci quanto segue:

  • DISK_NAME: il nome del disco della macchina virtuale.
  • NAMESPACE: lo spazio dei nomi di destinazione.
  • DISK_SIZE: le dimensioni del disco desiderate in gibibyte. Questo valore deve essere maggiore del valore virtual-size del file immagine della macchina virtuale. Puoi trovare questo valore con il comando qemu-img info DISK_SIZE.

Se non specifichi un valore storageClassName, viene utilizzato il valore predefinito specificato nella risorsa VMRuntime.

Configura il networking virtuale

Segui i passaggi descritti in Networking per configurare il networking virtuale per le tue macchine virtuali.

Creare una macchina virtuale

Completa i passaggi descritti in questa sezione per creare una macchina virtuale nel deployment del server connesso a Distributed Cloud. Le istruzioni in questa sezione sono esempi pensati per illustrare le configurazioni per diversi scenari. Per informazioni dettagliate sulla configurazione delle macchine virtuali, consulta Crea una VM con risorse CPU e di memoria specifiche utilizzando VM Runtime su GDC.

Crea una macchina virtuale da un'immagine disco avviabile

Per creare una macchina virtuale da un'immagine disco avviabile, applica la seguente configurazione al cluster:

 kind: VirtualMachine
 metadata:
   name: my-virtual-machine
   namespace: my-vm-namespace
 spec:
   osType: Linux/Windows
   guestEnvironment: {} // comment out this line to enable guest environment for access management
   autoRestartOnConfigurationChange: true 
   compute:
     cpu:
       vcpus: 6
     memory:
       capacity: 8Gi
   interfaces:
      - name: eth0
        networkName: network-410
        ipAddresses:
        - 10.223.237.10/25
   disks:
     - virtualMachineDiskName: my-boot-disk
       boot: true
     - virtualMachineDiskName: my-data-disk

Sostituisci quanto segue:

  • DISK_NAME: il nome del disco della macchina virtuale.
  • NAMESPACE: lo spazio dei nomi di destinazione.

Crea una macchina virtuale da un'immagine del disco ottico ISO

Per creare una macchina virtuale da un'immagine disco ottico ISO, completa i passaggi descritti in Crea una VM Windows da un'immagine ISO in Google Distributed Cloud.

Crea una macchina virtuale con supporto GPU

Completa i passaggi descritti in questa pagina per creare una macchina virtuale configurata per soddisfare i requisiti della tua attività, quindi completa i passaggi descritti in Configura una macchina virtuale per utilizzare le risorse GPU.

Accedere a una macchina virtuale

Completa i passaggi descritti in questa sezione per accedere a una macchina virtuale in esecuzione nel deployment del server connesso a Distributed Cloud.

Ottenere le credenziali di accesso

Completa i passaggi descritti in questa sezione per ottenere le credenziali necessarie per accedere alla tua macchina virtuale utilizzando la funzionalità dell'ambiente guest Linux.

  1. Attiva l'ambiente guest Linux per la macchina virtuale di destinazione applicando la seguente configurazione al cluster:

    kind: VirtualMachine
    metadata:
     name: my-virtual-machine
     namespace: my-vm-namespace
    spec:
     osType: Linux
     guestEnvironment: {}
     autoRestartOnConfigurationChange: true 
  2. Genera un file id_rsa.pub contenente una coppia di chiavi SSH con il seguente comando:

    ssh-keygen -t rsa
  3. Crea una risorsa VirtualMachineAccessRequest applicando la seguente configurazione al cluster:

    apiVersion: vm.cluster.gke.io/v1alpha1
    kind: VirtualMachineAccessRequest
    metadata:
     name: RESOURCE_NAME
     namespace: NAMESPACE
    spec:
      vm: VM_NAME
      user: USER_NAME
      ssh:
        key: RSA_KEY
        ttl: 2h

Sostituisci quanto segue:

  • RESOURCE_NAME: un nome descrittivo per questa risorsa di richiesta di accesso alla macchina virtuale.
  • NAMESPACE: lo spazio dei nomi di destinazione.
  • VM_NAME: il nome della macchina virtuale di destinazione.
  • USER_NAME: il nome dell'utente a cui viene concesso l'accesso.
  • RSA_KEY: i contenuti del file id_rsa.pub generato nel passaggio precedente.
  1. Controlla lo stato della richiesta di accesso con il seguente comando:

    kubectl get vmar
    

    Quando il comando restituisce lo stato Configured, vai al passaggio successivo.

  2. Accedi alla macchina virtuale con SSH o Remote Desktop:

    • Se la macchina virtuale è connessa alla tua rete locale, puoi accedervi direttamente.
    • Se la macchina virtuale è connessa alla rete del pod, devi creare un servizio di bilanciamento del carico per accedere alle porte richieste.

Avviare, riavviare o arrestare una macchina virtuale

Utilizza i seguenti comandi per avviare, riavviare o arrestare una macchina virtuale:

  • Avvia una macchina virtuale: kubectl virt start vmVM_NAME-nNAMESPACE
  • Riavvia una macchina virtuale: kubectl virt restart vmVM_NAME-nNAMESPACE
  • Arrestare una macchina virtuale: kubectl virt stop vmVM_NAME-nNAMESPACE

Sostituisci quanto segue:

  • VM_NAME: il nome della macchina virtuale di destinazione.
  • NAMESPACE: lo spazio dei nomi di destinazione.

Passaggi successivi