cgroup v2 menyatukan kontrol resource, meningkatkan penanganan memori, dan memastikan kompatibilitas dengan Kubernetes.
Versi cgroup
Kernel Linux menyediakan cgroup v1 dan cgroup v2 untuk membatasi, menghitung, dan mengisolasi resource fisik (seperti CPU, memori, dan I/O) bagi kelompok proses. cgroup v2 mengatasi masalah multiple-hierarchy pada v1 melalui model controller yang terpadu. Karena antarmuka filesystem tidak kompatibel, aplikasi yang mengakses cgroupfs secara langsung harus diperbarui.
Lihat Perbedaan antara cgroup v1 dan cgroup v2.
Kubernetes v1.31 telah memindahkan dukungan cgroup v1 ke mode maintenance, dan v1.35 akan menghentikan dukungan tersebut sepenuhnya. Berikut adalah keuntungan utama cgroup v2:
-
Stabilitas lebih baik: Unified memory accounting mengelola page cache secara efektif, mengatasi masalah pada cgroup v1 di mana aplikasi dengan I/O disk tinggi mengambil alih memori dan menyebabkan event OOMKilled.
-
Hierarki terpadu: Semua resource controller (seperti CPU dan memori) berbagi satu hierarki tunggal, sehingga menghilangkan konflik konfigurasi akibat hierarki paralel pada cgroup v1.
-
Observabilitas resource yang ditingkatkan: Pressure Stall Information (PSI) mengukur waktu stall pada CPU, memori, atau I/O, serta menyediakan metrik detail halus untuk analisis bottleneck.
Memeriksa versi cgroup
Login ke node, lalu jalankan perintah berikut untuk memeriksa versi cgroup.
# Jalankan perintah ini setelah login ke node target
stat -fc %T /sys/fs/cgroup/
# Output yang diharapkan:
# cgroup2fs --> Menunjukkan cgroup v2
# tmpfs --> Menunjukkan cgroup v1
Prosedur migrasi
Tingkat node: Mengubah sistem operasi
Versi cgroup pada node ditentukan oleh sistem operasinya.
-
Kelompok node ECS (termasuk EGS):
Ubah sistem operasi di tingkat kelompok node. Sistem operasi berikut menggunakan cgroup v2 secara default:
-
Alibaba Cloud Linux 3.2104 LTS 64-bit container-optimized
-
Alibaba Cloud Linux 4 LTS 64-bit container-optimized
-
ContainerOS 3.3 dan yang lebih baru
-
RHEL 9 dan yang lebih baru
-
Ubuntu 22 dan yang lebih baru
-
-
Instal ulang node dan gabungkan kembali ke kluster:
-
Hapus node: Hapus node Lingjun dari kluster ACK. Secara opsional, lakukan Drain sebelum penghapusan.
Proses drain node memerlukan node lain dengan resource yang memadai untuk menampung Pod yang dievakuasi. Pastikan kluster memiliki kapasitas yang cukup.
-
Instal ulang OS: Di Konsol Lingjun, instal ulang node menggunakan citra OS yang mendukung cgroup v2.
-
Gabungkan kembali ke kluster: Tambahkan node Lingjun kembali ke kluster ACK.
-
-
Anda mengelola OS secara mandiri. Lakukan upgrade ke OS yang kompatibel dengan cgroup v2 untuk mencegah kegagalan saat melakukan upgrade atau menggabungkan kembali node.
Tingkat aplikasi: Memastikan kompatibilitas workload
cgroup v1 dan v2 memiliki struktur filesystem serta nama parameter yang tidak kompatibel. Aplikasi apa pun yang membaca /sys/fs/cgroup secara langsung harus diverifikasi atau di-upgrade agar mendukung cgroup v2.
|
Kategori |
Deskripsi |
|
Aplikasi Java |
|
|
Aplikasi Go |
Jika Anda menggunakan uber-go/automaxprocs, lakukan upgrade ke v1.5.1 atau yang lebih baru. |
|
cAdvisor |
Jika Anda men-deploy cAdvisor sebagai DaemonSet mandiri, perbarui ke v0.43.0 atau yang lebih baru. |
|
Nginx Ingress |
Versi lama dapat memicu error OOMKilled akibat parsing core CPU yang tidak tepat pada cgroup v2. Lakukan upgrade ke v1.11.2 atau yang lebih baru. Lihat GitHub Issue #9665. Untuk melakukan upgrade Nginx Ingress Controller ACK, lihat Upgrade komponen Nginx Ingress Controller. |
Aplikasi dan komponen lainnya
-
Agen pemantauan dan APM pihak ketiga: Alat seperti Prometheus Node Exporter, Datadog Agent, dan SkyWalking membaca cgroupfs untuk memperoleh metrik. Versi yang tidak kompatibel dapat menyebabkan kehilangan data atau anomali. Lakukan upgrade ke versi yang mendukung cgroup v2.
-
Alat keamanan dan audit: Alat seperti Falco dan Sysdig menggunakan data cgroup untuk mengaitkan event. Versi yang tidak kompatibel dapat menyebabkan kegagalan aturan deteksi atau positif palsu. Lakukan upgrade ke versi yang kompatibel dan verifikasi aturan di lingkungan pengujian.
-
Aplikasi sensitif performa dan skrip kustom: Skrip startup yang membaca file cgroup untuk auto-tuning (seperti mengatur jumlah thread berdasarkan kuota CPU) akan gagal pada cgroup v2 karena perubahan path. Tinjau dan perbarui skrip tersebut agar sesuai dengan cgroup v2.
Rekomendasi produksi
-
Kompatibilitas aplikasi
Pastikan aplikasi dan skrip Anda tidak bergantung pada file cgroup v1 seperti
cpu.cfs_quota_us, karena cgroup v2 menggunakan antarmuka yang tidak kompatibel. -
Konfigurasi node kustom
Mengubah OS akan mereset node. Gunakan fitur kelompok node untuk mempertahankan modifikasi kustom. Topik terkait:
-
Pemantauan dan peringatan: Aktifkan Layanan Terkelola untuk Prometheus Alibaba Cloud untuk memantau kesehatan kluster dan penggunaan resource kontainer guna mendeteksi anomali secara cepat.