
Установка 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» в самом меню загрузчика.
Перегрузимся и убедимся что версии ядра совпадают:
# uname -a
Если версия ядра совпадают, то вы все сделали правильно, или нужно проверить какое именно ядро загружает в GRUB. Создадим наш контейнер:
# vzctl create 103 --ostemplate debian-7.0-x86_64 --config vswap-2g
Шаблон для создания контейнера с Debian 7 будет скачан с официального сайта OpenVZ и установится сам для дальнейшего использования (если вы хотите еще добавить в контейнер, то выберите на сайтике!).
# 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
Физически контейнер лежит в /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 ) мы имеем:
# ip a
А когда я настраивал VENET было вот так:
# 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
Можно легко отресторить дамп в новую машину с новым CTID:
# vzrestore /vz/dump/vzdump-openvz-102-2014_04_05-24_15_39.tar 201
Установка OpenVZ на CentOS окончена! Рассказал что знал и собрал много материала до кучи! Если есть вопросы, пишите. Если вы хотите графический интерфейс для того чтобы хорошо работать с вашими виртуальными машинами то используйте Proxmox или OpenVZ Web Panel.
А на Centos 7 или Fedora 21 это должно работать?
Думаю что должно работать. Я не проверял еще.