Batch on GKE-Cluster verwalten

Auf dieser Seite wird gezeigt, wie Sie Batch on GKE-Cluster erstellen und verwalten.

Vorbereitung

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

Mit den folgenden Methoden können Sie die gcloud-Einstellungen festlegen:

  • Verwenden Sie gcloud init, wenn Sie die Standardeinstellungen ansehen möchten.
  • Verwenden Sie gcloud config, um Ihre Projekt-ID, Zone und Region individuell festzulegen.

gcloud init verwenden

Wenn Sie die Fehlermeldung One of [--zone, --region] must be supplied: Please specify location erhalten, führen Sie diesen Abschnitt aus.

  1. Führen Sie gcloud init aus und folgen Sie der Anleitung:

    gcloud init

    Wenn Sie SSH auf einem Remote-Server verwenden, können Sie mit dem Flag --console-only verhindern, dass mit dem Befehl ein Browserfenster geöffnet wird:

    gcloud init --console-only
  2. Folgen Sie der Anleitung, um gcloud zur Verwendung Ihres Google Cloud-Kontos zu autorisieren.
  3. Erstellen Sie eine neue Konfiguration oder wählen Sie eine vorhandene aus.
  4. Wählen Sie ein Google Cloud-Projekt aus.
  5. Wählen Sie eine Compute Engine-Standardzone aus.

gcloud config verwenden

  • Legen Sie Ihre standardmäßige Projekt-ID fest:
    gcloud config set project project-id
  • Wenn Sie mit zonalen Clustern arbeiten, legen Sie die Compute-Standardzone fest:
    gcloud config set compute/zone compute-zone
  • Wenn Sie mit regionalen Clustern arbeiten, legen Sie die Standardregion für Compute Engine fest:
    gcloud config set compute/region compute-region
  • Aktualisieren Sie gcloud auf die neueste Version:
    gcloud components update

In der Betaphase unterstützt Batch on GKE (Batch) nur regionale Cluster. Erstellen Sie einen regionalen Cluster und aktivieren Sie Workload Identity.

Führen Sie den folgenden Befehl aus, um einen Cluster zu erstellen, der mit Batch on GKE kompatibel ist:

gcloud container clusters create cluster-name \
  --region compute-region \
  --node-locations compute-zone \
  --num-nodes 1 \
  --machine-type n1-standard-8 \
  --release-channel regular \
  --enable-stackdriver-kubernetes \
  --identity-namespace=project-id.svc.id.goog \
  --enable-ip-alias

Identitäts- und Zugriffsverwaltung konfigurieren

  1. So binden Sie Ihr Konto als Projektinhaber:

    gcloud projects add-iam-policy-binding project-id \
      --member user:email --role=roles/owner
    

    Dabei gilt:

    • project-id ist die Projekt-ID.
    • email ist die E-Mail-Adresse Ihres Kontos.
  2. Erstellen Sie eine benutzerdefinierte Rolle mit Leseberechtigungen für GKE-Cluster:

    gcloud iam roles create BatchUser --project project-id \
      --title GKEClusterReader --permissions container.clusters.get --stage BETA 2>&1
    

    Dabei gilt:

    • project-id ist die Projekt-ID.
    • GKEClusterReader ist der Titel der Rolle.
  3. Erstellen Sie ClusterRoleBinding im Cluster, damit Batch Kubernetes-Rollen anlegen kann:

    kubectl create clusterrolebinding cluster-admin-binding-email \
      --clusterrole=cluster-admin --user email
    

    Dabei ist email die E-Mail-Adresse Ihres Kontos.

  4. Erstellen Sie ein Google-Dienstkonto:

    gcloud iam service-accounts create kbatch-controllers-gcloud-sa \
      --display-name kbatch-controllers-gcloud-service-account
    
  5. Erstellen Sie ein Kubernetes-Dienstkonto:

    kubectl create serviceaccount --namespace kube-system kbatch-controllers-k8s-sa
    
  6. Fügen Sie die folgenden Richtlinienbindungen für die Identitäts- und Zugriffsverwaltung (IAM) hinzu, wobei project-id Ihre Projekt-ID ist:

    gcloud projects add-iam-policy-binding project-id \
      --member serviceAccount:kbatch-controllers-gcloud-sa@project-id.iam.gserviceaccount.com \
      --role=roles/container.clusterAdmin
    
    gcloud projects add-iam-policy-binding project-id \
      --member serviceAccount:kbatch-controllers-gcloud-sa@project-id.iam.gserviceaccount.com \
      --role=roles/compute.admin
    
    gcloud projects add-iam-policy-binding project-id \
      --member serviceAccount:kbatch-controllers-gcloud-sa@project-id.iam.gserviceaccount.com \
      --role=roles/iam.serviceAccountUser
    
    gcloud iam service-accounts add-iam-policy-binding \
      --role roles/iam.workloadIdentityUser \
      --member "serviceAccount:project-id.svc.id.goog[kube-system/kbatch-controllers-k8s-sa]" kbatch-controllers-gcloud-sa@project-id.iam.gserviceaccount.com
    
  7. Fügen Sie dem Kubernetes-Dienstkonto die Annotation iam.gke.io/gcp-service-account hinzu:

    kubectl annotate serviceaccount --namespace kube-system kbatch-controllers-k8s-sa \
       iam.gke.io/gcp-service-account=kbatch-controllers-gcloud-sa@project-id.iam.gserviceaccount.com
    

