OpenVZ: Подробное описание параметров конфигурирования

Эта статья является приложением к статье об OpenVZ. Подробное описание всех этих параметров Вы можете найти в ман-странице vzctl (8).

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

vzctl set номер_контейнера --параметр значение --параметр значение:значение ... --save

Большинство параметров для изменения требуют включение опции --save. В противном случае перезагрузка гостя произойдет со старыми параметрами.

Общие параметры

--onboot yes|no

Устанавливает необходимость автозапуска контейнера при загрузке системы.

--root путь

Путь, куда будет смонтирована файловая система контейнера перед его запуском. Путь может содержать строку '$VEID' которая будет заменена на номер контейнера. Изменение этого параметра не рекомендуется: правильнее будет установить значение этой опции в общем конфигурационном файле vz.conf.

--userpasswd логин:пароль

Установить пароль для выбранного пользователя в контейнере. Создает пользователя если он не существует.

Примечание: Эта опция не делает никаких сохранений в конфигурационный файл контейнера, поэтому опция --save в данном случае не требуется. Модифицирует файлы /etc/passwd и /etc/shadow контейнера. В случае если контейнер не смонтирован, то будет осуществлено монтирование, изменение параметров и отмонтирование.

--disabled yes|no

Выключить запуск контейнера. Для запуска такого контейнера необходимо будет использовать опцию --force вместе с командой vzctl start.

--name имя

Добавляет имя контейнеру, которое можно использовать как синоним VEID контейнера.

--description строка

Добавляет текстовое описание для контейнера.

--setmode restart|ignore

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

Сетевые параметры

--ipadd адрес

Добавить IP адрес к контейнеру. Данная опция может использоватья несколько раз подряд для назначения нескольких IP-адресов одному контейнеру.

--ipdel адрес | all

Удалить выделенный командой --ipadd адрес контейнера. Если вместо адреса будет написано ключевое слово all, то все назначенные контейнеру адреса будут удалены.

--hostname имя

Назначить hostname контейнеру. vzctl записывает это имя в один из файлов внутри контейнера (дистрибутиво-зависимо).

--nameserver адрес

Установить адрес DNS-сервера для контейнера. Если необходимо установить несколько DNS-серверов для одного контейнера, то нужно использовать эту опцию несколько раз в одном вызове vzctl set.

--searchdomain домен

