Erste Schritte mitAWS 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 mitAWS Batch auf Amazon EKS

AWS Batchauf Amazon EKS ist ein verwalteter Service für die Planung und Skalierung von Batch-Workloads in bestehende EKS-Cluster. AWS Batcherstellt, verwaltet oder führt keine Lebenszyklusoperationen Ihrer EKS-Cluster in Ihrem Namen durch. AWS BatchDie Orchestrierung skaliert Knoten, die von diesen Knoten verwaltet werden, nach obenAWS Batch und unten und führt Pods auf diesen Knoten aus.

AWS Batchberührt keine Knoten, Autoscaling-Knotengruppen oder Pod-Lebenszyklen, die nicht mitAWS Batch Computerumgebungen in Ihrem EKS-Cluster verknüpft sind. FürAWS Batch einen effektiven Betrieb sind für die servicegebundene Rolle RBAC-Berechtigungen (RBAC) in Ihrem vorhandenen EKS-Cluster erforderlich.Kubernetes Weitere Informationen finden Sie unter Verwenden der RBAC-Autorisierung in der KubernetesDokumentation.

AWS Batchbenötigt einenKubernetes Namespace, in den Pods alsAWS Batch Jobs eingegeben werden können. Wir empfehlen einen dedizierten Namespace, um dieAWS Batch Pods von Ihren anderen Cluster-Workloads zu isolieren.

NachdemAWS Batch Sie RBAC-Zugriff erhalten und ein Namespace eingerichtet wurde, können Sie diesen EKS-Cluster mithilfe der CreateComputeEnvironmentAPI-Operation einerAWS Batch Rechenumgebung zuordnen. Dieser neuen EKS-Rechenumgebung kann eine Auftragswarteschlange zugeordnet werden. AWS BatchJobs werden auf der Grundlage einer EKS-Jobdefinition mithilfe der SubmitJobAPI-Operation an die Job-Warteschlange gesendet. AWS Batchstartet dannAWS Batch verwaltete Knoten und platziert Jobs aus der Auftragswarteschlange alsKubernetes Pods in den EKS-Cluster, der einerAWS Batch Rechenumgebung zugeordnet ist.

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

