Episode ini mengajarkan pembatasan resource container lewat cgroup2: lxc.cgroup2.memory.max untuk memory dan lxc.cgroup2.cpu.max untuk CPU, serta verifikasi dengan lxc-cgroup (legacy) dan systemd-cgls di host.

Di episode 6 container kalian sudah punya jaringan. Tapi apa yang mencegah satu container mengonsumsi seluruh 32 GB RAM host? Jawabannya: cgroups. Di episode 7 kita memasang batas resource lewat cgroup2 — konsep yang sudah kita perkenalkan di episode 2 — lalu memverifikasinya dengan alat bawaan LXC dan sistem host. Tanpa limit, satu aplikasi bocor memory bisa membawa turun seluruh host.
Cgroups adalah meteran listrik per unit di gedung kita: namespaces membatasi "apa yang terlihat", cgroups membatasi "apa yang boleh dipakai". Tanpa cgroups, perilaku buruk satu container (loop CPU penuh, memory leak) akan mengganggu semua tenant lain. Dengan limit yang tepat:
LXC modern memakai cgroup2, dan limit ditulis langsung di config container dengan awalan lxc.cgroup2.. File config container berada di /var/lib/lxc/<nama>/config. Ini contoh lengkap untuk container c1:
# Limitasi memory: maksimal 512MB
lxc.cgroup2.memory.max = 512M
# Limitasi CPU: 200000/100000 = 2 core penuh
lxc.cgroup2.cpu.max = 200000 100000
# Beri tahu kernel agar swappiness rendah untuk container
lxc.cgroup2.memory.swap.max = 0
# Prioritas I/O (0-10000), semakin kecil semakin diprioritaskan
lxc.cgroup2.io.weight = 100Mari bedah tiap baris:
lxc.cgroup2.memory.max = 512M — batas memory utama. Jika container menembus batas ini, kernel akan menekan (pressure) atau meng-OOM-kill proses di dalamnya. Unit bisa K, M, G, atau angka byte mentah.lxc.cgroup2.cpu.max = 200000 100000 — formatnya <quota> <period> dalam microsecond. 200000/100000 berarti 2 core; 50000/100000 berarti setengah core.lxc.cgroup2.memory.swap.max = 0 — mematikan swap untuk container, membuat memory limit lebih tegas.lxc.cgroup2.io.weight = 100 — skala 1-10000; memengaruhi seberapa besar jatah bandwidth I/O blok relatif terhadap container lain.Tip
Nama kunci cgroup2 berbeda dari cgroup v1. Di v1 kalian menulis lxc.cgroup.memory.limit_in_bytes; di v2 menjadi lxc.cgroup2.memory.max. Pada LXC 7.0 dengan kernel modern, gunakan varian cgroup2 — lebih bersih dan didukung penuh oleh systemd.
Setelah mengedit config, restart container agar limit berlaku:
lxc-stop -n c1
lxc-start -n c1Alat lxc-cgroup memungkinkan melihat dan mengubah nilai cgroup container secara langsung. Baca nilai saat ini:
lxc-cgroup -n c1 memory.max
lxc-cgroup -n c1 cpu.maxWarning
lxc-cgroup dianggap legacy dan hanya mengenal nama kunci cgroup v1. Pada LXC 7.0, ia tetap ada untuk kompatibilitas, tetapi verifikasi utama di bawah ini (systemd-cgls) lebih akurat dan menjadi standar pada cgroup2.
Cara paling tepercaya adalah melihat hierarki cgroup langsung dari host. Temukan container dalam tree systemd:
systemd-cgls /lxc/c1Kalian juga bisa membaca file cgroup secara langsung:
cat /sys/fs/cgroup/lxc/c1/memory.max
cat /sys/fs/cgroup/lxc/c1/cpu.maxJika angka yang terbaca sama dengan yang dikonfigurasi, limit sudah berlaku.
Bukti terbaik adalah eksperimen. Masuk ke container dan coba alokasikan memory lebih dari limit:
lxc-attach -n c1 -- dd if=/dev/zero of=/dev/null bs=1M count=10000Dengan limit 512M, proses ini akan di-OOM-kill atau ditekan — sementara host tetap sehat. Di sisi CPU:
lxc-attach -n c1 -- sh -c 'while :; do :; done &'Pantau penggunaan CPU dari host dengan top dan systemd-cgtop:
systemd-cgtopCPU container akan terkunci di jatahnya (misal 200%), tidak lebih.
Warning
Ingat untuk mematikan proses test di atas (lxc-stop -n c1 atau kill dari dalam container). Proses bakar CPU yang dibiarkan jalan akan menghabiskan jatah CPU container secara permanen dan bisa memperlambat semua workload lain di container yang sama.
Aturan praktis perencanaan:
cpu.max longgar jika beban bersifat bursty dan saling melengkapi.500M vs 500m) bisa menghasilkan angka tak terduga.Inti yang harus dibawa pulang:
lxc.cgroup2.memory.max dan lxc.cgroup2.cpu.max adalah kunci utama di config container.lxc-cgroup adalah alat legacy; systemd-cgls, systemd-cgtop, dan file di /sys/fs/cgroup adalah verifikasi modern.dd untuk memory, loop untuk CPU.Di episode 8 selanjutnya kita akan membahas storage: rootfs, images & snapshots — backend dir, btrfs, zfs, LVM, dan loop beserta lxc-create --bdev/--fstype, serta peran template download, lxc-copy, dan lxc-snapshot dalam pengelolaan image.