VMmanager OVZ использует виртуализацию OpenVZ. Для управления задействуются стандартные утилиты OpenVZ.

OpenVZ — технология, которая базируется на ядре ОС Linux и позволяет на одном физическом сервере создавать и запускать изолированные друг от друга копии выбранной операционной системы. При этом виртуальные серверы используют общее ядро Linux.

Основные утилиты управления OpenVZ:

  • vzctl — основная утилита для управления контейнерами;
  • vzlist — утилита для получения сведений о контейнерах;
  • vzmigrate — утилита для миграции;
  • vzmemcheck, vzcpucheck, vzcalc — утилиты для получения сведений об используемых ресурсах;
  • vzsplit — утилита для генерации конфигурационных файлов контейнеров;
  • vzquota — утилита для работы с дисковой квотой контейнера.

Конфигурация OpenVZ


vz — глобальный файл конфигурации OpenVZ. Расположен в /etc/vz/vz.conf. Состоит из строк формата: ПАРАМЕТР="ЗНАЧЕНИЕ".

При работе с директориями VMmanager OVZ использует значения параметров VE_PRIVATE, VE_ROOT, TEMPLATE конфигурационного файла.

TEMPLATE=каталог — каталог, в котором хранятся все данные шаблонов контейнеров.

VE_ROOT=каталог — каталог, который служит корневой точкой монтирования контейнера. Значение должно содержать макрос $VEID, вместо которого будет подставлено реальное значение VE ID.

VE_PRIVATE=каталог — каталог, в котором хранятся все файлы и каталоги, специфичные для контейнера. Значение должно содержать макрос $VEID, вместо которого будет подставлено реальное числовое значение VE ID.

VMmanager OVZ отслеживает изменение путей, но автоматическое копирование уже созданных контейнеров и шаблонов ОС в новые директории не выполняет. Рекомендуется использовать стандартные значения параметров VE_PRIVATE, VE_ROOT, TEMPLATE либо менять пути после установки VMmanager OVZ, но до начала работы с контейнерами. Пути VE_PRIVATE, VE_ROOT должны совпадать на всех узлах кластера — это обязательное условие для миграции контейнеров между узлами. Все директории должны физически существовать в файловой системе узла кластера. Для директории TEMPLATE должна существовать поддиректория cache, в которую происходит установка шаблонов ОС. При создании нового узла кластера VMmanager корректирует значения VE_PRIVATE, VE_ROOT, TEMPLATE файла vz.conf в соответствии со значениями на других узлах кластера. При этом создаются нужные директории в файловой системе.

Файлы конфигурации контейнеров


Образцы файлов конфигурации находятся в директории /etc/vz/conf. VMmanager при создании контейнера использует шаблон /etc/vz/conf/ve-ispbasic.conf-sample. Имя шаблона задано в коде панели управления и не изменяется, при удалении шаблона файл генерируется заново.

