Bereitstellen eines Arbeitslastclusters für spezialisierte Hardware

Tanzu Kubernetes Grid unterstützt die Bereitstellung von Arbeitslastclustern auf bestimmten Typen von GPU-fähigen Hosts auf vSphere 7.0 und höher.

Bereitstellen eines GPU-fähigen Arbeitslastclusters

Um einen Knoten mit einer GPU in einem vSphere-Arbeitslastcluster zu verwenden, müssen Sie den PCI-Passthrough-Modus aktivieren. Der Vorgang ermöglicht den direkten Zugriff auf die GPU durch den Cluster unter Umgehung des ESXi-Hypervisors, wodurch ein Leistungsniveau erreicht wird, das der Leistung der GPU auf einem nativen System ähnelt. Bei Verwendung des PCI-Passthrough-Modus ist jedes GPU-Gerät einer virtuellen Maschine (VM) des vSphere-Arbeitslastclusters zugeordnet.

Hinweis

Um GPU-fähige Knoten zu vorhandenen Clustern hinzuzufügen, verwenden Sie den Befehl tanzu cluster node-pool set.

Voraussetzungen

Vorgehensweise

Um einen Arbeitslastcluster mit GPU-fähigen Hosts zu erstellen, führen Sie die folgenden Schritte aus, um PCI-Passthrough zu aktivieren, ein benutzerdefiniertes Systemimage zu erstellen, eine Clusterkonfigurationsdatei und Tanzu Kubernetes-Version zu erstellen, den Arbeitslastcluster bereitzustellen und einen GPU-Operator mithilfe von Helm zu installieren.

  1. Fügen Sie die ESXi-Hosts mit den GPU-Karten zu Ihrem vSphere Client hinzu.

  2. Aktivieren Sie PCI-Passthrough und notieren Sie die GPU-IDs wie folgt:

    1. Wählen Sie in Ihrem vSphere Client den zielseitigen ESXi-Host im GPU-Cluster aus.
    2. Wählen Sie Konfigurieren > Hardware > PCI-Geräte aus.
    3. Wählen Sie die Registerkarte Alle PCI-Geräte aus.
    4. Wählen Sie die gewünschte GPU in der Liste aus.
    5. Klicken Sie auf Passthrough umschalten.
    6. Notieren Sie sich unter "Allgemeine Informationen" die Geräte- und Anbieter-ID (in der Abbildung unten grün hervorgehoben). Die IDs sind für identische GPU-Karten identisch. Sie benötigen diese für die Clusterkonfigurationsdatei.

    vSphere Client-Schnittstelle mit einer Liste der PCI-Geräte. Unterhalb der Liste wird der Ort der Geräte-ID und der Anbieter-ID durch einen grünen Rahmen hervorgehoben.

  3. Erstellen Sie mithilfe der Vorlage in Workload-Clustervorlage eine Konfigurationsdatei für den Arbeitslastcluster und schließen Sie die folgenden Variablen ein:

    ...
    VSPHERE_WORKER_PCI_DEVICES: "0x<VENDOR-ID>:0x<DEVICE-ID>"
    VSPHERE_WORKER_CUSTOM_VMX_KEYS: 'pciPassthru.allowP2P=true,pciPassthru.RelaxACSforP2P=true,pciPassthru.use64bitMMIO=true,pciPassthru.64bitMMIOSizeGB=<GPU-SIZE>'
    VSPHERE_IGNORE_PCI_DEVICES_ALLOW_LIST: "<BOOLEAN>"
    VSPHERE_WORKER_HARDWARE_VERSION: vmx-17
    WORKER_ROLLOUT_STRATEGY: "RollingUpdate"
    

    Dabei gilt:

    Hinweis

    Sie können nur einen GPU-Typ pro VM verwenden. Sie können beispielsweise nicht sowohl NVIDIA V100 als auch NVIDIA Tesla T4 auf einer einzelnen VM verwenden, aber Sie können mehrere GPU-Instanzen mit derselben Anbieter- und Geräte-ID verwenden.

    Die tanzu-CLI lässt das Aktualisieren der WORKER_ROLLOUT_STRATEGY -Spezifikation auf dem MachineDeployment nicht zu. Wenn das Cluster-Upgrade aufgrund nicht verfügbarer PCI-Geräte hängen bleibt, schlägt VMware vor, die MachineDeployment-Strategie mithilfe der kubectl-CLI zu bearbeiten. Die Rollout-Strategie wird unter spec.strategy.type definiert.

    Eine vollständige Liste der Variablen, die Sie für GPU-fähige Cluster konfigurieren können, finden Sie unter GPU-fähige Cluster in Referenz für die Variablen der Konfigurationsdatei.

  4. Erstellen Sie den Arbeitslastcluster, indem Sie Folgendes ausführen:

    tanzu cluster create -f CLUSTER-CONFIG-NAME
    

    Dabei ist CLUSTER-CONFIG-NAME der Name der Clusterkonfigurationsdatei, die Sie in den vorherigen Schritten erstellt haben.

  5. Fügen Sie das NVIDIA Helm-Repository hinzu:

    helm repo add nvidia https://helm.ngc.nvidia.com/nvidia \
    && helm repo update
    
  6. Installieren Sie den NVIDIA GPU-Operator:

    helm install --kubeconfig=./KUBECONFIG  --wait --generate-name -n gpu-operator --create-namespace nvidia/gpu-operator
    

    Dabei ist KUBECONFIG der Name und der Speicherort der kubeconfig für Ihren Arbeitslastcluster. Weitere Informationen finden Sie unter Abrufen von kubeconfig für Arbeitslastcluster.

    Informationen zu den Parametern in diesem Befehl finden Sie unter Installieren des GPU-Operators in der NVIDIA-Dokumentation.

  7. Stellen Sie sicher, dass der NVIDIA GPU-Operator ausgeführt wird:

    kubectl --kubeconfig=./KUBECONFIG  get pods -A
    

    Die Ausgabe entspricht:

    NAMESPACE         NAME                                                              READY   STATUS     RESTARTS   AGE
    gpu-operator      gpu-feature-discovery-szzkr                                       1/1     Running     0         6m18s
    gpu-operator      gpu-operator-1676396573-node-feature-discovery-master-7795vgdnd   1/1     Running     0         7m7s
    gpu-operator      gpu-operator-1676396573-node-feature-discovery-worker-bq6ct       1/1     Running     0         7m7s
    gpu-operator      gpu-operator-84dfbbfd8-jd98f                                      1/1     Running     0         7m7s
    gpu-operator      nvidia-container-toolkit-daemonset-6zncv                          1/1     Running     0         6m18s
    gpu-operator      nvidia-cuda-validator-2rz4m                                       0/1     Completed   0         98s
    gpu-operator      nvidia-dcgm-exporter-vgw7p                                        1/1     Running     0         6m18s
    gpu-operator      nvidia-device-plugin-daemonset-mln6z                              1/1     Running     0         6m18s
    gpu-operator      nvidia-device-plugin-validator-sczdk                              0/1     Completed   0         22s
    gpu-operator      nvidia-driver-daemonset-b7flb                                     1/1     Running     0         6m38s
    gpu-operator      nvidia-operator-validator-2v8zk                                   1/1     Running     0         6m18s
    

