Безопасность

Виртуальная реальность по-русски: Осваиваем виртуализацию уровня ОС на примере OpenVZ. Установка и использование OpenVZ в Debian

Виртуальная реальность по-русски: Осваиваем виртуализацию уровня ОС на примере OpenVZ. Установка и использование OpenVZ в Debian

Сейчас наблюдается большой ажиотаж в отношении технологий контейнерной виртуализации. И почему-то в этом контексте особенно часто упоминается Docker , словно это вообще единственное решение для создания контейнеров. А тем временем существует технология, которая не только ничем не уступает Docker, но и по некоторым оценкам опережает ее как минимум лет на пять. Технология эта называется OpenVZ. О причинах малой популярности OpenVZ мне остается только гадать. Однако, надеюсь, что данная статья хотя бы отчасти исправит положение дел.

Мотивация

В отношении OpenVZ справедливо следующее:

  • С точки зрения пользователя контейнеры выглядят, как полноценные VDS со своими дисками и сетевыми интерфейсами. Никаких «слоеных» ФС, никаких коллизий номеров портов на хост-системе, и так далее. Действительно очень удобно;
  • Накладные расходы на контейнеризацию оцениваются в 1-3%, что очень мало, особенно если вспомнить о накладных расходах в Docker при работе с диском;
  • Очень гибкая настройка того, какому контейнеру сколько и каких ресурсов выделяется. CPU, память, диск, сеть — все под вашим контролем;
  • Существуют веб-панели, например, OpenVZ Web Panel и Proxmox (UPD: Proxmox перешел на LXC), благодаря которым можно за пол дня поднять AWS на собственном железе. Это может быть оправдано не только с точки зрения безопасности, но и в связи с последними изменениями в российском законодательстве. Плюс вы сможете менять все квоты на лету, у вас не будет ограничений в стиле «держите все данные на сетевых дисках (EBS)» и так далее;
  • OpenVZ уже много лет используется в Parallels, Яндексе, FastVPS, Atlassian, Pixar, Travis CI, WarGaming и ряде других компаний;

Как любая технология контейнерной виртуализации, OpenVZ имеет и ряд ограничений. Вы можете запускать в контейнерах различные дистрибутивы Linux, но не можете запустить Winodws или FreeBSD. Также, например, нельзя загрузить в контейнере произвольный модуль ядра. Такова плата за малые накладные расходы на виртуализацию.

Установка OpenVZ

Официальный сайт рекомендует ставить OpenVZ на СentOS или RHEL. Debian или Ubuntu также поддерживаются , но далее мы будем следовать рекомендации и воспользуемся CentOS 6. Должен предостеречь вас от желания поставить OpenVZ на ноутбук с Ubuntu. В OpenVZ используется собственная сборка ядра Linux , в результате чего, скажем, может отвалиться какое-то железо. Хотя попробовать ничего не мешает, так как вы всегда сможете переключиться на старое ядро. Кстати, чтобы поиграться с OpenVZ, совсем не обязательно использовать отдельный комьютер. OpenVZ отлично работает под Vagrant .

OpenVZ хранит все контейнеры в каталоге /vz. Допустим, есть контейнер с номером 100. Сам контейнер будет лежать в каталоге /vz/private/100/. Когда контейнер запущен, его файловую систему можно найти в каталоге /vz/root/100. А вот настройки контейнеров лежат не в /vz, для контейнера 100 их следует искать в файле /etc/vz/conf/100.conf. Таким образом, перед установкой OpenVZ рекомендуется соответствующим образом разбить диск, ну или хотя бы создать линк /vz туда, где побольше свободного места.

sudo wget -P / etc/ yum.repos.d/ http:// ftp.openvz.org/ openvz.repo
sudo rpm --import http:// ftp.openvz.org/ RPM-GPG-Key-OpenVZ
sudo yum install vzkernel
sudo yum install vzctl vzquota ploop

Правим /etc/sysctl.conf:

# On Hardware Node we generally need
# packet forwarding enabled and proxy arp disabled
net.ipv4.ip_forward = 1
net.ipv6.conf.default.forwarding = 1
net.ipv6.conf.all.forwarding = 1
net.ipv4.conf.default.proxy_arp = 0

# Enables source route verification
net.ipv4.conf.all.rp_filter = 1

# Enables the magic-sysrq key
kernel.sysrq = 1

# We do not want all our interfaces to send redirects
net.ipv4.conf.default.send_redirects = 1
net.ipv4.conf.all.send_redirects = 0

SELinux нужно отключить, правим /etc/sysconfig/selinux:

SELINUX=disabled

Перезагружаемся:

После перезагрузки uname -a покажет ту же версию ядра, что мы видели при установке пакета vzkernel. У меня это 2.6.32-042stab111.12 .

Вот и все! Не так уж и сложно, согласны?

Основные команды

Создать контейнер:

sudo vzctl create 100 --ostemplate centos-6 -x86_64 \
--hostname test-container

Важно! Контейнеры должны иметь номера 100 или больше. Прочие номера зарезервированы. В частности, с ними может отказаться работать утилита vzdump, речь о которой пойдет ниже.

Полный список доступных шаблонов можно найти . Первая загрузка шаблона занимает время, 219 Мб как-никак.

Запустить контейнер:

sudo vzctl start 100

Список контейнеров:

sudo vzlist -a

Выполнить команду в контейнере:

sudo vzctl exec 100 ps

Зайти в контейнер:

sudo vzctl enter 100

Сменить пароль пользователя:

sudo vzctl set 100 --userpasswd root:PASSWORD

Перезапустить контейнер:

sudo vzctl restart 100

Остановить контейнер:

sudo vzctl stop 100

Приостановить/возобновить работу контейнера:

sudo vzctl suspend 100
sudo vzctl resume 100

Примонтировать/отмонтировать файловую систему контейнера:

sudo vzctl mount 100
sudo ls / vz/ root/ 100
sudo vzctl umount 100

Удалить контейнер:

sudo vzctl delete 100

Основные настройки контейнера

Запускать контейнер при старте системы:

sudo vzctl set 100 --save --onboot yes

Количество ядер:

sudo vzctl set 100 --save --cpus 1

Выделяем 512 Мб памяти:

