In qualità di tecnico di DevOps, utilizzare il comando kubectl per rivedere le risorse della macchina virtuale disponibili ed eseguire il provisioning di una macchina virtuale autonoma Linux o Windows in uno spazio dei nomi in un Supervisore. Se la macchina virtuale include un dispositivo PCI configurato per la vGPU, dopo aver creato e avviato la macchina virtuale nell'ambiente vSphere IaaS control plane, è possibile installare il driver grafico NVIDIA vGPU per abilitare le operazioni della GPU.

Prerequisiti

Per poter distribuire una macchina virtuale autonoma in vSphere IaaS control plane, un tecnico DevOps deve avere accesso a risorse di macchina virtuale specifiche. Assicurarsi che un amministratore di vSphere abbia eseguito questi passaggi per rendere disponibili le risorse della macchina virtuale:

Se si prevede di utilizzare NVIDIA vGPU o altri dispositivi PCI per le macchine virtuali, è necessario soddisfare requisiti aggiuntivi. Per informazioni, vedere Distribuzione di una macchina virtuale con dispositivi PCI in vSphere IaaS control plane.

Per informazioni sull'operatore della macchina virtuale e sui campi supportati, vedere Concetti del servizio macchina virtuale e https://vm-operator.readthedocs.io/en/stable/ref/api/v1alpha2/.

Visualizzazione delle risorse della macchina virtuale disponibili in uno spazio dei nomi in vSphere IaaS control plane

I tecnici di DevOps verificano di poter accedere alle risorse della macchina virtuale nello spazio dei nomi, nonché visualizzare le classi e i modelli di macchina virtuale disponibili nell'ambiente. Possono inoltre elencare le classi di storage e gli altri elementi che potrebbero essere necessari per il self-service di una macchina virtuale.

Questa attività riguarda i comandi utilizzati per accedere alle risorse disponibili per la distribuzione di una macchina virtuale autonoma. Per informazioni sulle risorse necessarie per distribuire cluster Tanzu Kubernetes Grid e macchine virtuali che costituiscono i cluster, vedere Classi di macchine virtuali per cluster TKG nella documentazione Utilizzo del servizio TKG con vSphere IaaS Control Plane.

Procedura

  1. Accedere allo spazio dei nomi nell'ambiente Kubernetes.
  2. Per visualizzare le classi di macchine virtuali disponibili nello spazio dei nomi, eseguire il comando seguente.
    kubectl get virtualmachineclass
    È possibile visualizzare l'output seguente.
    Nota: Poiché il tipo di classe di macchina virtuale best effort consente di eseguire l'overcommit delle risorse, è possibile esaurire le risorse se si impostano limiti nello spazio dei nomi in cui si esegue il provisioning delle macchine virtuali. Per questo motivo, utilizzare il tipo di classe di macchina virtuale garantita nell'ambiente di produzione.
    NAME                       VIRTUALMACHINECLASS        AGE
    
    best-effort-large          best-effort-large          44m
    best-effort-medium         best-effort-medium         44m
    best-effort-small          best-effort-small          44m
    best-effort-xsmall         best-effort-xsmall         44m
    custom                     custom                     44m
  3. Per visualizzare i dettagli di una classe di macchine virtuali specifica, eseguire i comandi seguenti.
    • kubectl describe virtualmachineclasses name_vm_class

      Se una classe di macchine virtuali include un dispositivo vGPU, è possibile visualizzarne il profilo in spec: hardware: devices: vgpuDevices.

      ......
      spec:
        hardware:
          cpus: 4
          devices:
            vgpuDevices:
            - profileName: grid_v100-q4
      ......
      
    • kubectl get virtualmachineclasses -o wide

      Se la classe di macchine virtuali include una vGPU o un dispositivo passthrough, l'output la mostra nella colonna VGPUDevicesProfileNames o PassthroughDeviceIDs.

  4. Visualizzare le immagini della macchina virtuale.
    kubectl get virtualmachineimages​
    L'output visualizzato è simile al seguente. Il nome dell'immagine, ad esempio vmi-xxxxxxxxxxxxx, viene generato automaticamente dal sistema.
    NAME                                              VERSION  OSTYPE                FORMAT  IMAGESUPPORTED  AGE
    vmi-xxxxxxxxxxxxx                                          centos8_64Guest       ovf     true            4d3h
  5. Per descrivere un'immagine specifica, utilizzare il comando seguente.
    kubectl describe virtualmachineimage vmi-xxxxxxxxxxxxx

    Le macchine virtuali con dispositivi vGPU richiedono immagini con modalità di avvio impostata su EFI, ad esempio CentOS. Assicurarsi di poter accedere a queste immagini.

  6. Verificare che sia possibile accedere alle classi di storage.
    kubectl get resourcequotas
    NAME                        AGE   REQUEST                                                                                         LIMIT
    my-ns-ubuntu-storagequota   24h   wcpglobal-storage-profile.storageclass.storage.k8s.io/requests.storage: 0/9223372036854775807

