Membuat dan mengelola EKS klaster Amazon dengan Step Functions - AWS Step Functions

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Membuat dan mengelola EKS klaster Amazon dengan Step Functions

Pelajari cara mengintegrasikan Step Functions dengan Amazon EKS untuk mengelola klaster Kubernetes. Step Functions menyediakan dua jenis integrasi layanan APIs untuk diintegrasikan dengan Amazon Elastic Kubernetes Service. Satu memungkinkan Anda menggunakan Amazon EKS APIs untuk membuat dan mengelola EKS cluster Amazon. Yang lain memungkinkan Anda berinteraksi dengan klaster Anda menggunakan Kubernetes API dan menjalankan pekerjaan sebagai bagian dari alur kerja aplikasi Anda.

Anda dapat menggunakan integrasi Kubernetes API dengan kluster EKS Amazon yang dibuat menggunakan Step Functions, dengan cluster EKS Amazon yang dibuat oleh alat eksctl atau konsol Amazon, atau metode serupa. EKS Untuk informasi selengkapnya, lihat Membuat EKS klaster Amazon di Panduan EKS Pengguna Amazon.

Untuk belajar tentang berintegrasi dengan AWS servicesin Step Functions, lihat Integrasi layanan dan. Meneruskan parameter ke layanan API di Step Functions

Fitur utama EKS integrasi Amazon yang Dioptimalkan
catatan

EKSIntegrasi Step Functions hanya mendukung Kubernetes APIs dengan akses endpoint publik. Secara default, titik akhir API server EKS cluster memiliki akses publik. Untuk informasi selengkapnya, lihat Kontrol akses titik akhir EKS klaster Amazon di Panduan EKS Pengguna Amazon.

Step Functions tidak menghentikan EKS klaster Amazon secara otomatis jika eksekusi dihentikan. Jika mesin status Anda berhenti sebelum EKS klaster Amazon dihentikan, klaster Anda dapat terus berjalan tanpa batas waktu, dan dapat dikenakan biaya tambahan. Untuk menghindari hal ini, pastikan bahwa setiap EKS cluster Amazon yang Anda buat dihentikan dengan benar. Untuk informasi selengkapnya, lihat:

catatan

Ada kuota untuk input maksimum atau ukuran data hasil untuk tugas di Step Functions. Ini membatasi Anda untuk 256 KB data sebagai string yang dikodekan UTF -8 saat Anda mengirim ke, atau menerima data dari, layanan lain. Lihat Kuota yang berkaitan dengan eksekusi mesin status.

Integrasi Kubernetes API

Step Functions mendukung APIs Kubernetes berikut:

RunJob

Integrasi eks:runJob layanan memungkinkan Anda menjalankan pekerjaan di EKS cluster Amazon Anda. Varian eks:runJob.sync mengizinkan Anda menunggu tugas selesai, dan, opsional mengambil log.

APIServer Kubernetes Anda harus memberikan izin untuk IAM peran yang digunakan oleh mesin status Anda. Untuk informasi selengkapnya, lihat Izin.

Untuk pola Jalankan Tugas (.sync), status tugas ditentukan melalui polling. Step Functions awalnya menjajak pendapat dengan angka sekitar 1 jajak pendapat per menit. Angka ini akhirnya melambat menjadi sekitar 1 jajak pendapat setiap 5 menit. Jika Anda memerlukan polling yang lebih sering, atau memerlukan lebih banyak kontrol atas strategi polling, Anda dapat menggunakan integrasi eks:call untuk mengueri status tugas.

Integrasi eks:runJob khusus untuk Tugas Kubernetes batch/v1. Untuk informasi selengkapnya, lihat Tugas dalam dokumentasi Kubernetes. Jika Anda ingin mengelola sumber daya Kubernetes lainnya, termasuk sumber daya kustom, gunakan integrasi layanan eks:call. Anda dapat menggunakan Step Functions untuk membangun loop polling, seperti yang ditunjukkan dalam proyek sampel Polling untuk status pekerjaan dengan Lambda dan AWS Batch.