sudo vzctl set 100 --save --ram 512M

Разрешаем использовать 2 Гб под своп:

sudo vzctl set 100 --save --swap 2048M

Выделяем под контейнер 20 Гб на диске:

sudo vzctl set 100 --save --diskspace 20G

Меняем имя хоста:

sudo vzctl set 100 --save --hostname centos.example.com

Меняем IP и маску сети:

sudo vzctl set 100 --save --ipadd 10.110.0.13/ 24

Меняем DNS:

sudo vzctl set 100 --save --nameserver 8.8.8.8 --nameserver 8.8.4.4

Резервное копирование, восстановление и клонирование

Утилиты vzdump и vzrestore устанавливаются отдельно. Понадобится скачать два RPM пакета — первый , второй . Затем говорим:

sudo yum install perl-LockFile-Simple.noarch
sudo rpm -i cstream-2.7.4-3 .el5.rf.x86_64.rpm
sudo rpm -i vzdump-1.2 -4 .noarch.rpm

Резервное копирование контейнера:

sudo vzdump --compress 100

Резервная копия будет называтьcя как-то так:

/vz/dump/vzdump-openvz-100-2015_01_02-12_13_14.tgz

Восстановление контейнера с присвоением ему номера 101:

sudo vzrestore / path/ to/ archive.tgz 101

Таким же образом можно клонировать контейнеры.

Использование veth-интерфейса

OpenVZ может создавать два типа сетевых интерфейсов — venet (Virtual Network) и veth (Virtual Ethernet). Подробно различия описаны . Если в двух словах:

  • venet используется по умолчанию. Он чуть быстрее veth, но требует вручную указывать сетевые настройки контейнера и не позволяет использовать broadcast сообщения из контейнера. Также venet безопаснее (см далее);
  • veth разрешает использовать broadcast сообщения из контейнера, что, помимо прочего, позволяет назначать контейнеру сетевые настройки при помощи DHCP. Но veth при этом менее безопасен, чем venet. Поимев рута внутри контейнера, можно получить такой же доступ к сетевому интерфейсу, как и из хост-системы. Это позволяет, например, снифать весь трафик, идущий через интерфейс;

Рассмотрим, как при помощи veth-интерфейса можно пробрасывать трафик из контейнеров в локальную сеть, а также использовать в контейнерах DHCP этой локальной сети.

Примечание: Аналогичную инструкцию для Debian и Ubuntu вы найдете в заметке .

Виртуализация позволяет сделать работу системного администратора простой и логичной, снизить расходы на оборудование и вдохнуть новую жизнь в простаивающие сервера. Но если ты считаешь, что за все это приходится платить сложностью и запутанностью самой технологии, то эта статья как раз для тебя. Я покажу, что поднять сотню-другую виртуальных серверов не сложнее, чем настроить среднестатистический web-сервер.

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

Сегодня существует множество технологий виртуализации, среди которых есть как простые виртуальные машины, используемые на ПК обычных пользователей, так и целые облачные инфраструктуры, позволяющие управлять десятками тысяч виртуальных машин, разбросанных по всему миру. Особое место среди них занимают так называемые «системы виртуализации уровня операционной системы » или, как их иногда называют сисадмины, «псевдовиртуальные машины».

Виртуализация уровня ОС

В отличие от «настоящих» виртуальных машин, которые программно воссоздают аппаратную начинку ПК, системы виртуализации уровня ОС виртуализируют операционную систему, позволяя как бы расщепить ее на несколько независимых друг от друга ОС.

Проще всего понять это на примере дистрибутива GNU/Linux. Грубо его можно разделить на два логических компонента: ядро, имеющее максимальные привилегии и управляющее всем оборудованием, и компоненты пространства пользователя, представляющие собой набор демонов, библиотек, систему инициализации, ПО и прочее, которые получают доступ к оборудованию через вызовы функций ядра (системные вызовы). В обычной ситуации все компоненты пространства пользователя работают в одном «контексте исполнения » или, говоря образным языком, находятся в одной комнате: они могут видеть друг друга, имеют доступ к одному дереву файлов, делят между собой оборудование и все остальные ресурсы. Использование прав доступа позволяет им вполне успешно сосуществовать, не нанося друг другу вреда, однако может наступить момент, когда кто-то начнет теснить остальных, а другой, найдя способ обхода прав доступа, захватит власть над операционной системой.

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

Для решения этой проблемы виртуализация уровня ОС позволяет создать множество контекстов исполнения, каждый со своим деревом файлов, собственными процессами, сетевым стеком, правами на доступ к оборудованию и так далее. Проще говоря, она делает из одной операционной системы - несколько независимых, каждая из которых может иметь различные права на ресурсы, наиболее подходящие в ее конкретном случае. Такая виртуализация выгодно отличается от «настоящих» виртуальных машин: она проще в настройке, легко масштабируется и накладывает совсем незаметный (около 1%) оверхед на скорость работы ОС. Серьезный недостаток у нее всего один: возможность исполнения операционных систем только одного типа.

Почему OpenVZ?

В мире UNIX существует много различных реализаций виртуализации уровня операционной системы. Одними из первых в свою ОС ее внедрили разработчики FreeBSD. Система получила название Jail («Тюрьма») и долгое время оставалась образцом для подражания в глазах разработчиков других открытых ОС, но в последнее время сдала позиции как наименее развитая в плане функциональности.

Наверное, лучшую реализацию системы создала компания Sun для операционной системы Solaris 10, однако Solaris Zones, равно как и сама ОС, не получила широкого распространения (кстати, мы писали о Solaris Zones в одном из предыдущих номеров журнала).

Многие разработчики неоднократно предпринимали попытки воссоздать обе реализации для Linux, и на сегодня в этой области сформировалось три заметных лидера. Во-первых, это развиваемая сообществом система Linux-VServer (о ней мы также уже писали). Во-вторых, это не так давно появившийся, но очень перспективный проект LXC (LinuX Containers), который отличается очень функциональной реализацией, а также тем, что использует в своей основе стандартные механизмы ядра Linux, а потому не требует накладывания каких-либо патчей и может быть развернут за считанные минуты. В-третьих, это наиболее функциональная и стабильная система виртуализации OpenVZ, выступающая в роли ядра коммерческой системы Virtuozzo, выпускаемой российской компанией Parallels.

