Memulai dengan AWS Batch di Amazon EKS - AWS Batch

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. Kubernetes

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.

Gambaran Umum

Tutorial ini menunjukkan bagaimana untuk setup AWS Batch dengan Amazon EKS menggunakan AWS CLI, kubectl daneksctl.

Audiens yang Dituju

Tutorial ini dirancang untuk administrator sistem dan pengembang yang bertanggung jawab untuk menyiapkan, menguji, dan menyebarkan AWS Batch.

Fitur yang Digunakan

Tutorial ini menunjukkan cara menggunakan AWS CLI, untuk:

  • Membuat dan mengonfigurasi lingkungan komputasi Amazon EKS

  • Buat antrian pekerjaan.

  • Buat definisi pekerjaan

  • Buat dan kirimkan pekerjaan untuk dijalankan

  • Kirim pekerjaan dengan penggantian

Waktu yang dibutuhkan

Diperlukan waktu sekitar 30-40 menit untuk menyelesaikan tutorial ini.

Pembatasan Regional

Tidak ada batasan negara atau regional yang terkait dengan penggunaan solusi ini.

Biaya Penggunaan Sumber Daya

Tidak ada biaya untuk membuat AWS akun. Namun, dengan menerapkan solusi ini, Anda mungkin dikenakan sebagian atau semua biaya yang tercantum dalam tabel berikut.

Deskripsi Biaya (dolar AS)
Anda dikenakan biaya oleh jam cluster Bervariasi tergantung pada Instance, lihat harga Amazon EKS

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 versi 1.23 atau yang lebih baru. Untuk informasi selengkapnya, silakan lihat Menginstal atau memperbarui kubectl di Panduan Pengguna Amazon EKS.

  • eksctl— Alat baris perintah untuk bekerja dengan kluster Amazon EKS yang mengotomatiskan banyak tugas individu. Panduan ini mengharuskan Anda menggunakan versi 0.115.0 atau yang lebih baru. Untuk informasi selengkapnya, silakan lihat Menginstal atau memperbarui eksctl di Panduan Pengguna Amazon EKS.

  • 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.

  • Izin — Pengguna yang memanggil operasi CreateComputeEnvironmentAPI untuk membuat lingkungan komputasi yang menggunakan sumber daya Amazon EKS memerlukan izin untuk operasi API. eks:DescribeCluster

  • Akun AWS Nomor — Anda harus tahu Akun AWS ID Anda. Ikuti petunjuk di Melihat Akun AWS ID Anda.

  • (Opsional) CloudWatch — Untuk memeriksa rincian (Opsional) Kirim pekerjaan dengan penggantian, logging harus dikonfigurasi. Untuk informasi selengkapnya, lihat Gunakan CloudWatch Log untuk memantau pekerjaan AWS Batch Amazon EKS.

Langkah 1: Buat cluster Amazon EKS Anda AWS Batch

penting

Untuk memulai sesederhana dan secepat mungkin, tutorial ini mencakup langkah-langkah dengan pengaturan default. Sebelum membuat untuk penggunaan produksi, kami sarankan Anda membiasakan diri dengan semua pengaturan dan menerapkan dengan pengaturan yang memenuhi persyaratan Anda.

Setelah Anda menginstal prasyarat yang Anda butuhkan untuk membuat cluster Anda menggunakan. eksctl Membuat cluster dapat memakan waktu antara 10-15 menit.

$ eksctl create cluster --name my-cluster-name --region region-code

Pada perintah sebelumnya ganti:

  • Ganti my-cluster-name dengan nama yang ingin Anda gunakan untuk cluster Anda.

  • Ganti region-code dengan Wilayah AWS untuk membuat cluster di, misalnyaus-west-2.

Nama cluster dan wilayah diperlukan untuk nanti dalam tutorial ini.

Langkah 2: Siapkan cluster Amazon EKS Anda AWS Batch

Semua langkah diperlukan.

  1. 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
  2. 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.

    $ 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: ["events"] verbs: ["list"] - 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

    Output:

    clusterrole.rbac.authorization.k8s.io/aws-batch-cluster-role created clusterrolebinding.rbac.authorization.k8s.io/aws-batch-cluster-role-binding created
  3. 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 EOF

    Output:

    role.rbac.authorization.k8s.io/aws-batch-compute-environment-role created rolebinding.rbac.authorization.k8s.io/aws-batch-compute-environment-role-binding created
  4. Kubernetesaws-authPerbarui peta konfigurasi untuk memetakan izin RBAC sebelumnya ke peran terkait layanan. AWS Batch

    Dalam perintah berikut ganti:

    • Ganti <your-account-number> dengan Akun AWS nomor Anda.

    $ eksctl create iamidentitymapping \ --cluster my-cluster-name \ --arn "arn:aws:iam::<your-account-number>:role/AWSServiceRoleForBatch" \ --username aws-batch

    Output:

    2022-10-25 20:19:57 [ℹ] adding identity "arn:aws:iam::<your-account-number>:role/AWSServiceRoleForBatch" to auth ConfigMap
    catatan

    Jalur aws-service-role/batch.amazonaws.com/ telah dihapus dari ARN dari peran terkait layanan. Ini karena masalah dengan peta aws-auth konfigurasi. Untuk informasi selengkapnya, lihat Peran dengan jalur tidak berfungsi saat jalur disertakan dalam ARN mereka di. aws-auth configmap