Алгоритм создания контейнера:

  • Создаётся контейнер на основе шаблона /etc/vz/conf/ve-ispbasic.conf-sample:

    /bin/sh -c /usr/sbin/vzctl\ create\ CTID\ --ostemplate\ <ostemplate>\ --layout\ <layout>\ --config\ ispbasic'
    
    BASH

    <layout> — способ размещения файлов контейнера: ploop или simfs.

    ostemplate — операционная система, выбранная при создании виртуальной машины.

  • К созданному контейнеру применяются параметры шаблона виртуальных машин (из базы данных vemgr таблицы preset) и данные, указанные при создании виртуальной машины, например:

    Run '/bin/sh -c /usr/sbin/vzctl\ set\ 102\ --quotaugidlimit\ 2048\ --save' pid  
    Run '/bin/sh -c /usr/sbin/vzctl\ set\ 102\ --ipadd\ \ --save'
    Run '/bin/sh -c /usr/sbin/vzctl\ set\ 102\ --hostname\ ct2.org\ --save'
    Run '/bin/sh -c /usr/sbin/vzlist\ -H\ -o\ layout\ 102'
    Run '/bin/sh -c /usr/sbin/vzctl\ set\ 102\ --diskspace\ 3000M\ --save' 
    Run '/bin/sh -c /usr/sbin/vzctl\ set\ 102\ --diskinodes\ 384000\ --save' 
    Run '/bin/sh -c /usr/sbin/vzctl\ set\ 102\ --swap\ 1024M\ --save' 
    Run '/bin/sh -c /usr/sbin/vzctl\ set\ 102\ --ram\ 512M\ --save' 
    Run '/bin/sh -c /usr/sbin/vzctl\ set\ 102\ --lockedpages\ 131072:unlimited\ --oomguarpages\ 131072:unlimited\ --vmguarpages\ 393216\ --privvmpages\ unlimited:unlimited\ --save' 
    Run '/bin/sh -c /usr/sbin/vzctl\ set\ 102\ --cpus\ 1\ --save'
    Run '/bin/sh -c /usr/sbin/vzctl\ set\ 102\ --cpuunits\ 100\ --save' 
    Run '/bin/sh -c /usr/sbin/vzctl\ set\ 102\ --cpulimit\ 100\ --save' 
    Run '/bin/sh -c /usr/sbin/vzctl\ set\ 102\ --numproc\ unlimited\ --save' 
    Run '/bin/sh -c /usr/sbin/vzctl\ set\ 102\ --numfile\ unlimited\ --save' 
    Run '/bin/sh -c /usr/sbin/vzctl\ set\ 102\ --numtcpsock\ unlimited\ --save' 
    Run '/bin/sh -c /usr/sbin/vzctl\ set\ 102\ --numothersock\ unlimited\ --save' 
    Run '/bin/sh -c /usr/sbin/vzctl\ set\ 102\ --tcprcvbuf\ unlimited\ --save' 
    BASH

Управление ресурсами


Состоит из компонентов:

  • двухуровневая дисковая квота;
  • честный планировщик процессора;
  • пользовательские бинкаунтеры.

Двухуровневая дисковая квота

Первый уровень: администратор сервера может установить дисковые квоты для контейнеров.

Второй уровень: администратор контейнера может использовать обычные утилиты внутри контейнера, чтобы настроить стандартные дисковые квоты ОС для пользователей и групп.

Честный планировщик процессора

Первый уровень: планировщик решает, какому контейнеру дать квант процессорного времени в зависимости от значений параметров cpuunits для контейнеров.

Второй уровень: стандартный планировщик Linux решает, какому процессу в выбранном контейнере дать квант времени в зависимости от стандартных приоритетов процессов.

Администратор сервера устанавливает различные значения cpuunits для разных контейнеров. Процессорное время распределяется по относительному соотношению этих величин. Параметр cpulimit устанавливает верхний лимит процессорного времени в процентах для контейнера. Параметр cpus определяет количество процессоров, доступных контейнеру.

Пользовательские бинкаунтеры

Пользовательские бинкаунтеры (User Beancounters) — набор счётчиков, ограничений и гарантий на каждый контейнер. Ресурсы, которые считаются и контролируются можно посмотреть в файле /proc/user_beancounters. Для каждого ресурса есть пять значений: текущее использование, максимальное использование (за всё время жизни контейнера), барьер, лимит и счётчик отказов. Если какой-либо ресурс достигает лимита, его счётчик отказов увеличивается.

Конфигурация сети контейнеров


Venet — виртуальное сетевое устройство, используется по умолчанию для контейнеров. Позволяет создать соединение точка-точка между контейнером и узлом кластера. Выполняет коммутацию пакетов на основе заголовков IP. Venet отбрасывает IP-пакеты из контейнера, если у входящих пакетов адрес назначения, а у исходящих адрес источника не соответствует адресу контейнера. Устройство Venet автоматически создаётся при запуске контейнера.

Для добавления виртуальной машине IP-адреса используется команда:

vzctl set CTID --ipadd <IP-адрес> --save
BASH

При этом запускается скрипт добавления IP-адреса, предоставляемый системой OpenVZ для каждой ОС. IP-адреса добавляются в качестве алиасов (venet0:0 и т. д.).

Утилита vzctl


Основные возможности vzctl:

  • vzctl create CTID — создание контейнера;
  • vzctl start CTID — запуск контейнера;
  • vzctl stop CTID — выключение контейнера;
  • vzctl restart CTID — перезапуск контейнера;
  • vzctl snapshot CTID — создание снапшота контейнера;
  • vzctl status CTID — статус контейнера;
  • vzctl set CTID — изменение параметров контейнера;
  • vzctl destroy CTID — уничтожение контейнера.

CTID — идентификатор контейнера.