View a markdown version of this page

Erste Schritte mit AWS Batch auf Amazon EKS - AWS Batch

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Erste Schritte mit AWS Batch auf Amazon EKS

AWS Batch on Amazon EKS ist ein verwalteter Service für die Planung und Skalierung von Batch-Workloads in bestehenden Amazon EKS-Clustern. AWS Batch erstellt, verwaltet oder führt keine Lebenszyklusoperationen Ihrer Amazon EKS-Cluster in Ihrem Namen durch. AWS Batch Orchestration skaliert Knoten, die von diesen Knoten verwaltet werden, nach oben und unten AWS Batch und führt Pods auf diesen Knoten aus.

AWS Batch berührt keine Knoten, Autoscaling-Knotengruppen oder Pod-Lebenszyklen, die nicht mit AWS Batch Rechenumgebungen in Ihrem Amazon EKS-Cluster verknüpft sind. Für AWS Batch einen effektiven Betrieb benötigt die serviceverknüpfte Rolle Kubernetes rollenbasierte Zugriffskontrollberechtigungen (RBAC) in Ihrem vorhandenen Amazon EKS-Cluster. Weitere Informationen finden Sie in der Dokumentation unter Verwenden der RBAC-Autorisierung. Kubernetes

AWS Batch benötigt einen Kubernetes Namespace, in dem Pods als AWS Batch Jobs definiert werden können. Wir empfehlen einen dedizierten Namespace, um die AWS Batch Pods von Ihren anderen Cluster-Workloads zu isolieren.

Nachdem AWS Batch Sie RBAC-Zugriff erhalten und ein Namespace eingerichtet wurde, können Sie diesen Amazon EKS-Cluster mithilfe der API-Operation einer AWS Batch Rechenumgebung zuordnen. CreateComputeEnvironment Dieser neuen Amazon EKS-Rechenumgebung kann eine Auftragswarteschlange zugeordnet werden. AWS Batch Jobs werden auf der Grundlage einer Amazon EKS-Auftragsdefinition mithilfe des SubmitJob API-Vorgangs an die Job-Warteschlange übermittelt. AWS Batch startet dann AWS Batch verwaltete Knoten und platziert Jobs aus der Auftragswarteschlange als Kubernetes Pods in den EKS-Cluster, der einer AWS Batch Rechenumgebung zugeordnet ist.

In den folgenden Abschnitten wird beschrieben, wie Sie AWS Batch Amazon EKS einrichten.

-Übersicht

Dieses Tutorial zeigt, wie Sie Amazon EKS mithilfe von AWS CLI, kubectl und einrichten AWS Batch eksctl.

Beabsichtigte Zielgruppe

Dieses Tutorial richtet sich an Systemadministratoren und Entwickler, die für die Einrichtung, das Testen und die Bereitstellung verantwortlich sind AWS Batch.

Verwendete Funktionen

Dieses Tutorial zeigt Ihnen, wie Sie das verwenden AWS CLI, um:

  • Erstellen und konfigurieren Sie eine Amazon EKS-Rechenumgebung

  • Erstellen Sie eine Job-Warteschlange.

  • Erstellen Sie eine Auftragsdefinition

  • Erstellen Sie einen Job zur Ausführung und senden Sie ihn ab

  • Reichen Sie einen Job mit Überschreibungen ein

Erforderliche Zeit

Die Fertigstellung dieses Tutorials sollte etwa 30—40 Minuten dauern.

Regionale Einschränkungen

Mit der Verwendung dieser Lösung sind keine länder- oder regionalen Einschränkungen verbunden.

Kosten für die Nutzung der Ressourcen

Für die Erstellung eines AWS Kontos fallen keine Gebühren an. Durch die Implementierung dieser Lösung können Ihnen jedoch einige oder alle Kosten entstehen, die in der folgenden Tabelle aufgeführt sind.

Description Kosten (US-Dollar)
Ihnen wird die Cluster-Stunde in Rechnung gestellt Variiert je nach Instance, siehe Amazon EKS-Preise

Voraussetzungen

Bevor Sie mit diesem Tutorial beginnen, müssen Sie die folgenden Tools und Ressourcen installieren und konfigurieren, die Sie zum Erstellen und Verwalten von AWS Batch Amazon EKS-Ressourcen benötigen.