Langkah 3: Buat 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 EC2 Sesuai Permintaan atau Instans EC2 Spot.

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.

  • Untuk subnets menjalankan eksctl get cluster my-cluster-name untuk mendapatkan subnet yang digunakan oleh cluster.

  • Untuk securityGroupIds parameter, Anda dapat menggunakan grup keamanan yang sama dengan cluster Amazon EKS. Perintah ini mengambil ID grup keamanan untuk cluster.

    $ aws eks describe-cluster \ --name my-cluster-name \ --query cluster.resourcesVpcConfig.clusterSecurityGroupId
  • instanceRoleItu dibuat saat Anda membuat cluster. Untuk menemukan instanceRole daftar semua entitas yang menggunakan AmazonEKSWorkerNodePolicy kebijakan:

    $ aws iam list-entities-for-policy --policy-arn arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy

    Nama peran kebijakan berisi nama klaster yang Anda buateksctl-my-cluster-name-nodegroup-example.

    Untuk menemukan instanceRole arn jalankan perintah berikut:

    $ aws iam list-instance-profiles-for-role --role-name eksctl-my-cluster-name-nodegroup-example

    Output:

    INSTANCEPROFILES arn:aws:iam::<your-account-number>:instance-profile/eks-04cb2200-94b9-c297-8dbe-87f12example

    Untuk informasi selengkapnya, 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.

$ cat <<EOF > ./batch-eks-compute-environment.json { "computeEnvironmentName": "My-Eks-CE1", "type": "MANAGED", "state": "ENABLED", "eksConfiguration": { "eksClusterArn": "arn:aws:eks:region-code:your-account-number:cluster/my-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

Langkah 4: Buat antrian pekerjaan dan lampirkan lingkungan komputasi

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.

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 5: Buat definisi pekerjaan

Definisi Job berikut menginstruksikan pod untuk tidur selama 60 detik.

$ 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

Langkah 6: Kirim pekerjaan

Jalankan AWS CLI perintah berikut untuk mengirimkan Job baru.

$ aws batch submit-job --job-queue My-Eks-JQ1 \ --job-definition MyJobOnEks_Sleep --job-name My-Eks-Job1

Untuk memeriksa status Job:

$ aws batch describe-jobs --job <jobId-from-submit-response>
Catatan

Langkah 7: Lihat output Job

Untuk melihat output Job, lakukan hal berikut:

  1. Buka AWS Batch konsol di https://console.aws.amazon.com/batch/.

  2. Di panel navigasi pilih Jobs.

  3. Dalam antrean Job drop down pilih antrean Job yang Anda buat untuk tutorial.

  4. Tabel Jobs mencantumkan semua Pekerjaan Anda dan status mereka saat ini. Setelah Status Job Berhasil, pilih Nama JobMy-Eks-JQ1, untuk melihat detail Job.

  5. Di panel Detail, Dimulai dan Dihentikan pada waktu harus terpisah satu menit.

Langkah 8: (Opsional) Kirim pekerjaan dengan penggantian

Pekerjaan ini mengesampingkan perintah yang diteruskan ke wadah. 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.

$ 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

Untuk melihat output Job, lakukan hal berikut:

  1. Buka AWS Batch konsol di https://console.aws.amazon.com/batch/.

  2. Di panel navigasi pilih Jobs.

  3. Dalam antrean Job drop down pilih antrean Job yang Anda buat untuk tutorial.

  4. Tabel Jobs mencantumkan semua Pekerjaan Anda dan status mereka saat ini. Setelah Status Job Berhasil, pilih Nama Job untuk melihat detail Job.

  5. Di panel Detail pilih Nama aliran log. CloudWatch Konsol untuk Job akan terbuka dan harus ada satu acara dengan Pesan hello world atau pesan khusus Anda.

Langkah 9: Bersihkan sumber daya tutorial Anda

Anda dikenakan biaya untuk EC2 instans Amazon saat diaktifkan. Anda dapat menghapus instans untuk menghentikan biaya.

Untuk menghapus sumber daya yang Anda buat, lakukan hal berikut:

  1. Buka AWS Batch konsol di https://console.aws.amazon.com/batch/.

  2. Di panel navigasi pilih Job queue.

  3. Dalam tabel antrean Job pilih antrean Job yang Anda buat untuk tutorial.

  4. Pilih Disable (Nonaktifkan). Setelah Status antrean Job Dinonaktifkan, Anda dapat memilih Hapus.

  5. Setelah antrean Job dihapus, di panel navigasi pilih lingkungan Compute.

  6. Pilih lingkungan komputasi yang Anda buat untuk tutorial ini dan kemudian pilih Nonaktifkan. Mungkin diperlukan 1-2 menit agar lingkungan komputasi selesai dinonaktifkan.

  7. Setelah Status lingkungan komputasi Dinonaktifkan, pilih Hapus. Mungkin diperlukan 1-2 menit agar lingkungan komputasi dihapus.

Sumber daya tambahan

Setelah Anda menyelesaikan tutorial, Anda mungkin ingin menjelajahi topik-topik berikut: