Als DevOps-Ingenieur können Sie eine VM und ihr Gastbetriebssystem deklarativ bereitstellen, indem Sie VM-Bereitstellungsspezifikationen in eine Kubernetes-YAML-Datei schreiben.

Voraussetzungen

  • Stellen Sie sicher, dass Sie verfügbare Ressourcen zum Bereitstellen einer VM in Ihrem Namespace besitzen. Weitere Informationen finden Sie unter Anzeigen der in einem Namespace verfügbaren VM-Ressourcen in vSphere with Tanzu.
  • Wenn Sie NVIDIA vGPU oder andere PCI-Geräte für Ihre VMs verwenden, beachten Sie Folgendes:
    • Stellen Sie sicher, dass Sie eine geeignete VM-Klasse mit PCI-Konfiguration verwenden. Weitere Informationen finden Sie unter Hinzufügen von PCI-Geräten zu einer VM-Klasse in vSphere with Tanzu.
    • VMs mit vGPU-Geräten erfordern Images, für die als Startmodus EFI festgelegt ist, z. B. CentOS. Sie müssen Zugriff auf diese Images haben. Suchen Sie für Informationen über unterstützte Images auf der Website VMware Cloud Marketplace nach VM-Dienst-Image.
    • VMs mit vGPU-Geräten, die vom VM-Dienst verwaltet werden, werden automatisch ausgeschaltet, wenn ein ESXi-Host in den Wartungsmodus wechselt. Dies kann sich vorübergehend auf Arbeitslasten auswirken, die in den VMs ausgeführt werden. Die VMs werden automatisch eingeschaltet, nachdem der Host im Wartungsmodus ausgeführt wurde.

