Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
AWS Batch adalah layanan terkelola yang mengatur beban kerja batch di klaster Amazon Elastic Kubernetes Service (Amazon) Anda. EKS Ini termasuk antrian, pelacakan ketergantungan, percobaan ulang dan prioritas pekerjaan terkelola, manajemen pod, dan penskalaan node. Fitur ini menghubungkan EKS kluster Amazon pribadi Anda yang ada AWS Batch untuk menjalankan pekerjaan Anda dalam skala besar. Anda dapat menggunakan eksctl
Amazon EKS Private Only Cluster tidak memiliki akses internet inbound/outbound, dan hanya memiliki subnet pribadi. VPCEndpoint Amazon digunakan untuk mengaktifkan akses pribadi ke AWS
layanan lain. eksctl
mendukung pembuatan cluster yang sepenuhnya pribadi menggunakan Amazon dan subnet yang sudah ada sebelumnya. VPC
juga membuat VPC titik akhir Amazon di Amazon yang disediakan VPC dan memodifikasi tabel rute untuk subnet yang disediakan.eksctl
Setiap subnet harus memiliki tabel rute eksplisit yang terkait dengannya karena
tidak mengubah tabel rute utama. Clustereksctl
Anda dapat secara opsional membuat aturan cache tarik melalui dengan AmazonECR. Setelah aturan cache pull through dibuat untuk registri publik eksternal, Anda dapat menarik gambar dari registri publik eksternal tersebut menggunakan idetifier sumber daya uriform registri ECR pribadi Amazon Anda (). URI Kemudian Amazon ECR membuat repositori dan menyimpan gambar. Ketika gambar yang di-cache ditarik menggunakan registri ECR pribadi AmazonURI, Amazon ECR memeriksa registri jarak jauh untuk melihat apakah ada versi baru gambar dan memperbarui registri pribadi Anda hingga sekali setiap 24 jam.
Daftar Isi
Prasyarat
Sebelum memulai tutorial ini, Anda harus menginstal dan mengonfigurasi alat dan sumber daya berikut yang Anda butuhkan untuk membuat dan mengelola keduanya AWS Batch dan EKS sumber daya Amazon. Anda juga perlu membuat semua sumber daya yang diperlukan termasukVPC, subnet, tabel rute, titik VPC akhir, dan cluster Amazon. EKS Anda perlu menggunakan AWS CLI.
-
AWS CLI— Alat baris perintah untuk bekerja dengan AWS layanan, termasuk AmazonEKS. Panduan ini mengharuskan Anda menggunakan versi 2.8.6 atau yang lebih baru atau 1.26.0 atau yang lebih baru. Untuk informasi selengkapnya, lihat Menginstal, memperbarui, dan mencopot instalasi AWS CLI di Panduan Pengguna AWS Command Line Interface .
Setelah menginstal AWS CLI, kami sarankan Anda mengkonfigurasinya. Untuk informasi selengkapnya, lihat Konfigurasi cepat dengan
aws configure
di Panduan AWS Command Line Interface Pengguna. -
kubectl
— Alat baris perintah untuk bekerja dengan Kubernetes klaster. Panduan ini mengharuskan Anda menggunakan versi1.23
atau yang lebih baru. Untuk informasi selengkapnya, lihat Menginstal atau memperbaruikubectl
di Panduan EKS Pengguna Amazon. -
— Alat baris perintah untuk bekerja dengan EKS cluster Amazon yang mengotomatiskan banyak tugas individu. Panduan ini mengharuskan Anda menggunakan versieksctl
0.115.0
atau yang lebih baru. Untuk informasi selengkapnya, lihat Menginstal atau memperbarui
di Panduan EKS Pengguna Amazon.eksctl
-
Izin wajib AWS Identity and Access Management (IAM) — Prinsip IAM keamanan yang Anda gunakan harus memiliki izin untuk bekerja dengan EKS IAM peran Amazon dan peran terkait layanan AWS CloudFormation, serta sumber daya yang VPC terkait. Untuk informasi selengkapnya, lihat Kunci tindakan, sumber daya, dan kondisi untuk Amazon Elastic Kubernetes Service dan Menggunakan peran terkait layanan di Panduan Pengguna. IAM Anda harus menyelesaikan semua langkah dalam panduan ini sebagai pengguna yang sama.
-
Membuat EKS klaster Amazon — Untuk informasi selengkapnya, lihat Memulai Amazon EKS —
eksctl
di Panduan EKS Pengguna Amazon.catatan
AWS Batch tidak menyediakan orkestrasi node terkelola untuk Core DNS atau pod penerapan lainnya. Jika Anda membutuhkan CoreDNS, lihat Menambahkan EKS add-on Core DNS Amazon di Panduan EKS Pengguna Amazon. Atau, gunakan
eksctl create cluster create
untuk membuat cluster, itu termasuk Core secara DNS default. -
Izin — Pengguna yang memanggil CreateComputeEnvironmentAPIoperasi untuk membuat lingkungan komputasi yang menggunakan EKS sumber daya Amazon memerlukan izin untuk operasi.
eks:DescribeCluster
API Menggunakan AWS Management Console untuk membuat sumber daya komputasi menggunakan sumber EKS daya Amazon memerlukan izin untuk keduanya daneks:DescribeCluster
.eks:ListClusters
-
Buat EKS cluster pribadi di wilayah us-east-1 menggunakan contoh file konfigurasi.
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
Buat sumber daya Anda menggunakan perintah:
eksctl create cluster -f clusterConfig.yaml
-
Node terkelola batch harus disebarkan ke subnet yang memiliki titik akhir VPC antarmuka yang Anda butuhkan. Untuk informasi selengkapnya, lihat Persyaratan klaster pribadi.
Siapkan EKS cluster Anda untuk AWS Batch
Semua langkah diperlukan.
-
Buat namespace khusus untuk pekerjaan AWS Batch
Gunakan
kubectl
untuk membuat namespace baru.$
namespace=
my-aws-batch-namespace
$
cat - <<EOF | kubectl create -f - { "apiVersion": "v1", "kind": "Namespace", "metadata": { "name": "${namespace}", "labels": { "name": "${namespace}" } } } EOF
Output:
namespace/my-aws-batch-namespace created
-
Aktifkan akses melalui kontrol akses berbasis peran () RBAC
Gunakan
kubectl
untuk membuat Kubernetes peran untuk cluster untuk memungkinkan AWS Batch untuk menonton node dan pod, dan untuk mengikat peran. Anda harus melakukan ini sekali untuk setiap EKS cluster Amazon.catatan
Untuk informasi selengkapnya tentang penggunaan RBAC otorisasi, lihat Menggunakan RBAC Otorisasi
di Kubernetes dokumentasi. $
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 EOFOutput:
clusterrole.rbac.authorization.k8s.io/aws-batch-cluster-role created clusterrolebinding.rbac.authorization.k8s.io/aws-batch-cluster-role-binding created
Buat cakupan ruang nama Kubernetes berperan AWS Batch untuk mengelola dan mendaur hidup pod dan mengikatnya. Anda harus melakukan ini sekali untuk setiap namespace unik.
$
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 EOFOutput:
role.rbac.authorization.k8s.io/aws-batch-compute-environment-role created rolebinding.rbac.authorization.k8s.io/aws-batch-compute-environment-role-binding created
Perbarui Kubernetes
aws-auth
peta konfigurasi untuk memetakan RBAC izin sebelumnya ke peran terkait layanan. AWS Batch$
eksctl create iamidentitymapping \ --cluster
my-cluster-name
\ --arn "arn:aws:iam::<your-account>
:role/AWSServiceRoleForBatch" \ --usernameaws-batch
Output:
2022-10-25 20:19:57 [ℹ] adding identity "arn:aws:iam::
<your-account>
:role/AWSServiceRoleForBatch" to auth ConfigMapcatatan
Jalur
aws-service-role/batch.amazonaws.com/
telah dihapus ARN dari peran terkait layanan. Ini karena masalah dengan petaaws-auth
konfigurasi. Untuk informasi selengkapnya, lihat Peran dengan jalur tidak berfungsi saat jalur disertakan ARN dalam jalur aws-authconfigmap.
Buat lingkungan EKS komputasi Amazon
AWS Batch lingkungan komputasi menentukan parameter sumber daya komputasi untuk memenuhi kebutuhan beban kerja batch Anda. Dalam lingkungan komputasi terkelola, AWS Batch membantu Anda mengelola kapasitas dan jenis instans sumber daya komputasi (Kubernetes node) dalam EKS cluster Amazon Anda. Ini didasarkan pada spesifikasi sumber daya komputasi yang Anda tentukan ketika membuat lingkungan komputasi. Anda dapat menggunakan Instans EC2 Sesuai Permintaan atau Instans EC2 Spot.
Sekarang itu AWSServiceRoleForBatchperan terkait layanan memiliki akses ke EKS klaster Amazon Anda, Anda dapat membuat AWS Batch sumber daya. Pertama, buat lingkungan komputasi yang mengarah ke EKS cluster Amazon Anda.
$
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
Catatan
-
serviceRole
Parameter tidak boleh ditentukan, maka peran AWS Batch terkait layanan akan digunakan. AWS Batch di Amazon EKS hanya mendukung peran AWS Batch terkait layanan. -
Hanya
BEST_FIT_PROGRESSIVE
,SPOT_CAPACITY_OPTIMIZED
, dan strategiSPOT_PRICE_CAPACITY_OPTIMIZED
alokasi yang didukung untuk lingkungan EKS komputasi Amazon.catatan
Kami menyarankan Anda menggunakan
SPOT_PRICE_CAPACITY_OPTIMIZED
bukanSPOT_CAPACITY_OPTIMIZED
n dalam banyak kasus. -
Untuk mengetahui
instanceRole
, lihat Membuat IAM peran EKS node Amazon dan Mengaktifkan akses IAM utama ke klaster Anda di Panduan EKS Pengguna Amazon. Jika Anda menggunakan jaringan pod, lihat Mengonfigurasi VPC CNI plugin Amazon untuk Kubernetes untuk menggunakan IAM peran untuk akun layanan di Panduan EKS Pengguna Amazon. -
Cara untuk mendapatkan subnet yang berfungsi untuk
subnets
parameter ini adalah dengan menggunakan subnet publik grup node EKS terkelola Amazon yang dibuat oleheksctl
saat membuat klaster AmazonEKS. Jika tidak, gunakan subnet yang memiliki jalur jaringan yang mendukung penarikan gambar. -
securityGroupIds
Parameter dapat menggunakan grup keamanan yang sama dengan EKS cluster Amazon. Perintah ini mengambil ID grup keamanan untuk cluster.$
eks describe-cluster \ --name
<cluster-name>
\ --query cluster.resourcesVpcConfig.clusterSecurityGroupId -
Pemeliharaan lingkungan EKS komputasi Amazon adalah tanggung jawab bersama. Untuk informasi selengkapnya, lihat Keamanan di Amazon EKS.
penting
Penting untuk memastikan bahwa lingkungan komputasi sehat sebelum melanjutkan. DescribeComputeEnvironmentsAPIOperasi dapat digunakan untuk melakukan ini.
$
aws batch describe-compute-environments --compute-environments
My-Eks-CE1
Konfirmasikan bahwa status
parameternya tidakINVALID
. Jika ya, lihat statusReason
parameter penyebabnya. Untuk informasi selengkapnya, lihat Pemecahan masalah AWS Batch.
Buat antrian pekerjaan dan lampirkan lingkungan komputasi
$
aws batch describe-compute-environments --compute-environments
My-Eks-CE1
Pekerjaan yang dikirimkan ke antrean pekerjaan baru ini dijalankan sebagai pod pada node AWS Batch terkelola yang bergabung dengan EKS klaster Amazon yang terkait dengan lingkungan komputasi Anda.
$
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
Buat definisi pekerjaan
Di bidang gambar definisi pekerjaan, alih-alih menyediakan tautan ke gambar di ECR repositori publik, berikan tautan ke gambar yang disimpan di repositori pribadi ECR kami. Lihat contoh definisi pekerjaan berikut:
$
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
Untuk menjalankan perintah kubectl, Anda memerlukan akses pribadi ke cluster Amazon Anda. EKS Ini berarti semua lalu lintas ke API server cluster Anda harus berasal dari dalam kluster Anda VPC atau jaringan yang terhubung.
Mengirim tugas
$
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>
Catatan
-
Hanya pekerjaan kontainer tunggal yang didukung.
-
Pastikan Anda terbiasa dengan semua pertimbangan yang relevan untuk
memory
parametercpu
dan. Untuk informasi selengkapnya, lihat CPUPertimbangan memori dan v untuk AWS Batch di Amazon EKS. -
Untuk informasi selengkapnya tentang menjalankan pekerjaan di EKS sumber daya Amazon, lihatEKSLowongan kerja Amazon.
(Opsional) Kirim pekerjaan dengan penggantian
Pekerjaan ini mengesampingkan perintah yang diteruskan ke wadah.
$
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
Catatan
-
AWS Batch secara agresif membersihkan pod setelah pekerjaan selesai untuk mengurangi beban Kubernetes. Untuk memeriksa detail pekerjaan, logging harus dikonfigurasi. Untuk informasi selengkapnya, lihat Gunakan CloudWatch Log untuk memantau EKS pekerjaan AWS Batch Amazon.
-
Untuk meningkatkan visibilitas ke detail operasi, aktifkan pencatatan pesawat EKS kontrol Amazon. Untuk informasi selengkapnya, lihat pencatatan pesawat EKS kontrol Amazon di Panduan EKS Pengguna Amazon.
-
Daemonsets and kubelets overhead mempengaruhi sumber daya v CPU dan memori yang tersedia, khususnya penskalaan dan penempatan pekerjaan. Untuk informasi selengkapnya, lihat CPUPertimbangan memori dan v untuk AWS Batch di Amazon EKS.
Pemecahan Masalah
Jika node yang diluncurkan oleh AWS Batch tidak memiliki akses ke ECR repositori Amazon (atau repositori lain) yang menyimpan gambar Anda, maka pekerjaan Anda dapat tetap dalam status. STARTING Ini karena pod tidak akan dapat mengunduh gambar dan menjalankan AWS Batch pekerjaan Anda. Jika Anda mengklik nama pod yang diluncurkan oleh AWS Batch Anda akan dapat melihat pesan kesalahan dan mengonfirmasi masalah. Pesan kesalahan akan terlihat mirip dengan yang berikut:
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
Untuk skenario pemecahan masalah umum lainnya, lihat Pemecahan masalah. AWS Batch Untuk mengatasi masalah berdasarkan status pod, lihat Bagaimana cara memecahkan masalah status pod di Amazon? EKS