Kubernetes 1.24 dan versi yang lebih baru tidak lagi mendukung Docker sebagai runtime kontainer bawaan. Komponen Dockershim juga telah dihapus pada versi tersebut. Akibatnya, kubelet tidak dapat berinteraksi dengan Docker untuk membuat dan mengelola kontainer. Oleh karena itu, Alibaba Cloud Container Service for Kubernetes (ACK) tidak lagi mendukung Docker sebagai runtime kontainer mulai dari versi 1.24 dan seterusnya. Untuk meningkatkan kluster ACK Anda ke versi 1.24 atau yang lebih baru, Anda harus memigrasikan runtime kontainer node dari Docker ke containerd.
Containerd adalah runtime kontainer standar industri yang didukung oleh Kubernetes. Dibandingkan dengan Docker, containerd memiliki waktu startup lebih cepat, menggunakan lebih sedikit sumber daya, dan lebih aman.
Rencana Migrasi dan Peningkatan dari Docker ke containerd
Sebelum melakukan peningkatan, pastikan beban kerja Anda tidak bergantung pada Docker di node untuk membangun image. Dalam kebanyakan kasus, beban kerja tidak bergantung pada runtime kontainer karena backend Docker sendiri memanggil containerd. Oleh karena itu, beban kerja Anda seharusnya tidak terpengaruh setelah migrasi.
Pertama, migrasikan lingkungan staging Anda. Kemudian, lakukan migrasi pada lingkungan produksi selama jam sepi.
Gunakan salah satu dari dua metode berikut untuk memigrasikan runtime kontainer node dari Docker ke containerd.
Opsi 1: Tingkatkan kelompok node yang ada (Direkomendasikan)
Gunakan fitur Kubelet Update pada halaman Node Pools untuk memigrasikan dari Docker ke containerd. Metode ini secara otomatis mengganti disk sistem node. Jangan menyimpan data penting pada disk sistem, atau pastikan untuk mencadangkan data tersebut terlebih dahulu. Disk data tidak terpengaruh selama peningkatan.
Masuk ke Container Service Management Console . Di panel navigasi sebelah kiri, klik Clusters.
Pada halaman Clusters, klik nama kluster Anda. Di panel navigasi sebelah kiri, klik .
-
Pada kolom Actions kelompok node target, pilih
> Kubelet Update. -
Konfirmasi informasi tentang peningkatan runtime dan klik Precheck. Setelah pemeriksaan awal berhasil, ikuti petunjuk di layar untuk menyelesaikan peningkatan runtime.
Untuk informasi lebih lanjut mengenai catatan dan konfigurasi parameter, lihat Upgrade a node pool.
Opsi 2: Buat kelompok node containerd baru untuk migrasi rotasi (Opsional)
Buat kelompok node dan atur runtime-nya ke containerd. Tambahkan jumlah node, lalu cordon kelompok node lama atau perbarui penjadwalan beban kerja aplikasi ke kelompok node baru menggunakan metode seperti label. Secara bertahap migrasikan semua aplikasi ke kelompok node baru tersebut, lalu hapus kelompok node lama.
Untuk informasi lebih lanjut tentang cara membuat kelompok node, lihat Create and manage a node pool. Untuk informasi lebih lanjut tentang cara mengatur node sebagai unschedulable, lihat Drain a node and manage its schedulability.
Pertimbangan setelah migrasi
-
Setelah migrasi, sintaks utama Dockerfile tetap tidak berubah. Namun, perhatikan konfigurasi yang terkait dengan lingkungan runtime, termasuk kompatibilitas image dasar, pengaturan variabel lingkungan, dan definisi perintah runtime, agar image dapat dibangun dan dijalankan dengan lancar di lingkungan containerd.
-
Karena containerd tidak memiliki fitur pembuatan image bawaan, Anda tidak dapat menggunakan Docker Build di node kluster setelah peningkatan. Namun, proses pull image tidak terpengaruh.
-
Setelah runtime kontainer dimigrasikan ke containerd, Docker tidak lagi mengelola siklus hidup kontainer. Oleh karena itu, Anda tidak dapat menggunakan perintah Docker atau API Docker di node untuk melihat status kontainer atau berinteraksi dengannya. Sebagai gantinya, Anda dapat menggunakan perintah containerd. Untuk informasi lebih lanjut mengenai pemetaan antara perintah containerd dan Docker, lihat Comparison of containerd, sandboxed containers, and Docker runtimes.
Cara kerja peningkatan penggantian disk
ACK secara otomatis melakukan peningkatan penggantian disk untuk memigrasikan dari Docker ke containerd. Prosesnya sebagai berikut.
-
Drain node dan atur sebagai unschedulable.
-
Matikan instance ECS untuk menghentikan node.
-
Ganti disk sistem. ID disk sistem berubah, tetapi tipe disk, alamat IP instance, dan alamat MAC elastic network interface (ENI) tetap tidak berubah.
-
Inisialisasi ulang node dan instal runtime containerd.
-
Nyalakan kembali node. Saat node siap, atur kembali sebagai schedulable.
FAQ
Berapa lama waktu yang dibutuhkan untuk setiap batch peningkatan?
Saat Anda memigrasikan dari Docker ke containerd melalui halaman peningkatan kelompok node, digunakan peningkatan penggantian disk. Jika tidak membuat snapshot, peningkatan biasanya membutuhkan waktu kurang dari 8 menit. Jika Anda memilih untuk membuat snapshot selama peningkatan, proses peningkatan dimulai setelah snapshot selesai dibuat. Waktu eksekusi tergantung pada durasi pembuatan snapshot tersebut. Peningkatan kelompok node memberikan batas waktu 40 menit untuk pembuatan snapshot. Jika snapshot tidak selesai dalam 40 menit, peningkatan node akan timeout dan gagal. Operasi peningkatan tidak dimulai pada node yang gagal tersebut. Jika Anda tidak menyimpan data bisnis di disk sistem, Anda dapat memilih untuk tidak membuat snapshot guna menghindari waktu peningkatan yang lama.
Jumlah node yang ditingkatkan dalam setiap batch adalah 1, 2, 4, 8, dan seterusnya, hingga mencapai jumlah maksimum peningkatan konkuren. Setelah mencapai jumlah maksimum tersebut, setiap batch berikutnya akan meningkatkan sejumlah node sesuai batas maksimum tersebut. Sebagai contoh, jika Anda mengatur jumlah maksimum node per batch menjadi 4, maka batch pertama akan meningkatkan 1 node, batch kedua meningkatkan 2 node, dan batch ketiga meningkatkan 4 node. Semua batch berikutnya akan meningkatkan 4 node.
Apakah layanan saya terpengaruh selama peningkatan?
Saat Anda memigrasikan dari Docker ke containerd melalui halaman peningkatan kelompok node, digunakan peningkatan penggantian disk. Selama peningkatan, node di-drain. Jika Pod Anda menerapkan logika shutdown yang mulus (Graceful shutdown and zero downtime deployments in Kubernetes) dan Anda memiliki beberapa replika yang diterapkan di node berbeda, layanan Anda tidak akan terpengaruh. Untuk mencegah beberapa replika aplikasi yang sama ditingkatkan dalam batch yang sama, Anda dapat mengatur jumlah peningkatan konkuren secara manual agar lebih kecil dari jumlah replika Pod.
Apakah saya dapat melakukan rollback setelah memigrasikan dari Docker ke containerd?
Rollback tidak didukung.
Apakah data node hilang selama migrasi dari Docker ke containerd?
Saat Anda memigrasikan dari Docker ke containerd melalui halaman peningkatan kelompok node, digunakan peningkatan penggantian disk. Metode ini mengganti disk sistem node. Jangan menyimpan data penting pada disk sistem, atau pastikan untuk mencadangkan data tersebut terlebih dahulu. Disk data tidak terpengaruh selama peningkatan.
Setelah disk sistem node diganti, apakah alamat IP node berubah?
Saat disk sistem diganti, ID disk sistem berubah. Namun, tipe disk, alamat IP instance, dan alamat MAC ENI tetap tidak berubah. Untuk informasi lebih lanjut, lihat Replace the system disk of an instance (change the OS).
Seberapa kompatibel containerd dengan Docker?
Dalam kebanyakan kasus, beban kerja tidak bergantung pada runtime kontainer karena backend Docker sendiri memanggil containerd. Oleh karena itu, beban kerja Anda seharusnya tidak terpengaruh setelah migrasi.
Karena containerd tidak memiliki fitur pembuatan image bawaan, Anda tidak dapat menggunakan Docker Build di node kluster setelah peningkatan. Namun, proses pull image tidak terpengaruh.
Setelah runtime kontainer dimigrasikan ke containerd, Docker tidak lagi mengelola siklus hidup kontainer. Oleh karena itu, Anda tidak dapat menggunakan perintah Docker atau API Docker di node untuk melihat status kontainer atau berinteraksi dengannya.
Apa yang harus saya lakukan jika sebelumnya menggunakan Docker untuk membangun image di node kluster dan kini telah meningkatkan runtime ke containerd?
Anda dapat menggunakan Alibaba Cloud Container Registry (ACR) untuk membangun image, atau membangun image secara manual.
-
Bangun dengan ACR (Direkomendasikan): Pembuatan image ACR berbasis BuildKit, tool resmi pembuatan image dari Docker. Anda dapat membuat instance ACR dan mengonfigurasi aturan build berdasarkan Dockerfile untuk secara otomatis memicu pembuatan image. Dockerfile kemudian dijalankan untuk mengeksekusi proses build. Setelah build selesai, image secara otomatis dikomit ke repository image. Untuk informasi lebih lanjut, lihat Build images using an Enterprise Edition instance.
-
Bangun secara manual: Untuk memastikan performa optimal node, buat instance Elastic Compute Service (ECS) terpisah. Instal Docker secara manual pada instance tersebut, lalu gunakan perintah Docker untuk membangun image. Untuk informasi lebih lanjut, lihat Install and use Docker and Docker Compose.
Setelah runtime node beralih dari Docker ke containerd, apa yang harus saya lakukan jika direktori Docker tidak dibersihkan dan masih menggunakan disk space?
Selain file kontainer, image, dan log yang dikelola oleh kluster Kubernetes, direktori Docker juga berisi path file yang Anda buat sendiri. Jika tidak diperlukan, harap hapus secara manual direktori Docker di disk data setelah pergantian runtime.