Сегодня OpenVZ и Virtuozzo - это стандарт де-факто для систем виртуализации уровня ОC в Linux. Они используются на тысячах серверов по всему миру, а их разработчики находятся на одном из первых мест по количеству коммитов кода в ядро Linux. Кстати, основной плюс OpenVZ заключается в том, что ты всегда сможешь найти не только огромное количество других пользователей OpenVZ, которые ответят на твои вопросы, но и массу информации на русском языке.

Что умеет OpenVZ?

По сути, OpenVZ - это модифицированное ядро Linux, в которое добавлен слой виртуализации, построенный на концепции VE (Virtual Environment - виртуальной среды), которую мы будем называть более привычным для нас термином «контейнер».

Такое ядро может обеспечивать несколько контекстов исполнения. И даже если пользователь не собирается использовать эту возможность, ядро все равно создаст один контекст, называемый Hardware Node (или нулевой контейнер). Это основная хост-система, имеющая максимальные полномочия и права на ресурсы. Говоря простым языком - стандартное Linux-окружение.

В любой момент администратор нулевого контейнера может добавить в систему новый контейнер, назначив ему номер, имя, сетевой адрес, дав прямой доступ к нужному оборудованию (если это необходимо) и выделив нужное количество ресурсов, которые будут определять «мощность» виртуального сервера.

OpenVZ использует модифицированный планировщик процессов, который учитывает не только их приоритеты, но и то, в каком контейнере они исполняются. Это позволяет задать жесткое ограничение процессорного времени на каждый контейнер, не позволив ему полностью загрузить весь процессор, лишив возможности исполнения процессы других контейнеров.

Каждый контейнер OpenVZ получает собственный виртуальный сетевой интерфейс (venet или veth) и полноценный, полностью обособленный от нулевого контейнера, сетевой стек, обеспечивающий контейнер отдельными IP-адресом, таблицей маршрутизации и правилами брэндмауэра. Одной из важнейших возможностей OpenVZ является механизм так называемого «чекпоинтинга», позволяющий сохранить образ контейнера на жесткий диск и восстановить его работу с прерванного места. Более того, образ можно безболезненно перенести на другую машину и восстановить его работу уже на ней. Причем даже если в момент «заморозки » на адрес одного из сетевых сервисов контейнера придет запрос, он будет вполне успешно обработан после восстановления, а для клиента это будет выглядеть как обычная задержка в ответе (например, на открытие web-страницы ушла не доля секунды, а 5 секунд).

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

Ограничения

Помимо уже упомянутого ограничения на тип поддерживаемых ОС, которое вытекает из того факта, что все контейнеры работают на одном ядре Linux, у OpenVZ есть несколько более мелких, но заслуживающих внимания недостатков (справедливости ради следует отметить, что это проблема всех реализаций системы виртуализации уровня ОС). Во-первых, OpenVZ накладывает определенные ограничения на работу софта, который зависит от низкоуровневых функций ядра. Так, например, ядерный NFS, OpenVPN и IPSec внутри контейнера работать не будут.

Какие-то другие программы, зависимые от ядерных модулей, также откажутся правильно функционировать (хотя в некоторых случаях OpenVZ позволяет загрузить в контейнер модули).

О различных ядерных патчах тем более придется забыть раз и навсегда. Во-вторых, все контейнеры OpenVZ используют один дисковый своп, а это значит, что если оперативная память между контейнерами будет распределена неправильно, система может начать тормозить в самый неподходящий момент. К счастью, проблема решается с помощью разделения памяти таким образом, чтобы ее суммарный объем составлял не более 80-90% от общего количества. В-третьих, контейнеры OpenVZ используют один дисковый кэш, поэтому если какой-то контейнер начнет активно обращаться к жесткому диску, то он может заполнить весь кэш своими данными, и другим контейнерам придется долго ждать очереди, чтобы записать/прочитать данные с диска. В связи с этим я бы не рекомендовал использовать OpenVZ для «хостинга» серверов, активно работающих с диском (для таких задач вообще всегда рекомендуется использовать выделенный железный сервер).

Наконец, в-четвертых, OpenVZ использует очень неэффективный механизм ограничения контейнеров в количестве оперативной памяти. Вместо подсчета реально используемой приложениями контейнера памяти он считает количество выделенной памяти, и это придется учитывать при запуске приложений, запрашивающих большие количества памяти при запуске, но не использующих ее всю во время работы (например, так ведет себя всем известный memcached при дефолтовых настройках).

Установка

Являясь «системой уровня предприятия» и основой платного продукта Virtuozzo, OpenVZ в первую очередь рассчитана на применение в дистрибутивах линейки RHEL, поэтому официальные сборки OpenVZ-ядра доступны только для этого дистрибутива.

Неофициально же OpenVZ доступен в Debian, разработчики которого самостоятельно патчат и готовят ядро OpenVZ (пакет linux-openvz-i386 FIXME).

В Ubuntu ядра OpenVZ нет еще с версии 8.10, поэтому у его пользователей остается два способа установить OpenVZ на сервер: пропатчить и собрать ядро самостоятельно либо взять уже патченое ядро из Ubuntu 8.04. Для тех, кто считает последний подход бредовым, поясню: во-первых, стабильное OpenVZ-ядро на сегодняшний день до сих пор имеет номер версии 2.6.18, тогда как в Ubuntu 8.04 используется даже более свежее ядро 2.6.24; во-вторых, Ubuntu 8.04 является LTS-дистрибутивом, а значит, обновления безопасности для любых его компонентов будут выходить вплоть до 2013 года, что, на мой взгляд, вполне приемлемо. Итак, если мы имеем дело с RHEL, то OpenVZ можно установить из официального источника. Для этого необходимо добавить репозиторий openvz.org в yum:

# cd /etc/yum.repos.d
# wget http://download.openvz.org/openvz.repo
# rpm --import http://download.openvz.org/RPM-GPG-Key-OpenVZ

Отключить SELinux:

# echo "SELINUX=disabled" > /etc/sysconfi g/elinux

И установить ядро и утилиты управления:

# yum install ovzkernel
# yum install vzctl vzquota