GPUs aktivieren

Wenn Sie GPU-Jobs ausführen möchten, müssen Sie die NVIDIA-Gerätetreiber auf den Knoten installieren. Google bietet ein DaemonSet, das die Treiber automatisch für Sie installiert, wenn Knoten im Cluster erstellt werden.

Eine Installationsanleitung finden Sie im Abschnitt NVIDIA-GPU-Gerätetreiber installieren.

Batch on GKE installieren

Führen Sie zur Installation von Batch die folgenden Schritte aus:

  1. Laden Sie die Batch-Version von GitHub herunter.

  2. Extrahieren Sie die TAR-Datei:

    tar zxvf kbatch-version.tar.gz
    
  3. Wechseln Sie in das kbatch-Verzeichnis:

    cd kbatch_dist
    
  4. Fügen Sie Ihre Informationen der Konfigurationsdatei hinzu:

    vi config/kbatch-config.yaml
    
    ...
    ClusterName: cluster-name
     ClusterLocation : compute-region
     ProjectID: project-id
     Recommender:
       Locations:
       # Note: Only one zone is supported in the Locations list here.
       - compute-zone
    Actuator:
    ...
    
  5. Erstellen Sie configmaps:

    kubectl create configmap --from-file config/kbatch-config.yaml -n kube-system kbatch-config
    
  6. Installieren Sie die benutzerdefinierten Batch-Ressourcendefinitionen und -Komponenten:

    kubectl apply -f install/
    

Batch-Installation prüfen

  1. Prüfen Sie, ob die kbatch-admission-Pods ausgeführt werden:

    kubectl get pods -n kube-system --selector=app=kbatch-admission
    

    Die Ausgabe sieht dann ungefähr so aus:

    NAME                                READY   STATUS    RESTARTS   AGE
    kbatch-admission-799b776795-xxvmh   1/1     Running   0          1m
    
  2. Prüfen Sie, ob die kbatch-controllers-Pods ausgeführt werden:

    kubectl get pods -n kube-system --selector=control-plane=kbatch-controllers
    

    Die Ausgabe sieht dann ungefähr so aus:

    NAME                   READY   STATUS    RESTARTS   AGE
    kbatch-controllers-0   1/1     Running   0          1m
    
  3. Sobald Sie die Batch-Installation geprüft haben, führen Sie die Beispieljobs aus.

Batch on GKE-Versionen verwalten

Sie können für Batch Upgrades sowie Downgrades ausführen und es deinstallieren.

Batch-Upgrade ausführen

