Siapkan penskalaan otomatis berbasis peristiwa di Amazon EKS dengan menggunakan Amazon EKS Pod Identity dan KEDA - AWS Prescriptive Guidance

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

Siapkan penskalaan otomatis berbasis peristiwa di Amazon EKS dengan menggunakan Amazon EKS Pod Identity dan KEDA

Dipen Desai, Abhay Diwan, Kamal Joshi, dan Mahendra Revanasiddappa, Amazon Web Services

Ringkasan

Platform orkestrasi, seperti Amazon Elastic Kubernetes Service (Amazon EKS), telah menyederhanakan pengelolaan siklus hidup aplikasi berbasis container. Ini membantu organisasi fokus pada membangun, mengamankan, mengoperasikan, dan memelihara aplikasi berbasis kontainer. Karena penerapan berbasis peristiwa menjadi lebih umum, organisasi lebih sering menskalakan penerapan Kubernetes berdasarkan berbagai sumber peristiwa. Metode ini, dikombinasikan dengan auto scaling, dapat menghasilkan penghematan biaya yang signifikan dengan menyediakan sumber daya komputasi sesuai permintaan dan penskalaan efisien yang disesuaikan dengan logika aplikasi.

KEDA adalah autoscaler berbasis peristiwa berbasis Kubernetes. KEDA membantu Anda menskalakan kontainer apa pun di Kubernetes berdasarkan jumlah peristiwa yang perlu diproses. Ini ringan dan terintegrasi dengan cluster Kubernetes apa pun. Ia juga bekerja dengan komponen Kubernetes standar, seperti Horizontal Pod Autoscaling (HPA). KEDA juga menawarkan TriggerAuthentication, yang merupakan fitur yang membantu Anda mendelegasikan otentikasi. Hal ini memungkinkan Anda untuk menjelaskan parameter otentikasi yang terpisah dari ScaledObject dan wadah penyebaran.

AWS menyediakan peran AWS Identity and Access Management (IAM) yang mendukung beragam opsi penerapan Kubernetes, termasuk Amazon EKS, Amazon EKS Anywhere, Layanan OpenShift Red Hat di AWS (ROSA), dan cluster Kubernetes yang dikelola sendiri di Amazon Elastic Compute Cloud (Amazon). EC2 Peran ini menggunakan konstruksi IAM, seperti penyedia identitas OpenID Connect (OIDC) dan kebijakan kepercayaan IAM, untuk beroperasi di berbagai lingkungan tanpa bergantung langsung pada layanan Amazon EKS atau. APIs Untuk informasi selengkapnya, lihat peran IAM untuk akun layanan di dokumentasi Amazon EKS.

Amazon EKS Pod Identity menyederhanakan proses akun layanan Kubernetes untuk mengambil peran IAM tanpa memerlukan penyedia OIDC. Ini memberikan kemampuan untuk mengelola kredensyal untuk aplikasi Anda. Alih-alih membuat dan mendistribusikan AWS kredensialmu ke container atau menggunakan peran EC2 instans Amazon, kamu mengaitkan peran IAM dengan akun layanan Kubernetes dan mengonfigurasi Pod kamu untuk menggunakan akun layanan. Ini membantu Anda menggunakan peran IAM di beberapa klaster dan menyederhanakan manajemen kebijakan dengan mengaktifkan penggunaan kembali kebijakan izin di seluruh peran IAM.

Dengan menerapkan KEDA dengan Amazon EKS Pod Identity, bisnis dapat mencapai penskalaan otomatis berbasis peristiwa yang efisien dan pengelolaan kredensi yang disederhanakan. Skala aplikasi berdasarkan permintaan, yang mengoptimalkan pemanfaatan sumber daya dan mengurangi biaya.