В Debian все просто, достаточно выполнить только одну команду:

$ sudo apt-get install vzctl vzquota
linux-openvz-i386

В Ubuntu сложнее. Сначала необходимо добавить репозиторий Ubuntu 8.04, для чего следует создать файл / etc/apt/sources.list.d/hardy-main.list и поместить в него следующие строки:

# vi /etc/apt/sources.list.d/hardy-main.list
hardy main
deb http://mirror.yandex.ru/ubuntu
hardy-updates main
deb http://mirror.yandex.ru/ubuntu
hardy-security main

Только после этого можно установить OpenVZ-ядро и утилиты:

$ sudo apt-get update
$ sudo apt-get install vzctl vzquota
linux-openvz

После установки в любом из трех дистрибутивов необходимо изменить некоторые настройки ядра, иначе OpenVZ будет работать некорректно. Открываем файл /etc/sysctl.conf и пишем в него следующее:

# vi /etc/sysctl.conf
net.ipv4.conf.default.proxy_arp = 1
net.ipv4.ip_forward = 1
net.ipv4.conf.all.rp_fi lter = 1
kernel.sysrq = 1
net.ipv4.conf.default.send_redirects = 1
net.ipv4.conf.all.send_redirects = 0

Перезагружаем машину и загружаемся уже с новым ядром. Чтобы запустить необходимые для правильной работы OpenVZ userspace-сервисы, набираем:

# /etc/init.d/vz start

Шаблоны ОС

Как уже было сказано выше, для каждого контейнера OpenVZ создает независимый контекст исполнения, который, за вычетом всего остального, имеет собственное файловое дерево, полностью обособленное от файловой системы нулевого контейнера. Поэтому перед тем как приступить к опробованию боевых качеств OpenVZ, мы должны подготовить набор файлов, которые будут формировать файловую систему для будущих контейнеров (так называемый шаблон).

Существует три способа это сделать:

  1. Скопировать файловое дерево из основной системы, что приведет к тому, что любой новый контейнер будет представлять собой копию существующей системы (нулевого контейнера).
  2. Взять существующий дистрибутив Linux и получить готовый шаблон, выбросив из него ядро, initramfsобраз и внеся несколько изменений.
  3. Скачать подходящий шаблон с сайта OpenVZ.

Мы пойдем по пути наименьшего сопротивления и воспользуемся третьим способом. Для этого переходим в каталог-хранилище шаблонов:

$ cd /var/lib/vz/template/cache

И скачиваем нужный шаблон с помощью wget:

$ sudo wget http://download.openvz.org/template/precreated/debian-5.0-x86.tar.gz

Весь список подготовленных шаблонов можно просмотреть, открыв страницу download.openvz.org/template/precreated в браузере.

Создаем контейнеры

Для управления OpenVZ используется несколько консольных утилит, наиважнейшая из которых носит имя vzctl. Она применяется для создания, удаления, запуска, остановки, а также изменения настроек контейнеров.

Любой сисадмин OpenVZ должен знать все ее параметры и опции назубок. Способ вызова утилиты следующий:

# vzctl команда номер_контейнера аргументы

Команда - это действие, которое должен выполнить OpenVZ, а аргументы уточняют или дополняют его.
Для создания контейнера используется команда create, для изменения параметров - set, для уничтожения - destroy. Также доступны команды enter, start, stop и restart, позволяющие «заходить» в контейнеры и управлять их работой.

Vzctl - очень гибкая утилита, с помощью которой можно создать и полностью настроить контейнер почти любой сложности, не затронув ни единого конфигурационного файла. Вот как это делается:

1. Сначала создаем новый контейнер с номером 100 (кстати, в качестве номера удобно использовать последнюю часть его IP-адреса):

# vzctl create 100 --ostemplate debian-5.0-x86
--confi g vps.basic

Здесь debian-5.0-x86 - это скачанный ранее шаблон без расширения tar.gz, а vps.basic - набор стандартных предустановок, которые мы все равно собираемся менять.

2. Меняем настройки контейнера так, чтобы он запускался при загрузке системы:

# vzctl set 100 --onboot yes --save

3. Меняем сетевое имя контейнера:

# vzctl set 100 --hostname my-fi rst-vps.org.ru --save

4. Даем ему новый IP-адрес:

# vzctl set 100 --ipdel all --ipadd 192.168.0.100 --save

5. Указываем дефолтный DNS-сервер:

# vzctl set 100 --nameserver 192.168.0.1 --save

6. Устанавливаем пароль пользователя root:

# vzctl set 100 --userpasswd root:password --save

7. Выделяем контейнеру 15% от общей мощности процессора (один процессор - это 100%, два - 200%, четыре - 400% и так далее):

# vzctl set 100 --cpulimit 15 --save

8. Выделяем контейнеру 20 Гб дискового пространства с возможностью его превышения до 25 Гб на небольшой промежуток времени:

# vzctl set 100 --diskspace 20G:25G --save

9. Устанавливаем ограничение на объем оперативной памяти (в первой строке устанавливаем гарантированный ресурс, во второй - негарантированный, он будет доступен контейнеру только в том случае, если в системе есть его излишек):

# vzctl set 100 --vmguarpages 256M:256M --save
# vzctl set 100 --privvmpages 512M:512M --save

10. Теперь можно войти в контейнер и продолжить настройку уже внутри него (установить необходимые сервисы, настроить брэндмауэр и маршрутизацию):

# vzctl enter 100

Более подробную информацию о настройке контейнеров можно почерпнуть из man-страницы vzctl.

UBC

В терминах OpenVZ лимиты и гарантии ресурсов называются User Beancounters (UBC). Всего существует около 20 UBC, контролирующих почти все возможные ресурсы системы. Каждый UBC имеет свою опцию в команде vzctl, а также строку в файле /proc/user_ beancounters, с помощью которого можно узнать о текущем количестве выделенных ресурсов и определить их нехватку. Файл представляет собой таблицу, каждая строка которой содержит информацию об одном ресурсе, а колонки отражают следующие данные:

