Можете ли вы использовать CGroups внутри контейнера OpenVZ?
Просто быстрый вопрос, на который у меня возникли проблемы с поиском ответа:
Авторы OpenVZ вносят большой объем кода в ядро Linux, чтобы получить возможности виртуализации непосредственно внутри вашей операционной системы.
Одним из примеров этого является Cgroups.
В любом случае, мой вопрос: кто-нибудь знает, доступны ли CGroups или планируется быть доступными в стороне от самого контейнера?
Я попытался запустить это на одном из контейнеров OpenVZ, но служба не запустилась. Я понимаю, почему: это, скорее всего, аппаратный узел, ориентированный на обслуживание, поскольку он управляет аспектами в ядре.
Тем не менее, я хотел бы использовать их внутри самого контейнера.
Я вижу, что пространства имен работают внутри контейнеров, и подумал, что было бы неплохо, если бы CGroups могла работать и внутри контейнера.
Я спрашиваю, потому что, возможно, я не использую последнюю версию ядра, необходимую для поддержки. или возможно я пропускаю что-то.
Спасибо!
3 ответа
Вы можете использовать cgroups в контейнере LXC, так как они имеют пространство имен, но OpenVZ - очень старая технология, и я очень сомневаюсь, что вы найдете способ заставить ее работать. Если вы можете, вы должны начать переход с OpenVZ на LXC, так как первый, вероятно, будет заброшен рано или поздно. Это LXC, который создавали все эти разработчики OpenVZ.
Люди почему-то любят ненавидеть OVZ, но, похоже, забывают, что LXC является производной от OVZ. Если OVZ - такая старая технология, то почему это ДНК в новой технологии?
Кроме того, что я делаю что-то с cgroups, я не вижу, чтобы OVZ уходил в ближайшее время. Существует перекрестная поляризация с LXC, и если и когда LXC является заменой OVZ, тогда OVZ может исчезнуть. Это не произойдет в ближайшее время, потому что OVZ гораздо более способный и зрелый. Также в новых основных ядрах теперь есть функции OVZ. Так что ОВЗ точно не уйдет.
Старый поток - однако, решение (в контексте докера, но все же) можно найти, обратившись к CentOS6, как если бы это был debian wheezy по этой ссылке: https://openvz.org/Docker_inside_CT
По сути, в /etc/init.d/docker сделать:
prestart() {
# ALF service cgconfig status > /dev/null
# ALF
# ALF if [[ $? != 0 ]]; then
# ALF service cgconfig start
# ALF fi
mount -t tmpfs tmpfs /sys/fs/cgroup
mkdir /sys/fs/cgroup/freezer,devices
mount -t cgroup cgroup /sys/fs/cgroup/freezer,devices -o freezer,devices
mkdir /sys/fs/cgroup/cpu,cpuacct,cpuset
mount -t cgroup cgroup /sys/fs/cgroup/cpu,cpuacct,cpuset/ -o cpu,cpuacct,cpuset
}