Vorhandene Geräte mit DRA Arbeitslasten zuweisen

Mit der dynamischen Ressourcenzuweisung (Dynamic Resource Allocation, DRA) können Sie flexibel Geräte für Ihre Google Kubernetes Engine-Arbeitslasten (GKE) anfordern mit dynamischer Ressourcenzuweisung (DRA). In diesem Dokument wird beschrieben, wie Sie ein ResourceClaimTemplate erstellen, um vorhandene Geräte in Knotenpools in Ihrem Cluster anzufordern. Anschließend erstellen Sie eine Arbeitslast, um zu beobachten, wie Kubernetes die Geräte flexibel Ihren Pods zuweist.

Dieses Dokument richtet sich an Anwendungsoperatoren und Datentechniker die Arbeitslasten wie KI/ML oder Hochleistungs-Computing (HPC) ausführen.

Geräte mit DRA anfordern

Wenn Sie Ihre GKE-Infrastruktur für DRA einrichten, erstellen die DRA-Treiber auf Ihren Knoten DeviceClass-Objekte im Cluster. Eine DeviceClass definiert eine Kategorie von Geräten wie GPUs, die für Arbeitslasten angefordert werden können. Ein Plattformadministrator kann optional zusätzliche DeviceClasses bereitstellen, die einschränken, welche Geräte Sie in bestimmten Arbeitslasten anfordern können.

Wenn Sie Geräte innerhalb einer DeviceClass anfordern möchten, erstellen Sie eines der folgenden Objekte:

  • ResourceClaim: Mit einem ResourceClaim kann ein Pod oder ein Nutzer Hardware-Ressourcen anfordern, indem er nach bestimmten Parametern filtert innerhalb einer DeviceClass.
  • ResourceClaimTemplate: Ein ResourceClaimTemplate definiert eine Vorlage, mit der Pods automatisch neue ResourceClaims pro Pod erstellen können.

Weitere Informationen zu ResourceClaims und ResourceClaimTemplates, siehe Wann sollten ResourceClaims und ResourceClaimTemplates verwendet werden?.

In den Beispielen in diesem Dokument wird ein einfaches ResourceClaimTemplate verwendet, um die angegebene Gerätekonfiguration anzufordern. Weitere Informationen zu allen Feldern die Sie angeben können, finden Sie in der ResourceClaimTemplate API-Referenz.

Beschränkungen

Es gelten folgende Einschränkungen:

Hinweis

Führen Sie die folgenden Aufgaben aus, bevor Sie beginnen:

  • Aktivieren Sie die Google Kubernetes Engine API.
  • Google Kubernetes Engine API aktivieren
  • Wenn Sie die Google Cloud CLI für diesen Task verwenden möchten, installieren und dann initialisieren Sie die gcloud CLI. Wenn Sie die gcloud CLI bereits installiert haben, rufen Sie die neueste Version mit dem gcloud components update Befehl ab. Ältere gcloud CLI-Versionen unterstützen möglicherweise nicht die Ausführung der Befehle in diesem Dokument.

Geräte anfordern und Arbeitslasten bereitstellen

Wenn Sie eine gerätespezifische Zuweisung pro Pod anfordern möchten, erstellen Sie ein ResourceClaimTemplate mit der gewünschten Gerätekonfiguration, z. B. GPUs eines bestimmten Typs. Wenn Sie eine Arbeitslast bereitstellen, die auf das ResourceClaimTemplate verweist, erstellt Kubernetes ResourceClaims für jeden Pod in der Arbeitslast basierend auf dem ResourceClaimTemplate. Kubernetes weist die angeforderten Ressourcen zu und plant die Pods auf entsprechenden Knoten.