Файл /proc/user_beancounters

  • uid - идентификатор контейнера;
  • resource - имя ресурса;
  • held - текущая утилизация ресурса;
  • maxheld - максимальный уровень утилизации ресурса за все время работы контейнера;
  • barrier - максимальный уровень утилизации ресурсов, который может быть временно превышен;
  • limit - жесткое ограничение утилизации ресурса, которое никогда не может быть превышено;
  • failcnt - счетчик отказов, который увеличивается каждый раз, когда контейнер делает запрос ресурсов сверх своего лимита.

Не обязательно разбираться во всех тонкостях системы подсчета ресурсов OpenVZ, чтобы эффективно управлять контейнерами. Достаточно время от времени поглядывать на значение колонки failcnt и, если оно оказывается больше нуля, начинать предпринимать меры либо по оптимизации исполняемого в рамках контейнера софта, либо по увеличению количества выделяемых контейнеру ресурсов.

Выводы

Эта статья охватывает лишь малую часть того, что принято называть термином «виртуализация уровня ОС», но изложенной в ней информации вполне достаточно, чтобы начать применять технологию и двинуться дальше.

О настройке контейнеров

Самое замечательное в настройке OpenVZконтейнеров - это целостность инструментов. При необходимости система сама изменяет конфигурационные файлы дистрибутива, расположенного в контейнере, так, чтобы они соответствовали запрошенным. К примеру, настройка адреса DNS-сервера с помощью vzctl автоматически приведет к его добавлению в файл /etc/resolv.conf в файловой системе контейнера.

Такой уровень гибкости гораздо сложнее получить при использовании «классических» систем виртуализации.

Список OpenVZ-утилит

  • vzlist используется для получения списка всех контейнеров;
  • vzmigrate предназначена для осуществления offlineи online-миграции;
  • vzcfgvalidate проверяет конфигурационные файлы на корректность;
  • vzmemcheck, vzcpucheck, vzcalc осуществляют проверку на доступные ресурсы внутри контейнера;
  • vzsplit автоматически генерирует конфигурационные файлы;
  • vzpid определяет номер контейнера по PID’у процесса;
  • vzquota управляет дисковой квотой контейнера.

Links

  • Все, что нужно знать о UBC: wiki.openvz.org/UBC ;
  • Руководство по созданию шаблонов: http://goo.gl/h1gNL .
  • О том, как производить чекпоинтинг: http://goo.gl/lZbzW .
  • Как превратить физический сервер в виртуальный: http://goo.gl/sYtxF ;
  • Настройка I/Oприоритетов для контейнеров: http://goo.gl/YtjiV .
  • Cписок панелей управления OpenVZ: http://goo.gl/KfEbB .
  • OpenVZ Web Panel, одна из лучших web-панелей для управления OpenVZ: http://goo.gl/x7UlF .
  • Настройка OpenVZ Web Panel: http://goo.gl/vx73u .
  • Описание процесса установки OpenVZ в Ubuntu 10.04 с помощью сборки из исходников: http://goo.gl/XEaou .

O penVZ, сокращенно Open Virtuozzo, является популярной технологией виртуализации для систем Linux, которая функционирует на уровне операционной системы. OpenVZ позволяет установку и запуск нескольких экземпляров операционной системы, известные как виртуальные частные серверы (VPS) или контейнеры, на одном физическом сервере. Эти виртуальные экземпляры запускаются изолированно друг от друга и имеют свои собственные файловые системы. Одно ограничение OpenVZ является то, что все контейнеры разделяют ту же архитектуру и версию ядра Linux. Тем не менее, не будучи истинным гипервизором, виртуальные частные серверы OpenVZ не имеют большого количества накладных расходов и очень быстры. С мягким распределением памяти, позволяющей эффективное совместное использование памяти между контейнерами, OpenVZ является полезным инструментом для компаний, стремящихся больше гибкости в своих физических серверам за счет виртуализации и изоляции. Для того, чтобы управлять различными виртуальными частными серверами OpenVZ на узле Linux, можно использовать OpenVZ Web Panel вместо командной строки для упрощения управления OpenVZ.

Этот учебник покажет вам, как вы можете создать виртуальные частные сервера OpenVZ в Ubuntu 12.04. Мы также объясним, как управлять созданными виртуальными частными серверами с помощью OpenVZ Web Panel, чтобы вы могли наилучшим образом воспользоваться силой виртуализации OpenVZ для вашего бизнеса.

Начало работы

Для завершения этого руководства, вам потребуется следующее:

  • 1 сервер (облачный или ) работающий на Ubuntu 12.

Прежде чем продолжить, пожалуйста, обратите внимание, что все команды, перечисленные в данном руководстве должны быть выполнены в качестве корневого пользователя. Кроме того, можно дополнительно использовать пользователя, имеющего привилегии суперпользователя, в этом случае вам придется указать к команде суперпользователя sudo к началу каждой команды. Тем не менее, рекомендуется быть подписанным непосредственно в корневом каталоге.

Учебник

Первым шагом при внедрении любого нового программного обеспечения или приложений на сервере, всегда убедиться, что ваш сервер должным образом подготовлен. Во-первых, мы будем гарантировать, что сервер находится в актуальном состоянии. С помощью команды обновления apt-get, мы получим доступные обновления, а затем применим их. apt является менеджером пакетов по умолчанию для Ubuntu, и, указывая его с флагом -y, мы можем сэкономить время и пропустить несколько подсказок “Yes” при обновлении.

Убедитесь, что сервер находится в актуальном состоянии

Apt-get update apt-get -y upgrade

Вы будете нуждаться в веб-утилиту wget в этом учебнике. Эта утилита позволит вам скачивать файлы из Интернета. Если она еще не установлена в вашей системе, вы можете установить его с помощью apt.

Apt-get -y install wget

Установка OpenVZ

Наш сервер на Ubuntu теперь готов к установке OpenVZ. Во- первых, нам нужно будет создать новый файл для OpenVZ. Используйте текстовый редактор nano , чтобы открыть новый файл openvz-wheezy.list . Этот файл будет содержать информацию о хранилище для OpenVZ так, чтобы ваша система Ubuntu знала, где взять его:

Nano /etc/apt/sources.list.d/openvz-wheezy.list

В открытом файле, вставьте следующие строки, содержащие ссылки на хранилище OpenVZ:

deb http://download.openvz.org/debian wheezy main

