Bosh sahifa Wiki Cgroup Namespace

Cgroup Namespace

Cgroup Namespace — processlarga cgroup ierarxiyasidagi o‘z joyini virtual ildizdan boshlab ko‘rsatadigan Linux namespace turi. U processning mavjud control group membershipini yoki resource limitini alohida yaratmaydi; faqat /proc va cgroup filesystem orqali ko‘rinadigan pathlarni qayta asoslaydi. Container hostdagi to‘liq cgroup topologiyasini yashirish uchun undan foydalanadi.

Virtual ildiz

Namespace yaratilganda processning joriy cgroup’i yangi ko‘rinish uchun root bo‘ladi. Ichkaridan o‘z cgroup pathi / sifatida ko‘rinishi, ancestor cgroup nomlari esa yashirilishi mumkin. Bu host service nomi, tenant topologiyasi va deployment ma’lumotining sizishini kamaytiradi.

Process asl kernel cgroup obyektida qoladi. CPU, memory va I/O controllerlari avvalgi limitni qo‘llashda davom etadi. Namespace yaratish quota reset qilmaydi.

/proc ma’lumoti

/proc/PID/cgroup pathlari observerning cgroup namespace’iga nisbatan ko‘rsatiladi. Bir processni host va container ichidan tekshirganda turli path ko‘rinishi mumkin. Monitoring agent qaysi namespace’dan o‘qiyotganini bilmasa metrikani noto‘g‘ri hierarchyga bog‘laydi.

Cgroup filesystem mounti ham mount namespace bilan boshqariladi. Cgroup namespace virtual path beradi, mount permission va writable subtree esa alohida setup talab qiladi.

Delegation

Containerga o‘z ichida child cgroup yaratish huquqi berilsa host ma’lum subtree’ni delegatsiya qiladi. Delegation ownership, controller enable va “no internal process” kabi cgroup v2 qoidalariga mos bo‘lishi kerak. Container ancestor limitni oshira olmaydi.

Writable cgroupfs’ni keng ochish host resource boshqaruviga ta’sir qilishi mumkin. Faqat delegatsiya qilingan subtree va kerakli controllerlar beriladi. Namespace pathni yashiradi, authorizationni almashtirmaydi.

Yaratish

clone yoki unshare cgroup namespace yaratadi. Process avval kerakli cgroupga ko‘chiriladi, keyin namespace yaratilsa ichki root to‘g‘ri nuqtaga tushadi. Tartib teskari bo‘lsa container pathi kutilmagan ko‘rinadi.

setns bilan mavjud namespace’ga kirish ko‘rinishni o‘zgartiradi, lekin processni target cgroupga ko‘chirmaydi. Membership uchun cgroup filesystem yoki manager API orqali alohida amal kerak.

Container va system manager

Service manager container yoki unit uchun cgroup yaratib, barcha processlarni shu subtree’da ushlab turadi. Cgroup namespace ichki initga o‘z xizmatlari uchun child hierarchy ko‘rsatishi mumkin. Host manager va ichki manager controller ownershipini kelishishi lozim.

Tashxis hostdagi cgroup ID, namespace inode, relative path va effective controller qiymatlarini birga oladi. Faqat container ichidagi / pathiga qarab limit yo‘q degan xulosa chiqarilmaydi.

Migration va path

Process host manager tomonidan boshqa cgroupga ko‘chirilsa uning cgroup namespace rootiga nisbatan pathi o‘zgarishi yoki namespace chegarasidan tashqarida ko‘rinishi mumkin. Long-running agent pathni startda bir marta cache qilmaydi. Cgroup ID va manager eventlari barqarorroq bog‘lanish beradi. Containerning o‘zi ancestor move’ni nazorat qila olmaydi.

Cgroup v1 farqi

Legacy cgroup v1da controllerlar turli hierarchy’larda mount qilinishi mumkin, shu sabab bitta virtual root barcha pathlarni sodda ifodalamaydi. Cgroup namespace ko‘rinishi mount konfiguratsiyasiga bog‘liq. Unified v2 delegation va accountingni soddalashtiradi, ammo eski application faqat v1 fayl nomlarini kutishi mumkin. Runtime feature detection qiladi, taxminiy path yaratmaydi.

Monitoring xavfi

Container ichidagi agent faqat descendant ko‘rinishni kuzatsa hostdagi ancestor throttlingni ko‘rmasligi mumkin. CPU quota parentda tugasa ichki cgroup limitlari ochiq ko‘rinsa ham workload throttled bo‘ladi. Host exporter effective limitni hierarchy bo‘ylab hisoblaydi va ichki metrikaga workload identity bilan qo‘shadi.

Bog‘liq tushunchalar

control group, cgroup v2, resource controller, delegation, mount namespace, container runtime