cgroup_namespaces

CGROUP_NAMESPACEÐ(ÑководÑÑво пÑогÑаммиÑÑа LCGROUP_NAMESPACES(7)



ÐÐЯ
       cgroup_namespaces - Ð¾Ð±Ð·Ð¾Ñ Ð¿ÑоÑÑÑанÑÑв имÑн Linux cgroup

ÐÐÐСÐÐÐÐ
       ÐÐ±Ð·Ð¾Ñ Ð¿ÑоÑÑÑанÑÑв имÑн ÑмоÑÑиÑе в namespaces(7).

       ÐÑоÑÑÑанÑÑва имÑн cgroup_namespaces виÑÑÑализиÑÑÑÑ
       пÑедÑÑавление о cgroup пÑоÑеÑÑа (ÑмоÑÑиÑе
       cgroups(7)) в виде /proc/[pid]/cgroup и /proc/[pid]/mountinfo.

       Ðаждое пÑоÑÑÑанÑÑво имÑн cgroup Ð¸Ð¼ÐµÐµÑ Ñвой
       Ð½Ð°Ð±Ð¾Ñ ÐºÐ¾ÑневÑÑ ÐºÐ°Ñалогов cgroup, коÑоÑÑе
       ÑвлÑÑÑÑÑ Ð±Ð°Ð·Ð¾Ð²Ñми ÑоÑками оÑноÑиÑелÑнÑÑ
       ÑаÑположений, показÑваемÑÑ Ð² /proc/[pid]/cgroup.
       Ðогда пÑоÑеÑÑ ÑоздаÑÑ Ð½Ð¾Ð²Ð¾Ðµ пÑоÑÑÑанÑÑво имÑн
       cgroup Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ clone(2) или unshare(2) Ñ Ñлагом
       CLONE_NEWCGROUP, Ñо он вÑÐ¾Ð´Ð¸Ñ Ð² новое пÑоÑÑÑанÑÑво
       имÑн cgroup, в коÑоÑом его ÑекÑÑие каÑалоги
       cgroups ÑÑановÑÑÑÑ ÐºÐ¾ÑневÑми каÑалогами cgroup
       нового пÑоÑÑÑанÑÑва имÑн (ÑÑо пÑименимо как
       Ð´Ð»Ñ Ð¸ÐµÑаÑÑии cgroups веÑÑии 1, Ñак и  длÑ
       ÑниÑиÑиÑованной иеÑаÑÑии cgroups веÑÑии 2).

       ÐÑи пÑоÑмоÑÑе /proc/[pid]/cgroup пÑÑÑ Ð² ÑÑеÑÑем поле
       каждой запиÑи бÑÐ´ÐµÑ Ð¾ÑноÑиÑелÑнÑм по
       оÑноÑÐµÐ½Ð¸Ñ Ðº коÑÐ½ÐµÐ²Ð¾Ð¼Ñ ÐºÐ°ÑÐ°Ð»Ð¾Ð³Ñ cgroup пÑоÑеÑÑа
       ÑиÑаÑÑего. ÐÑли каÑалог cgroup пÑоÑеÑÑа
       назнаÑÐµÐ½Ð¸Ñ Ð»ÐµÐ¶Ð¸Ñ Ð²Ð½Ðµ коÑневого каÑалоге
       пÑоÑÑÑанÑÑва имÑн cgroup ÑиÑаÑÑего пÑоÑеÑÑа, Ñо
       пÑÑÑ Ð±ÑÐ´ÐµÑ Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½ как ../ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ ÑÑовнÑ
       пÑедка в иеÑаÑÑии cgroup.

       СледÑÑÑий пÑÐ¸Ð¼ÐµÑ ÑеанÑа демонÑÑÑиÑÑеÑ
       Ñоздание нового пÑоÑÑÑанÑÑва имÑн cgroup.
       СнаÑала (Ð¾Ñ ÑÑпеÑполÑзоваÑелÑ) ÑоздаÑÑÑÑ
       доÑеÑнÑÑ cgroup в иеÑаÑÑии freezer и оболоÑка
       помеÑаеÑÑÑ Ð² ÑÑÑ cgroup:

           # mkdir -p /sys/fs/cgroup/freezer/sub
           # echo $$                      # вÑводим PID оболоÑки
           30655
           # sh -c 'echo 30655 > /sys/fs/cgroup/sub'
           # cat /proc/self/cgroup | grep freezer
           7:freezer:/sub

       ÐаÑем Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ unshare(1) ÑоздаÑÑÑÑ Ð¿ÑоÑеÑÑ,
       вÑполнÑÑÑий новÑÑ Ð¾Ð±Ð¾Ð»Ð¾ÑÐºÑ Ð² новой cgroup и
       монÑиÑÑеÑÑÑ Ð¿ÑоÑÑÑанÑÑво имÑн:

           # unshare -Cm bash

       ТепеÑÑ ÑодеÑжимое Ñайлов /proc/[pid]/cgroup:
       нового пÑоÑеÑÑа-оболоÑки, запÑÑенного
       командой unshare(1), пÑоÑеÑÑа наÑодÑÑегоÑÑ Ð²
       изнаÑалÑном пÑоÑÑÑанÑÑве имÑн cgroup (init Ñ PID 1)
       и пÑоÑеÑÑа в ÑодÑÑвенной cgroup, ÑооÑвеÑÑÑвенно:

           $ cat /proc/self/cgroup | grep freezer
           7:freezer:/
           $ cat /proc/1/cgroup | grep freezer
           7:freezer:/..
           $ cat /proc/20124/cgroup | grep freezer
           7:freezer:/../sub2

       Ðднако, еÑли поÑмоÑÑеÑÑ /proc/self/mountinfo, Ñо
       можно ÑвидеÑÑ ÑледÑÑÑÑÑ Ð°Ð½Ð¾Ð¼Ð°Ð»Ð¸Ñ:

           # cat /proc/self/mountinfo | grep freezer
           155 145 0:32 /.. /sys/fs/cgroup/freezer ...

       ЧеÑвÑÑÑое поле в ÑÑом Ñайле должно ÑодеÑжаÑÑ
       каÑалог в Ñайловой ÑиÑÑеме cgroup, коÑоÑÑй
       ÑвлÑеÑÑÑ ÐºÐ¾Ñнем ÑÑого монÑиÑованиÑ. Так как
       по опÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¿ÑоÑÑÑанÑÑв имÑн cgroup ÑекÑÑий
       каÑалог freezer cgroup пÑоÑеÑÑа ÑÑановиÑÑÑ ÐµÐ³Ð¾
       коÑневÑм каÑалогом freezer cgroup, в ÑÑом поле мÑ
       Ð´Ð¾Ð»Ð¶Ð½Ñ ÑвидеÑÑ '/'. ÐÑоблема здеÑÑ Ð² Ñом, ÑÑо мÑ
       видим запиÑÑ Ð¾ монÑиÑовании Ð´Ð»Ñ Ñайловой
       ÑиÑÑÐµÐ¼Ñ cgroup, коÑоÑÐ°Ñ ÑооÑвеÑÑÑвÑÐµÑ Ð½Ð°ÑемÑ
       наÑалÑÐ½Ð¾Ð¼Ñ Ð¿ÑоÑеÑÑÑ Ñ Ð¾Ð±Ð¾Ð»Ð¾Ñкой пÑоÑÑÑанÑÑва
       имÑн cgroup (ÑÑÑ ÑÐ°Ð¹Ð»Ð¾Ð²Ð°Ñ ÑиÑÑема cgroup
       дейÑÑвиÑелÑно Ð¸Ð¼ÐµÐµÑ ÐºÐ¾ÑÐµÐ½Ñ Ð² ÑодиÑелÑÑком
       каÑалоге sub). Ðам нÑжно пеÑемонÑиÑоваÑÑ
       ÑайловÑÑ ÑиÑÑÐµÐ¼Ñ freezer cgroup внÑÑÑÑ ÑÑого
       пÑоÑÑÑанÑÑва имÑн cgroup, поÑле Ñего Ð¼Ñ Ñвидим
       ожидаемÑй ÑезÑлÑÑаÑ:

           # mount --make-rslave /     # не ÑаÑпÑоÑÑÑанÑÑÑ ÑобÑÑÐ¸Ñ Ð¼Ð¾Ð½ÑиÑованиÑ
                                       # в дÑÑгие пÑоÑÑÑанÑÑва имÑн
           # umount /sys/fs/cgroup/freezer
           # mount -t cgroup -o freezer freezer /sys/fs/cgroup/freezer
           # cat /proc/self/mountinfo | grep freezer
           155 145 0:32 / /sys/fs/cgroup/freezer rw,relatime ...

       ÐÐ»Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿ÑоÑÑÑанÑÑв имÑн cgroup
       ÑÑебÑеÑÑÑ, ÑÑÐ¾Ð±Ñ ÑдÑо бÑло ÑобÑано Ñ Ð¿Ð°ÑамеÑÑом
       CONFIG_CGROUPS.

СÐÐТÐÐТСТÐÐРСТÐÐÐÐРТÐÐ
       ÐÑоÑÑÑанÑÑва имÑн еÑÑÑ ÑолÑко в Linux.

ÐÐÐÐЧÐÐÐЯ
       ÐÑоÑÑÑанÑÑва имÑн cgroup иÑполÑзÑÑÑÑÑ Ð´Ð»Ñ
       поддеÑжки виÑÑÑализаÑии ÑледÑÑÑим обÑазом:

       * ÐÐ»Ñ Ð¿ÑедоÑвÑаÑÐµÐ½Ð¸Ñ ÑÑеÑек инÑоÑмаÑии о пÑÑÑÑ
         каÑалогов cgroup за пÑеделами конÑейнеÑа,
         инаÑе они бÑли Ð±Ñ Ð²Ð¸Ð´Ð¸Ð¼Ñ Ð¿ÑоÑеÑÑам в
         конÑейнеÑе. Такие ÑÑеÑки могли, напÑимеÑ,
         вÑдаÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ плаÑÑоÑме конÑейнеÑа
         пÑиложениÑм в конÑейнеÑе.

       * ÐÐ»Ñ Ð¾Ð±Ð»ÐµÐ³ÑÐµÐ½Ð¸Ñ Ð·Ð°Ð´Ð°Ñ Ð¿Ð¾ пеÑеноÑÑ
         конÑейнеÑа. ÐиÑÑÑализаÑиÑ, пÑедоÑÑавлÑемаÑ
         пÑоÑÑÑанÑÑвами имÑн cgroup, позволÑеÑ
         конÑейнеÑам не знаÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ пÑÑÑÑ
         ÑодиÑелÑÑÐºÐ¸Ñ cgroup. Ðез Ñакой изолÑÑии
         поÑÑебовалоÑÑ Ð±Ñ Ð²Ð¾ÑÑоздаваÑÑ Ð¿Ð¾Ð»Ð½Ñе пÑÑи
         cgroup (показÑваемÑе в /proc/self/cgroups) в
         Ñелевой ÑиÑÑеме пÑи пеÑеноÑе конÑейнеÑа;
         Ñакже ÑÑи пÑÑи Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±Ñли бÑÑÑ ÑникалÑнÑми,
         ÑÑÐ¾Ð±Ñ Ð¾Ð½Ð¸ не пеÑеÑекалиÑÑ Ñ Ð´ÑÑгими пÑÑÑми в
         Ñелевой ÑиÑÑеме.

       * ÐÐ»Ñ Ð¾Ð±ÐµÑпеÑÐµÐ½Ð¸Ñ Ð±Ð¾Ð»ÑÑего огÑаниÑениÑ
         конÑейнеÑизиÑованнÑÑ Ð¿ÑоÑеÑÑов, Ñак как
         возможно ÑмонÑиÑоваÑÑ ÑайловÑе ÑиÑÑÐµÐ¼Ñ cgroup
         конÑейнеÑа Ñаким обÑазом, ÑÑо пÑоÑеÑÑÑ
         конÑейнеÑа не ÑмогÑÑ Ð¿Ð¾Ð»ÑÑиÑÑ Ð´Ð¾ÑÑÑп к
         каÑалогам пÑедка cgroup. РаÑÑмоÑÑим,
         напÑимеÑ, ÑледÑÑÑий ÑÑенаÑий:

           • ÐÑÑÑ ÐºÐ°Ñалог cgroup /cg/1, коÑоÑÑй пÑинадлежиÑ
             полÑзоваÑÐµÐ»Ñ Ñ ID 9000.

           • ÐÑÑÑ Ð¿ÑоÑеÑÑ X, коÑоÑÑй Ñакже пÑинадлежиÑ
             полÑзоваÑÐµÐ»Ñ Ñ ID 9000, он наÑодиÑÑÑ Ð²
             пÑоÑÑÑанÑÑве имÑн под /cg/1/2 (Ñ. е., X помеÑÑн
             в новое пÑоÑÑÑанÑÑво имÑн cgroup
             поÑÑедÑÑвом clone(2) или unshare(2) Ñ Ñлагом
             CLONE_NEWCGROUP).

         ÐÑли Ð½ÐµÑ Ð¿ÑоÑÑÑанÑÑв имÑн cgroup, а каÑалог cgroup
         /cg/1 пÑÐ¸Ð½Ð°Ð´Ð»ÐµÐ¶Ð¸Ñ (и доÑÑÑпен на запиÑÑ) UID
         9000 и пÑоÑеÑÑ X Ñакже пÑинадлежиÑ
         полÑзоваÑÐµÐ»Ñ Ñ ID 9000, пÑоÑеÑÑ X Ð¼Ð¾Ð¶ÐµÑ Ð¸Ð·Ð¼ÐµÐ½ÑÑÑ
         ÑодеÑжимое Ñайлов cgroups (Ñ. е., изменÑÑÑ
         наÑÑÑойки cgroup) не ÑолÑко в /cg/1/2, но и в
         ÑодиÑелÑÑком каÑалоге cgroup /cg/1. ÐÑделение
         Ð´Ð»Ñ Ð¿ÑоÑеÑÑа X пÑоÑÑÑанÑÑва имÑн в каÑалоге
         cgroup /cg/1/2, в комбинаÑии Ñ Ð½ÑжнÑми
         опеÑаÑиÑми монÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ñайловой ÑиÑÑемÑ
         cgroup (как показано вÑÑе) не даÑÑ Ð¸Ð·Ð¼ÐµÐ½ÑÑÑ
         ÑÐ°Ð¹Ð»Ñ Ð² /cg/1, Ñак как невозможно ÑвидеÑÑ
         ÑодеÑжимое ÑÑого каÑалога (или, в
         далÑнейÑем, ÑдалиÑÑ ÐºÐ°Ñалоге
         ÑодиÑелÑÑкого cgroup). Ð ÑоÑеÑании Ñ Ð¿ÑавилÑнÑм
         обеÑпеÑением иеÑаÑÑиÑеÑÐºÐ¸Ñ Ð¾Ð³ÑаниÑений ÑÑо
         не позволÑÐµÑ Ð¿ÑоÑеÑÑÑ X обойÑи огÑаниÑениÑ,
         накладÑваемÑе ÑодиÑелÑÑкими cgroups.

СÐÐТРÐТРТÐÐÐÐ
       unshare(1), clone(2), setns(2), unshare(2), proc(5), cgroups(7),
       credentials(7), namespaces(7), user_namespaces(7)



Linux                             2016-07-17              CGROUP_NAMESPACES(7)