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-адресов для контейнера. Если включено, то
- veth-устройство принимает только те пакеты, что имеют мак адрес в
заголовках, соответствующий устройству (исключая broadcast и multicast пакеты);
- нет возможности модифицировать MAC-адрес изнутри контейнера.
По умолчанию включено для всех интерфейсов внутри контейнера.
Ограничения ресурсов (Лимиты)
Следующие опции устанавливают барьеры и лимиты для счетчиков статистики (beancounters). Каждая опция (если не оговорено противное) имеет два аргумента. В случае, если указан только один аргумент, то барьер и лимит устанавливаются в одно и то же значение. В случае если указано два аргумента, то первый из них - барьер, второй - лимит. Каждый аргумент - число, либо специальное ключевое слово unlimited.
Можно использовать суффиксы для задания больших чисел:
g, G - гигабайты
m, M - мегабайты
k, K - клилобайты
p, P - страницы (страница - 4096 байт на x86 архитектурах).
--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 в контейнере. Режим может быть один из:
pages:value - установить общее значение памяти в страницах
privvmpages:value - установить общее значение памяти в значение privvmpages * value
Значение по умолчанию: 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.