# deb http://download.openvz.org/debian wheezy-test main

После добавления строк сохраните и закройте файл. Далее, нам нужно будет добавить ключ для репозитория для того, чтобы иметь возможность использовать его. Изменить каталог на домашний корневой с помощью команды cd:

Cd /root

В этом каталоге, извлечь ключ репозитория с сайта OpenVZ с помощью утилиты wget для загрузки файла:

Wget http://ftp.openvz.org/debian/archive.key

После того как файл будет загружен, вы можете использовать новый ключ с помощью следующей команды:

Apt-get update

После выполнения указанной выше команды, мы можем, наконец, установить ядро ​​OpenVZ с помощью apt :

Apt-get install linux-image-openvz-amd64

Когда установка ядра OpenVZ завершена, мы должны настроить некоторые параметры ядра в файле sysctl.conf . Откройте файл конфигурации с использованием текстового редактора nano:

Nano /etc/sysctl.conf

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

net.ipv4.ip_forward = 1
net.ipv6.conf.default.forwarding = 1
net.ipv4.conf.default.proxy_arp = 0
net.ipv4.conf.default.send_redirects = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv6.conf.all.forwarding = 1
net.ipv4.conf.all.rp_filter = 1
kernel.sysrq = 1

Сохраните и закройте файл sysctl.conf , когда вы закончите. Для, чтобы изменения вступили в силу, вам нужно будет перегрузится с помощью systctl:

Sysctl -p

Далее, мы установим ядро OpenVZ ​​для загрузки по умолчанию. Этот шаг является более сложным, в зависимости от того, сколько ядер в настоящее время установлены на вашей системе, различные параметры, возможно, придется изменить. Для целей нашего урока, мы будем рассматривать как новую установку вашей системы.

Когда мы установили ядро, ядро ​​grub регенерируют с помощью нового ядра OpenVZ. Однако по умолчанию он не установлен в boot. Нам нужно будет скорректировать некоторые параметры и пересобрать grub в OpenVZ для загрузки автоматически. Используйте команду sed для выполнения изменений параметров:

Sed -i "s|GRUB_DEFAULT="0"|GRUB_DEFAULT="Previous Linux versions>0"|" /etc/default/grub update-grub

После того, как grub был перекомпилирован, мы можем установить некоторые утилиты OpenVZ на нашем сервере с помощью менеджера пакетов apt:

Apt-get install vzctl vzquota ploop vzstats

После того, как установка пакетов завершена, сервер Ubuntu необходимо будет перезагрузить. Модифицировав процесс загрузки по умолчанию, ядро ​​OpenVZ должно загружаться автоматически. Если это не так, то вам, возможно, придется отредактировать меню grub и закомментируйте другие записи. Перезагрузите узел Ubuntu:

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

Uname -a

Вывод команды выше должен показать слово “OpenVZ” внутри имя ядра, как показано в следующем примере:

Linux ub12vz 2.6.32-openvz-042stab117.16-amd64 #1 SMP Fri Sep 9 22:00:20 MSK 2016 x86_64 x86_64 x86_64 GNU/Linux

Подтвердив, что наше ядро ​​OpenVZ является активным, мы можем сделать дополнительный этап включения соседних устройств использовать разные подсети между хозяином OpenVZ и его гостей. Для этого откройте файл vz.conf с помощью nano. Прежде чем продолжить, обратите внимание, что этот шаг не является обязательным, и поэтому полностью зависит от вас? требуете ли вы его для вашего использования. Откройте конфигурационный файл:

Nano /etc/vz/vz.conf

В открытом файле найдите следующую запись:

#NEIGHBOUR_DEVS=detect

Измените строку следующим образом:

NEIGHBOUR_DEVS=all

Сохраните и закройте файл. Поздравления! Вы завершили установку OpenVZ. Продолжайте читать, чтобы установить на OpenVZ Web Panel на вашем сервере управления виртуальных частных серверов вашего хоста.

Установка OpenVZ Web Panel

Перед установкой OpenVZ Web Panel, нам нужно будет установить Ruby (язык кодирования) и различные зависимости, используя apt:

Apt-get -y install ruby1.8 rubygems1.8 ruby-net-ssh ruby-net-sftp ruby-sqlite3

После завершения установки зависимостей завершаем, мы загрузим скрипт установки для OpenVZ Web Panel и применим некоторые исправления. Во-первых, изменим каталог в корневом каталоге с помощью cd:

Cd /root

В корневом каталоге, используйте wget для загрузки сценария установки для OpenVZ Web Panel:

Wget https://raw.githubusercontent.com/sibprogrammer/owp/master/installer/ai.sh

Sed -i "s|http://ovz-web-panel.googlecode.com/files/|https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/ovz-web-panel/|" ai.sh

Запустите установочный скрипт для OpenVZ Web Panel:

Sh ai.sh

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

Ufw allow 3000/tcp

Настройка среды

Теперь, когда обе OpenVZ и OpenVZ Web Panel установлены на сервере Ubuntu, мы можем перейти к исходной конфигурации нашей окружающей среды. Начнем с того, приобретем некоторые шаблоны виртуальных машин и настройки веб-панели.

Начните с доступа к интерфейсу OpenVZ Web Panel. В окне браузера, перейдите к следующему URL, заменив ваш_ip_адрес_сервера на IP-адрес вашего сервера:

http://ваш_ip_адрес_сервера: 3000

Войдите в интерфейс OpenVZ Web Panel, используя учетные данные по умолчанию, как показано ниже:

Имя пользователя: admin

Пароль: admin

После того, как вы вошли в систему, вы можете изменить пароль администратора. Держаnm его в качестве “admin” по умолчанию настоятельно не рекомендуется, поскольку это значительно ослабbn ваши настройки безопасности. Вместо этого мы изменим его как можно быстрее. Выполните следующие шаги, чтобы изменить свой пароль:

  1. Нажмите на “Мой профиль” на левой приборной панели
  2. Введите новый пароль два раза
  3. (Необязательно) Укажите имя контактного лица и адрес электронной почты для учетной записи
  4. Нажмите кнопку Сохранить , когда вы закончите

