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?

FEATURE STATE: 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:
  • 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:
  • 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

Last modified September 20, 2023 at 12:29 AM PST: Update cgroups.md (799352604d)