So fordern Sie GPUs in einer Arbeitslast mit DRA an:

  1. Speichern Sie das folgende Manifest als gpu-claim-template.yaml:

    apiVersion: resource.k8s.io/v1
    kind: ResourceClaimTemplate
    metadata:
      name: gpu-claim-template
    spec:
      spec:
        devices:
          requests:
          - name: single-gpu
            exactly:
              deviceClassName: gpu.nvidia.com
              allocationMode: ExactCount
              count: 1
    
  2. Erstellen Sie das ResourceClaimTemplate:

    kubectl create -f gpu-claim-template.yaml
    
  3. Wenn Sie eine Arbeitslast erstellen möchten, die auf das ResourceClaimTemplate verweist, speichern Sie das folgende Manifest als dra-gpu-example.yaml:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: dra-gpu-example
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: dra-gpu-example
      template:
        metadata:
          labels:
            app: dra-gpu-example
        spec:
          containers:
          - name: ctr
            image: ubuntu:22.04
            command: ["bash", "-c"]
            args: ["echo $(nvidia-smi -L || echo Waiting...); sleep infinity"]
            resources:
              claims:
              - name: single-gpu
          resourceClaims:
          - name: single-gpu
            resourceClaimTemplateName: gpu-claim-template
          tolerations:
          - key: "nvidia.com/gpu"
            operator: "Exists"
            effect: "NoSchedule"
    
  4. Arbeitslast bereitstellen:

    kubectl create -f dra-gpu-example.yaml
    

Hardwarezuweisung prüfen

Sie können prüfen, ob Ihren Arbeitslasten Hardware zugewiesen wurde, indem Sie den ResourceClaim prüfen oder die Logs für Ihren Pod ansehen. So prüfen Sie die Zuweisung:

  1. Rufen Sie den ResourceClaim ab, der der bereitgestellten Arbeitslast zugeordnet ist:

    kubectl get resourceclaims
    

    Die Ausgabe sieht etwa so aus:

    NAME                                               STATE                AGE
    dra-gpu-example-64b75dc6b-x8bd6-single-gpu-jwwdh   allocated,reserved   9s
    
  2. Weitere Informationen zur Hardware, die dem Pod zugewiesen ist, abrufen:

    kubectl describe resourceclaims RESOURCECLAIM
    

    Ersetzen Sie RESOURCECLAIM durch den vollständigen Namen des ResourceClaim, den Sie in der Ausgabe des vorherigen Schritts erhalten haben.

    Die Ausgabe sieht etwa so aus:

    Name:         dra-gpu-example-68f595d7dc-prv27-single-gpu-qgjq5
    Namespace:    default
    Labels:       <none>
    Annotations:  resource.kubernetes.io/pod-claim-name: single-gpu
    API Version:  resource.k8s.io/v1
    Kind:         ResourceClaim
    Metadata:
    # Multiple lines are omitted here.
    Spec:
      Devices:
        Requests:
          Exactly:
            Allocation Mode:    ExactCount
            Count:              1
            Device Class Name:  gpu.nvidia.com
          Name:                 single-gpu
    Status:
      Allocation:
        Devices:
          Results:
            Device:   gpu-0
            Driver:   gpu.nvidia.com
            Pool:     gke-cluster-1-dra-gpu-pool-b56c4961-7vnm
            Request:  single-gpu
        Node Selector:
          Node Selector Terms:
            Match Fields:
              Key:       metadata.name
              Operator:  In
              Values:
                gke-cluster-1-dra-gpu-pool-b56c4961-7vnm
      Reserved For:
        Name:      dra-gpu-example-68f595d7dc-prv27
        Resource:  pods
        UID:       e16c2813-08ef-411b-8d92-a72f27ebf5ef
    Events:        <none>
    
  3. Logs für die bereitgestellte Arbeitslast abrufen:

    kubectl logs deployment/dra-gpu-example --all-pods=true
    

    Die Ausgabe sieht etwa so aus:

    [pod/dra-gpu-example-64b75dc6b-x8bd6/ctr] GPU 0: Tesla T4 (UUID: GPU-2087ac7a-f781-8cd7-eb6b-b00943cc13ef)
    

    Diese Ausgabe zeigt, dass GKE dem Container eine GPU zugewiesen hat.

Nächste Schritte