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
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.
Inhalt
- Voraussetzungen
- Schritt 1: Vorbereiten Ihres EKS-Clusters fürAWS Batch
- Schritt 2: Erstellen einer Amazon-EKS-Datenverarbeitungsumgebung
- Schritt 3: Erstellen einer Auftragswarteschlange und Hinzufügen der Datenverarbeitungsumgebung
- Schritt 4: Erstellen einer Jobdefinition
- Schritt 5: Erstellen eines Auftrags
- (Optional) Einen Job mit Overrides einreichen
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 Version1.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 Version0.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 den
eks: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.
-
Einen eigenen Namespace fürAWS Batch Jobs erstellen
Verwenden
kubectl
, 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
-
Aktivieren des Zugriffs über rollenbasierte Zugriffskontrolle (RBAC)
Wird verwendet
kubectl
, 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 EOFclusterrole.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 EOFrole.rbac.authorization.k8s.io/aws-batch-compute-environment-role created rolebinding.rbac.authorization.k8s.io/aws-batch-compute-environment-role-binding created
Aktualisieren SieKubernetes
aws-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" \ --usernameaws-batch
2022-10-25 20:19:57 [ℹ] adding identity "arn:aws:iam::
<your-account>
:role/AWSServiceRoleForBatch" to auth ConfigMapAnmerkung Der Pfad
aws-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
-
Der
serviceRole
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. -
Nur
BEST_FIT_PROGRESSIVE
SPOT_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 den
subnets
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. -
Der
securityGroupIds
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.
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
-
Es werden nur Einzelcontainer-Jobs unterstützt.
-
Für die
memory
Parametercpu
und gibt es Überlegungen. Weitere Informationen finden Sie unter Überlegungen zu Arbeitsspeicher und vCPU fürAWS Batch Amazon EKS.
Schritt 5: Erstellen eines Auftrags
$
aws batch submit-job --job-queue
My-Eks-JQ1
\ --job-definitionMyJobOnEks_Sleep
--job-nameMy-Eks-Job1
$
aws batch describe-jobs --job
<jobId-from-submit-response>
Hinweise
-
Es werden nur Einzelcontainer-Jobs unterstützt.
-
Stellen Sie sicher, dass Sie mit allen relevanten Überlegungen zu den
cpu
undmemory
-Parametern vertraut sind. Weitere Informationen finden Sie unter Überlegungen zu Arbeitsspeicher und vCPU fürAWS Batch Amazon EKS. -
Weitere Informationen zum Ausführen eines Auftrags auf EKS-Ressourcen finden Sie unterAmazon-EKS-Stellenangebote.
(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
-
AWS Batchreinigt die Pods aggressiv, nachdem die Jobs abgeschlossen sind, um die Last auf zu reduzierenKubernetes. Um die Details eines Jobs zu überprüfen, muss die Protokollierung konfiguriert werden. Weitere Informationen finden Sie unter Verwenden Sie CloudWatch Logs, umAWS Batch Amazon EKS-Jobs zu überwachen.
-
Um einen besseren Überblick über die Einzelheiten der Vorgänge zu erhalten, aktivieren Sie die Amazon EKS-Protokollierung auf Steuerebene. Weitere Informationen finden Sie unter Logging auf Amazon EKS-Kontrollebene im Amazon EKS-Benutzerhandbuch.
-
Daemonsetsundkubelets Overhead wirken sich auf die verfügbaren vCPU- und Speicherressourcen aus, insbesondere auf Skalierung und Stellenvermittlung. Weitere Informationen finden Sie unter Überlegungen zu Arbeitsspeicher und vCPU fürAWS Batch Amazon EKS.