Утилита управления vzctl

sysctl net.bridge.bridge-nf-call-iptables=0

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERA*D*E

Снова рассмотрим команду создания нового контейнера:

vzctl create 101 --ostemplate ubuntu-9.04-x86_64

Здесь 101 – это вручную выбираемый VEID (virtual environment ID) или CTID (container ID), целочисленный номер нового контейнера, который будет использоваться для управления им. Рекомендуется не использовать: а) зарезервированные номера меньше 101 и б) одинаковые номера на разных VPS-фермах, чтобы не иметь потенциальных проблем с миграцией и легче идентифицировать физическое расположение контейнера по его номеру. После завершения данной команды появятся файл /etc/vz/conf/101.conf с настройками и каталоги: /var/lib/vz/private/101 (заполненный содержимым шаблона) и /var/lib/vz/root/101 (пустой). Затем выполняется настройка:

vzctl set 101 --save
vzctl set 101 --save --name example1
vzctl set 101 --save --ipadd 10.0.0.1
vzctl set 101 --save --hostname example1.homelink.biz
vzctl set 101 --save --nameserver 8.8.8.8
vzctl set 101 --save --onboot yes
vzctl set 101 --save --privvmpages 72000:80000

В этом примере используются следующие аргументы: «save» приказывает сохранить изменения в conf-файле. Без этого параметра они будут применены к запущенному контейнеру без сохранения; «name» задаёт произвольное читабельное имя, которое затем можно использовать вместо VEID. Например, «vzctl status example1»; «ipadd» назначает контейнеру IP-адрес во внутренней сети OpenVZ; «hostname» изменяет имя системы, используемое внутри контейнера для самоидентификации; «nameserver» конфигурирует контейнер на использование указанного DNS-сервера; «onboot» приказывает запускать контейнер при старте OpenVZ; «privvmpages» устанавливает новые лимиты для одного из параметров. После этого контейнер можно запустить:

vzctl start example1

Проверить его выполнение:

# vzctl status example1
VEID 101 exist mounted running
# vzlist
VEID   NPROC   STATUS    IP_ADDR       HOSTNAME
  20      53   running   192.0.2.101    example1.homelink.ru

Выполнить в нём одиночную команду:

vzctl exec example1 uname -a

Перейти в командную строку контейнера с правами суперпользователя:

vzctl enter example1

Рекомендуется запустить vzctl без параметров, чтобы получить полный список поддерживаемых параметров и команд.

Лимиты

OpenVZ ограничивает для контейнеров потребление всех системных ресурсов: процессора, оперативной памяти, дискового пространства, системных буферов, сокетов и т. д. Начальные лимиты настолько строгие, что даже команда «apt-get update» в только что созданном контейнере завершается с сообщением об ошибке. Управление ограничениями в системе с OpenVZ является двухуровневым: для контейнера в целом – средствами OpenVZ, внутри контейнера – стандартными средствами Linux, через ulimit и дисковые квоты. Для проверки внешних ограничений служит файл /proc/user_beancounters. Внутри контейнера этот файл заполнен информацией по данному контейнеру, во внешней системе содержит сведения обо всех запущенных окружениях. Основной интерес в нём представляет последний столбец, «failcnt» («failure counter», т. е. «количество сбоев»):

egrep -v ' 0$' /proc/user_beancounters

Для вывода в более удобном формате, а также для периодических отчётов рекомендуется использовать несколько небольших утилит, доступных на сайте sources.homelink.ru/openvz:

# ubc_failstat
Version: 2.5 
uid  resource         held    maxheld    barrier     limit     failcnt
20:  privvmpages    184917     209713     200000    250000           5
15:  numproc            16        130        130       130          31
15:  numfile           515       2048       2048      2048        1122
13:  tcpsndbuf           0     332416     319488    524288    55341330
# ubc_faildiff /tmp/failstat.yesterday
uid      resource          old          new        delta 
13:     tcpsndbuf     50463657     52879924      2416267 
15:       numfile          856         1122          266 
15:       numproc           13           31           18

Из вывода ubc_failstat видно, что проблемы имеются в трёх контейнерах (13,15,20) , а ubc_faildiff показывает динамику количества ошибок по сравнению с предыдущим запомненным результатом. Примеры исправления:

vzctl set 20 --save --privvmpages 250000:300000
vzctl set 15 --save --numproc 200:200 --numfile 4096:4096

vzctl не полностью проверяет корректность вводимых аргументов (например, позволяет задавать разный лимит и барьер для таких параметров, как numproc и numfile, для которых лимит и барьер обязаны совпадать), поэтому рекомендуется проводить дополнительную проверку конфигурационных файлов с помощью утилиты vzcfgvalidate:

for n in /etc/vz/conf/??.conf;do echo Check $n; vzcfgvalidate $n; done

Обратите внимание, что проверяется именно файл (с указанием полного пути), а не текущие параметры, которые могут быть другими, если «vzctl set» запускался без ключа «--save». С другой стороны, vzcfgvalidate удобен тем, что может проверять параметры, когда контейнер не запущен. Для исправления конфигурационного файла vzcfgvalidate следует запустить с ключом «-r» («repair mode», автоматическое исправление) или «-i» («interactive repair», ручное исправление). Отличие между лимитом и барьером заключается в следующем: при превышении барьера счётчик ошибок увеличивается, но запрошенная операция выполняется. При превышении лимита операция завершается с ошибкой.