Установка OpenVZ на CentOS

Установка OpenVZ на CentOS

Теория без практики — бесполезна, поэтому настало время написать подробную установку и настройку 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» в самом меню загрузчика.

OpenVZ на CentOS 6.5

OpenVZ на CentOS 6.5

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

# uname -a
uname -a на Centos

uname -a на Centos

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

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

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

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

# vzlist -a
vzlist -a

vzlist -a

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

# 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/:

# ee /etc/vz/conf/103.conf
ee /etc/vz/conf/103.conf

ee /etc/vz/conf/103.conf

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

# cd /vz/private/103
cd /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 и быструю его настройку ресурсами хост-машины.

Сравнение VETH и VENET

Сравнение VETH и VENET

Немного больше о сетевых соединениях контейнеров почитайте на 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 ) мы имеем:

# ip a
ip-a

ip-a

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

# ip a
ip-a

ip-a

Управление контейнерами или их квотами выполняется через программу 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:

# vzlist -a

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

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

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

# vzdump --suspend 102
vzdump --suspend 102

vzdump —suspend 102

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

# vzrestore /vz/dump/vzdump-openvz-102-2014_04_05-24_15_39.tar 201
vzrestore /vz/dump/vzdump-openvz-102-2014_04_05-24_15_39.tar 201

vzrestore /vz/dump/vzdump-openvz-102-2014_04_05-24_15_39.tar 201

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

2 thoughts on “Установка OpenVZ на CentOS

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.