После изменения пароля по умолчанию, мы можем настроить некоторые IP-адреса. В меню левосторонней части приборной панели OpenVZ Web Panel, cick по ИС Адреса.

Так как это чистая установка, у нас не будет ни одного IP-адреса, настроенные по-умолчанию. Нажмите на следующее:

Create new IP pool

Для нашего урока мы будем имеет несколько IP-адресов, назначенных в виде одной подсети с адресами 167.210.1.0/28. Мы выберем 167.210.1.2, для основного адреса сервера, сохраняя от 167.210.1.3 до 167.210.1.14 для наших виртуальных машин. Заполните информацию IP Pool с соответствующими IP-адресами для каждого сервера, нажмите на кнопку Create.

Ваши новые IP-адреса будут добавлены в систему и могут быть использованы для атрибутов любых виртуальных машин, мы создаем в настоящее время используя OpenVZ.

Для предоставления виртуальных машин для сервера Ubuntu, мы должны добавить некоторые шаблоны ОС к нашей системе. Благодаря OpenVZ Web Panel, эти шаблоны могут быть легко загружены непосредственно из веб-интерфейса. Выполните следующие действия:

  1. Нажмите на кнопку “Physical Server” > “localhost” на левой панели приборной панели
  2. Нажмите кнопку “OS Templates” в правом верхнем углу окна физического сервера
  3. На следующей странице будут показаны все установленные шаблоны OS
  4. Для добавления новых шаблонов, нажмите кнопку “Install New OS Template”
  5. Всплывающее окно покажет все доступные шаблоны ОС. Выберите тот, который вы хотите и нажмите кнопку “install”

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

Для того, чтобы создать виртуальную машину, выполните следующие действия:

  1. Перейдите в раздел “Physical Server” > “localhost” в левосторонней приборной панели
  2. Выберите “Create virtual server” в меню “Virtual Servers List”
  3. В открывшемся диалоговом окне, вам будет предложено установить имя для виртуальной машины
  4. Далее, вы можете установить шаблон операционной системы и ресурсы, которые вы хотите приписать VM
  5. Наконец, выберите IP – адрес, используемый для VM и укажите его корневой пароль
  6. Нажмите кнопку “Create” , чтобы закончить вызов VM

Вывод

Теория без практики - бесполезна, поэтому настало время написать подробную установку и настройку OpenVZ на CentOS/Red Hat/ Fedora. У меня установлена именно CentOS 6.5.

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

# wget -P /etc/yum.repos.d/ http://ftp.openvz.org/openvz.repo # rpm --import http://ftp.openvz.org/RPM-GPG-Key-OpenVZ

Установим ядро и все наши утилиты, выполним команду в терминале:

# yum install vzctl vzquota ploop

Ограниченная функциональности в OpenVZ поддерживается при запуске современного ядра 3.x (нужно проверить vzctl апстрима ядра, так что установка OpenVZ ядро является обязательным):

# yum install vzkernel

На офф сайте говорится, что с vzctl начиная с версии 4.4 настройки параметров ядра нужно немного видоизменить (/etc/sysctl.conf), . На официальном сайте вычитал что это необходимо сделать так как есть целый ряд параметров ядра, которые должны быть установлены в OpenVZ для корректной работы. Эти параметры хранятся в /etc/sysctl.conf. Вот соответствующие фрагменты файла; пожалуйста, измените соответствующим образом:

# On Hardware Node we generally need # packet forwarding enabled and proxy arp disabled net.ipv4.ip_forward = 1 net.ipv6.conf.default.forwarding = 1 net.ipv6.conf.all.forwarding = 1 net.ipv4.conf.default.proxy_arp = 0 # Enables source route verification net.ipv4.conf.all.rp_filter = 1 # Enables the magic-sysrq key kernel.sysrq = 1 # We do not want all our interfaces to send redirects net.ipv4.conf.default.send_redirects = 1 net.ipv4.conf.all.send_redirects = 0

Необходимо отключить SELinux в вашей системе.По этому положите SELINUX=disabled в /etc/sysconfig/selinux выполнив команду:

# echo "SELINUX=disabled" > /etc/sysconfig/selinux

Теперь перезагрузите машину и выберем «OpenVZ» в самом меню загрузчика.

Перегрузимся и убедимся что версии ядра совпадают:

Если версия ядра совпадают, то вы все сделали правильно, или нужно проверить какое именно ядро загружает в GRUB. Создадим наш контейнер:

vzctl create 103 —ostemplate debian-7.0-x86_64 —config vswap-2g

Шаблон для создания контейнера с Debian 7 будет скачан с официального сайта OpenVZ и установится сам для дальнейшего использования (если вы хотите еще добавить в контейнер, то выберите на сайтике!).

Создадим конфигурацию для нового нашего контейнера: Добавим контейнер в автозагрузку после запуска нашей хост-системы.

# vzctl set 103 --onboot yes --save

Задаем hostname для нашей новой системы (для ВПСки).

# vzctl set 103 --hostname debian7.for_test.com --save

Назначим айпи (ИП) , установка для VENET — соединения

# vzctl set 103 --save --ipadd 192.168.244.31

Прописываем DNS — сервера

# vzctl set 103 --save --nameserver 8.8.8.8 --nameserver 8.8.4.4

Присвоим количество cpu-ядер

# vzctl set 103 --save --cpus 2

Присвоим количество RAM

# vzctl set 103 --save --ram 4G

Присвоим количество swap

# vzctl set 103 --save --swap 2G

Задаем размер нашего жесткого диска

# vzctl set 103 --save --diskspace 10G

Запустим наш контейнер

# vzctl start 103

Установим пароль для root-пользователя

# vzctl exec 103 passwd

Таким образом мною был создан и настроем новый контейнер на системе Debian 7. Я настроил VENET-соединение для связи с внешним миром. В следующий раз можно исправить конфигурацию контейнера, отредактировав конфиг в /etc/vz/conf/:

Физически контейнер лежит в /vz/private/103:

# cd /vz/private/103