Mit den im Folgenden aufgeführten Befehlen können Sie ein Upgrade auf eine neue Neben- oder Patchversion ausführen.

  1. Löschen Sie die aktuellen YAML-Dateien für Admission und Controller:

    kubectl delete -f kbatch-current-version/install/02-admission.yaml \
    kubectl delete -f kbatch-current-version/install/03-controllers.yaml
    
  2. Wenden Sie die neuen YAML-Dateien für Admission und Controller an:

    kubectl apply -f kbatch-new-version/install/02-admission.yaml \
    kubectl apply -f kbatch-new-version/install/03-controllers.yaml
    

Installieren Sie für ein Upgrade auf eine neue Hauptversion die neue Version in einem neuen Cluster. Alternativ können Sie auch die Schritte unter Batch deinstallieren ausführen und dann die neue Hauptversion installieren.

Batch-Downgrade ausführen

Ein Rollback ist nur zur vorherigen Neben- oder Patchversion möglich.

Mit den folgenden Befehlen können Sie ein Rollback zu einer vorherigen Version ausführen:

  1. Löschen Sie die aktuellen YAML-Dateien für Admission und Controller:

    kubectl delete -f kbatch-current-version/install/02-admission.yaml \
    kubectl delete -f kbatch-current-version/install/03-controllers.yaml
    
  2. Wenden Sie die neuen YAML-Dateien für Admission und Controller an:

    kubectl apply -f kbatch-old-version/install/02-admission.yaml \
    kubectl apply -f kbatch-old-version/install/03-controllers.yaml
    

Batch deinstallieren

Mit den folgenden Schritten können Sie Batch deinstallieren:

  1. Prüfen Sie anhand der Image-Tags, welche Version von Batch Sie ausführen:

    kubectl get deployment kbatch-admission -n kube-system -o jsonpath="{..image}"
    kubectl get statefulset kbatch-controllers -n kube-system -o jsonpath="{..image}"
    
  2. Löschen Sie das Installationspaket aus dem Cluster:

    kubectl delete -f kbatch-version/install/
    

Fehler in Batch on GKE mit Stackdriver beheben

Batch verwendet Prometheus als Monitoringtool. Die kbatch-controller-service-Messwerte können in Stackdriver Monitoring eingesehen werden. Beachten Sie, dass die von Batch-Diensten erstellte Messwerte in Stackdriver als externe Messwerte behandelt werden.

Benutzerdefinierte Messwerte sind ein kostenpflichtiges Feature von Stackdriver Monitoring. Weitere Informationen zu Preisen finden Sie im Preisüberblick für Stackdriver.

Vorbereitung

Identitäts- und Zugriffsverwaltung konfigurieren

  1. Erstellen Sie ein Google-Dienstkonto:

    gcloud iam service-accounts create kbatch-monitoring-gcloud-sa \
      --display-name kbatch-monitoring-gcloud-service-account
    
  2. Erstellen Sie ein Kubernetes-Dienstkonto:

    kubectl create serviceaccount --namespace kube-system kbatch-monitoring-k8s-sa
    
  3. Fügen Sie die folgenden IAM-Richtlinienbindungen hinzu, wobei project-id Ihre Projekt-ID ist:

    gcloud projects add-iam-policy-binding project-id \
      --member serviceAccount:kbatch-monitoring-gcloud-sa@project-id.iam.gserviceaccount.com \
      --role=roles/monitoring.metricWriter
    
    gcloud projects add-iam-policy-binding project-id \
      --member serviceAccount:kbatch-monitoring-gcloud-sa@project-id.iam.gserviceaccount.com \
      --role=roles/monitoring.viewer
    
    gcloud iam service-accounts add-iam-policy-binding \
      --role roles/iam.workloadIdentityUser \
      --member "serviceAccount:project-id.svc.id.goog[kube-system/kbatch-monitoring-k8s-sa]" kbatch-monitoring-gcloud-sa@project-id.iam.gserviceaccount.com
    
  4. Fügen Sie dem Kubernetes-Dienstkonto die Anmerkung "iam.gke.io/gcp-service-account" hinzu:

    kubectl annotate serviceaccount --namespace kube-system kbatch-monitoring-k8s-sa \
       iam.gke.io/gcp-service-account=kbatch-monitoring-gcloud-sa@project-id.iam.gserviceaccount.com
    
  5. Rufen Sie die Verwaltungstools ab:

    git clone https://github.com/GoogleCloudPlatform/Kbatch.git
    
  6. Gehen Sie zum Monitoring-Verzeichnis:

    cd admintools/monitoring
    