Pola ini membantu Anda mengintegrasikan Amazon EKS Pod Identity dengan KEDA. Ini menampilkan bagaimana Anda dapat menggunakan akun keda-operator layanan dan mendelegasikan otentikasi dengan. TriggerAuthentication Ini juga menjelaskan cara mengatur hubungan kepercayaan antara peran IAM untuk operator KEDA dan peran IAM untuk aplikasi. Hubungan kepercayaan ini memungkinkan KEDA untuk memantau pesan dalam antrian acara dan menyesuaikan penskalaan untuk objek Kubernetes tujuan.

Prasyarat dan batasan

Prasyarat

Batasan

  • Diperlukan bahwa Anda membangun hubungan kepercayaan antara keda-operator peran dan keda-identity peran. Instruksi disediakan di bagian Epik dari pola ini.

Arsitektur

Dalam pola ini, Anda membuat AWS sumber daya berikut:

  • Repositori Amazon Elastic Container Registry (Amazon ECR) - Dalam pola ini, repo ini diberi nama. keda-pod-identity-registry Repo pribadi ini digunakan untuk menyimpan gambar Docker dari aplikasi sampel.

  • Antrian Amazon Simple Queue Service (Amazon SQS) - Dalam pola ini, antrian ini diberi nama. event-messages-queue Antrian bertindak sebagai buffer pesan yang mengumpulkan dan menyimpan pesan masuk. KEDA memantau metrik antrian, seperti jumlah pesan atau panjang antrian, dan secara otomatis menskalakan aplikasi berdasarkan metrik ini.

  • Peran IAM untuk aplikasi — Dalam pola ini, peran ini diberi namakeda-identity. keda-operatorPeran mengasumsikan peran ini. Peran ini memungkinkan akses ke antrian Amazon SQS.

  • Peran IAM untuk operator KEDA - Dalam pola ini, peran ini diberi nama. keda-operator Operator KEDA menggunakan peran ini untuk melakukan panggilan AWS API yang diperlukan. Peran ini memiliki izin untuk mengambil keda-identity peran. Karena hubungan kepercayaan antara peran keda-operator dan keda-identity peran, keda-operator peran tersebut memiliki izin Amazon SQS.

Melalui sumber daya kustom TriggerAuthentication dan ScaledObject Kubernetes, operator menggunakan keda-identity peran tersebut untuk terhubung dengan antrean Amazon SQS. Berdasarkan ukuran antrian, KEDA secara otomatis menskalakan penerapan aplikasi. Ini menambahkan 1 pod untuk setiap 5 pesan yang belum dibaca dalam antrian. Dalam konfigurasi default, jika tidak ada pesan yang belum dibaca dalam antrean Amazon SQS, aplikasi akan menurunkan skala ke 0 pod. Operator KEDA memantau antrian pada interval yang Anda tentukan.

 

Gambar berikut menunjukkan cara Anda menggunakan Amazon EKS Pod Identity untuk menyediakan keda-operator peran dengan akses aman ke antrean Amazon SQS.

Menggunakan KEDA dan Amazon EKS Pod Identity untuk secara otomatis menskalakan aplikasi berbasis Kubernetes.

Diagram menunjukkan alur kerja berikut:

  1. Anda menginstal agen Amazon EKS Pod Identity di cluster Amazon EKS.

  2. Anda menerapkan operator KEDA di namespace KEDA di cluster Amazon EKS.

  3. Anda membuat peran keda-operator dan keda-identity IAM di target Akun AWS.

  4. Anda membangun hubungan kepercayaan antara peran IAM.

  5. Anda menyebarkan aplikasi di security namespace.

  6. Operator KEDA melakukan polling pesan dalam antrian Amazon SQS.

  7. KEDA memulai HPA, yang secara otomatis menskalakan aplikasi berdasarkan ukuran antrian.

Alat

Layanan AWS

Alat-alat lainnya

Repositori kode

Kode untuk pola ini tersedia di GitHub Event-driven auto scaling menggunakan EKS Pod Identity dan REPOSITORI KEDA.

Praktik terbaik

Sebaiknya Anda untuk mematuhi praktik terbaik berikut:

Epik

TugasDeskripsiKeterampilan yang dibutuhkan