Parameter yang didukung meliputi:

  • ClusterName: Nama EKS cluster Amazon yang ingin Anda panggil.

    • Type: String

    • Wajib: ya

  • CertificateAuthority: Data sertifikat yang dikodekan Base64 yang diperlukan untuk berkomunikasi dengan klaster Anda. Anda dapat memperoleh nilai ini dari EKSkonsol Amazon atau dengan menggunakan Amazon EKS DescribeClusterAPI.

    • Type: String

    • Wajib: ya

  • Endpoint: Endpoint URL untuk server API Kubernetes Anda. Anda dapat memperoleh nilai ini dari EKSkonsol Amazon atau dengan menggunakan Amazon EKS DescribeClusterAPI.

    • Type: String

    • Wajib: ya

  • Namespace: Namespace tempat menjalankan tugas. Jika tidak tersedia, namespace default digunakan.

    • Type: String

    • Wajib: tidak

  • Job: Ketentuan Tugas Kubernetes. Lihat Tugas dalam dokumentasi Kubernetes.

    • Type: JSON atau String

    • Wajib: ya

  • LogOptions: Satu set pilihan untuk mengontrol pengambilan opsional log. Hanya berlaku jika pola integrasi layanan Jalankan Tugas (.sync) digunakan untuk menunggu penyelesaian tugas.

    • Type: JSON

    • Wajib: tidak

    • Log termasuk dalam respons dalam kunci logs. Mungkin ada beberapa pod dalam tugas, masing-masing dengan beberapa kontainer.

      { ... "logs": { "pods": { "pod1": { "containers": { "container1": { "log": <log> }, ... } }, ... } }
    • Pengambilan log dilakukan dengan dasar upaya-terbaik. Jika ada kesalahan mengambil log, menggantikan bidang log akan ada bidang error dan cause.

  • LogOptions.RetrieveLogs: Aktifkan pengambilan log setelah tugas selesai. Secara default, log tidak diambil.

    • Type: Boolean

    • Wajib: tidak

  • LogOptions.RawLogs: Jika RawLogs disetel ke true, log akan dikembalikan sebagai string mentah tanpa mencoba menguraikannya menjadi. JSON Secara default, log dideserialisasi JSON jika memungkinkan. Dalam beberapa kasus penguraian tersebut dapat memperkenalkan perubahan yang tidak diinginkan, seperti membatasi ketepatan angka yang mengandung banyak digit.

    • Type: Boolean

    • Wajib: tidak

  • LogOptions.LogParameters: Read Log Kubernetes API API mendukung parameter kueri untuk mengontrol pengambilan log. Misalnya, Anda dapat menggunakan tailLines atau limitBytes untuk membatasi ukuran log yang diambil dan tetap berada dalam kuota ukuran data Step Functions. Untuk informasi selengkapnya, lihat bagian Baca Log pada Referensi KubernetesAPI.

    • Type: Peta String ke List of Strings

    • Wajib: tidak

    • Contoh:

      "LogParameters": { "tailLines": [ "6" ] }

Contoh berikut mencakup status Task yang menjalankan tugas, menunggunya selesai, kemudian mengambil log tugas:

{ "StartAt": "Run a job on EKS", "States": { "Run a job on EKS": { "Type": "Task", "Resource": "arn:aws:states:::eks:runJob.sync", "Parameters": { "ClusterName": "MyCluster", "CertificateAuthority": "ANPAJ2UCCR6DPCEXAMPLE", "Endpoint": "https://AKIAIOSFODNN7EXAMPLE.yl4.us-east-1.eks.amazonaws.com", "LogOptions": { "RetrieveLogs": true }, "Job": { "apiVersion": "batch/v1", "kind": "Job", "metadata": { "name": "example-job" }, "spec": { "backoffLimit": 0, "template": { "metadata": { "name": "example-job" }, "spec": { "containers": [ { "name": "pi-2000", "image": "perl", "command": [ "perl" ], "args": [ "-Mbignum=bpi", "-wle", "print bpi(2000)" ] } ], "restartPolicy": "Never" } } } } }, "End": true } } }

Call

Integrasi eks:call layanan memungkinkan Anda menggunakan Kubernetes API untuk membaca dan menulis objek sumber daya Kubernetes melalui titik akhir Kubernetes. API

APIServer Kubernetes Anda harus memberikan izin untuk IAM peran yang digunakan oleh mesin status Anda. Untuk informasi selengkapnya, lihat Izin.

Untuk informasi selengkapnya tentang operasi yang tersedia, lihat Referensi Kubernetes API.

Parameter yang didukung untuk Call termasuk:

  • ClusterName: Nama EKS cluster Amazon yang ingin Anda panggil.

    • Type: String

    • Wajib: Ya

  • CertificateAuthority: Data sertifikat yang dikodekan Base64 yang diperlukan untuk berkomunikasi dengan klaster Anda. Anda dapat memperoleh nilai ini dari EKSkonsol Amazon atau dengan menggunakan Amazon EKS DescribeClusterAPI.

    • Type: String

    • Wajib: Ya

  • Endpoint: Endpoint URL untuk server API Kubernetes Anda. Anda dapat menemukan nilai ini di EKSkonsol Amazon atau dengan menggunakan Amazon EKS ' DescribeCluster API.

    • Type: String

    • Wajib: Ya

  • Method: HTTP Metode permintaan Anda. Salah satu: GET, POST, PUT, DELETE, HEAD, atau PATCH.

    • Type: String

    • Wajib: Ya

  • Path: HTTP Jalur operasi Kubernetes RESTAPI.

    • Type: String

    • Wajib: Ya

  • QueryParameters: Parameter HTTP kueri dari operasi Kubernetes RESTAPI.

    • Type: Peta String ke List of Strings

    • Wajib: Tidak

    • Contoh:

      "QueryParameters": { "labelSelector": [ "job-name=example-job" ] }
  • RequestBody: Badan HTTP pesan dari operasi Kubernetes RESTAPI.

    • Type: JSON atau String

    • Wajib: Tidak

Berikut ini mencakup status Task yang menggunakan eks:call untuk mencantumkan pod milik tugas example-job.

{ "StartAt": "Call EKS", "States": { "Call EKS": { "Type": "Task", "Resource": "arn:aws:states:::eks:call", "Parameters": { "ClusterName": "MyCluster", "CertificateAuthority": "ANPAJ2UCCR6DPCEXAMPLE", "Endpoint": "https://444455556666.yl4.us-east-1.eks.amazonaws.com", "Method": "GET", "Path": "/api/v1/namespaces/default/pods", "QueryParameters": { "labelSelector": [ "job-name=example-job" ] } }, "End": true } } }

Berikut ini mencakup status Task yang menggunakan eks:call untuk menghapus tugas example-job, dan menetapkan propagationPolicy untuk memastikan pod tugas juga dihapus.

{ "StartAt": "Call EKS", "States": { "Call EKS": { "Type": "Task", "Resource": "arn:aws:states:::eks:call", "Parameters": { "ClusterName": "MyCluster", "CertificateAuthority": "ANPAJ2UCCR6DPCEXAMPLE", "Endpoint": "https://444455556666.yl4.us-east-1.eks.amazonaws.com", "Method": "DELETE", "Path": "/apis/batch/v1/namespaces/default/jobs/example-job", "QueryParameters": { "propagationPolicy": [ "Foreground" ] } }, "End": true } } }

Amazon yang didukung EKS APIs

Amazon EKS APIs dan sintaks yang didukung meliputi:

  • CreateCluster

    • Permintaan sintaks

    • Sintaks respons

      Ketika EKS klaster Amazon dibuat menggunakan integrasi eks:createCluster layanan, IAM peran ditambahkan ke tabel RBAC otorisasi Kubernetes sebagai administrator (dengan izin system:masters). Awalnya, hanya IAM entitas yang dapat melakukan panggilan ke server KubernetesAPI. Untuk informasi selengkapnya, lihat:

      Amazon EKS menggunakan peran terkait layanan yang berisi izin yang diperlukan EKS Amazon untuk memanggil layanan lain atas nama Anda. Jika peran terkait layanan ini belum ada di akun Anda, Anda harus menambahkan iam:CreateServiceLinkedRole izin ke IAM peran yang digunakan oleh Step Functions. Untuk informasi selengkapnya, lihat Menggunakan Peran Tertaut Layanan di EKSPanduan Pengguna Amazon.

      IAMPeran yang digunakan oleh Step Functions harus memiliki iam:PassRole izin untuk meneruskan IAM peran cluster ke AmazonEKS. Untuk informasi selengkapnya, lihat IAMPeran EKS klaster Amazon di Panduan EKS Pengguna Amazon.

  • DeleteCluster

  • CreateFargateProfile

    • Permintaan sintaks

    • Sintaks respons

      Amazon EKS menggunakan peran terkait layanan yang berisi izin yang diperlukan EKS Amazon untuk memanggil layanan lain atas nama Anda. Jika peran terkait layanan ini belum ada di akun Anda, Anda harus menambahkan iam:CreateServiceLinkedRole izin ke IAM peran yang digunakan oleh Step Functions. Untuk informasi selengkapnya, lihat Menggunakan Peran Tertaut Layanan di EKSPanduan Pengguna Amazon.

      Amazon EKS di Fargate mungkin tidak tersedia di semua wilayah. Untuk informasi tentang ketersediaan wilayah, lihat bagian Fargate di EKSPanduan Pengguna Amazon.

      IAMPeran yang digunakan oleh Step Functions harus memiliki iam:PassRole izin untuk meneruskan IAM peran eksekusi pod ke AmazonEKS. Untuk informasi selengkapnya, lihat Peran eksekusi Pod di Panduan EKS Pengguna Amazon.

  • DeleteFargateProfile

  • CreateNodegroup

    • Permintaan sintaks

    • Sintaks respons

      Amazon EKS menggunakan peran terkait layanan yang berisi izin yang diperlukan EKS Amazon untuk memanggil layanan lain atas nama Anda. Jika peran terkait layanan ini belum ada di akun Anda, Anda harus menambahkan iam:CreateServiceLinkedRole izin ke IAM peran yang digunakan oleh Step Functions. Untuk informasi selengkapnya, lihat Menggunakan Peran Tertaut Layanan di EKSPanduan Pengguna Amazon.

      IAMPeran yang digunakan oleh Step Functions harus memiliki iam:PassRole izin untuk meneruskan IAM peran node ke AmazonEKS. Untuk informasi selengkapnya, lihat Menggunakan Peran Tertaut Layanan di EKSPanduan Pengguna Amazon.

  • DeleteNodegroup

Berikut ini termasuk Task yang membuat EKS cluster Amazon.

{ "StartAt": "CreateCluster.sync", "States": { "CreateCluster.sync": { "Type": "Task", "Resource": "arn:aws:states:::eks:createCluster.sync", "Parameters": { "Name": "MyCluster", "ResourcesVpcConfig": { "SubnetIds": [ "subnet-053e7c47012341234", "subnet-027cfea4b12341234" ] }, "RoleArn": "arn:aws:iam::123456789012:role/MyEKSClusterRole" }, "End": true } } }

Berikut ini mencakup Task status yang menghapus EKS cluster Amazon.

{ "StartAt": "DeleteCluster.sync", "States": { "DeleteCluster.sync": { "Type": "Task", "Resource": "arn:aws:states:::eks:deleteCluster.sync", "Parameters": { "Name": "MyCluster" }, "End": true } } }

Berikut ini mencakup status Task yang membuat profil Fargate.

{ "StartAt": "CreateFargateProfile.sync", "States": { "CreateFargateProfile.sync": { "Type": "Task", "Resource": "arn:aws:states:::eks:createFargateProfile.sync", "Parameters": { "ClusterName": "MyCluster", "FargateProfileName": "MyFargateProfile", "PodExecutionRoleArn": "arn:aws:iam::123456789012:role/MyFargatePodExecutionRole", "Selectors": [{ "Namespace": "my-namespace", "Labels": { "my-label": "my-value" } }] }, "End": true } } }

Berikut ini mencakup status Task yang menghapus profil Fargate.

{ "StartAt": "DeleteFargateProfile.sync", "States": { "DeleteFargateProfile.sync": { "Type": "Task", "Resource": "arn:aws:states:::eks:deleteFargateProfile.sync", "Parameters": { "ClusterName": "MyCluster", "FargateProfileName": "MyFargateProfile" }, "End": true } } }

Berikut ini mencakup status Task yang membuat grup simpul.

{ "StartAt": "CreateNodegroup.sync", "States": { "CreateNodegroup.sync": { "Type": "Task", "Resource": "arn:aws:states:::eks:createNodegroup.sync", "Parameters": { "ClusterName": "MyCluster", "NodegroupName": "MyNodegroup", "NodeRole": "arn:aws:iam::123456789012:role/MyNodeInstanceRole", "Subnets": ["subnet-09fb51df01234", "subnet-027cfea4b1234"] }, "End": true } } }

Berikut ini mencakup status Task yang menghapus grup simpul.

{ "StartAt": "DeleteNodegroup.sync", "States": { "DeleteNodegroup.sync": { "Type": "Task", "Resource": "arn:aws:states:::eks:deleteNodegroup.sync", "Parameters": { "ClusterName": "MyCluster", "NodegroupName": "MyNodegroup" }, "End": true } } }

Izin

Ketika EKS klaster Amazon dibuat menggunakan integrasi eks:createCluster layanan, IAM peran ditambahkan ke tabel RBAC otorisasi Kubernetes sebagai administrator, dengan izin. system:masters Awalnya, hanya IAM entitas yang dapat melakukan panggilan ke server KubernetesAPI. Misalnya, Anda tidak akan dapat menggunakan kubectl untuk berinteraksi dengan API server Kubernetes Anda, kecuali jika Anda mengambil peran yang sama dengan mesin status Step Functions Anda, atau jika Anda mengonfigurasi Kubernetes untuk memberikan izin kepada entitas tambahan. IAM Untuk informasi selengkapnya, lihat Mengelola pengguna atau IAM peran untuk klaster Anda di Panduan EKS Pengguna Amazon.

Anda dapat menambahkan izin untuk IAM entitas tambahan, seperti pengguna atau peran, dengan menambahkannya ke aws-auth ConfigMap dalam namespace sistem kube. Jika Anda membuat klaster Anda dari Step Functions, gunakan integrasi layanan eks:call.

Berikut ini mencakup Task status yang membuat aws-auth ConfigMap dan memberikan system:masters izin kepada pengguna arn:aws:iam::123456789012:user/my-user dan IAM peranarn:aws:iam::123456789012:role/my-role.

{ "StartAt": "Add authorized user", "States": { "Add authorized user": { "Type": "Task", "Resource": "arn:aws:states:::eks:call", "Parameters": { "ClusterName": "MyCluster", "CertificateAuthority": "LS0tLS1CRUd...UtLS0tLQo=", "Endpoint": "https://444455556666.yl4.us-east-1.eks.amazonaws.com", "Method": "POST", "Path": "/api/v1/namespaces/kube-system/configmaps", "RequestBody": { "apiVersion": "v1", "kind": "ConfigMap", "metadata": { "name": "aws-auth", "namespace": "kube-system" }, "data": { "mapUsers": "[{ \"userarn\": \"arn:aws:iam::123456789012:user/my-user\", \"username\": \"my-user\", \"groups\": [ \"system:masters\" ] } ]", "mapRoles": "[{ \"rolearn\": \"arn:aws:iam::123456789012:role/my-role\", \"username\": \"my-role\", \"groups\": [ \"system:masters\" ] } ]" } } }, "End": true } }
catatan

Anda mungkin melihat IAM peran ARN yang ditampilkan dalam format yang menyertakan jalur /service-role/, seperti. arn:aws:iam::123456789012:role/service-role/my-role Token jalur peran layananini tidak boleh disertakan ketika mencantumkan peran dalam aws-auth.

Ketika klaster Anda pertama kali dibuat aws-auth ConfigMap tidak akan ada, tetapi akan ditambahkan secara otomatis jika Anda membuat profil Fargate. Anda dapat mengambil nilai aws-auth saat ini, tambahkan izin tambahan, dan versi PUT baru. Biasanya lebih mudah membuat aws-auth sebelum profil Fargate.

Jika klaster Anda dibuat di luar Step Functions, Anda dapat mengonfigurasi kubectl untuk berkomunikasi dengan server Kubernetes Anda. API Kemudian, buat aws-auth ConfigMap baru menggunakan kubectl apply -f aws-auth.yaml atau edit salah satu yang sudah ada menggunakan kubectl edit -n kube-system configmap/aws-auth. Untuk informasi selengkapnya, lihat:

Jika IAM peran Anda tidak memiliki izin yang memadai di Kubernetes, integrasi eks:call atau eks:runJob layanan akan gagal dengan kesalahan berikut:

Error: EKS.401 Cause: { "ResponseBody": { "kind": "Status", "apiVersion": "v1", "metadata": {}, "status": "Failure", "message": "Unauthorized", "reason": "Unauthorized", "code": 401 }, "StatusCode": 401, "StatusText": "Unauthorized" }

IAMkebijakan untuk menelepon Amazon EKS

Contoh template berikut menunjukkan bagaimana AWS Step Functions menghasilkan IAM kebijakan berdasarkan sumber daya dalam definisi mesin negara Anda. Untuk informasi selengkapnya, silakan lihat Bagaimana Step Functions menghasilkan IAM kebijakan untuk layanan terintegrasi dan Temukan pola integrasi layanan di Step Functions.

CreateCluster

Sumber Daya

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "eks:CreateCluster" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "eks:DescribeCluster", "eks:DeleteCluster" ], "Resource": "arn:aws:eks:sa-east-1:444455556666:cluster/*" }, { "Effect": "Allow", "Action": "iam:PassRole", "Resource": [ "arn:aws:iam::444455556666:role/StepFunctionsSample-EKSClusterManag-EKSServiceRole-ANPAJ2UCCR6DPCEXAMPLE" ], "Condition": { "StringEquals": { "iam:PassedToService": "eks.amazonaws.com" } } } ] }

