Verwenden Sie als DevOps-Ingenieur den Befehl kubectl, um verfügbare VM-Ressourcen zu überprüfen und eine eigenständige Linux- oder Windows VM in einem Namespace auf einem Supervisor bereitzustellen. Wenn die VM ein für vGPU konfiguriertes PCI-Gerät enthält, können Sie nach dem Erstellen und Starten der VM in Ihrer vSphere IaaS control plane-Umgebung den NVIDIA vGPU-Grafiktreiber installieren, um GPU-Vorgänge vollständig zu aktivieren.

Voraussetzungen

Um eine eigenständige VM in vSphere IaaS control plane bereitstellen zu können, muss ein DevOps-Ingenieur Zugriff auf bestimmte VM-Ressourcen haben. Stellen Sie sicher, dass ein vSphere-Administrator diese Schritte durchgeführt hat, um VM-Ressourcen verfügbar zu machen:

Wenn Sie NVIDIA vGPU oder andere PCI-Geräte für Ihre VMs verwenden möchten, müssen weitere Voraussetzungen erfüllt sein. Weitere Informationen finden Sie unter Bereitstellen einer VM mit PCI-Geräten in vSphere IaaS control plane.

Informationen zum VM-Operator und unterstützten Feldern finden Sie unter Konzepte des VM-Diensts und https://vm-operator.readthedocs.io/en/stable/ref/api/v1alpha2/.

Anzeigen der in einem Namespace verfügbaren VM-Ressourcen in vSphere IaaS control plane

Stellen Sie als DevOps-Ingenieur sicher, dass Sie auf VM-Ressourcen in Ihrem Namespace zugreifen können, und zeigen Sie vm-Klassen und VM-Vorlagen an, die in Ihrer Umgebung verfügbar sind. Sie können auch Speicherklassen und andere Elemente auflisten, die Sie möglicherweise für den Self-Service einer VM benötigen.

Diese Aufgabe umfasst Befehle, mit denen Sie auf Ressourcen zugreifen können, die für eine Bereitstellung einer eigenständigen VM verfügbar sind. Informationen zu den Ressourcen, die für die Bereitstellung von Tanzu Kubernetes Grid-Clustern und VMs erforderlich sind, die die Cluster bilden, finden Sie unter VM-Klassen für Tanzu Kubernetes-Cluster in der Dokumentation zu Verwenden des TKG-Dienstes mit der vSphere IaaS-Steuerungsebene.

Prozedur

  1. Greifen Sie in der Kubernetes-Umgebung auf Ihren Namespace zu.
  2. Um die in Ihrem Namespace verfügbaren VM-Klassen anzeigen zu können, führen Sie den folgenden Befehl aus.
    kubectl get virtualmachineclass
    Sie sehen die folgende Ausgabe.
    Hinweis: Da der bestmögliche VM-Klassentyp eine Überbelegung von Ressourcen zulässt, ist es möglich, dass keine Ressourcen mehr verfügbar sind, wenn Sie Grenzwerte für den Namespace festgelegt haben, in dem Sie die VMs bereitstellen. Verwenden Sie aus diesem Grund den garantierten VM-Klassentyp in der Produktionsumgebung.
    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. Zum Anzeigen von Details zu einer bestimmten VM-Klasse führen Sie die folgenden Befehle aus:
    • kubectl describe virtualmachineclasses name_vm_class

      Wenn eine VM-Klasse ein vGPU-Gerät enthält, können Sie sein Profil unter spec: hardware: devices: vgpuDevices anzeigen.

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

      Wenn die VM-Klasse ein vGPU- oder Passthrough-Gerät enthält, wird es in der Spalte VGPUDevicesProfileNames oder PassthroughDeviceIDs ausgegeben.

  4. Zeigen Sie die VM-Images an.
    kubectl get virtualmachineimages​
    Die angezeigte Ausgabe lautet in etwa wie folgt: Der Image-Name, wie z. B. vmi-xxxxxxxxxxxxx, wird vom System automatisch generiert.
    NAME                                              VERSION  OSTYPE                FORMAT  IMAGESUPPORTED  AGE
    vmi-xxxxxxxxxxxxx                                          centos8_64Guest       ovf     true            4d3h
  5. Verwenden Sie den folgenden Befehl, um ein bestimmtes Image zu beschreiben.
    kubectl describe virtualmachineimage vmi-xxxxxxxxxxxxx

    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.

  6. Überprüfen Sie, ob Sie auf Speicherklassen zugreifen können.
    kubectl get resourcequotas
    Weitere Informationen finden Sie unter Anzeigen von Speicherklassen in einem vSphere-Namespace.
    NAME                        AGE   REQUEST                                                                                         LIMIT
    my-ns-ubuntu-storagequota   24h   wcpglobal-storage-profile.storageclass.storage.k8s.io/requests.storage: 0/9223372036854775807

