OpenVZ часть 5. Управление контейнерами

OpenVZ. Все статьи цикла

Теперь, когда у нас есть шаблон нужного нам дистрибутива, можно приступить к его развертыванию.

# vzctl create 101 —ostemplate ubuntu-13.10-x86_64

Здесь, 101 — это обязательный, уникальный идентификатор контейнера который может быть произвольным числом.

Новый экземпляр ОС будет создан в течении считанных секунд. Фактически, это время будет потрачено на распаковку архива и помещение его содержимого в каталог /vz/private/<id-контейнера>.

Далее, по логике следует настройка основных параметров экземпляра;

# vzctl set 101 —hostname u101 —save
# vzctl set 101 —ipadd 10.200.77.45 —save
# vzctl set 101 —nameserver 10.200.77.10 —save

 Ключ —save означает, что указанные значения должны быть записаны в конфигурационный файл контейнера /etc/vz/conf/101.conf, на постоянной основе и устанавливаться при каждом запуске экземпляра. Если его опустить, то указанные настройки применяются к контейнеру до его перезагрузки(в случае если он запущен).

Так как, большинство настроек ОС Linux хранится в простых текстовых файлах, их легко можно перенести на множество контейнеров. Например, скопировать список репозиториев и серверов DNS;

# cp /etc/apt/sources.list /vz/private/101/etc/apt/sources.listcp /etc/resolv.conf /vz/private/101/etc/resolv.conf

Если оперировать идентификатором контейнера не удобно, то ему можно присвоить понятное человеку имя;

# vzctl set 101 —name ubuntu101 —save

Таких имен можно задать множество и использовать их для выполнения всех операций, например для запуска контейнера;

# vzctl start ubuntu101

Кроме командыstartесть еще stopзавершение работы, restartостановка и запуск, а так же destroyудаление остановленного контейнера с диска.

При развертывании нового экземпляра из шаблона, совершенно не понятно какие использовать учетные данные для входа в ОС. Но, это не проблема. Задать пароль любому пользователю экземпляра, в том числе root, можно прямо из хост-системы:

# vzctl set 101 —userpasswd root:123456

Если указанной учетной записи в системе не окажется, она будет создана. Разобравшись с пользователями, можно подключаться к контейнеру, классическим способом с помощью SSH.

# ssh -l ubuntu 10.200.77.45

Если у контейнера нет IP-адресса или отсутствует сервис SSH, то можно войти как root на прямую без всяких паролей;

# vzctl enter 101

Для просмотра списка существующих контейнеров используется следующая команда;

# vzlist

 CTID NPROC STATUS IP_ADDR HOSTNAME

101 18 running 10.200.77.45 u101

Без параметров,vzlist выводит список только запущенных экземпляров. Добавив ключ —all будут показаны все зарегистрированные в системе контейнеры.

Администратор может все

Ключ vzctl enterне единственная иллюстрация безграничных возможностей администратора хост-системы. Есть еще vzctl exec,  которая позволяет выполнять практически любую команду в контейнере от имени супрепользователя и возвращать результат выполнения в консоль хоста.

Например, вывести список DNS-серверов:

# vzctl exec 101 cat /etc/resolv.conf

nameserver 10.200.119.11
nameserver 10.200.119.12

Или, отключить сетевой интерфейс:

# vzctl exec 101 ifdown venet0

Снимки состояния (snapshots)

Тут стоит начать с такой, довольно известной технологии как Loopback Device (loop) — это механизм ядра Linux позволяющий эмулировать обычные файлы как блочные устройства. Подключаются такие файлы через специальный виртуальный контроллер позволяющий традиционными способами создавать разделы и файловые системы внутри этих файлов. OpenVZ использует более продвинутую реализацию этого механизма под названием ploop. Это дает возможность создавать диски растущие в объеме по мере заполнения(тонкие диски) изменять их размер на лету, создавать мгновенные снимки(snapshots). Если, эти возможности вам необходимы, то новые контейнеры должны создаваться следующим образом:

# vzctl create 101 —ostemplate ubuntu-13.10-x86_64 —layout ploop —diskspace 4G

Ключь —layout ploop отвечают за создание контейнера в файле-диске /vz/private/101/root.hdd максимальный размер которого задается ключем diskspace 4G. По факту диск является тонким и будет увеличиваться в объеме по мере заполнения данными.

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

# vzctl set 101 —diskspace 10G —save

А затем выполнив конвертацию:

# vzctl convert 101 —layout ploop

Теперь, можно создавать снимки:

# vzctl snapshot 101 —name SNAP01 —description pred install

Созданные снимки помещаются в каталог /vz/private/101/dump/ В отличии от LXC, создавать снимки можно прямо во время работы контейнера. Что бы просмотреть доступные снапшеты, необходимо выполнить:

# vzctl snapshot-list 101

 К сожалению, будет выведен только уникальный идентификатор снимка, его имя и время создания. Описание заданное при создании показано не будет. Его можно посмотреть самостоятельно в файле/vz/private/101/Snapshots.xml

При необходимости, можно переключиться на любой снимок:

# vzctl snapshot-switch 101 —id 89e469a8-47b7-41a5-bbd3-5bf3312521d8

Ключ —id позволяет задать идентификатор снимка. К сожалению, оперировать именами тут нельзя. Удалить снимок можно заменив snapshot-switch на snapshot-delete.