Testen Ihres GPU-Clusters

Um Ihren GPU-fähigen Cluster zu testen, erstellen Sie ein Pod-Manifest für das Beispiel cuda-vector-add aus der Kubernetes-Dokumentation und stellen Sie es bereit. Der Container lädt eine CUDA-Berechnung mit der GPU herunter und führt diese aus.

  1. Erstellen Sie eine Datei mit dem Namen cuda-vector-add.yaml und fügen Sie Folgendes hinzu:

    apiVersion: v1
    kind: Pod
    metadata:
     name: cuda-vector-add
    spec:
     restartPolicy: OnFailure
     containers:
       - name: cuda-vector-add
         # https://github.com/kubernetes/kubernetes/blob/v1.7.11/test/images/nvidia-cuda/Dockerfile
         image: "registry.k8s.io/cuda-vector-add:v0.1"
         resources:
           limits:
             nvidia.com/gpu: 1 # requesting 1 GPU
    
  2. Wenden Sie die Datei an:

    kubectl apply -f cuda-vector-add.yaml
    
  3. Führen Sie sie aus:

    kubectl get po cuda-vector-add
    

    Die Ausgabe entspricht:

    cuda-vector-add   0/1     Completed   0          91s
    
  4. Führen Sie sie aus:

    kubectl logs cuda-vector-add
    

    Die Ausgabe entspricht:

    [Vector addition of 50000 elements]
    Copy input data from the host memory to the CUDA device
    CUDA kernel launch with 196 blocks of 256 threads
    Copy output data from the CUDA device to the host memory
    Test PASSED
    Done
    

Bereitstellen eines Arbeitslastclusters auf einer Edge-Site

Tanzu Kubernetes Grid v1.6+ unterstützt die Bereitstellung von Arbeitslastclustern auf VMware ESXi-Edge-Hosts. Sie können diesen Ansatz verwenden, wenn Sie viele Kubernetes-Cluster an verschiedenen Speicherorten ausführen möchten, die alle von einem zentralen Verwaltungscluster verwaltet werden.

Topologie: Sie können Edge-Arbeitslastcluster in der Produktion mit einem einzelnen Steuerungsebenenknoten und nur einem oder zwei Hosts ausführen. Obwohl dies weniger CPU, Arbeitsspeicher und Netzwerkbandbreite benötigt, verfügen Sie nicht über dieselben Stabilitäts- und Wiederherstellungseigenschaften wie Standardproduktions-Tanzu Kubernetes Grid-Cluster. Weitere Informationen finden Sie unter Referenzarchitektur 1.0 zur VMware Tanzu Edge-Lösung.

