Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Memulai dengan AWS Batch di Amazon EKS
AWS Batch di Amazon EKS adalah layanan terkelola untuk menjadwalkan dan menskalakan beban kerja batch ke dalam klaster Amazon EKS yang ada. AWS Batch tidak membuat, mengelola, atau menjalankan operasi siklus hidup klaster Amazon EKS Anda atas nama Anda. AWS Batch skala orkestrasi naik dan turun node yang dikelola oleh AWS Batch dan menjalankan pod pada node tersebut.
AWS Batch tidak menyentuh node, grup node penskalaan otomatis, atau siklus hidup pod yang tidak terkait dengan AWS Batch lingkungan komputasi dalam klaster Amazon EKS Anda. AWS Batch Agar dapat beroperasi secara efektif, peran terkait layanannya memerlukan izin kontrol akses Kubernetes berbasis peran (RBAC) di klaster Amazon EKS Anda yang ada. Untuk informasi selengkapnya, lihat Menggunakan Otorisasi RBAC dalam dokumentasi
AWS Batch membutuhkan Kubernetes namespace di mana ia dapat mencakup pod sebagai AWS Batch pekerjaan ke dalam. Kami merekomendasikan namespace khusus untuk mengisolasi AWS Batch pod dari beban kerja klaster Anda yang lain.
Setelah AWS Batch diberi akses RBAC dan namespace telah dibuat, Anda dapat mengaitkan klaster Amazon EKS tersebut ke lingkungan AWS Batch komputasi menggunakan operasi API. CreateComputeEnvironment Antrian pekerjaan dapat dikaitkan dengan lingkungan komputasi Amazon EKS yang baru ini. AWS Batch pekerjaan dikirimkan ke antrian pekerjaan berdasarkan definisi pekerjaan Amazon EKS menggunakan operasi SubmitJobAPI. AWS Batch kemudian meluncurkan node AWS Batch terkelola dan menempatkan pekerjaan dari antrian pekerjaan sebagai Kubernetes pod ke dalam cluster EKS yang terkait dengan lingkungan AWS Batch komputasi.
Bagian berikut mencakup cara menyiapkan AWS Batch di Amazon EKS.
Daftar Isi
- Prasyarat
- Langkah 1: Mempersiapkan cluster Amazon EKS Anda AWS Batch
- Langkah 2: Membuat lingkungan komputasi Amazon EKS
- Langkah 3: Buat antrian pekerjaan dan lampirkan lingkungan komputasi
- Langkah 4: Buat definisi pekerjaan
- Langkah 5: Kirim pekerjaan
- (Opsional) Kirim pekerjaan dengan penggantian
- Memulai dengan AWS Batch di Amazon EKS Private Clusters
- Prasyarat
- Langkah 1: Mempersiapkan cluster EKS Anda AWS Batch
- Langkah 2: Membuat lingkungan komputasi Amazon EKS
- Langkah 3: Buat antrian pekerjaan dan lampirkan lingkungan komputasi
- Langkah 4: Buat definisi pekerjaan
- Langkah 5: Kirim pekerjaan
- (Opsional) Kirim pekerjaan dengan penggantian
- Pemecahan Masalah
Prasyarat
Sebelum memulai tutorial ini, Anda harus menginstal dan mengkonfigurasi alat dan sumber daya berikut yang Anda butuhkan untuk membuat AWS Batch dan mengelola sumber daya Amazon EKS.
-
AWS CLI — Alat baris perintah untuk bekerja dengan layanan AWS , termasuk Amazon EKS. 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 juga 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 cluster. Panduan ini mengharuskan Anda menggunakan versi1.23
atau yang lebih baru. Untuk informasi selengkapnya, silakan lihat Menginstal atau memperbaruikubectl
di Panduan Pengguna Amazon EKS. -
— Alat baris perintah untuk bekerja dengan kluster Amazon EKS yang mengotomatiskan banyak tugas individu. Panduan ini mengharuskan Anda menggunakan versieksctl
0.115.0
atau yang lebih baru. Untuk informasi selengkapnya, silakan lihat Menginstal atau memperbarui
di Panduan Pengguna Amazon EKS.eksctl
-
Izin IAM yang diperlukan — Prinsip keamanan IAM yang Anda gunakan harus memiliki izin untuk bekerja dengan peran Amazon EKS IAM dan peran terkait layanan, serta VPC AWS CloudFormation dan sumber daya 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 klaster Amazon EKS — Untuk informasi selengkapnya, lihat Memulai Amazon EKS —
eksctl
di Panduan Pengguna Amazon EKS.catatan
AWS Batch hanya mendukung kluster Amazon EKS dengan titik akhir server API yang memiliki akses publik, dapat diakses oleh internet publik. Secara default, titik akhir server API klaster Amazon EKS memiliki akses publik. Untuk informasi selengkapnya, lihat kontrol akses titik akhir klaster Amazon EKS di Panduan Pengguna Amazon EKS.
catatan
AWS Batch tidak menyediakan orkestrasi node terkelola untuk CoreDNS atau pod penerapan lainnya. Jika Anda membutuhkan CoreDNS, lihat Menambahkan add-on CoreDNS Amazon EKS di Panduan Pengguna Amazon EKS. Atau, gunakan
eksctl create cluster create
untuk membuat cluster, itu termasuk CoreDNS secara default. -
Izin — Pengguna yang memanggil operasi CreateComputeEnvironmentAPI untuk membuat lingkungan komputasi yang menggunakan sumber daya Amazon EKS memerlukan izin untuk operasi API.
eks:DescribeCluster
Menggunakan AWS Management Console untuk membuat sumber daya komputasi menggunakan sumber daya Amazon EKS memerlukan izin untuk keduanya daneks:DescribeCluster
.eks:ListClusters
Langkah 1: Mempersiapkan cluster Amazon EKS Anda 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 bagi klaster agar memungkinkan AWS Batch untuk menonton node dan pod, dan untuk mengikat peran. Anda harus melakukan ini sekali untuk setiap cluster EKS.catatan
Untuk informasi selengkapnya tentang penggunaan otorisasi RBAC, lihat Menggunakan Otorisasi RBAC
di Panduan Pengguna. Kubernetes $
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 Kubernetes peran cakupan namespace untuk mengelola dan mendaur hidup pod AWS Batch 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
Kubernetes
aws-auth
Perbarui peta konfigurasi untuk memetakan izin RBAC 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 dari ARN dari peran terkait layanan. Ini karena masalah dengan petaaws-auth
konfigurasi. Untuk informasi selengkapnya, lihat Peran dengan jalur tidak berfungsi saat jalur disertakan dalam ARN mereka di. aws-auth configmap
Langkah 2: Membuat lingkungan komputasi Amazon EKS
AWS Batch lingkungan komputasi menentukan parameter sumber daya komputasi untuk memenuhi kebutuhan beban kerja batch Anda. Di lingkungan komputasi terkelola, AWS Batch membantu Anda mengelola kapasitas dan jenis instans sumber daya komputasi (Kubernetesnode) dalam klaster Amazon EKS Anda. Ini didasarkan pada spesifikasi sumber daya komputasi yang Anda tentukan ketika membuat lingkungan komputasi. Anda dapat menggunakan Instans Sesuai Permintaan EC2 atau Instans Spot EC2.
Sekarang peran AWSServiceRoleForBatchterkait layanan memiliki akses ke kluster Amazon EKS Anda, Anda dapat membuat AWS Batch sumber daya. Pertama, buat lingkungan komputasi yang mengarah ke cluster Amazon EKS 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-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
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 komputasi Amazon EKS.catatan
Kami menyarankan Anda menggunakan
SPOT_PRICE_CAPACITY_OPTIMIZED
daripadaSPOT_CAPACITY_OPTIMIZED
dalam kebanyakan kasus. -
Untuk mengetahui
instanceRole
, lihat Membuat peran IAM node Amazon EKS dan Mengaktifkan akses utama IAM ke klaster Anda di Panduan Pengguna Amazon EKS. Jika Anda menggunakan jaringan pod, lihat Mengonfigurasi plugin Amazon VPC CNI untuk menggunakan peran IAM Kubernetes untuk akun layanan di Panduan Pengguna Amazon EKS. -
Cara untuk mendapatkan subnet yang berfungsi untuk
subnets
parameter tersebut adalah dengan menggunakan subnet publik grup node terkelola Amazon EKS yang dibuat oleheksctl
saat membuat cluster Amazon EKS. Jika tidak, gunakan subnet yang memiliki jalur jaringan yang mendukung penarikan gambar. -
securityGroupIds
Parameter dapat menggunakan grup keamanan yang sama dengan cluster Amazon EKS. Perintah ini mengambil ID grup keamanan untuk cluster.$
eks describe-cluster \ --name
<cluster-name>
\ --query cluster.resourcesVpcConfig.clusterSecurityGroupId -
Pemeliharaan lingkungan komputasi Amazon EKS adalah tanggung jawab bersama. Untuk informasi selengkapnya, lihat Tanggung jawab bersama dari Kubernetes node.
penting
Penting untuk memastikan bahwa lingkungan komputasi sehat sebelum melanjutkan. Operasi DescribeComputeEnvironmentsAPI 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.
Langkah 3: 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 klaster Amazon EKS 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
Langkah 4: Buat definisi pekerjaan
$
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
Catatan
-
Hanya pekerjaan kontainer tunggal yang didukung.
-
Ada pertimbangan untuk
memory
parametercpu
dan. Untuk informasi selengkapnya, lihat Pertimbangan memori dan vCPU untuk Amazon AWS Batch EKS.
Langkah 5: Kirim pekerjaan
$
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 Pertimbangan memori dan vCPU untuk Amazon AWS Batch EKS. -
Untuk informasi selengkapnya tentang menjalankan pekerjaan di sumber daya Amazon EKS, 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 pekerjaan AWS Batch Amazon EKS.
-
Untuk meningkatkan visibilitas ke detail operasi, aktifkan pencatatan pesawat kontrol Amazon EKS. Untuk informasi selengkapnya, lihat pencatatan pesawat kontrol Amazon EKS di Panduan Pengguna Amazon EKS.
-
Daemonsetsdan kubelets overhead mempengaruhi vCPU dan sumber daya memori yang tersedia, khususnya penskalaan dan penempatan kerja. Untuk informasi selengkapnya, lihat Pertimbangan memori dan vCPU untuk Amazon AWS Batch EKS.