Можете ли вы использовать 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

}
Другие вопросы по тегам