Voraussetzungen

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

  • AWS CLI – Ein Befehlszeilen-Tool für die Arbeit mit AWS-Services, einschließlich Amazon EKS. Dieses Handbuch erfordert, dass Sie Version 2.8.6 oder höher oder 1.26.0 oder höher verwenden. Weitere Informationen finden Sie unter Installieren, Aktualisieren und Deinstallieren von AWS CLI im AWS Command Line Interface-Benutzerhandbuch. Nach der Installation des AWS CLI empfehlen wir, es auch zu konfigurieren. Weitere Informationen finden Sie unter Schnellkonfiguration mit aws configure im AWS Command Line Interface-Benutzerhandbuch.

  • kubectl – Ein Befehlszeilentool für die Arbeit mit Kubernetes-Clustern. Dieses Handbuch erfordert, dass Sie Version 1.23 oder höher verwenden. Weitere Informationen finden Sie unter Installation oder Aktualisierungkubectl im Amazon EKS-Benutzerhandbuch.

  • eksctl – Ein Befehlszeilen-Tool für die Arbeit mit EKS-Clustern, das viele einzelne Aufgaben automatisiert. Dieses Handbuch erfordert, dass Sie Version 0.115.0 oder höher verwenden. Weitere Informationen finden Sie unter Installation oder Aktualisierungeksctl im Amazon EKS-Benutzerhandbuch.

  • Erforderliche IAM-Berechtigungen – Der von Ihnen verwendete IAM-Sicherheitsprinzipal muss über Berechtigungen zum Arbeiten mit Amazon EKS-IAM-Rollen und serviceverknüpften Rollen, AWS CloudFormation, sowie einer VPC und zugehörigen Ressourcen verfügen. Weitere Informationen finden Sie unter Aktionen, Ressourcen und Bedingungsschlüssel für Amazon Elastic Kubernetes Service und Verwenden von serviceverknüpften Rollen im IAM-Benutzerhandbuch. Sie müssen alle Schritte in diesem Handbuch als derselbe Benutzer ausführen.

  • Einen EKS-Cluster erstellen — Weitere Informationen finden Sie unter Erste Schritte mit Amazon EKS —eksctl im Amazon EKS-Benutzerhandbuch.

    Anmerkung

    AWS Batchunterstützt nur EKS-Cluster mit API-Serverendpunkten, die öffentlichen Zugriff haben und über das öffentliche Internet zugänglich sind. Standardmäßig haben EKS-Cluster-API-Serverendpunkte öffentlichen Zugriff. Weitere Informationen finden Sie unter Amazon-EKS-Cluster-Endpunkt-Zugriffskontrolle im Amazon EKS-Benutzerhandbuch.

    Anmerkung

    AWS Batchbietet keine Managed-Node-Orchestrierung für CoreDNS oder andere Bereitstellungs-Pods. Wenn Sie CoreDNS benötigen, finden Sie weitere Informationen unter Hinzufügen des CoreDNS Amazon EKS Add-Ons im Amazon EKS-Benutzerhandbuch. Oder verwenden Sie es,eksctl create cluster create um den Cluster zu erstellen, er enthält standardmäßig CoreDNS.

  • Berechtigungen — Benutzer, die den CreateComputeEnvironmentAPI-Vorgang aufrufen, um eine Rechenumgebung zu erstellen, die EKS-Ressourcen verwendet, benötigen Berechtigungen für deneks:DescribeCluster API-Vorgang. AWS Management ConsoleUm eine Rechenressource unter Verwendung von EKS-Ressourcen zu erstellen, sind Berechtigungen füreks:DescribeCluster sowohl als auch erforderlicheks:ListClusters.

Schritt 1: Vorbereiten Ihres EKS-Clusters fürAWS Batch