Buat peran IAM untuk operator KEDA.

  1. Masuk ke AWS Management Console, lalu buka konsol IAM.

  2. Di panel navigasi, pilih Peran.

  3. Pilih Buat peran.

  4. Pilih jenis peran kebijakan kepercayaan kustom.

  5. Di bagian Kebijakan kepercayaan khusus, masukkan kebijakan kepercayaan khusus berikut untuk peran ini:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "pods.eks.amazonaws.com" }, "Action": [ "sts:AssumeRole", "sts:TagSession" ] } ] }
  6. Pada halaman Tambahkan izin, pilih Berikutnya. Anda tidak menambahkan kebijakan apa pun ke peran ini.

  7. Untuk Nama peran, masukkan keda-operator.

  8. Pilih Buat peran.

Administrator AWS

Buat peran IAM untuk aplikasi sampel.

  1. Di konsol IAM, di panel navigasi, pilih Peran.

  2. Pilih Buat peran.

  3. Pilih jenis peran kebijakan kepercayaan kustom.

  4. Di bagian Kebijakan kepercayaan khusus, masukkan kebijakan kepercayaan khusus berikut untuk peran ini. Ganti <account number> dengan nomor akun target Anda:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "pods.eks.amazonaws.com", "AWS": "arn:aws:iam::<account number>:role/keda-operator" }, "Action": [ "sts:AssumeRole", "sts:TagSession" ] } ] }
  5. Pada halaman Tambahkan izin, tambahkan kebijakan AWS terkelola berikut ke peran:

    • AmazonSQSReadOnlyAccess

    • AWSLambdaSQSQueueExecutionRole

  6. Pilih Berikutnya.

  7. Untuk Nama peran, masukkan keda-identity.

  8. Pilih Buat peran.

Administrator AWS

Membuat antrean Amazon SQS.

  1. Buka konsol Amazon SQS.

  2. Pilih Buat antrean.

  3. Untuk Jenis, pilih Standar.

  4. Pada Buat halaman antrian, untuk Nama, masukkanevent-messages-queue.

  5. Pilih Buat antrean. Anda tidak mengubah pengaturan default untuk antrian ini.

AWS Umum

Buat repositori Amazon ECR.

  1. Buka konsol Amazon ECR.

  2. Pilih Buat repositori.

  3. Untuk nama Repositori, masukkan. keda-pod-identity-registry

  4. Pilih Buat repositori. Anda tidak mengubah pengaturan default untuk repositori ini.

AWS Umum
TugasDeskripsiKeterampilan yang dibutuhkan

Menerapkan agen Amazon EKS Pod Identity.

Untuk cluster Amazon EKS target, siapkan agen Amazon EKS Pod Identity. Ikuti petunjuk dalam Mengatur Agen Identitas Pod Amazon EKS di dokumentasi Amazon EKS.

AWS DevOps

Menyebarkan KEDA.

  1. Masukkan perintah berikut untuk menerapkan KEDA pada cluster Amazon EKS target:

    # Add Helm Repo for Keda helm repo add kedacore https://kedacore.github.io/charts # Update Helm repo helm repo update # Install Keda helm install keda kedacore/keda --namespace keda --create-namespace

    Untuk informasi selengkapnya, lihat Menerapkan dengan Helm di dokumentasi KEDA.

  2. Setelah penerapan berhasil, dalam output, validasi bahwa tiga penerapan dibuat untuk operator KEDA. Berikut ini adalah contoh output:

    NAME READY UP-TO-DATE AVAILABLE AGE keda-admission-webhooks 1/1 1 1 89s keda-operator 1/1 1 1 89s keda-operator-metrics-apiserver 1/1 1 1 89s
DevOps insinyur

Tetapkan peran IAM ke akun layanan Kubernetes.

Ikuti petunjuk dalam Menetapkan peran IAM ke akun layanan Kubernetes di dokumentasi Amazon EKS. Gunakan nilai berikut:

  • Untuk peran IAM, masukkankeda-operator.

  • Untuk namespace Kubernetes, masukkan. keda

  • Untuk akun layanan Kubernetes, masukkan. keda-operator