Schritt 1: Erstellen Sie Ihren Amazon EKS-Cluster für AWS Batch

Wichtig

Um so einfach und schnell wie möglich loszulegen, enthält dieses Tutorial Schritte mit Standardeinstellungen. Wir empfehlen Ihnen, sich vor der Erstellung für die Produktion mit allen Einstellungen vertraut zu machen und die Bereitstellung mit den Einstellungen vorzunehmen, die Ihren Anforderungen entsprechen.

Sobald Sie die Voraussetzungen installiert haben, mit denen Sie Ihren Cluster erstellen müsseneksctl. Das Erstellen des Clusters kann zwischen 10 und 15 Minuten dauern.

$ eksctl create cluster --name my-cluster-name --region region-code

Ersetzen Sie im vorherigen Befehl:

  • my-cluster-nameErsetzen Sie durch den Namen, den Sie für Ihren Cluster verwenden möchten.

  • region-codeErsetzen Sie beispielsweise durch AWS-Region den, in dem der Cluster erstellt werden sollus-west-2.

Der Clustername und die Region werden für später in diesem Tutorial benötigt.

Schritt 2: Bereiten Sie Ihren Amazon EKS-Cluster vor für AWS Batch

Alle Schritte sind erforderlich.

  1. Erstellen Sie einen dedizierten Namespace für AWS Batch jobs

    Wird verwendetkubectl, um einen neuen Namespace zu erstellen.

    $ namespace=my-aws-batch-namespace
    $ cat - <<EOF | kubectl create -f - { "apiVersion": "v1", "kind": "Namespace", "metadata": { "name": "${namespace}", "labels": { "name": "${namespace}" } } } EOF

    Ausgabe:

    namespace/my-aws-batch-namespace created
  2. Aktivieren Sie den Zugriff über die rollenbasierte Zugriffskontrolle (RBAC)

    Wird verwendetkubectl, um eine Kubernetes Rolle für den Cluster zu erstellen, mit der Knoten und Pods überwacht werden können AWS Batch , und um die Rolle zu binden. Sie müssen dies einmal für jeden EKS-Cluster tun.

    $ cat - <<EOF | kubectl apply -f - apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: aws-batch-cluster-role rules: - apiGroups: [""] resources: ["namespaces"] verbs: ["get"] - apiGroups: [""] resources: ["nodes"] verbs: ["get", "list", "watch"] - apiGroups: [""] resources: ["pods"] verbs: ["get", "list", "watch"] - apiGroups: [""] resources: ["events"] verbs: ["list"] - apiGroups: [""] resources: ["configmaps"] verbs: ["get", "list", "watch"] - apiGroups: ["apps"] resources: ["daemonsets", "deployments", "statefulsets", "replicasets"] verbs: ["get", "list", "watch"] - apiGroups: ["rbac.authorization.k8s.io"] resources: ["clusterroles", "clusterrolebindings"] verbs: ["get", "list"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: aws-batch-cluster-role-binding subjects: - kind: User name: aws-batch apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: aws-batch-cluster-role apiGroup: rbac.authorization.k8s.io EOF

    Ausgabe:

    clusterrole.rbac.authorization.k8s.io/aws-batch-cluster-role created clusterrolebinding.rbac.authorization.k8s.io/aws-batch-cluster-role-binding created
  3. Erstellen Sie eine Namespace-spezifische Kubernetes Rolle für die Verwaltung und den Lebenszyklus von Pods und AWS Batch binden Sie sie. Sie müssen dies einmal für jeden eindeutigen Namespace tun.

    $ namespace=my-aws-batch-namespace
    $ cat - <<EOF | kubectl apply -f - --namespace "${namespace}" apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: aws-batch-compute-environment-role namespace: ${namespace} rules: - apiGroups: [""] resources: ["pods"] verbs: ["create", "get", "list", "watch", "delete", "patch"] - apiGroups: [""] resources: ["serviceaccounts"] verbs: ["get", "list"] - apiGroups: ["rbac.authorization.k8s.io"] resources: ["roles", "rolebindings"] verbs: ["get", "list"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: aws-batch-compute-environment-role-binding namespace: ${namespace} subjects: - kind: User name: aws-batch apiGroup: rbac.authorization.k8s.io roleRef: kind: Role name: aws-batch-compute-environment-role apiGroup: rbac.authorization.k8s.io EOF

    Ausgabe:

    role.rbac.authorization.k8s.io/aws-batch-compute-environment-role created rolebinding.rbac.authorization.k8s.io/aws-batch-compute-environment-role-binding created
  4. Aktualisieren Sie Kubernetes aws-auth die Konfigurationsübersicht, um die vorherigen RBAC-Berechtigungen der dienstverknüpften Rolle zuzuordnen. AWS Batch

    Ersetzen Sie im folgenden Befehl:

    • Ersetze es <your-account-number> durch deine AWS-Konto Nummer.

    $ eksctl create iamidentitymapping \ --cluster my-cluster-name \ --arn "arn:aws:iam::<your-account-number>:role/AWSServiceRoleForBatch" \ --username aws-batch

    Ausgabe:

    2022-10-25 20:19:57 [ℹ] adding identity "arn:aws:iam::<your-account-number>:role/AWSServiceRoleForBatch" to auth ConfigMap
    Anmerkung

    Der Pfad aws-service-role/batch.amazonaws.com/ wurde aus dem ARN der serviceverknüpften Rolle entfernt. Dies liegt an einem Problem mit der aws-auth Konfigurationstabelle. Weitere Informationen finden Sie unter Rollen mit Pfaden funktionieren nicht, wenn der Pfad in ihrem ARN in der enthalten ist aws-authconfigmap.

    Wichtig

    Sobald ein AWS Batch Eintrag für den verwalteten Zugriff für die AWS Batch service-verknüpfte Rolle im Cluster (accessEntry.status=ACTIVE) erstellt wurde, hat er Vorrang vor der aws-auth ConfigMap Konfiguration für die Rolle. Die ConfigMap Einträge für die AWS Batch dienstverknüpfte Rolle werden nicht verwendet. Die AWS Batch Authentifizierung erfolgt stattdessen mithilfe des Zugriffseintrags. Weitere Informationen zu Zugriffseinträgen finden Sie unter Authentifizierung bei Amazon EKS-Zugangseinträgen.

Schritt 3: Erstellen Sie eine Amazon EKS-Rechenumgebung

AWS Batch Rechenumgebungen definieren Rechenressourcenparameter, um Ihre Batch-Workload-Anforderungen zu erfüllen. In einer verwalteten Rechenumgebung AWS Batch hilft es Ihnen bei der Verwaltung der Kapazität und der Instanztypen der Rechenressourcen (KubernetesKnoten) in Ihrem Amazon EKS-Cluster. Dies basiert auf der Rechenressourcenspezifikation, die Sie bei der Erstellung der Rechenumgebung definieren. Sie können On-Demand EC2-Instances oder EC2-Spot-Instances verwenden.

Jetzt, da die AWSServiceRoleForBatch serviceverknüpfte Rolle Zugriff auf Ihren Amazon EKS-Cluster hat, können Sie Ressourcen erstellen. AWS Batch Erstellen Sie zunächst eine Rechenumgebung, die auf Ihren Amazon EKS-Cluster verweist.

  • Zum subnets Ausführeneksctl get cluster my-cluster-name, um die vom Cluster verwendeten Subnetze abzurufen.

  • Für den securityGroupIds Parameter können Sie dieselbe Sicherheitsgruppe wie für den Amazon EKS-Cluster verwenden. Mit diesem Befehl wird die Sicherheitsgruppen-ID für den Cluster abgerufen.

    $ aws eks describe-cluster \ --name my-cluster-name \ --query cluster.resourcesVpcConfig.clusterSecurityGroupId
  • Der instanceRole wird erstellt, wenn Sie den Cluster erstellen. Um die instanceRole Liste aller Entitäten zu finden, die die AmazonEKSWorkerNodePolicy Richtlinie verwenden:

    $ aws iam list-entities-for-policy --policy-arn arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy

    Der Name der Policy-Rolle enthält den Namen des Clusters, den Sie erstellt habeneksctl-my-cluster-name-nodegroup-example.

    Führen Sie den folgenden Befehl aus, um den instanceRole ARN zu finden:

    $ aws iam list-instance-profiles-for-role --role-name eksctl-my-cluster-name-nodegroup-example

    Ausgabe:

    INSTANCEPROFILES arn:aws:iam::<your-account-number>:instance-profile/eks-04cb2200-94b9-c297-8dbe-87f12example

    Weitere Informationen finden Sie unter Erstellen der Amazon EKS-Node-IAM-Rolle und Aktivieren des IAM-Prinzipalzugriffs auf Ihren Cluster im Amazon EKS-Benutzerhandbuch. Wenn Sie Pod-Netzwerke verwenden, finden Sie weitere Informationen unter Konfiguration des Amazon Kubernetes VPC-CNI-Plug-ins für die Verwendung von IAM-Rollen für Dienstkonten im Amazon EKS-Benutzerhandbuch.

$ cat <<EOF > ./batch-eks-compute-environment.json { "computeEnvironmentName": "My-Eks-CE1", "type": "MANAGED", "state": "ENABLED", "eksConfiguration": { "eksClusterArn": "arn:aws:eks:region-code:your-account-number:cluster/my-cluster-name", "kubernetesNamespace": "my-aws-batch-namespace" }, "computeResources": { "type": "EC2", "allocationStrategy": "BEST_FIT_PROGRESSIVE", "minvCpus": 0, "maxvCpus": 128, "instanceTypes": [ "m5" ], "subnets": [ "<eks-cluster-subnets-with-access-to-internet-for-image-pull>" ], "securityGroupIds": [ "<eks-cluster-sg>" ], "instanceRole": "<eks-instance-profile>" } } EOF
$ aws batch create-compute-environment --cli-input-json file://./batch-eks-compute-environment.json
Hinweise

Schritt 4: Erstellen Sie eine Auftragswarteschlange und fügen Sie die Rechenumgebung hinzu

Wichtig

Bevor Sie fortfahren, müssen Sie sicherstellen, dass die Computerumgebung fehlerfrei ist. Dazu kann die DescribeComputeEnvironments API-Operation verwendet werden.

$ aws batch describe-compute-environments --compute-environments My-Eks-CE1

Bestätigen Sie, dass der status Parameter dies nicht istINVALID. Wenn ja, schauen Sie sich den statusReason Parameter für die Ursache an. Weitere Informationen finden Sie unter Fehlerbehebung AWS Batch.

Jobs, die an diese neue Auftragswarteschlange gesendet werden, werden als Pods auf AWS Batch verwalteten Knoten ausgeführt, die dem Amazon EKS-Cluster beigetreten sind, der Ihrer Rechenumgebung zugeordnet ist.

$ cat <<EOF > ./batch-eks-job-queue.json { "jobQueueName": "My-Eks-JQ1", "priority": 10, "computeEnvironmentOrder": [ { "order": 1, "computeEnvironment": "My-Eks-CE1" } ] } EOF
$ aws batch create-job-queue --cli-input-json file://./batch-eks-job-queue.json

Schritt 5: Erstellen Sie eine Jobdefinition

Die folgende Jobdefinition weist den Pod an, 60 Sekunden lang in den Ruhezustand zu versetzen.

$ cat <<EOF > ./batch-eks-job-definition.json { "jobDefinitionName": "MyJobOnEks_Sleep", "type": "container", "eksProperties": { "podProperties": { "hostNetwork": true, "containers": [ { "image": "public.ecr.aws/amazonlinux/amazonlinux:2", "command": [ "sleep", "60" ], "resources": { "limits": { "cpu": "1", "memory": "1024Mi" } } } ], "metadata": { "labels": { "environment": "test" } } } } } EOF
$ aws batch register-job-definition --cli-input-json file://./batch-eks-job-definition.json
Hinweise

Schritt 6: Einen Job einreichen

Führen Sie den folgenden AWS CLI Befehl aus, um einen neuen Job einzureichen.

$ aws batch submit-job --job-queue My-Eks-JQ1 \ --job-definition MyJobOnEks_Sleep --job-name My-Eks-Job1

Um den Status eines Jobs zu überprüfen:

$ aws batch describe-jobs --job <jobId-from-submit-response>
Hinweise
  • Weitere Informationen zur Ausführung von Aufträgen auf Amazon EKS-Ressourcen finden Sie unterAmazon EKS-Jobs.

Schritt 7: Sehen Sie sich die Ausgabe des Jobs an

Gehen Sie wie folgt vor, um die Ausgabe des Jobs anzuzeigen:

  1. Öffnen Sie die AWS Batch Konsole unter https://console.aws.amazon.com/batch/.

  2. Wählen Sie im Navigationsbereich Jobs aus.

  3. Wählen Sie in der Dropdownliste Job-Warteschlange die Job-Warteschlange aus, die Sie für das Tutorial erstellt haben.

  4. In der Job-Tabelle sind alle Ihre Jobs mit ihrem aktuellen Status aufgeführt. Sobald der Status des Jobs erfolgreich ist, wählen Sie den Namen des JobsMy-Eks-JQ1, um die Details des Jobs anzuzeigen.

  5. Im Detailbereich sollten die Zeitpunkte Gestartet um und Gestoppt um eine Minute voneinander entfernt sein.

Schritt 8: (Optional) Reichen Sie einen Job mit Überschreibungen ein

Dieser Job überschreibt den an den Container übergebenen Befehl. AWS Batch räumt die Pods nach Abschluss der Jobs aggressiv auf, um die Last auf Folgendes zu reduzieren. Kubernetes Um die Details eines Jobs überprüfen zu können, muss die Protokollierung konfiguriert werden. Weitere Informationen finden Sie unter Verwenden Sie CloudWatch Logs, um AWS Batch Amazon EKS-Jobs zu überwachen.

$ cat <<EOF > ./submit-job-override.json { "jobName": "EksWithOverrides", "jobQueue": "My-Eks-JQ1", "jobDefinition": "MyJobOnEks_Sleep", "eksPropertiesOverride": { "podProperties": { "containers": [ { "command": [ "/bin/sh" ], "args": [ "-c", "echo hello world" ] } ] } } } EOF
$ aws batch submit-job --cli-input-json file://./submit-job-override.json
Hinweise

Gehen Sie wie folgt vor, um die Ausgabe des Jobs anzuzeigen:

  1. Öffnen Sie die AWS Batch Konsole unter https://console.aws.amazon.com/batch/.

  2. Wählen Sie im Navigationsbereich Jobs aus.

  3. Wählen Sie in der Dropdownliste Job-Warteschlange die Job-Warteschlange aus, die Sie für das Tutorial erstellt haben.

  4. In der Job-Tabelle sind alle Ihre Jobs mit ihrem aktuellen Status aufgeführt. Sobald der Status des Jobs erfolgreich ist, wählen Sie den Namen des Jobs, um die Details des Jobs anzuzeigen.

  5. Wählen Sie im Detailbereich den Namen des Log-Streams aus. Die CloudWatch Konsole für den Job wird geöffnet und es sollte ein Ereignis mit der Meldung von hello world oder Ihrer benutzerdefinierten Nachricht geben.

Schritt 9: Bereinigen Sie Ihre Tutorial-Ressourcen

Die Amazon EC2-Instance wird Ihnen in Rechnung gestellt, solange sie aktiviert ist. Sie können die Instance löschen, um zu verhindern, dass Gebühren anfallen.

Gehen Sie wie folgt vor, um die von Ihnen erstellten Ressourcen zu löschen:

  1. Öffnen Sie die AWS Batch Konsole unter https://console.aws.amazon.com/batch/.

  2. Wählen Sie im Navigationsbereich Job-Warteschlange aus.

  3. Wählen Sie in der Tabelle Job-Queue die Job-Queue aus, die Sie für das Tutorial erstellt haben.

  4. Wählen Sie Disable (deaktivieren) aus. Sobald der Status der Job-Warteschlange deaktiviert ist, können Sie Löschen wählen.

  5. Sobald die Job-Warteschlange gelöscht ist, wählen Sie im Navigationsbereich Compute-Umgebungen aus.

  6. Wählen Sie die Rechenumgebung aus, die Sie für dieses Tutorial erstellt haben, und klicken Sie dann auf Deaktivieren. Es kann 1—2 Minuten dauern, bis die Deaktivierung der Computerumgebung abgeschlossen ist.

  7. Sobald der Status der Computerumgebung Deaktiviert ist, wählen Sie Löschen. Es kann 1—2 Minuten dauern, bis die Computerumgebung gelöscht ist.

Weitere Ressourcen

Nachdem Sie das Tutorial abgeschlossen haben, möchten Sie sich vielleicht mit den folgenden Themen befassen: