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 privaten Amazon-EKS-Clustern
AWS Batch ist ein verwalteter Service, der Batch-Workloads in Ihren Amazon Elastic Kubernetes Service (Amazon EKS)-Clustern orchestriert. Dazu gehören Warteschlangen, Abhängigkeitsnachverfolgung, verwaltete Auftragswiederholungen und -prioritäten, Pod-Verwaltung und Knotenskalierung. Diese Funktion verbindet Ihren vorhandenen privaten Amazon-EKS-Cluster mit AWS Batch , um Ihre Aufträge in großem Umfang auszuführen. Sie können eksctl
Nur private Amazon-EKS-Cluster haben keinen eingehenden/ausgehenden Internetzugang und verfügen nur über private Subnetze. Amazon-VPC-Endpunkte werden verwendet, um privaten Zugriff auf andere AWS -Services zu ermöglichen. eksctl
unterstützt das Erstellen vollständig privater Cluster mit einer bereits vorhandenen Amazon VPC und Subnetzen. erstellt
auch Amazon-VPC-Endpunkte in der bereitgestellten Amazon VPC und ändert Routing-Tabellen für die bereitgestellten Subnetze.eksctl
Jedem Subnetz sollte eine explizite Routing-Tabelle zugeordnet sein, da die Haupt-Routing-Tabelle
nicht ändert. Ihr Clustereksctl
Sie können optional eine Pull-Through-Cache-Regel mit Amazon ECR erstellen. Sobald eine Pull-Through-Cache-Regel für eine externe öffentliche Registrierung erstellt wurde, können Sie ein Image aus dieser externen öffentlichen Registrierung mit Ihrem privaten Amazon-ECR-Registrierungs-Uriform-Ressourcenidetifier (URI) abrufen. Dann erstellt Amazon ECR ein Repository und speichert das Image im Cache. Wenn ein zwischengespeichertes Image mit dem URI der privaten Registrierung von Amazon ECR abgerufen wird, überprüft Amazon ECR die Remote-Registrierung, um festzustellen, ob eine neue Version des Images vorhanden ist, und aktualisiert Ihre private Registrierung bis zu einmal alle 24 Stunden.
Inhalt
- Voraussetzungen
- Schritt 1: Vorbereiten Ihres EKS-Clusters für AWS Batch
- Schritt 2: Erstellen einer Amazon-EKS-Rechenumgebung
- Schritt 3: Erstellen einer Auftragswarteschlange und Anfügen der Datenverarbeitungsumgebung
- Schritt 4: Erstellen einer Auftragsdefinition
- Schritt 5: Senden eines Auftrags
- (Optional) Senden eines Auftrags mit Überschreibungen
- Fehlerbehebung
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 und Amazon-EKS-Ressourcen benötigen. Sie müssen auch alle erforderlichen Ressourcen erstellen, einschließlich VPC, Subnetze, Routing-Tabellen, VPC-Endpunkte und Amazon-EKS-Cluster. Sie müssen die verwenden AWS CLI.
-
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 der AWS CLI im AWS Command Line Interface -Benutzerhandbuch.
Nach der Installation der empfehlen wir AWS CLI Ihnen, sie zu konfigurieren. Weitere Informationen finden Sie unter Schnellkonfiguration mit
aws configure
im AWS Command Line Interface -Benutzerhandbuch. -
kubectl
– Ein Befehlszeilen-Tool für die Arbeit mit Kubernetes Clustern. Dieses Handbuch erfordert, dass Sie Version1.23
oder höher verwenden. Weitere Informationen finden Sie unter Installieren oder Aktualisieren vonkubectl
im Amazon-EKS-Benutzerhandbuch. -
– Ein Befehlszeilen-Tool für die Arbeit mit Amazon-EKS-Clustern, das viele einzelne Aufgaben automatisiert. Dieses Handbuch erfordert, dass Sie Versioneksctl
0.115.0
oder höher verwenden. Weitere Informationen finden Sie unter Installieren oder Aktualisieren von
im Amazon-EKS-Benutzerhandbuch.eksctl
-
Erforderliche AWS Identity and Access Management (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.
-
Erstellen eines Amazon-EKS-Clusters – Weitere Informationen finden Sie unter Erste Schritte mit Amazon EKS –
eksctl
im Amazon-EKS-Benutzerhandbuch.Anmerkung
AWS Batch bietet keine Orchestrierung für verwaltete Knoten 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 ,
eksctl create cluster create
um den Cluster zu erstellen, er enthält standardmäßig CoreDNS. -
Berechtigungen – Benutzer, die den CreateComputeEnvironment -API-Vorgang aufrufen, um eine Datenverarbeitungsumgebung zu erstellen, die Amazon-EKS-Ressourcen verwendet, benötigen Berechtigungen für den
eks:DescribeCluster
-API-Vorgang. Die Verwendung der AWS Management Console zum Erstellen einer Rechenressource mit Amazon-EKS-Ressourcen erfordert Berechtigungen füreks:DescribeCluster
undeks:ListClusters
. -
Erstellen Sie mithilfe der
Beispielkonfigurationsdatei einen privaten EKS-Cluster in der Region us-east-1.eksctl
kind: ClusterConfig apiVersion: eksctl.io/v1alpha5 availabilityZones: - us-east-1a - us-east-1b - us-east-1d managedNodeGroups: privateNetworking: true privateCluster: enabled: true skipEndpointCreation: false
Erstellen Sie Ihre -Ressourcen mit dem -Befehl:
eksctl create cluster -f clusterConfig.yaml
-
Batchverwaltete Knoten müssen in Subnetzen bereitgestellt werden, die über die von Ihnen benötigten VPC-Schnittstellenendpunkte verfügen. Weitere Informationen finden Sie unter Anforderungen an private Cluster.
Schritt 1: Vorbereiten Ihres EKS-Clusters für AWS Batch
Alle Schritte sind erforderlich.
-
Erstellen eines dedizierten Namespace für AWS Batch Aufträge
Verwenden Sie
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
Ausgabe:
namespace/my-aws-batch-namespace created
-
Aktivieren des Zugriffs über die rollenbasierte Zugriffskontrolle (RBAC)
Verwenden Sie
kubectl
, um eine Kubernetes Rolle für den Cluster zu erstellen, damit Knoten und Pods AWS Batch überwachen und die Rolle binden kann. Sie müssen dies einmal für jeden Amazon-EKS-Cluster tun.Anmerkung
Weitere Informationen zur Verwendung der RBAC-Autorisierung finden Sie unter Verwenden der RBAC-Autorisierung
in der Kubernetes -Dokumentation. $
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 EOFAusgabe:
clusterrole.rbac.authorization.k8s.io/aws-batch-cluster-role created clusterrolebinding.rbac.authorization.k8s.io/aws-batch-cluster-role-binding created
Erstellen Sie eine Rolle im Namespace-Bereich Kubernetes für , AWS Batch um Pods zu verwalten und zu Lebenszyklus-Pods zu binden. 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 EOFAusgabe:
role.rbac.authorization.k8s.io/aws-batch-compute-environment-role created rolebinding.rbac.authorization.k8s.io/aws-batch-compute-environment-role-binding created
Aktualisieren Sie die Kubernetes
aws-auth
Konfigurationszuordnung, um die vorherigen RBAC-Berechtigungen der AWS Batch serviceverknüpften Rolle zuzuordnen.$
eksctl create iamidentitymapping \ --cluster
my-cluster-name
\ --arn "arn:aws:iam::<your-account>
:role/AWSServiceRoleForBatch" \ --usernameaws-batch
Ausgabe:
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 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 enthalten ist im aws-authconfigmap.
Schritt 2: Erstellen einer Amazon-EKS-Rechenumgebung
AWS Batch -Rechenumgebungen definieren Datenverarbeitungsressourcenparameter, um Ihre Batch-Workload-Anforderungen zu erfüllen. In einer verwalteten Datenverarbeitungsumgebung AWS Batch unterstützt Sie bei der Verwaltung der Kapazität und Instance-Typen der Datenverarbeitungsressourcen (Kubernetes-Knoten) in Ihrem Amazon-EKS-Cluster. Dies basiert auf der Spezifikation der Rechenressourcen, die Sie beim Erstellen der Rechenumgebung definieren. Sie können EC2-On-Demand-Instances oder EC2-Spot-Instances verwenden.
Nachdem die AWSServiceRoleForBatch serviceverknüpfte Rolle Zugriff auf Ihren Amazon-EKS-Cluster hat, können Sie - AWS Batch Ressourcen erstellen. Erstellen Sie zunächst eine Datenverarbeitungsumgebung, 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-the-image-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 die AWS Batch serviceverknüpfte Rolle verwendet. AWS Batch auf Amazon EKS unterstützt nur die AWS Batch serviceverknüpfte Rolle. -
Für Amazon-EKS-Rechenumgebungen werden nur
BEST_FIT_PROGRESSIVE
-SPOT_CAPACITY_OPTIMIZED
, - und -SPOT_PRICE_CAPACITY_OPTIMIZED
Zuweisungsstrategien unterstützt.Anmerkung
Wir empfehlen, in den meisten
SPOT_PRICE_CAPACITY_OPTIMIZED
Instances anstelle vonSPOT_CAPACITY_OPTIMIZED
n zu verwenden. -
Informationen zur
instanceRole
finden Sie unter Erstellen der IAM-Rolle des Amazon-EKS-Knotens und Aktivieren des IAM-Prinzipalzugriffs auf Ihren Cluster im Amazon-EKS-Benutzerhandbuch. Wenn Sie Pod-Netzwerke verwenden, finden Sie weitere Informationen unter Konfigurieren des Amazon-VPC-CNI-Plugins für Kubernetes zur Verwendung von IAM-Rollen für Servicekonten im Amazon-EKS-Benutzerhandbuch. -
Eine Möglichkeit, funktionierende Subnetze für den -
subnets
Parameter zu erhalten, besteht darin, die von erstellten öffentlichen Subnetze der von Amazon EKS verwalteten Knotengruppen zu verwenden,eksctl
wenn ein Amazon-EKS-Cluster erstellt wurde. Verwenden Sie andernfalls Subnetze mit einem Netzwerkpfad, der das Abrufen von Images unterstützt. -
Der
securityGroupIds
Parameter kann dieselbe Sicherheitsgruppe wie der Amazon-EKS-Cluster verwenden. Dieser Befehl ruft die Sicherheitsgruppen-ID für den Cluster ab.$
eks describe-cluster \ --name
<cluster-name>
\ --query cluster.resourcesVpcConfig.clusterSecurityGroupId -
Die Wartung einer Amazon-EKS-Rechenumgebung ist eine übergreifende Verantwortlichkeit. Weitere Informationen finden Sie unter Sicherheit in Amazon EKS.
Wichtig
Es ist wichtig zu bestätigen, dass die Datenverarbeitungsumgebung fehlerfrei ist, bevor Sie fortfahren. Dazu kann der DescribeComputeEnvironments API-Vorgang verwendet werden.
$
aws batch describe-compute-environments --compute-environments
My-Eks-CE1
Vergewissern Sie sich, dass der status
Parameter nicht istINVALID
. Wenn dies der Fall ist, sehen Sie sich den statusReason
Parameter für die Ursache an. Weitere Informationen finden Sie unter Problembehebung AWS Batch.
Schritt 3: Erstellen einer Auftragswarteschlange und Anfügen der Datenverarbeitungsumgebung
$
aws batch describe-compute-environments --compute-environments
My-Eks-CE1
Aufträge, 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 Datenverarbeitungsumgebung 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 Auftragsdefinition
Anstatt einen Link zum Image in einem öffentlichen ECR-Repository bereitzustellen, geben Sie im Image-Feld der Auftragsdefinition den Link zu dem in unserem privaten ECR-Repository gespeicherten Image an. Sehen Sie sich die folgende Beispielauftragsdefinition an:
$
cat <<EOF > ./batch-eks-job-definition.json { "jobDefinitionName": "
MyJobOnEks_Sleep
", "type": "container", "eksProperties": { "podProperties": { "hostNetwork": true, "containers": [ { "image": "account-id
.dkr.ecr.region
.amazonaws.com/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
Um kubectl-Befehle auszuführen, benötigen Sie privaten Zugriff auf Ihren Amazon-EKS-Cluster. Dies bedeutet, dass der gesamte Datenverkehr zu Ihrem Cluster-API-Server aus der VPC Ihres Clusters oder einem verbundenen Netzwerk stammen muss.
Schritt 5: Senden 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 einzelne Container-Aufträge unterstützt.
-
Stellen Sie sicher, dass Sie mit allen relevanten Überlegungen für die
memory
Parametercpu
und vertraut sind. Weitere Informationen finden Sie unter Überlegungen zu Arbeitsspeicher und vCPU für AWS Batch in Amazon EKS. -
Weitere Informationen zum Ausführen von Aufträgen auf Amazon-EKS-Ressourcen finden Sie unter Stellenangebote bei Amazon EKS.
(Optional) Senden eines Auftrags mit Überschreibungen
Dieser Auftrag überschreibt den an den Container übergebenen Befehl.
$
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 Batch bereinigt die Pods aggressiv, nachdem die Aufträge abgeschlossen sind, um die Last auf zu reduzierenKubernetes. Um die Details eines Auftrags zu überprüfen, muss die Protokollierung konfiguriert sein. Weitere Informationen finden Sie unter Verwenden von - CloudWatch Protokollen zur Überwachung AWS Batch von Amazon-EKS-Aufträgen.
-
Aktivieren Sie die Amazon-EKS-Steuerebenenprotokollierung, um einen besseren Einblick in die Details der -Operationen zu erhalten. Weitere Informationen finden Sie unter Amazon-EKS-Steuerebenenprotokollierung im Amazon-EKS-Benutzerhandbuch.
-
Daemonsets und kubelets Overhead wirken sich auf verfügbare vCPU- und Speicherressourcen aus, insbesondere auf Skalierung und Auftragsplatzierung. Weitere Informationen finden Sie unter Überlegungen zu Arbeitsspeicher und vCPU für AWS Batch in Amazon EKS.
Fehlerbehebung
Wenn Knoten AWS Batch , die von gestartet werden, keinen Zugriff auf das Amazon-ECR-Repository (oder ein anderes Repository) haben, das Ihr Image speichert, können Ihre Aufträge im STARTING-Status verbleiben. Dies liegt daran, dass der Pod das Image nicht herunterladen und Ihren AWS Batch Auftrag ausführen kann. Wenn Sie auf den von gestarteten Pod-Namen klicken, sollten AWS Batch Sie die Fehlermeldung sehen und das Problem bestätigen können. Die Fehlermeldung sollte in etwa wie folgt aussehen:
Failed to pull image "public.ecr.aws/amazonlinux/amazonlinux:2": rpc error: code = Unknown desc = failed to pull and unpack image "public.ecr.aws/amazonlinux/amazonlinux:2": failed to resolve reference "public.ecr.aws/amazonlinux/amazonlinux:2": failed to do request: Head "https://public.ecr.aws/v2/amazonlinux/amazonlinux/manifests/2": dial tcp: i/o timeout
Weitere gängige Problembehandlungsszenarien finden Sie unter Problembehandlung. AWS Batch Informationen zur Fehlerbehebung auf der Grundlage des Pod-Status finden Sie unter Wie behebe ich Probleme mit dem Pod-Status in Amazon EKS?