Distribuzione di una macchina virtuale in vSphere IaaS control plane

Un tecnico di DevOps può eseguire il provisioning di una macchina virtuale e del relativo sistema operativo guest in modo dichiarativo scrivendo le specifiche di distribuzione della macchina virtuale in un file YAML Kubernetes.

Prerequisiti

Se si utilizza NVIDIA vGPU o altri dispositivi PCI per le macchine virtuali, vedere Distribuzione di una macchina virtuale con dispositivi PCI in vSphere IaaS control plane.

Procedura

  1. Preparazione di un file YAML della macchina virtuale.
    Nel file, specificare i seguenti parametri:
    Opzione Descrizione
    apiVersion Specifica la versione dell'API del servizio della macchina virtuale. Ad esempio vmoperator.vmware.com/v1alpha2.
    kind Specifica il tipo di risorsa Kubernetes da creare. L'unico valore disponibile è VirtualMachine.
    spec.imageName Specifica il nome della risorsa immagine della macchina virtuale nel cluster Kubernetes.
    spec.storageClass​ Specifica la classe di storage da utilizzare per lo storage dei volumi persistenti.
    spec.className Specifica il nome della classe di macchine virtuali che descrive le impostazioni dell'hardware virtuale da utilizzare.
    spec.networkInterfaces Specifica le impostazioni relative alla rete per la macchina virtuale.
    • networkType. I valori di questa chiave possono essere nsx-t o vsphere-distributed.
    • networkName. Se necessario, specificare un nome o lasciare il nome predefinito.
    spec.vmMetadata Include ulteriori metadati da passare alla macchina virtuale. È possibile utilizzare questa chiave per personalizzare l'immagine del sistema operativo guest e impostare elementi come il hostname della macchina virtuale e dei user-data, tra cui password, chiavi SSH e così via.

    Per ulteriori informazioni, inclusi i dettagli su come eseguire il bootstrap e personalizzare macchine virtuali Windows utilizzando lo strumento di preparazione del sistema Microsoft (Sysprep), vedere Personalizzazione di un guest.

    topology.kubernetes.io/zone Controlla il posizionamento della macchina virtuale in un Supervisore a tre zone. Ad esempio topology.kubernetes.io/zone: zone-a02.
    Il file YAML della macchina virtuale di esempio seguente my-vm utilizza CloudInit come metodo di bootstrap. L'esempio mostra una risorsa VirtualMachine che specifica i dati utente in una risorsa Secret my-vm-bootstrap-data. Il segreto verrà utilizzato per eseguire il bootstrap e personalizzare il sistema operativo guest.

    I dati nel segreto includono CloudInit cloud-config. Per ulteriori informazioni sul formato cloud-config, vedere la documentazione ufficiale Esempi di configurazione cloud.

    Per esempi in cui Sysprep è un metodo di bootstrap, vedere Sysprep.
    apiVersion: vmoperator.vmware.com/v1alpha2
    kind: VirtualMachine
    metadata:
      name:      my-vm
      namespace: my-namespace
    spec:
      className:    small
      imageName:    vmi-xxxxxxxxxxxxx
      storageClass: iscsi
      vmMetadata:
        transport: CloudInit
        secretName: my-vm-bootstrap-data
    
    apiVersion: v1
    kind: Secret
    metadata:
      name:      my-vm-bootstrap-data
      namespace: my-namespace
    stringData:
      user-data: |
        #cloud-config
        users:
        - default
        - name: xyz..
          primary_group: xyz..
          groups: users
          ssh_authorized_keys:
          - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDSL7uWGj...
        runcmd:
        - "ls /"
        - [ "ls", "-a", "-l", "/" ]
        write_files:
        - path: /etc/my-plaintext
          permissions: '0644'
          owner: root:root
          content: |
            Hello, world.

    Utilizzare l'esempio seguente se si distribuisce una macchina virtuale in un ambiente con zone.

    Per ottenere i valori per ZONE_NAME, eseguire il comando kubectl get vspherezones.

    apiVersion: vmoperator.vmware.com/v1alpha2
    kind: VirtualMachine
    metadata:
      name: <vm-name>
      namespace: <vm-ns>
      labels:
        topology.kubernetes.io/zone: ZONE_NAME
    ...
  2. Distribuire la macchina virtuale.
    kubectl apply -f my-vm.yaml
  3. Verificare che la macchina virtuale sia stata creata.
    kubectl get vm
    NAME              AGE
    my-vm             28s
  4. Controllare i dettagli della macchina virtuale e il relativo stato.
    kubectl describe virtualmachine my-vm

    L'output è simile al seguente. Dall'output, è anche possibile ottenere l'indirizzo IP della macchina virtuale, che viene visualizzato nel campo Vm Ip.

    Name:         my-vm
    Namespace:    my-namespace
    API Version:  vmoperator.vmware.com/v1alpha2
    Kind:         VirtualMachine
    Metadata:
      Creation Timestamp:  2021-03-23T19:07:36Z
      Finalizers:
        virtualmachine.vmoperator.vmware.com
      Generation:  1
      Managed Fields:
     ...  
     ... 
    Status:
      Bios UUID:              4218ec42-aeb3-9491-fe22-19b6f954ce38
      Change Block Tracking:  false
      Conditions:
        Last Transition Time:  2021-03-23T19:08:59Z
        Status:                True
        Type:                  VirtualMachinePrereqReady
      Host:                    10.185.240.10
      Instance UUID:           50180b3a-86ee-870a-c3da-90ddbaffc950
      Phase:                   Created
      Power State:             poweredOn
      Unique ID:               vm-73
      Vm Ip:                   10.161.75.162
    Events:                    <none>
    ...
    
  5. Verificare che l'IP della macchina virtuale sia raggiungibile.
    ping 10.161.75.162
    PING 10.161.75.162 (10.161.75.162): 56 data bytes
    64 bytes from 10.161.75.162: icmp_seq=0 ttl=59 time=43.528 ms
    64 bytes from 10.161.75.162: icmp_seq=1 ttl=59 time=53.885 ms
    64 bytes from 10.161.75.162: icmp_seq=2 ttl=59 time=31.581 ms

risultati

Una macchina virtuale creata tramite il servizio della macchina virtuale può essere gestita solo da DevOps dallo spazio dei nomi Kubernetes. Il suo ciclo di vita non può essere gestito dal vSphere Client, ma gli amministratori di vSphere possono monitorare la macchina virtuale e le relative risorse. Per ulteriori informazioni, vedere Monitorare le macchine virtuali disponibili in vSphere IaaS control plane.

Operazioni successive

Per ulteriori dettagli, vedere il blog Introducing Virtual Machine Provisioning.