Update versi kubernetes EKS.
Saat menggunakan EKS (Elastic Kubernetes Service), setiap beberapa bulan sekali kita perlu mengupdate versi kubernetesnya agar mendapatkan patch/perbaikan terkait security issues, bugs, dll. Contoh dibawah adalah 2 cluster yang saya miliki dengan versi 1.24. Salah satunya akan saya update menjadi versi 1.25.
Untuk mengupdate versi kubernetes, ada 2 bagian yang harus kita update yaitu:
- Cluster
- Nodes (Nodes Group)
Cluster
Untuk mengupdate versi kubernetes di cluster caranya cukup mudah:
- Pilih cluster yang mau kita update versinya
- Klik Update now pada kolom Kubernetes version (lihat gambar diatas)
- Muncul popup seperti gambar dibawah. Untuk mengupdate versi kubernetes, harus dilakukan secara bertahap (per versi). Sekarang versinya adalah 1.24 maka harus diupdate ke 1.25 (tidak bisa langsung loncat ke 1.26).
- Perlu diperhatikan bahwa setelah berhasil mengupdate ke versi 1.25, kita tidak bisa downgrade ke versi 1.24. Jika ingin balik ke versi yang sebelumnya (1.24), maka harus create cluster baru seperti notifikasi pada gambar dibawah ini:
- Klik Update
- Tunggu beberapa menit (sekitar 10-15 menit)
- Jika berhasil, maka tampilannya akan seperti ini (cluster terupdate menjadi versi 1.25)
Node (Nodes Group)
Untuk mengupdate versi kubernetes di node, lumayan makan waktu. Silahkan ikuti stepnya dengan teliti dan perlahan.
Perlu diperhatikan
Ada 2 hal yang perlu diperhatikan. Saya jabarkan secara detail:
- Pastikan instance EC2 (node) tidak dalam keadaan protected from scale in pada Autoscaling group EC2. Jika terprotect, matikan dulu karena saat mengupdate kubernetes (menggunakan metode rolling update) nanti, instance lama akan di drain / terminated dan diganti yang baru. Jika instance lama dalam keadaan protected from scale in, instance tersebut tidak bisa diterminate dan proses update kubernetes akan gagal.
- Jika pods kubernetes ada yang berstatus PDB (Pods Disruption Budget), pastikan replicanya diset minimal 2 agar pods tersebut bisa dipindahkan ke instance (node) yang baru. Karena jika replicanya hanya diset 1 dan PDB diset minAvailablenya 1, maka pods tidak bisa dipindahkan ke instance baru dan proses update kubernetes akan gagal.
Untuk memastikan pods PDB bisa dipindahkan (disruption/diganggu) ke instance baru, kita bisa jalankan command:kubectl get pdb --all-namespaces
, pastikan ALLOWED DISRUPTIONS terset 1. Contoh dibawah saya menggunakan istio dan ebs-csi yang berstatus PDB.
Update Versi Kubernetes di Node Group
Jika kedua hal diatas sudah terpenuhi, kita bisa update kubernetesnya dengan cara berikut:
- Masuk ke detail cluster kubernetesnya
- Klik tab Compute untuk melihat list nodenya
- Pada Node Groups, kita bisa lihat versinya sekarang 1.24. klik Update Now untuk mengupdate ke versi 1.25
- Akan muncul popup seperti gambar dibawah. Ada 2 pilihan untuk mengupdate kubernetesnya. Yang pertama Rolling update, dan yang kedua force update. Disini kita akan menggunakan cara pertama yaitu rolling update karena lebih aman. Artinya rolling update, instance baru akan dicreate lebih dulu. Setelah itu pods perlahan-lahan dipindahkan ke instance baru tersebut, kemudian instance lamanya satu per satu diterminate. Dengan cara ini aplikasi yang kita punya akan zero downtime.
- Pilih Rolling update dan Klik Update
- Setelah itu Node Groupsnya akan berubah statusnya menjadi Updating. Tunggu saja. Lama tidaknya proses update tergantung dari banyaknya pods yang ada dicluster. Semakin banyak pods semakin lama updatenya.
- Selama proses update, akan ada beberapa instance baru yang tercreate. Kita bisa cek didashboard EC2.
- Instance-instance baru tersebut berisi kubernetes versi 1.25 (sesuai yang kita update). Kita bisa lihat juga, akan ada 2 versi kubernetes yang berjalan yaitu versi 1.24 (node yang lama) dan 1.25 (node yang baru). Gunakan command
kubectl get nodes
.
- Pods yang ada di node lama akan dipindahkan ke node baru (versi 1.25) secara perlahan-lahan. Pods lama akan diterminating.
- Jika pods sudah dipindahkan, node lama akan di drain secara otomatis, seperti dibawah ini:
- Jika statusnya Ready, SchedulingDisabled artinya instance/node masih ready namun dijadwalkan untuk di drain/terminate. NotReady, SchedulingDisabled artinya instance sudah diterminate, node ini sebentar lagi akan hilang dari list nodes di kubernetes.
- Jika statunya sudah NotReady, SchedulingDisabled kita bisa cek didashboard EC2, seharusnya instancenya sudah diterminate
- Jika kita lihat di nodes group EKS, statusnya sekarang Active dan versinya adalah 1.25
Yeah! Kita berhasil meng update versi kubernetes EKS !