Устанавливает домен поиска для контейнера (обычно это опция search файла /etc/resolv.conf. Если необходимо установить несколько доменов поиска, то нужно использовать эту опцию несколько раз в одном вызове vzctl set.

--netif_add ifname[,mac,host_ifname,host_mac,bridge]

Добавляет виртуальное ethernet-устройство для контейнера. Можно определить имя устройства (ifname), его MAC-адрес (mac). При этом автоматически создается пара к этому интерфейсу на хостовой машине. Для хостовой машины так же можно определить имя интерфейса (host_ifname) и MAC-адрес (host_mac). Если определен параметр bridge, то к созданной вирутальной сети будет добавлен мост.

--netif_del ifname|all

Удаляет ethernet устройство, созданное предыдущей командой. Если использовать ключевое слово all, то будут удалены все, ранее созданные, интерфейсы.

Параметры интерфейса

Следующие параметры могут быть использованы для переконфигурирования уже созданного виртуального ethernet-устройства. Если их создано несколько, то данные опции должны использоваться совместно с опцией --ifname имя.

--mac XX:XX:XX:XX:XX:XX

МАС-адрес интерфейса в контейнере.

--host_ifname имя

Имя интерфейса в хостовой системе.

--host_mac XX:XX:XX:XX:XX:XX

МАС-адрес интерфейса в хостовой системе.

--bridge имя

Имя моста виртуальной сети. Виртуальные сети могут использовать это имя для автоматического добавления интерфейса к мосту.

--mac_filter on|off

Включает или выключает фильтрацию MAC-адресов для контейнера. Если включено, то

заголовках, соответствующий устройству (исключая broadcast и multicast пакеты);

По умолчанию включено для всех интерфейсов внутри контейнера.

Ограничения ресурсов (Лимиты)

Следующие опции устанавливают барьеры и лимиты для счетчиков статистики (beancounters). Каждая опция (если не оговорено противное) имеет два аргумента. В случае, если указан только один аргумент, то барьер и лимит устанавливаются в одно и то же значение. В случае если указано два аргумента, то первый из них - барьер, второй - лимит. Каждый аргумент - число, либо специальное ключевое слово unlimited.

Можно использовать суффиксы для задания больших чисел:

--numproc items[:items]

Максимальное количество поцессов в контейнере. Треды ядра так же считаются процессами. Установка барьера и лимита в различные значения не имеет для данной опции практического смысла.

--numtcpsock items[:items]

Максимальное количество TCP сокетов. Этот параметр ограничивает количество TCP-соединений и, таким образом, количество клиентов могущих работать в параллель. Установка барьера и лимита в различные значения не имеет для данной опции практического смысла.

--numothersock items[:items]

Максимальное количество не-TCP сокетов (локальные сокеты, UDP и другие типы сокетов). Установка барьера и лимита в различные значения не имеет для данной опции практического смысла.

--vmguarpages pages[:pages]

Гарантированный объем выделенной памяти в страницах. Этот параметр указывает как много памяти доступно в контейнере. Барьер - количество памяти, выделенной контейнеру гарантировано. Смысл лимита неспецифицирован. Его можно установить в значение unlimited.

--kmemsize bytes[:bytes]

Максимальное количество kernel-памяти для контейнера. Этот параметр имеет некоторую зависимость с параметром --numproc. Каждый процесс требует как минимум 16Кб памяти и 30-50Кб в среднем. Очень большие процессы могут требовать и больше памяти. Важно сохранять некоторый разрыв между барьером и лимитом. Равные барьер и лимит могут привести к ситуации когда ядро должно будет уничтожить приложение в контейнере для сохранения значения kmemsize в пределах лимита.

--tcpsndbuf bytes[:bytes]

Максимальный размер, выделенный под TCP-буферы отправки. Барьер не должен быть меньше 64Кб и разница между лимитом и барьером должна быть больше или равна значению numtcpsock умноженному на 2.5Кб.

--tcprcvbuf bytes[:bytes]

Максимальный размер, выделенный под TCP-буферы приема. Барьер не должен быть меньше 64Кб, разница между лимитом и барьером должна быть больше или равна значению numtcpsock умноженному на 2.5Кб.

--othersockbuf bytes[:bytes]

Максимальный размер буферов отправки для не-TCP сокетов. Если процессы контейнера нуждаются в работе с очень большими датаграммами, то барьер должен быть установлен в соответствующее значение. Увеличение лимита сказывается положительно на качестве коммуникаций через локальные (UNIX-domain) сокеты.

--dgramrcvbuf bytes[:bytes]

Максимальный размер буферов приема для не-TCP сокетов. Если процессы контейнера нуждаются в работе с очень большими датаграммами, то барьер должен быть установлен в соответствующее значение. Установка барьера и лимита в различные значения не имеет для данной опции практического смысла.

--oomguarpages pages[:pages]

Гарантии против действия OOM-киллера. Если в контейнере используется памяти меньше, чем установленное здесь значение, то процессы контейнера гарантировано не будут убиваться OOM-киллером. Значение лимита не определено и может быть установлено в значение unlimited.

--lockedpages pages[:pages]

Максимальное количество страниц, используемых функцией mlock (2).

--privvmpages pages[:pages]

Фактически - максимальный размер свопа, используемый контейнером в страницах. Барьер и лимит определяют верхнюю границу общей выделенной памяти. Высокая граница не дает гарантий контейнеру выделения такого количества памяти. Для гарантированного выделения используйте опцию --vmguarpages.

--shmpages pages[:pages]

Максимальный размер сегмента межпроцессного взаимодействия (IPC SHM). Установка барьера и лимита в различные значения не имеет практического смысла.

--numfile items[:items]

Максимальное количество открытых файлов в контейнере. Установка барьера и лимита в различные значения не имеет практического смысла.

--numflock items[:items]

Максимальное количество установленных файловых блокировок.

--numpty items[:items]

Максимальное количество псевдотерминалов (PTY) в контейнере. Каждый контейнер не может иметь более 255 терминалов. Установка барьера и лимита в различные значения не имеет практического смысла.

--numsiginfo items[:items]

Количество структур siginfo. Не знаю что это такое. Возможно это количество сигналов вообще?

--dcachesize bytes[:bytes]

Максимальный размер файловых кешей (таких как directory entry и inode caches).

--numiptent num[:num]

Допустимое количество фильтров iptables.

--physpages pages[:pages]

В настоящее время это индикаторный параметр. Показывает использование RAM контейнера. Барьер должен быть установлен в 0, а лимит в unlimited.

Процессорные лимиты

--cpuunits num

"Вес" CPU для данного контейнера. Аргументом может быть положительное число в диапазоне от 8 до 500000. Устанавливает зависимость распределения CPU между разными контейнерами. Значение по умолчанию - 1000. Значение 1000 в одном контейнере и 2000 в другом означает, что при прочих равных условиях второй контейнер получит вдвое больше CPU.

--cpulimit num[%]

Лимит использования CPU контейнером. В процентах. Если компьютер имеет два CPU, то это значит он имеет всего 200% CPU, которые можно распределить между контейнерами. Значение по умолчанию - 0 (нет лимита).

--cpus num

Устанавливает количество процессоров (не ядер) доступных в контейнере.

Параметры памяти

Эти параметры контроллируют поведение /proc/meminfo внутри контейнера.

--meminfo none

Не виртуализировать /proc/meminfo (будет виден /proc/meminfo хост-системы)

--meminfo mode:value

Конфигурирует вывод /proc/meminfo в контейнере. Режим может быть один из:

Значение по умолчанию: privvmpages:1.

Параметры управления iptables

--iptables name

Ограничивает доступ к iptables-модулям внутри контейнера (по умолчанию все модули iptables загруженные на хостовой машине доступны в контейнере). Можно использовать следующие значения для name: iptable_filter, iptable_mangle, ipt_limit, ipt_multiport, ipt_tos, ipt_TOS, ipt_REJECT, ipt_TCPMSS, ipt_tcpmss, ipt_ttl, ipt_LOG, ipt_length, ip_conntrack, ip_conntrack_ftp, ip_con‐ ntrack_irc, ipt_conntrack, ipt_state, ipt_helper, ipt‐ able_nat, ip_nat_ftp, ip_nat_irc, ipt_REDIRECT, xt_mac, ipt_owner.

Сетевые устройства

--netdev_add имя

Переместить (хардварное) сетевое устройство из хостовой системы в гостевую.

--netdev_del имя

Удалить сетевое устройство из контейнера.

Дисковые квоты

--diskspace num[:num]

Установить "мягкий" и "жесткий" лимиты дисковых квот. По умолчанию один блок равен одному килобайту. Так же поддерживаются суффиксы G, M и К.

--diskinodes num[:num]

Максимальное количество инод, которые может использовать контейнер.

--quotatime секунд

Устанавливает период времени в течение которого можно выходить за лимиты дисковой квоты.

--quotaugidlimit num

Устанавливает максимальное количество идентификаторов юзеров/групп внутри контейнера для которых будет подсчитываться дисковая квота. Если данное значение установлено в 0, то квоты юзеров и групп внутри контейнера не будут учитываться.

Примечание: изменение этого параметра в 0 и обратно требует рестарта контейнера для применения новых параметров.

Опции монтирования

--noatime yes|no

Не устанавливать флаг atime в файловой системе.

== Опции совместимости ==

--capability имя:on|off

Устанавливает совместимость для контейнера. Любая из опций для принятия изменений требует рестарта контейнера. Несколько опций склеиваются по принципу "логическое И". В настоящее время поддерживаются следующие опции: chown, dac_override, dac_read_search, fowner, fsetid, kill, setgid, setuid, setpcap, linux_immutable, net_bind_service, net_broadcast, net_admin, net_raw, ipc_lock, ipc_owner, sys_module, sys_rawio, sys_chroot, sys_ptrace, sys_pacct, sys_admin, sys_boot, sys_nice, sys_resource, sys_time, sys_tty_config, mknod, lease, setveid, ve_admin.

Подробнее об опциях совместимости читай в документации OpenVZ.

Управление доступом к диску

--devnodes device:r|w|rw|none

Дать доступ контейнеру к дисковому устройству (r - только для чтения, w - только для записи, rw - для чтения и записи, none - нет доступа). Устройство будет создано в контейнере командой vzctl.

--devices b|c:major:minor|all:[r|w|rw|none]

Дать доступ контейнеру к блочному или символьному устройству. Файл устройства должен быть создан в контейнере вручную.

== Управление дополнительными фичами ===

--features name:on|off

Включает и выключает некоторые особенности VZ для контейнера. Известные на сегодня фичи - sysfs, nfs, sit, ipip. Примечание: ядра 2.6.27 и старше будут иметь (фичу ppp(oe)) для включения возможности использования ppp(oe) в гостевой системе.

Применение конфигурации

--applyconfig name

Читает параметры контейнера из шаблона файла конфигурации с именем /etc/vz/conf/ve-${name}.conf-sample и применяет их. Действует на все параметры кроме: HOSTNAME, IP_ADDRESS, OSTEMPLATE, VE_ROOT и VE_PRIVATE.

Может применяться для быстрого приведения настроек контейнера к первоначальному (шаблонному) виду.

--applyconfig_map group

Применить конфигурационные параметры выделенные в группу.

Управление приоритетом ввода вывода

--ioprio priority

Установить приоритет для контейнера. Допустимые значение от 0 до 7. Большее значение дает большее время для активности ввода-вывода. Значение по умолчанию - 4.