Blog AWS Indonesia
Otomatisasi upgrade Amazon EKS menggunakan infrastructure as code
Dalam artikel ini, kami akan menjelaskan bagaimana melakukan upgrade managed node group dari kluster Amazon Elastic Kubernetes Service (Amazon EKS) dari 1.19 ke 1.20 secara paralel. Kita dapat menggunakan AWS Service Catalog untuk mendukung otomatisasi alur kerja dengan kontrol yang granular. Kemampuan ini menyediakan pilihan untuk memperbarui control plane dan node. Daftar fitur Amazon EKS, berdasarkan versi Kubernetes, dapat ditemukan dalam dokumen change log yang tersedia secara open source.
Solusi
Banyak komponen, konfigurasi, dan aplikasi yang berjalan di kluster Kubernetes. Tim operasional dan developer ingin dapat menggunakan fitur baru yang membantu mengoptimalkan environment. Memperbarui kluster Kubernetes dapat dilakukan secara manual dan memakan waktu jika developers harus melakukan validasi umum dan langkah-langkah prosedural.
Anda dapat mengupgrade kluster melalui AWS Management Console atau melalui antarmuka command line dengan eksctl atau kubectl. Setelah pengaktifan kluster Amazon EKS, tidak ada proses audit di dalam AWS CloudTrail. Kedua opsi tersebut bersifat manual dan tidak dicatat untuk pelacakan maupun audit.
Solusi yang saya jelaskan dalam artikel ini mengotomatiskan proses upgrade Amazon EKS menggunakan managed group node, launch template, infrastructure as code, dan container image dengan kode Python. Ketiga container image menjalankan perintah eksctl dan kubectl bersama dengan pemeriksaan status. Pembaruan kluster dikemas menjadi parameter sederhana. Di background, perintah dan konfigurasi dicatat dalam log.
Jenis-jenis container image pada AWS Lambda sebagai berikut:
- Control plane upgrade: Meningkatkan control plane Amazon EKS ke versi yang ditentukan.
- DaemonSet upgrade image: Upgrade aws-node, coredns, dan kube-proxy DaemonSets agar sesuai dengan versi control plane.
- Node group upgrade image: Upgrade versi node group launch template agar sesuai dengan versi kluster Amazon EKS.
Berikut alur kerja control plane pada gambar diatas yang ditampilkan dengan angka warna hitam yang dilingkari adalah sebagai berikut:
- Sebuah container image AWS Lambda dibuat menggunakan AWS CloudFormation yang mengirim request upgrade control plane dan menyimpan ID pembaruan.
- Request container AWS Lambda diterima dan memulai upgrade control plane.
- Container AWS Lambda mengambil ID pembaruan dan memeriksa status dari upgrade control plane.
- Jika upgrade control plane berhasil, template AWS CloudFormation deploy managed node group dengan versi Kubernetes 1.20. Jika kluster Amazon EKS tidak normal, upgrade akan gagal.
Berikut workflow data plane yang ditampilkan dengan angka berwarna kuning yang dilingkari sebagai berikut:
- Upgrade control plane berhasil dan template AWS CloudFormation mendeploy managed node group ke versi Kubernetes 1.20.
- Request container AWS Lambda diterima dan memulai upgrade data plane pada jenis DaemonSet yang berbeda satu per satu.
- Jika semua upgrade pada data plane berhasil, template AWS CloudFormation deploy managed node group ke versi Kubernetes 1.20. Jika kluster Amazon EKS dalam status tidak normal, upgrade kontrol gagal.
- Request AWS Lambda diterima dan memulai upgrade data plane pada grup node yang dikelola.
Prasyarat
Untuk mengikuti langkah-langkah proses pipeline deployment, Anda harus memiliki hal berikut:
- Sebuah akun AWS dengan kredensial lokal dan dikonfigurasi dengan benar (biasanya di
~/.aws/credentials
). - Versi terbaru AWS CLI. Untuk informasi selengkapnya, lihat dokumentasi untuk installing, updating, and uninstalling the AWS CLI.
- Sebuah eksctl client untuk berinteraksi dengan kluster API.
- Sebuah Docker client untuk membangun container image.
- Sebuah git client untuk mengkloning kode sumber yang disediakan.
Note: Lihat kode dalam GitHub repository. Praktik terbaik AWS merekomendasikan untuk mengurangi policy AWS Identity and Access Management (IAM) untuk memenuhi kebutuhan perusahaan Anda. Permission ini hanya untuk demonstrasi dan tidak untuk produksi.
Panduan
- Clone repositori kode sumber yang ada dilokasi ini:
- Membuat kluster Amazon Elastic Kubernetes. Perintah berikut membuat kluster Amazon EKS yang baru, tetapi Anda dapat mengubah langkah-langkah ini, khusus untuk penggunaan jika Anda memiliki kluster yang sudah ada:
Output akan terlihat seperti berikut:
- Mengotentikasi repositori Amazon Elastic Container Registry (Amazon ECR), tempat kluster Amazon EKS berjalan:
Output akan terlihat seperti berikut:
- Build dan push container image ke repositori Amazon ECR menggunakan script bash:
Note: Script ecr_push_image.sh script dapat menghasilkan error karena masalah limitasi terkait Docker.
Deploy CloudFormation template
Untuk deploy template Anda, ikuti langkah-langkah berikut.
- Deploy template konfigurasi IAM:
Output akan terlihat seperti berikut:
- Mengatur environment variable lokal untuk IAM identity mapping:
- Memeriksa apakah environment variable lokal dieksport dengan benar:
Output akan terlihat seperti berikut:
- Memperbarui IAM identity mapping untuk menghubungkan dengan AWS Lambda execution role ke kluster RBAC Amazon EKS:
Output akan terlihat seperti berikut:
- Buka file
parameters/controlplane-cluster.json
gunakan EksClusterName, EksUpdateClusterVersion, dan IAMStackName. - Deploy template konfigurasi untuk memulai upgrade control plane kluster. Langkah ini dapat memakan waktu hingga 60 menit untuk menyelesaikannya:
- Periksa versi terbaru dari kluster saat ini:
Output akan terlihat seperti berikut:
- Buka file
parameters/dataplane-daemonset.json
dan gunakan EksClusterName dan IAMStackName. - Deploy template konfigurasi untuk memulai upgrade data plan kluster DaemonSet:
Output akan terlihat seperti berikut:
Lihat Amazon CloudWatch Logs untuk output masing-masing type DaemonSet:
- Deploy template konfigurasi untuk memulai upgrade grup node kluster data plane:
Output akan terlihat seperti berikut:
Membersihkan
- Menghapus stack node group:
- Hapus stack DaemonSet:
- Hapus node cluster:
- Hapus stacl IAM:
- Menghapus wadah image dan repositori:
Kesimpulan
Kami telah menjelaskan cara upgrade kluster Kubernetes terkelola menggunakan Amazon EKS dalam pola yang dapat diulang dengan file konfigurasi, template, dan kode. Aktivitas selama proses upgrade tercatat di Amazon CloudWatch Logs. Informasi tersebut dapat digunakan untuk pemantauan, peringatan, dan audit. Anda dapat habiskan waktu untuk proses deploying perubahan ini ke prioritas lain, sebagai gantinya.
Artikel ini merupakan terjemahan dari artikel yang dibuat oleh Virginia Chu dan Manoj Shunmugam pada 08 Des 2021 berjudul Automate Amazon EKS upgrades with infrastructure as code.