Если контейнер работает и вам нужно что то добавить или настроить, то все изменения лучше осуществлять пользуясь путем /vz/root/103, который делает синхронизацию с /vz/private/103. OpenVZ имеет возможность настройки VETH (Virtual ETHernet) или VENET (Virtual NETwork) сетевого интерфейса внутри вашего контейнера. VETH позволяет отправлять broadcasts-сообщения внутри вашего контейнера и у него имеется MAC - адрес на интерфейсе, поэтому можно настроить автоматическое получение адреса с помощью DHCP или настроить Samba - сервер, который также требует broadcasts-сообщений. VETH-интерфейс задается исключительно с помощью vzctl, все другие настройки интерфейса (ввод IP, gateway и др.) нужно делать в самом контейнере. Но, скорее всего, VENET-соединения будет вам с головой. К преимуществам последнего можно отнести высокую скорость работы по сравнению с VETH и быструю его настройку ресурсами хост-машины.

Немного больше о сетевых соединениях контейнеров почитайте на wiki OpenVZ. Сейчас напишу как создать контейнер с использованием VETH-соединения. Для начала нужно создать vmbr0 bridge. Нужно установить пакет bridge-utils, после чего будем настраивать интерфейс vmbr0:

# yum install bridge-utils # ee /etc/sysconfig/network-scripts/ifcfg-vmbr0 DEVICE="vmbr0" BOOTPROTO="static" IPV6INIT="no" ONBOOT="yes" TYPE="Bridge" DELAY=0 IPADDR=192.168.244.30 NETMASK=255.255.255.0 GATEWAY=192.168.244.1

eth0 настроим таким образом:

# ee /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE="eth0" ONBOOT="yes" IPV6INIT="no" TYPE="Ethernet" BRIDGE="vmbr0"

Но до этого у eth0 был статический IP 192.168.244.30. Создадим /etc/vz/vznet.conf со следующим содержанием:

# ee /etc/vz/vznet.conf #! /bin/bash EXTERNAL_SCRIPT = "/usr/sbin/vznetaddbr"

Ребутнем нашу хост-машинку. В этот раз,я выберу др ОС для создания нового (другого) контейнера с VETH сетевым соединением:

# vzctl create 102 --ostemplate centos-6-x86_64 --config vswap-1g

И соответственно настроим:

# vzctl set 102 --save --onboot yes # vzctl set 102 --save --hostname centos6.for_test.com

задание VETH-соединения

# vzctl set 102 --save --netif_add eth0,FE:FF:FF:FF:FF:FF # vzctl set 102 --save --nameserver 8.8.8.8 --nameserver 8.8.4.4 # vzctl set 102 --save --cpus 1 # vzctl set 102 --save --ram 2G # vzctl set 102 --save --swap 1G # vzctl set 102 --save --diskspace 10G # vzctl start 102 # vzctl exec 102 passwd

Создадим новый конфиг для нашей сети нового контейнера и ребутнем сеть:

# cat << _EOF_ > /vz/root/102/etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE="eth0" HOSTNAME="centos6" IPV6INIT="no" MTU="1500" TYPE="Ethernet" ONBOOT=yes BOOTPROTO=static IPADDR=192.168.244.32 NETMASK=255.255.255.0 GATEWAY=192.168.244.1 _EOF_ # vzctl exec 102 /etc/init.d/network restart

Учтите что для Ubuntu/Debian все настройки сети хранятся в /etc/network/interfaces:

# cat << _EOF_ > /vz/root/102/etc/network/interfaces auto lo eth0 iface lo inet loopback iface eth0 inet static address 192.168.244.32 netmask 255.255.255.0 gateway 192.168.244.1 _EOF_ # vzctl exec 102 /etc/init.d/networking restart

В результате сетевое соединение (VETH) мы имеем:

А когда я настраивал VENET было вот так:

Управление контейнерами или их квотами выполняется через программу vzctl. Напишу нужные команды: Запуск $CTID контейнера

# vzctl start $CTID

Прекращение работы контейнера

# vzctl stop $CTID

Ребут контейнера

# vzctl restart $CTID

Удаления контейнера, но до этого нужно остановить его

# vzctl destroy $CTID

Запуск команды в контейнере

# vzctl exec $CTID command

Логин в консоль контейнера $CTID через хост — машину

# vzctl enter $CTID

Настройки опций для виртуальной машины

# vzctl set $CTID different_options --save

Если есть нужда в настройках квоты для ваши контейнеров без перегрузки, то ограничить объем HDD и количество инод можно так (синтаксис задания такой software_limit:hardware_limit):
1000000 — это приблизительно 1GB

# vzctl set 101 --diskspace 1000000:1100000 --save

Задаем количество дисковых инод.

# vzctl set 101 --diskinodes 90000:91000 --save

Задаем время на которое можно поднять квоту до hardware limit

# vzctl set 101 --quotatime 600 --save

Если есть необходимость,то можно перенастроить приоритет ввода/вывода (disk I/O) на HDD. Самый высокий — это уровень 7, низкий - это 0. По дефолту disk I/O установлен на 4, но можно это и поправить:

# vzctl set 101 --ioprio 6 --save

Проверяем:

# grep IOPRIO /etc/vz/conf/101.conf IOPRIO = " 6"

Если есть необходимость то легко можно поправить (увеличить или уменьшить) количество ядер до 4 на новом контейнере:

# vzctl set 101 --cpus 4 --save

Если на самой хост-системе будет меньше ядер чем в контейнере, то желаемых изменений не увидите. Установить количество RAM и SWAP-а можно следующим образом:

# vzctl set 101 --physpages 256M --save # vzctl set 101 --swappages 384M --save

Чтобы увидеть все контейнеры и их статус можно запустить утилиту vzlist:

Хочу рассказать о дампах в контейнерах. Чтобы это сделать нужна утилита vzdump. Она с легкостью может почти без стопа вашего контейнера копировать/мигрировать/бекапить контейнер. Но для начала нужно установить:

# rpm -ivh "http://ftp.openvz.org/contrib/utils/vzdump/vzdump-1.2-4.noarch.rpm"

А пользоваться ею можно так:

vzdump —suspend 102

Можно легко отресторить дамп в новую машину с новым CTID:

Установка OpenVZ на CentOS окончена! Рассказал что знал и собрал много материала до кучи! Если есть вопросы, пишите. Если вы хотите графический интерфейс для того чтобы хорошо работать с вашими виртуальными машинами то используйте Proxmox или OpenVZ Web Panel.