Prozedur

  1. Bereiten Sie die VM-YAML-Datei vor.
    Geben Sie in der Datei die folgenden Parameter an:
    Option Bezeichnung
    apiVersion Gibt die Version der VM-Dienst-API an. Beispiel: vmoperator.vmware.com/v1alpha1.
    kind Gibt den Typ der zu erstellenden Kubernetes-Ressource an. Der einzige verfügbare Wert ist VirtualMachine.
    spec.imageName Gibt das Image der Inhaltsbibliothek an, das die VM verwenden soll. Beispiel: centos-stream-8-vmservice-v1alpha1-xxxxxxxxxxxxx.
    spec.storageClass​ Identifiziert die Speicherklasse, die für die Speicherung der persistenten Volumes verwendet werden soll. Beispiel: wcpglobal-storage-profile.
    spec.className Gibt den Namen der VM-Klasse an, in der die zu verwendenden Einstellungen für die virtuelle Hardware beschrieben werden. Beispiel: custom.
    spec.networkInterfaces Gibt netzwerkbezogene Einstellungen für die VM an.
    • networkType. Die Werte für diesen Schlüssel können nsx-t oder vsphere-distributed lauten.
    • networkName. Geben Sie den Namen nur an, wenn networkType den Wert vsphere-distributed aufweist. Sie können diese Informationen mithilfe des Befehls kubectl get network abrufen.

      Wenn es sich bei networkType um nsx-t handelt, müssen Sie networkName nicht angeben.

    spec.vmMetadata Enthält zusätzliche Metadaten, die an die VM übergeben werden sollen. Sie können diesen Schlüssel verwenden, um das Gastbetriebssystem-Image anzupassen und Elemente wie den hostname der VM und user-data festzulegen, einschließlich Kennwörter, SSH-Schlüssel usw. In der folgenden Beispiel-YAML wird zum Speichern der Metadaten ConfigMap verwendet.
    Verwenden Sie das Folgende als Beispiel für eine YAML-Datei vmsvc-centos-vm.yaml.
    apiVersion: vmoperator.vmware.com/v1alpha1
    kind: VirtualMachine
    metadata:
      name: vmsvc-centos-vm
      namespace: my-ns-centos
    spec:
      imageName: centos-stream-8-vmservice-v1alpha1-xxxxxxxxxxxxx
      className: custom
      powerState: poweredOn
      storageClass: wcpglobal-storage-profile
      networkInterfaces:
      - networkName: primary
        networkType: vsphere-distributed
      vmMetadata:
          configMapName: vmsvc-centos-nginx-cm
          transport: OvfEnv
    ---
    apiVersion: v1
    kind: ConfigMap
    metadata:
        name: vmsvc-centos-nginx-cm
        namespace: my-ns-centos
    data:
      user-data: >-
        I2Nsb3VkLWNvbmZpZwoKcGFzc3dvcmQ6IFZNV0FSRQpzc2hfcHdhdXRoOiB0cnVlCgp1c2VyczoKICAtIG5hbWU6IHZtd2FyZQogICAgc3VkbzogQUxMPShBTEwpIE5PUEFTU1dEOkFMTAogICAgbG9ja19wYXNzd2Q6IGZhbHNlCiAgICAjIFBhc3N3b3JkIHNldCB0byBBZG1pbiEyMwogICAgcGFzc3dkOiAnJDEkc2FsdCRTT0MzM2ZWYkEvWnhlSXdENXl3MXUxJwogICAgc2hlbGw6IC9iaW4vYmFzaAoKd3JpdGVfZmlsZXM6CiAgLSBjb250ZW50OiB8CiAgICAgIFZNU1ZDIFNheXMgSGVsbG8gV29ybGQKICAgIHBhdGg6IC9oZWxsb3dvcmxkCg==
    ConfigMap enthält das cloud-config-Blob, das den Benutzernamen und das Kennwort für das Gastbetriebssystem angibt. In diesem Beispiel stellt user-data in vmsvc-centos-nginx-cm ConfigMap den folgenden Ausschnitt im Base64-Format dar:
    #cloud-config
    password: VMWARE
    ssh_pwauth: true
    users:
      - name: vmware
        sudo: ALL=(ALL) NOPASSWD:ALL
        lock_passwd: false
        passwd: '$1$salt$SOC33fVbA/ZxeIwD5yw1u1'
        shell: /bin/bash
    write_files:
      - content: |
          VMSVC Says Hello World
        path: /helloworld
    Weitere Informationen zu cloud-config-Spezifikationen finden Sie unter https://cloudinit.readthedocs.io/en/latest/topics/examples.html.
  2. Stellen Sie die VM bereit.
    kubectl apply -f vmsvc-centos-vm.yaml
  3. Stellen Sie sicher, dass die VM erstellt wurde.
    kubectl get vm -n my-ns-centos
    NAME              AGE
    vmsvc-centos-vm   28s
  4. Überprüfen Sie den Status der VM und die zugehörigen Ereignisse.
    kubectl describe virtualmachine vmsvc-centos-vm

    Die Ausgabe lautet in etwa wie folgt: Über die Ausgabe können Sie auch die IP-Adresse der VM abrufen, die in der Vm Ip angezeigt wird.

    Name:         vmsvc-centos-vm
    Namespace:    my-ns-centos
    Annotations:  vmoperator.vmware.com/image-supported-check: disabled
    API Version:  vmoperator.vmware.com/v1alpha1
    Kind:         VirtualMachine
    Metadata:
      Creation Timestamp:  2021-03-23T19:07:36Z
      Finalizers:
        virtualmachine.vmoperator.vmware.com
      Generation:  1
      Managed Fields:
     ...  
     ... 
    Spec:
      Class Name:  custom
      Image Name:  vmservice-centos-20-10-server-cloudimg-amd64
      Network Interfaces:
        Network Name:  primary
        Network Type:  vsphere-distributed
      Power State:     poweredOn
      Storage Class:   wcpglobal-storage-profile
      Vm Metadata:
        Config Map Name:  vmsvc-centos-nginx-cm
        Transport:        OvfEnv
    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. Stellen Sie sicher, dass die VM-IP-Adresse erreichbar ist.
    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

Ergebnisse

Eine über den VM-Dienst erstellte VM kann nur von DevOps aus dem Kubernetes-Namespace verwaltet werden. Der Lebenszyklus kann nicht über den vSphere Client verwaltet werden. vSphere-Administratoren können jedoch die VM und ihre Ressourcen überwachen. Weitere Informationen finden Sie unter Überwachen der in vSphere with Tanzu verfügbaren virtuellen Maschinen.

Nächste Maßnahme

Weitere Informationen finden Sie im Blog Introducing Virtual Machine Provisioning.

Wenn die VM ein für vGPU konfiguriertes PCI-Gerät enthält, installieren Sie den NVIDIA-Anzeigetreiber. Weitere Informationen finden Sie unter Installieren des NVIDIA-Gasttreibers in einer VM in vSphere with Tanzu.