Prometheus-Dienst bereitstellen

  1. Zum Bereitstellen des Prometheus-Dienstes führen Sie folgenden Befehl aus:

    kubectl apply -f prometheus.yaml
    
  2. Zum Validieren des Prometheus-Dienstes führen Sie folgenden Befehl aus:

    kubectl get pod -n kube-system | grep 'kbatch-prometheus'
    

    Die Ausgabe sieht in etwa so aus:

    kbatch-prometheus-deployment-97bc6b97b-m4q9h       1/1     Running   0          9s
    

Stackdriver-Collector installieren

Stellen Sie als Nächstes den Sidecar-Container als Stackdriver-Collector bereit. Sidecar exportiert die Prometheus-Messwerte nach Stackdriver.

  1. Zur Bereitstellung des Stackdriver-Collectors führen Sie den folgenden Befehl aus:

    sh ./setup_metrics_export_to_sd.sh
    
  2. Zur Validierung der Installation des Stackdriver-Collectors führen Sie den folgenden Befehl aus:

    kubectl -n kube-system get deployment kbatch-prometheus-deployment -o=go-template='{{$output := "stackdriver-prometheus-sidecar does not exists."}}{{range .spec.template.spec.containers}}{{if eq .name "sidecar"}}{{$output = (print "sidecar exists. Image: " .image)}}{{end}}{{end}}{{printf $output}}{{"\n"}}'
    

    Wenn die Prometheus-Sidecar-Datei erfolgreich installiert wurde, enthält die Ausgabe des Skripts das Image, das aus Container Registry verwendet wurde.

    sidecar exists. Image: gcr.io/kbatch-images/stackdriver-prometheus-sidecar:0.6.1
    

    Andernfalls zeigt die Ausgabe des Skripts Folgendes:

    stackdriver-prometheus-sidecar does not exist.
    

Messwerte aufrufen

  1. Zum Metrics Explorer

    Zum Metrics Explorer

  2. Rufen Sie Ressourcen > Metrics Explorer auf.

  3. Wählen Sie im Feld Ressourcentyp und Messwert finden den Wert mit dem Präfix external/prometheus/ aus.

    Sie können beispielsweise external/prometheus/kbatch_scheduling_dep auswählen.

    Sie können einem Arbeitsbereich mehrere Messwerte hinzufügen.

Stackdriver-Collector deaktivieren

Führen Sie zum Deaktivieren des Sidecar-Containers den folgenden Befehl aus dem kbatch-Verzeichnis aus.

sh ./disable_metrics_export_to_sd.sh

Bereinigen

Führen Sie die folgenden Befehle aus. um die Ausführung von Batch-Diensten in einem GKE-Cluster zu beenden:

kubectl delete deployment kbatch-admission --namespace=kube-system
kubectl delete statefulset kbatch-controllers --namespace=kube-system

Führen Sie den folgenden Befehl aus, um den GKE-Cluster zu löschen, in dem Batch installiert ist:

gcloud container clusters delete cluster-name --region compute-region

Führen Sie den folgenden Befehl aus, um die Filestore-Instanz zu löschen:

gcloud beta filestore instances delete filestore-instance-id \
  --project=project-id --location=filestore-zone

Dabei gilt:

  • filestore-instance-id ist die Filestore-Instanz-ID.
  • project-id ist die Projekt-ID.
  • filestore-zone ist die Zone.

Führen Sie den folgenden Befehl aus, um das Projekt zu löschen, in dem Batch installiert ist:

gcloud projects delete project-id

Nächste Schritte