Alle erforderlichen Schritte.

  1. Einen eigenen Namespace fürAWS Batch Jobs erstellen

    Verwendenkubectl, 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 namespace/my-aws-batch-namespace created
  2. Aktivieren des Zugriffs über rollenbasierte Zugriffskontrolle (RBAC)

    Wird verwendetkubectl, um eineKubernetes Rolle für den Cluster zu erstellen, damitAWS Batch Knoten und Pods überwacht und die Rolle gebunden werden können. 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: ["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 clusterrole.rbac.authorization.k8s.io/aws-batch-cluster-role created clusterrolebinding.rbac.authorization.k8s.io/aws-batch-cluster-role-binding created

    Erstellen Sie eineKubernetes Rolle mit Namespace-Geltungsbereich fürAWS Batch die Verwaltung und den Lebenszyklus von Pods und 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 role.rbac.authorization.k8s.io/aws-batch-compute-environment-role created rolebinding.rbac.authorization.k8s.io/aws-batch-compute-environment-role-binding created

    Aktualisieren SieKubernetesaws-auth die Konfigurationszuordnung, um die vorherigen RBAC-Berechtigungen derAWS Batch dienstverknüpften Rolle zuzuordnen.

    $ eksctl create iamidentitymapping \ --cluster my-cluster-name \ --arn "arn:aws:iam::<your-account>:role/AWSServiceRoleForBatch" \ --username aws-batch 2022-10-25 20:19:57 [ℹ] adding identity "arn:aws:iam::<your-account>:role/AWSServiceRoleForBatch" to auth ConfigMap
    Anmerkung

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

Schritt 2: Erstellen einer Amazon-EKS-Datenverarbeitungsumgebung

AWS BatchComputerumgebungen definieren Rechenressourcenparameter, um Ihre Batch-Workload-Anforderungen zu erfüllen. In einer verwalteten DatenverarbeitungsumgebungAWS Batch hilft Ihnen bei der Verwaltung der Kapazität und Instance-Typen der Datenverarbeitungsressourcen (KubernetesKnoten) innerhalb Ihres Amazon-EKS-Clusters. Dies basiert auf der Spezifikation für Datenverarbeitungsressourcen, die Sie beim Erstellen der Datenverarbeitungsumgebung angeben. Sie können EC2 On-Demand-Instances oder EC2 Spot-Instances verwenden.

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

$ cat <<EOF > ./batch-eks-compute-environment.json { "computeEnvironmentName": "My-Eks-CE1", "type": "MANAGED", "state": "ENABLED", "eksConfiguration": { "eksClusterArn": "arn:aws:eks:<region>:123456789012:cluster/<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
  • DerserviceRole Parameter sollte nicht angegeben werden, dann wird dieAWS Batch serviceverknüpfte Rolle verwendet. AWS Batchauf Amazon unterstützt EKS nur dieAWS Batch serviceverknüpfte Rolle.

  • NurBEST_FIT_PROGRESSIVESPOT_CAPACITY_OPTIMIZED Allokationsstrategien werden für EKS-Rechenumgebungen unterstützt.

  • Weitere Informationen finden Sie unter Erstellen der IAM-Rolle für Amazon EKS-Knoten im Amazon EKS-Benutzerhandbuch.instanceRole Wenn Sie Pod-Netzwerke verwenden, finden Sie im Amazon EKS-Benutzerhandbuch weitere Informationen unter Konfiguration des Amazon VPCKubernetes CNI-Plug-ins für die Verwendung von IAM-Rollen für Servicekonten.

  • Eine Möglichkeit, funktionierende Subnetze für densubnets Parameter zu erhalten, besteht darin, die öffentlichen Subnetze der von Amazon EKS verwalteten Knotengruppen zu verwenden, die voneksctl bei der Erstellung eines Amazon EKS-Clusters erstellt wurden. Verwenden Sie andernfalls Subnetze mit einem Netzwerkpfad, der das Abrufen von Bildern unterstützt.

  • DersecurityGroupIds Parameter kann die Sicherheitsgruppe verwenden wie der Amazon EKS-Cluster. Mit diesem Befehl wird die Sicherheitsgruppen-ID für den Cluster abgerufen.

    $ aws eks describe-cluster \ --name <cluster-name> \ --query cluster.resourcesVpcConfig.clusterSecurityGroupId
  • Die Wartung einer EKS-Rechenumgebung ist eine gemeinsame Verantwortung. Weitere Informationen finden Sie unter Geteilte Verantwortung derKubernetes Knoten.

Wichtig

Bevor Sie fortfahren, müssen Sie sich vergewissern, dass die Computerumgebung einwandfrei ist. Die DescribeComputeEnvironmentsAPI-Operation kann dazu verwendet werden.

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

Vergewissern Sie sich, dass derstatus Parameter nicht der Fall istINVALID. Wenn ja, schauen Sie sich denstatusReason Parameter für die Ursache an. Weitere Informationen finden Sie unter Fehlerbehebung für AWS Batch.

Schritt 3: Erstellen einer Auftragswarteschlange und Hinzufügen der Datenverarbeitungsumgebung

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

Jobs, die an diese neue Auftragswarteschlange gesendet werden, werden als Pods aufAWS 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 4: Erstellen einer Jobdefinition

$ 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" } } } ] } } } EOF $ aws batch register-job-definition --cli-input-json file://./batch-eks-job-definition.json
Hinweise

Schritt 5: Erstellen eines Auftrags

$ aws batch submit-job --job-queue My-Eks-JQ1 \ --job-definition MyJobOnEks_Sleep --job-name My-Eks-Job1 $ aws batch describe-jobs --job <jobId-from-submit-response>
Hinweise

(Optional) Einen Job mit Overrides einreichen

Dieser Job überschreibt den Befehl, der an den Container übergeben wird.

$ 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