CreateNodeGroup

Sumber Daya

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:DescribeSubnets", "eks:CreateNodegroup" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "eks:DescribeNodegroup", "eks:DeleteNodegroup" ], "Resource": "arn:aws:eks:sa-east-1:444455556666:nodegroup/*" }, { "Effect": "Allow", "Action": [ "iam:GetRole", "iam:ListAttachedRolePolicies" ], "Resource": "arn:aws:iam::444455556666:role/*" }, { "Effect": "Allow", "Action": "iam:PassRole", "Resource": [ "arn:aws:iam::444455556666:role/StepFunctionsSample-EKSClusterMan-NodeInstanceRole-ANPAJ2UCCR6DPCEXAMPLE" ], "Condition": { "StringEquals": { "iam:PassedToService": "eks.amazonaws.com" } } } ] }

DeleteCluster

Sumber Daya

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "eks:DeleteCluster", "eks:DescribeCluster" ], "Resource": [ "arn:aws:eks:sa-east-1:444455556666:cluster/ExampleCluster" ] } ] }

DeleteNodegroup

Sumber Daya

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "eks:DeleteNodegroup", "eks:DescribeNodegroup" ], "Resource": [ "arn:aws:eks:sa-east-1:444455556666:nodegroup/ExampleCluster/ExampleNodegroup/*" ] } ] }

Untuk informasi selengkapnya tentang menggunakan Amazon EKS dengan Step Functions, lihatMembuat dan mengelola EKS klaster Amazon dengan Step Functions.