AWS DevOps

Buat namespace.

Masukkan perintah berikut untuk membuat security namespace di cluster Amazon EKS target:

kubectl create ns security
DevOps insinyur
TugasDeskripsiKeterampilan yang dibutuhkan

Kloning file aplikasi.

Masukkan perintah berikut untuk mengkloning penskalaan auto Event-driven menggunakan EKS Pod Identity dan repositori KEDA dari: GitHub

git clone https://github.com/aws-samples/event-driven-autoscaling-using-podidentity-and-keda.git
DevOps insinyur

membuat gambar Docker.

  1. Masukkan perintah berikut untuk menavigasi ke repositori kloning:

    cd event-driven-autoscaling-using-podidentity-and-keda
  2. Masukkan perintah berikut untuk membangun image Docker untuk aplikasi sampel:

    docker build -t keda-pod-identity-registry .
DevOps insinyur

Dorong gambar Docker ke Amazon ECR.

  1. Di terminal tempat Anda membuat gambar Docker, masukkan perintah berikut untuk masuk ke Amazon ECR. Ganti <AWS_REGION> dan <AWS_ACCOUNT_ID> dengan nilai dari AWS lingkungan Anda:

    aws ecr get-login-password \ --region <AWS_REGION> | docker login \ --username AWS \ --password-stdin <AWS_ACCOUNT_ID>.dkr.ecr.<AWS_REGION>.amazonaws.com
  2. Masukkan perintah berikut untuk menandai gambar. Ganti <AWS_REGION> dan <AWS_ACCOUNT_ID> dengan nilai dari AWS lingkungan Anda:

    docker tag keda-pod-identity-registry:latest <AWS_ACCOUNT_ID>.dkr.ecr.<AWS_REGION>.amazonaws.com/keda-pod-identity-registry:latest

  3. Masukkan perintah berikut untuk mendorong gambar ke Amazon ECR. Ganti <AWS_REGION> dan <AWS_ACCOUNT_ID> dengan nilai dari AWS lingkungan Anda:

    docker push <AWS_ACCOUNT_ID>.dkr.ecr.<AWS_REGION>.amazonaws.com/keda-pod-identity-registry:latest

catatan

Anda dapat menemukan perintah push dengan menavigasi ke halaman repositori Amazon ECR dan kemudian memilih perintah View push.

DevOps insinyur

Deploy aplikasi sampel.

  1. Di repositori kloning, buka file deploy.yaml.

  2. Ganti <AWS_ACCOUNT_ID> dan <AWS_REGION> dengan nilai-nilai dari lingkungan Anda.

  3. Simpan dan tutup file deploy.yaml.

  4. Masukkan perintah berikut untuk menerapkan aplikasi sampel pada kluster Amazon EKS target:

    kubectl apply -f deploy.yaml

    Perintah ini membuat akun penyebaran dan layanan di cluster.

DevOps insinyur

Tetapkan peran IAM ke akun layanan aplikasi.

Lakukan salah satu hal berikut untuk mengaitkan peran keda-identity IAM dengan akun layanan untuk aplikasi sampel:

  • Ikuti petunjuk dalam Menetapkan peran IAM ke akun layanan Kubernetes di dokumentasi Amazon EKS. Gunakan nilai berikut:

    • Untuk peran IAM, masukkankeda-identity.

    • Untuk namespace Kubernetes, masukkan. security

    • Untuk akun layanan Kubernetes, masukkan. my-sqs-read-msgs

  • Masukkan AWS CLI perintah berikut. Ganti <cluster-name> dengan nama kluster Amazon EKS target, dan ganti <role-ARN> dengan Nama Sumber Daya Amazon (ARN) peran: keda-identity

    aws eks create-pod-identity-association \ --cluster-name <cluster-name> \ --role-arn <role-ARN> \ --namespace security \ --service-account my-sqs-read-msgs
DevOps insinyur

