cgroup v2 menyatukan pengendalian resource, meningkatkan penanganan memori, dan memastikan kompatibilitas dengan Kubernetes.
Versi cgroup
Kernel Linux menyediakan cgroup v1 dan cgroup v2 untuk membatasi, mencatat, dan mengisolasi resource fisik (seperti CPU, memori, dan I/O) bagi kelompok proses. cgroup v2 menyelesaikan masalah hierarki ganda pada v1 melalui model pengendali terpadu. Antarmuka filesystem-nya tidak kompatibel, sehingga aplikasi yang mengakses cgroupfs secara langsung harus diperbarui.
Lihat Perbedaan antara cgroup v1 dan cgroup v2.
Kubernetes v1.31 memindahkan dukungan cgroup v1 ke mode maintenance, dan v1.35 menghentikan dukungannya. Keunggulan utama cgroup v2:
-
Stabilitas lebih baik: Pencatatan memori terpadu mengelola page cache secara efektif, mengatasi masalah pada cgroup v1 di mana aplikasi dengan I/O disk tinggi mendahului alokasi memori dan menyebabkan event OOMKilled.
-
Hierarki terpadu: Semua pengendali resource (seperti CPU dan memori) berbagi satu hierarki tunggal, menghilangkan konflik konfigurasi akibat hierarki paralel pada cgroup v1.
-
Observabilitas resource yang ditingkatkan: Pressure Stall Information (PSI) mengukur waktu terhenti pada CPU, memori, atau I/O, memberikan metrik detail halus untuk analisis bottleneck.
Periksa versi cgroup
Masuk ke node dan jalankan perintah berikut untuk memeriksa versi cgroup-nya.
# Jalankan perintah ini setelah masuk ke node target
stat -fc %T /sys/fs/cgroup/
# Expected output:
# cgroup2fs --> Menunjukkan cgroup v2
# tmpfs --> Menunjukkan cgroup v1
Prosedur migrasi
Tingkat node: Ubah sistem operasi
Versi cgroup suatu 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 versi lebih baru
-
RHEL 9 dan versi lebih baru
-
Ubuntu 22 dan versi lebih baru
-
-
Instal ulang node dan tambahkan kembali ke kluster:
-
Hapus node: Hapus node Lingjun dari kluster ACK. Secara opsional lakukan Drain sebelum penghapusan.
Drain node memerlukan node lain dengan resource yang cukup untuk menampung Pod yang dievakuasi. Pastikan kluster memiliki kapasitas yang memadai.
-
Instal ulang OS: Di Konsol Lingjun, instal ulang node dengan citra OS yang mendukung cgroup v2.
-
Tambahkan kembali ke kluster: Tambahkan kembali node Lingjun ke kluster ACK.
-
-
Anda mengelola OS-nya sendiri. Lakukan upgrade ke OS yang kompatibel dengan cgroup v2 untuk mencegah kegagalan saat melakukan upgrade atau menambahkan kembali node.
Tingkat aplikasi: Pastikan kompatibilitas workload
cgroup v1 dan v2 memiliki struktur filesystem dan nama parameter yang tidak kompatibel. Aplikasi apa pun yang membaca langsung /sys/fs/cgroup harus diverifikasi atau ditingkatkan agar kompatibel dengan cgroup v2.
|
Kategori |
Deskripsi |
|
Aplikasi Java |
|
|
Aplikasi Go |
Jika Anda menggunakan uber-go/automaxprocs, lakukan upgrade ke v1.5.1 atau versi lebih baru. |
|
cAdvisor |
Jika Anda men-deploy cAdvisor sebagai DaemonSet mandiri, perbarui ke v0.43.0 atau versi lebih baru. |
|
Nginx Ingress |
Versi lama dapat memicu error OOMKilled karena penguraian jumlah core CPU yang salah di cgroup v2. Lakukan upgrade ke v1.11.2 atau versi lebih baru. Lihat GitHub Issue #9665. Untuk melakukan upgrade Nginx Ingress Controller di ACK, lihat Upgrade komponen Nginx Ingress Controller. |
Aplikasi dan komponen lainnya
-
Agen monitoring dan APM pihak ketiga: Alat seperti Prometheus Node Exporter, Datadog Agent, dan SkyWalking membaca cgroupfs untuk metrik. Versi yang tidak kompatibel dapat menyebabkan kehilangan data atau anomali. Lakukan upgrade ke versi yang mendukung cgroup v2.
-
Alat keamanan dan auditing: Alat seperti Falco dan Sysdig menggunakan data cgroup untuk mengatribusikan event. Versi yang tidak kompatibel dapat menyebabkan kegagalan aturan deteksi atau false positive. 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 (misalnya mengatur jumlah thread berdasarkan kuota CPU) akan gagal di bawah cgroup v2 karena perubahan path. Tinjau dan perbarui skrip tersebut agar kompatibel dengan cgroup v2.
Rekomendasi produksi
-
Kompatibilitas aplikasi
Verifikasi bahwa 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 Prometheus monitoring Alibaba Cloud untuk mengamati kesehatan kluster dan penggunaan resource kontainer guna deteksi anomali yang cepat.