Bereitstellen einer virtuellen Maschine in vSphere IaaS control plane

Stellen Sie als DevOps-Ingenieur eine VM und ihr Gastbetriebssystem deklarativ bereit, indem Sie VM-Bereitstellungsspezifikationen in eine Kubernetes-YAML-Datei schreiben.

Voraussetzungen

Wenn Sie NVIDIA vGPU oder andere PCI-Geräte für Ihre VMs verwenden, beachten Sie Folgendes: Bereitstellen einer VM mit PCI-Geräten in vSphere IaaS control plane

Prozedur

  1. Bereiten Sie eine 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/v1alpha2.
    kind Gibt den Typ der zu erstellenden Kubernetes-Ressource an. Der einzige verfügbare Wert ist VirtualMachine.
    spec.imageName Gibt den Namen der VM-Image-Ressource im Kubernetes-Cluster an.
    spec.storageClass​ Gibt die Speicherklasse an, die für den Speicher der dauerhaften Volumes verwendet werden soll.
    spec.className Gibt den Namen der VM-Klasse an, in der die zu verwendenden Einstellungen für die virtuelle Hardware beschrieben werden.
    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. Legen Sie bei Bedarf einen Namen fest oder behalten Sie den Standardnamen bei.
    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.

    Weitere Informationen, einschließlich Details zum Bootstrap und zur Anpassung von Windows VMs mithilfe des Microsoft Systemvorbereitungstools (Sysprep), finden Sie unter Anpassung eines Gastbetriebssystems.

    topology.kubernetes.io/zone Steuert die Platzierung der VM auf einem Supervisor mit drei Zonen. Beispiel: topology.kubernetes.io/zone: zone-a02.
    Die folgende Beispiel-VM-YAML-Datei my-vm verwendet CloudInit als Bootstrapping-Methode. Das Beispiel zeigt eine VirtualMachine-Ressource, die Benutzerdaten in einer geheimen Ressource my-vm-bootstrap-data angibt. Der geheime Schlüssel wird für das Bootstrap und die Anpassung des Gastbetriebssystems verwendet.

    Die Daten im geheimen Schlüssel enthalten die CloudInit cloud-config. Weitere Informationen zum cloud-config-Format finden Sie in der offiziellen Dokumentation Cloud-Konfigurationsbeispiele.

    Beispiele mit Sysprep als Bootstrapping-Methode finden Sie unter 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.

    Verwenden Sie das folgende Beispiel, wenn Sie eine VM in einer Umgebung mit Zonen bereitstellen.

    Um die Werte für ZONE_NAME abzurufen, führen Sie den Befehl kubectl get vspherezones aus.

    apiVersion: vmoperator.vmware.com/v1alpha2
    kind: VirtualMachine
    metadata:
      name: <vm-name>
      namespace: <vm-ns>
      labels:
        topology.kubernetes.io/zone: ZONE_NAME
    ...
  2. Stellen Sie die VM bereit.
    kubectl apply -f my-vm.yaml
  3. Stellen Sie sicher, dass die VM erstellt wurde.
    kubectl get vm
    NAME              AGE
    my-vm             28s
  4. Überprüfen Sie die VM-Details und deren Status.
    kubectl describe virtualmachine my-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:         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. 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 IaaS control plane verfügbaren virtuellen Maschinen.

Nächste Maßnahme

Weitere Informationen finden Sie im Blog Introducing Virtual Machine Provisioning.