Menyebarkan ScaledObject danTriggerAuthentication.

  1. Di repositori kloning, buka file keda.yaml.

  2. Ganti {{AWS_ACCOUNT_ID}} dengan ID target Anda Akun AWS.

  3. Ganti {{AWS_REGION}} dengan target Anda Wilayah AWS.

  4. (Opsional) Pada baris 21—24, perbarui parameter untuk kebijakan ScaledObject penskalaan. Lihat berikut ini untuk informasi selengkapnya tentang parameter ini:

  5. Simpan dan tutup file keda.yaml.

  6. Masukkan perintah berikut untuk menyebarkan ScaledObject dan TriggerAuthentication sumber daya:

    kubectl -n security apply -f keda.yaml
DevOps insinyur
TugasDeskripsiKeterampilan yang dibutuhkan

Kirim pesan ke antrian Amazon SQS.

  1. Masukkan perintah berikut untuk menavigasi ke repositori kloning:

    cd event-driven-autoscaling-using-podidentity-and-keda
  2. Masukkan perintah berikut untuk mengirim pesan pengujian ke antrean Amazon SQS:

    python sqs_send_msg.py

    Skrip sqs_send_msg.py bertindak sebagai aplikasi yang menghasilkan pesan untuk menguji penskalaan otomatis.

    catatan

    Jika Anda menjalankan Python 3, masukkan. python3 sqs_send_msg.py

DevOps insinyur

Pantau pod aplikasi.

  1. Di terminal yang berbeda, masukkan perintah berikut untuk memantau pod:

    kubectl -n security get po 
  2. Untuk setiap 5 pesan yang belum dibaca dalam antrean Amazon SQS, KEDA menambahkan satu pod. Pada output dari perintah sebelumnya, konfirmasikan bahwa pod baru sedang ditambahkan. Berikut ini adalah contoh output:

    kubectl -n security get po NAME READY STATUS RESTARTS AGE q-read-797f4c7589-2bj76 1/1 Running 0 2s q-read-797f4c7589-4zxph 1/1 Running 0 49s q-read-797f4c7589-cg9dt 1/1 Running 0 18s q-read-797f4c7589-slc69 1/1 Running 0 33s
  3. Ketika Anda selesai menguji, di terminal asli, masukkan CTRL+C (Windows) atau CMD + C (macOS). Ini menghentikan skrip python sqs_send_msg.py.

DevOps insinyur

Pemecahan Masalah

IsuSolusi

Operator KEDA tidak dapat menskalakan aplikasi.

Masukkan perintah berikut untuk memeriksa log peran keda-operator IAM:

kubectl logs -n keda -l app=keda-operator -c keda-operator

 

Jika ada kode HTTP 403 respons, maka aplikasi dan scaler KEDA tidak memiliki izin yang cukup untuk mengakses antrian Amazon SQS. Selesaikan langkah-langkah berikut:

  1. Periksa kebijakan dan pernyataan IAM untuk keda-identity peran untuk mengonfirmasi bahwa akses baca antrian diberikan.

  2. Validasi hubungan kepercayaan antara peran IAM. Berikut ini adalah contohnya:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "pods.eks.amazonaws.com" }, "Action": [ "sts:AssumeRole", "sts:TagSession" ] } ] }

Jika ada Assume-Role kesalahan, maka peran IAM node Amazon EKS tidak dapat mengambil peran IAM yang ditentukan. TriggerAuthentication Selesaikan langkah-langkah berikut:

  1. Masukkan perintah berikut untuk menghapus keda-operator pod dan membuat yang baru:

    kubectl delete pod keda-operator-<alphenumeric-value> --namespace keda
  2. Masukkan perintah berikut untuk memeriksa identitas yang diasumsikan oleh pod:

    kubectl describe pod <keda-operator-pod-name> --namespace keda
  3. Ketika pod berhasil di-restart, konfirmasikan bahwa dua variabel berikut ditambahkan ke deskripsi pod:

    • AWS_CONTAINER_CREDENTIALS_FULL_URI

    • AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE

Sumber daya terkait