Halaman ini menunjukkan cara memigrasikan node pool dan cluster Standar Google Kubernetes Engine (GKE) dari Docker ke image node yang menggunakan runtime container di containerd.
Ringkasan
Node Kubernetes menggunakan runtime container untuk meluncurkan, mengelola, dan menghentikan container yang berjalan di Pod. Runtime container adalah runtime container standar industri yang didukung oleh GKE.
Runtime containerd menyediakan abstraksi lapisan yang memungkinkan implementasi serangkaian fitur seperti gVisor dan Streaming image untuk memperluas fungsi GKE. Runtime containerd dianggap lebih hemat resource dan aman daripada runtime Docker.
Untuk memigrasikan runtime container:
- Mengidentifikasi node yang menggunakan runtime Docker
- Memastikan dampak migrasi
- Mengubah image node
Sebelum memulai
Sebelum memulai, pastikan Anda telah menjalankan tugas berikut:
- Aktifkan Google Kubernetes Engine API. Aktifkan Google Kubernetes Engine API
- Jika ingin menggunakan Google Cloud CLI untuk tugas ini,
instal lalu
lakukan inisialisasi
gcloud CLI. Jika sebelumnya Anda telah menginstal gcloud CLI, dapatkan versi terbaru dengan menjalankan
gcloud components update
.
Mengidentifikasi node yang menggunakan runtime Docker
Anda dapat memeriksa node mana yang menggunakan image node berbasis Docker dengan metode berikut:
- Gunakan skrip untuk melakukan iterasi pada semua node di semua cluster GKE di seluruh project Google Cloud Anda.
- Gunakan Google Cloud CLI,
kubectl
, atau konsol Google Cloud untuk mengidentifikasi image node. - Gunakan insight dan rekomendasi yang tidak digunakan lagi untuk mengidentifikasi cluster dan node di zona atau region tertentu dalam project Google Cloud.
Sebaiknya gunakan skrip untuk mengidentifikasi dengan cepat semua node yang perlu Anda migrasikan.
Menggunakan skrip untuk mengidentifikasi node Docker
Skrip berikut melakukan iterasi pada setiap node di setiap cluster dalam project yang tersedia dan memberi Anda rekomendasi yang dapat ditindaklanjuti, seperti:
- Apakah penyediaan otomatis node dikonfigurasi untuk image Docker
- Image node containerd yang disarankan untuk migrasi
- Versi image node yang disarankan untuk migrasi
- Perintah yang disarankan untuk dijalankan guna memigrasikan node dan setelan yang diidentifikasi
Skrip tersebut mengabaikan cluster GKE Autopilot, yang menggunakan Container-Optimized OS dengan image node containerd secara default.
Jalankan skrip berikut:
Mengidentifikasi image node menggunakan Google Cloud
Anda dapat memeriksa image node untuk node yang sudah ada menggunakan Google Cloud CLI,
kubectl
, atau konsol Google Cloud.
gcloud
Jalankan perintah berikut:
gcloud container node-pools list \
--cluster=CLUSTER_NAME \
--format="table(name,version,config.imageType)"
Ganti CLUSTER_NAME
dengan nama cluster Anda.
Outputnya mirip dengan yang berikut ini:
NAME NODE_VERSION IMAGE_TYPE
default-pool 1.19.6-gke.600 UBUNTU
Konsol
Buka halaman Google Kubernetes Engine di konsol Google Cloud.
Di daftar cluster, klik nama cluster yang ingin diverifikasi.
Pilih tab Node.
Di bagian Node pool, periksa nilai di kolom Jenis image.
kubectl
Jalankan perintah berikut:
kubectl get nodes -o wide
Outputnya mirip dengan yang berikut ini:
# For Docker runtime
NAME STATUS VERSION OS-IMAGE CONTAINER-RUNTIME
gke-node-1 Ready v1.16.15-gke.6000 Container-Optimized OS from Google docker://19.3.1
gke-node-2 Ready v1.16.15-gke.6000 Container-Optimized OS from Google docker://19.3.1
gke-node-3 Ready v1.16.15-gke.6000 Container-Optimized OS from Google docker://19.3.1
Nilai di kolom CONTAINER-RUNTIME
menunjukkan runtime dan versi.
Mengidentifikasi cluster menggunakan insight dan rekomendasi yang tidak digunakan lagi
GKE mendeteksi penggunaan beberapa fitur dan API yang tidak digunakan lagi, termasuk image node berbasis Docker. Untuk mempelajari lebih lanjut, lihat penghentian penggunaan GKE.
Sebagai bagian dari deteksi penghentian penggunaan, GKE menghasilkan
insight dan rekomendasi
yang mengidentifikasi penggunaan image node berbasis Docker dengan subjenis insight DEPRECATION_K8S_1_24_DOCKERSHIM
.
Sebuah penghubung insight dan rekomendasi mengidentifikasi cluster yang memiliki node yang menggunakan image node berbasis Docker. Setiap insight dan rekomendasi menyediakan daftar node pool tertentu di cluster yang menggunakan image node berbasis Docker dan harus dimigrasikan ke image node containerd.
Untuk memulai, ikuti petunjuk untuk melihat insight dan rekomendasi yang tidak digunakan lagi. Untuk perintah gcloud CLI, gunakan flag berikut untuk melihat insight penghentian penggunaan ini:
--filter="insightSubtype:DEPRECATION_K8S_1_24_DOCKERSHIM"
Setelah mengidentifikasi node pool cluster mana yang menggunakan image node berbasis Docker, ikuti petunjuk untuk mengubah image node ke image node containerd.
Memastikan dampak migrasi
Sebelum memigrasikan cluster produksi dan node pool ke image node yang menggunakan containerd, sebaiknya uji dampak migrasi di lingkungan staging untuk meminimalkan risiko masalah.
Anda sebaiknya mengupgrade node secara mandiri saat memigrasikan node, sehingga Anda dapat memisahkan variabel saat memverifikasi fungsi workload dengan konfigurasi baru. Selain itu, jika Anda mengupgrade node pool ke versi 1.24 secara bersamaan, Anda tidak dapat melakukan roll back perubahan karena versi 1.24 tidak mendukung node Docker dan Anda tidak dapat mendowngrade versi minor.
Mengubah image node menjadi image containerd
Jika menggunakan skrip untuk mengidentifikasi node Docker, Anda dapat menggunakan perintah yang disarankan yang ditampilkan oleh skrip untuk mengubah setelan penyediaan otomatis node dan image node ke containerd yang setara.
Anda juga dapat memigrasikan node dari jenis image Docker ke jenis image containerd dengan memperbarui node pool dan menetapkan image yang berbeda menggunakan gcloud CLI atau konsol Google Cloud.
GKE menggunakan strategi upgrade node yang dipilih dan konfigurasi untuk memigrasikan image node. Untuk migrasi ini, sebaiknya gunakan strategi upgrade blue-green karena jika workload Anda mengalami masalah dengan image node baru selama upgrade, Anda dapat melakukan rollback ke lingkungan sebelumnya dengan konfigurasi image node asli.
gcloud
Jalankan perintah berikut:
gcloud container clusters upgrade CLUSTER_NAME \
--image-type=NODE_IMAGE \
--node-pool=POOL_NAME \
--cluster-version=NODE_VERSION
Ganti kode berikut:
NODE_IMAGE
: image node yang Anda ingin node gunakan.POOL_NAME
: nama node pool yang akan dimigrasikan.NODE_VERSION
: versi node pool yang sudah ada. Sebaiknya setel flag ini karena jika tidak, GKE akan mencoba mengupgrade versi node pool ke versi bidang kontrol dan memperbarui image node dalam operasi yang sama. Jika bidang kontrol menjalankan versi 1.24, perintah akan gagal. Jika bidang kontrol menjalankan versi 1.23, perintah akan berhasil, sehingga Anda tidak dapat menguji dua perubahan (upgrade versi dan update image) secara terpisah.
Outputnya mirip dengan yang berikut ini:
NAME NODE_VERSION IMAGE_TYPE
default-pool 1.23.6-gke.600 UBUNTU_CONTAINERD
Konsol
Buka halaman Google Kubernetes Engine di konsol Google Cloud.
Di daftar cluster, klik nama cluster yang ingin diverifikasi.
Klik tab Node.
Di bagian Node pool, klik nama node pool yang ingin Anda ubah.
Di halaman Detail node pool, klik
Edit.Di bagian Node, di bagian Jenis image, klik Ubah.
Pilih salah satu jenis image containerd.
Klik Ubah.
Melakukan roll back ke image node Docker
Jika node Anda dimigrasikan secara otomatis atau manual ke node containerd dan melihat masalah dengan workload, lakukan langkah berikut untuk kembali ke image node Docker:
- Pilih langkah berikut berdasarkan status operasi:
- Jika operasi masih berlangsung, Anda dapat membatalkan dan melakukan roll back.
- Jika operasi selesai, lihat langkah di bagian sebelumnya, lalu pilih image Docker yang setara.
- Konfigurasikan pengecualian pemeliharaan agar mencegah GKE mencoba kembali migrasi untuk sementara.
- Selidiki penyebab utama masalah sehingga Anda dapat bermigrasi dari Docker dan pastikan cluster menjalankan versi GKE yang didukung.
- Coba lagi untuk mengubah image node ke image containerd. Jika Anda menghapus pengecualian pemeliharaan, GKE akan memicu operasi kembali.
Memperbarui konfigurasi alat Infrastructure as Code (IaC)
Jika menggunakan alat IaC seperti Terraform, Ansible, atau Pulumi untuk mengelola cluster GKE, pastikan Anda memperbarui konfigurasi untuk menggunakan image node containerd agar alat tersebut tidak merekonsiliasi status yang sebelumnya diinginkan dengan kondisi baru yang sebenarnya. Misalnya, penyedia Terraform GKE mendukung jenis image yang dapat dikonfigurasi.
Perbarui konfigurasi apa pun agar alat ini tidak memperbarui image node kembali ke image node berbasis Docker setelah Anda bermigrasi ke image node containerd.
Mengubah image node default untuk penyediaan otomatis node
Jika Anda menggunakan penyediaan otomatis node di cluster Anda, ubah jenis image default menjadi image node containerd. Perubahan pada jenis gambar default hanya berlaku untuk node pool baru yang disediakan secara otomatis. Anda harus mengubah image node secara manual untuk node pool yang disediakan secara otomatis.
Anda dapat mengubah jenis image penyediaan otomatis node default menggunakan gcloud CLI atau file konfigurasi.
gcloud
Jalankan perintah berikut:
gcloud container clusters update CLUSTER_NAME \
--enable-autoprovisioning \
--autoprovisioning-image-type=IMAGE_TYPE
Ganti kode berikut:
CLUSTER_NAME
: nama cluster yang akan diperbarui.IMAGE_TYPE
: jenis image node, yang dapat berupa salah satu dari berikut ini:cos_containerd
ubuntu_containerd
File
Anda dapat menggunakan file konfigurasi YAML untuk mengubah jenis image node default untuk penyediaan otomatis node. Saat menggunakan file, Anda juga harus menentukan nilai maksimum untuk resource CPU dan memori.
Simpan file YAML berikut:
resourceLimits: - resourceType: 'cpu' minimum: 4 maximum: 10 - resourceType: 'memory' maximum: 64 autoprovisioningNodePoolDefaults: imageType: 'IMAGE_TYPE'
Ganti
IMAGE_TYPE
dengan jenis image containerd.Terapkan konfigurasi:
gcloud container clusters update CLUSTER_NAME \ --enable-autoprovisioning \ --autoprovisioning-config-file=FILE_NAME
Ganti
FILE_NAME
dengan jalur ke file konfigurasi.
Pemecahan masalah
Untuk pemecahan masalah dan masalah umum dengan solusi, lihat Pemecahan masalah runtime container.