Lokale Registrierung: Um Kommunikationsverzögerungen zu minimieren und die Stabilität zu maximieren, sollte jeder Edge-Cluster über eine eigene lokale Harbor-Container-Registrierung verfügen. Eine Übersicht über diese Architektur finden Sie unter Container-Registrierung in Architekturübersicht. Informationen zum Installieren einer lokalen Harbor-Registrierung finden Sie unter Bereitstellen einer Offline-Harbor-Registrierung auf vSphere.

Zeitüberschreitungen: Wenn sich der Verwaltungscluster eines Edge-Arbeitslastclusters ortsfern in einem Hauptdatencenter befindet, müssen Sie möglicherweise bestimmte Zeitüberschreitungen anpassen, damit der Verwaltungscluster genügend Zeit hat, um eine Verbindung mit den Arbeitslastcluster-Rechnern herzustellen. Informationen zum Anpassen dieser Zeitüberschreitungen finden Sie unter Verlängern der Zeitüberschreitungen, damit Edge-Cluster höhere Latenzen bewältigen können unten.

Verlängern der Zeitüberschreitungen, damit Edge-Cluster höhere Latenzen bewältigen können

Wenn Ihr Verwaltungscluster auf Edge-Sites ausgeführte Arbeitslastcluster remote verwaltet oder mehr als 20 Arbeitslastcluster verwaltet, können Sie bestimmte Zeitüberschreitungen anpassen, sodass die Cluster-API Maschinen, die vorübergehend offline sind oder länger als 12 Minuten mit ihrem Remoteverwaltungscluster kommunizieren, nicht blockiert oder beschneidet, insbesondere wenn Ihre Infrastruktur unterversorgt ist.

Es gibt drei Einstellungen, die Sie anpassen können, um den Edge-Clustern zusätzliche Zeit für die Kommunikation mit ihrer Steuerungsebene zu verschaffen:

  • MHC_FALSE_STATUS_TIMEOUT: Erweitern Sie den Standardwert 12m auf beispielsweise 40m, um zu verhindern, dass der MachineHealthCheck-Controller die Maschine neu erstellt, wenn die zugehörige Ready-Bedingung mehr als 12 Minuten auf False festgelegt bleibt. Weitere Informationen zu Systemzustandsprüfungen von Maschinen finden Sie unter Konfigurieren von Maschinenintegritätsprüfungen für Tanzu Kubernetes-Cluster.

  • NODE_STARTUP_TIMEOUT: Erweitern Sie den Standardwert 20m auf beispielsweise 60m, um zu verhindern, dass der MachineHealthCheck-Controller neue Maschinen daran hindert, dem Cluster beizutreten, da deren Start länger als 20 Minuten dauerte, was als fehlerhaft betrachtet wird.

  • etcd-dial-timeout-duration: Verlängern Sie die Standard-10m beispielsweise auf 40s im Manifest capi-kubeadm-control-plane-controller-manager, um zu verhindern, dass etcd-Clients auf dem Verwaltungscluster beim Prüfen der Integrität von etcd auf den Arbeitslastclustern vorzeitig fehlschlagen. Der Verwaltungscluster nutzt seine Fähigkeit zur Herstellung der Verbindung mit etcd als Maßstab für die Maschinenintegrität. Beispiel:

    1. Führen Sie in einem Terminal Folgendes aus:

      kubectl edit  capi-kubeadm-control-plane-controller-manager -n capi-system
      
      
    2. Ändern Sie den Wert für --etcd-dial-timeout-duration:

      - args:
           - --leader-elect
           - --metrics-bind-addr=localhost:8080
           - --feature-gates=ClusterTopology=false
           - --etcd-dial-timeout-duration=40s
           command:
           - /manager
           image: projects.registry.vmware.com/tkg/cluster-api/kubeadm-control-plane-controller:v1.0.1_vmware.1
      

Darüber hinaus sollten Sie Folgendes beachten:

  • capi-kubedm-control-plane-manager : Wenn er aus irgendeinem Grund von den Arbeitslastclustern "abgetrennt" wird, müssen Sie ihn möglicherweise einem neuen Knoten zuweisen, damit er etcd in Arbeitslastclustern ordnungsgemäß überwachen kann.

  • Pinniped-Konfigurationen in TKG gehen alle davon aus, dass Ihre Arbeitslastcluster mit Ihrem Verwaltungscluster verbunden sind. Im Falle einer Trennung sollten Sie sicherstellen, dass Arbeitslast-Pods Administrator- oder Dienstkonten verwenden, um mit dem API-Server auf Ihren Edge-Sites zu kommunizieren. Andernfalls beeinträchtigt die Trennung vom Verwaltungscluster, dass sich Ihre Edge-Sites über Pinniped bei ihren lokalen Arbeitslast-API-Servern authentifizieren können.

check-circle-line exclamation-circle-line close-line
Scroll to top icon