Tentang cgroup v2
Pada Linux, control groups berfungsi untuk membatasi resources yang dialokasikan ke setiap program yang sedang berjalan.
Kubelet dan container runtime perlu berinteraksi dengan cgroups untuk menerapkan resource management pada pod dan kontainer yang mencakup pengalokasian kebutuhan CPU/Memori dan workloads dalam sebuah container.
Terdapat dua versi cgroups dalam Linux: cgroup v1 dan cgroup v2. Cgroup v2 adalah generasi baru dari cgroup
API.
Apa itu cgroup v2?
Kubernetes v1.25 [stable]
cgroup v2 adalah versi lanjutan dari Linux cgroup
API. cgroup v2 menyediakan unified control system dan kemampuan resource management yang lebih baik.
cgroup v2 menawarkan beberapa peningkatan dibandingkan cgroup v1, seperti berikut:
- Single unified hierarchy design pada API
- Delegasi sub-tree yang lebih aman pada containers
- Fitur-fitur yang lebih baru seperti Pressure Stall Information
- Manajemen alokasi resource dan pengisolasian antar resources yang lebih baik
- Perhitungan yang lebih terpadu untuk berbagai jenis pengalokasian memori (memori jaringan, memori kernel, dll)
- Menghitung perubahan resource yang tidak langsung seperti respon cache pada sebuah halaman
Beberapa fitur-fitur Kubernetes secara eksklusif menggunakan cgroup v2 untuk resource management dan isolation yang lebih baik. Sebagai contoh, fitur MemoryQoS meningkatkan memori QoS dan mengandalkan cgroup v2 primitif.
Penggunaan cgroup v2
Cara yang direkomendasikan untuk menggunakan cgroup v2 adalah dengan menggunakan Linux Distribution yang menggunakan cgroup v2 secara default.
Untuk memastikan apakah Linux Distribution yang dipakai menggunakan cgroup v2, silahkan membaca Mengidentifikasi versi cgroup pada Linux.
Requirements
Penggunaan cgroup v2 memiliki beberapa requirements:
- Distribusi OS mengaktifkan cgroup v2
- Menggunakan Linux kernel versi 5.8 atau setelahnya
- Container runtime mendukung cgroup v2. Sebagai contoh:
- containerd v1.4 dan setelahnya
- cri-o v1.20 dan setelahnya
- Kubelet dan container runtima dikonfigurasi untuk menggunakan systemd cgroup driver
Distribusi Linux yang mengaktifkan cgroup v2
Untuk list Distribusi Linux yang menggunakan cgroup v2, bisa dilihat di cgroup v2 documentation
- Container Optimized OS (since M97)
- Ubuntu (since 21.10, 22.04+ recommended)
- Debian GNU/Linux (since Debian 11 bullseye)
- Fedora (since 31)
- Arch Linux (since April 2021)
- RHEL and RHEL-like distributions (since 9)
Untuk memeriksa apakah distribusi Linux yang anda gunakan menggunakan cgroup v2, lihat dokumentasi distribusi linux anda gunakan atau ikuti petunjuk pada Mengidentifikasi versi cgroup pada Linux.
Anda juga dapat mengaktifkan cgroup v2 secara manual pada distribusi Linux dengan memodifikasi argumen kernel cmdline boot. Jika distribusi Linux anda menggunakan GRUB, tambahkan systemd.unified_cgroup_hierarchy=1
pada variabel GRUB_CMDLINE_LINUX
dalam /etc/default/grub
, diikuti dengan menjalankan sudo update-grub
. Namun, cara yang direkomendasikan adalah dengan menggunakan distribusi Linux yang telah mengaktifkan cgroup v2 secara default.
Migrasi ke cgroup v2
Untuk migrasi ke cgroup v2, pastikan Anda telah memenuhi requirements yang dibutuhkan, kemudian upgrade versi kernel yang telah mengaktifkan cgroup v2 secara default.
Kubelet secara otomatis akan mendeteksi bahwa OS yang digunakan berjalan pada cgroup v2 dan bekerja sebagaimana mestinya tanpa memerlukan konfigurasi tambahan.
Seharusnya tidak ada perubahan yang terlihat atau dirasakan pada user experience ketika beralih menggunakan cgroup v2, kecuali pengguna mengakses cgroup file system secara langsung, baik itu pada node atau dari dalam container.
cgroup v2 menggunakan API yang berbeda dari cgroup v1, jadi ketika terdapat aplikasi yang secara langsung mengakses cgroup file system, aplikasi tersebut perlu diupdate ke versi terbaru yang kompatibel dengan cgroup v2. Sebagai contoh:
- Beberapa agen monitoring dan security dari third-party, mungkin bergantung pada cgroup filesystem. Perbarui agen-agen ini ke versi yang mendukung cgroup v2.
- Jika Anda menjalankan cAdvisor sebagai stand-alone DaemonSet untuk memonitor pods dan containers, perbarui ke versi v0.43.0 atau setelahnya.
- Jika Anda men-deploy aplikasi Java, disarankan untuk menggunakan versi yang kompatibel dengan cgroup v2 secara keseluruhan:
- OpenJDK / HotSpot: jdk8u372, 11.0.16, 15 dan setelahnya
- IBM Semeru Runtimes: jdk8u345-b01, 11.0.16.0, 17.0.4.0, 18.0.2.0 dan setelahnya
- IBM Java: 8.0.7.15 dan setelahnya
- Jika Anda menggunakan package uber-go/automaxprocs, pastikan versi yang Anda gunakan adalah v1.5.1 atau setelahnya.
Mengidentifikasi versi cgroup pada Linux
Versi cgroup bergantung pada distribusi Linux yang digunakan dan versi cgroup yang dikonfigurasi pada OS secara default. Untuk memastikan versi cgroup yang digunakan pada distribusi Linux, jalankan command stat -fc %T /sys/fs/cgroup/
pada Linux node:
stat -fc %T /sys/fs/cgroup/
Untuk cgroup v2, outputnya adalah cgroup2fs
.
Untuk cgroup v1, outputnya adalah tmpfs.
Selanjutnya
- Pelajari lebih lanjut tentang cgroups
- Pelajari lebih lanjut tentang container runtime
- Pelajari lebih lanjut tentang cgroup drivers