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

Установка OpenVZ на Ubuntu 13.04

В этой статье я опишу, как подготовить сервер Ubuntu 13.04 для OpenVZ. С OpenVZ можно создать несколько виртуальных частных серверов (VPS) на том же оборудовании, подобно Xen и проекта Linux Vserver. OpenVZ является с открытым исходным кодом филиал Virtuozzo, коммерческого решения виртуализации, используемого многими поставщиками, которые предлагают виртуальные серверы. Патч OpenVZ в ядро под лицензией GPL, и инструменты пользовательского уровня находятся под лицензией QPL.

Это руководство предназначено в качестве практического руководства; он не охватывает теоретические основы. Их много в Интернете.

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

1 Предварительные замечания
У меня установлена x86_64 (amd64) система. Если вы пользуетесь системой i386, некоторые команды будут немного отличаться. Проверить какаю разрядность вы имеете можно следующим образом:

# uname -a
#uname -i

2 Установка OpenVZ
Для Ubuntu 13.04, нет OpenVZ ядра в официальных репозиториях. Поэтому мы должны установить OpenVZ с официальных RPM пакетов из проекта OpenVZ.

2.1 Установка с официального RPM пакета из OpenVZ проекта
Загрузите последние версии vzkernel, Ploop, vzquota RPM, vzctl из http://wiki.openvz.org/Download/kernel/rhel6 и http://wiki.openvz.org/Download/utils, например следующим образом ::

RPMs

Для Ubuntu с 64-битной архитектурой (x86_64 (AMD64, EM64T)):

# cd /usr/local/src/
# wget http://download.openvz.org/kernel/branches/rhel6-2.6.32/042stab085.20/vzkernel-2.6.32-042stab085.20.x86_64.rpm
# wget http://download.openvz.org/kernel/branches/rhel6-2.6.32/042stab085.20/vzkernel-devel-2.6.32-042stab085.20.x86_64.rpm
# wget http://download.openvz.org/kernel/branches/rhel6-2.6.32/042stab085.20/vzkernel-headers-2.6.32-042stab085.20.x86_64.rpm
# wget http://download.openvz.org/kernel/branches/rhel6-2.6.32/042stab085.20/vzkernel-debug-2.6.32-042stab085.20.x86_64.rpm
# wget http://download.openvz.org/kernel/branches/rhel6-2.6.32/042stab085.20/vzkernel-debug-devel-2.6.32-042stab085.20.x86_64.rpm
# wget http://download.openvz.org/kernel/branches/rhel6-2.6.32/042stab085.20/vzkernel-firmware-2.6.32-042stab085.20.noarch.rpm
# wget http://download.openvz.org/utils/vzctl/4.6.1/vzctl-4.6.1-1.x86_64.rpm
# wget http://download.openvz.org/utils/vzctl/4.6.1/vzctl-core-4.6.1-1.x86_64.rpm
# wget http://download.openvz.org/utils/ploop/1.11/ploop-1.11-1.x86_64.rpm
# wget http://download.openvz.org/utils/ploop/1.11/ploop-devel-1.11-1.x86_64.rpm
# wget http://download.openvz.org/utils/ploop/1.11/ploop-lib-1.11-1.x86_64.rpm
# wget http://download.openvz.org/utils/vzquota/3.1/vzquota-3.1-1.x86_64.rpm
# wget http://download.openvz.org/utils/vzstats/0.5.3/vzstats-0.5.3-1.noarch.rpm

Для Ubuntu с 32-битной архитектурой (x86 (i686, IA32)):

# cd /usr/local/src/
# wget http://download.openvz.org/kernel/branches/rhel6-2.6.32/042stab085.20/vzkernel-2.6.32-042stab085.20.i686.rpm
# wget http://download.openvz.org/kernel/branches/rhel6-2.6.32/042stab085.20/vzkernel-devel-2.6.32-042stab085.20.i686.rpm
# wget http://download.openvz.org/kernel/branches/rhel6-2.6.32/042stab085.20/vzkernel-headers-2.6.32-042stab085.20.i686.rpm
# wget http://download.openvz.org/kernel/branches/rhel6-2.6.32/042stab085.20/vzkernel-debug-2.6.32-042stab085.20.i686.rpm
# wget http://download.openvz.org/kernel/branches/rhel6-2.6.32/042stab085.20/vzkernel-debug-devel-2.6.32-042stab085.20.i686.rpm
# wget http://download.openvz.org/kernel/branches/rhel6-2.6.32/042stab085.20/vzkernel-firmware-2.6.32-042stab085.20.noarch.rpm
# wget http://download.openvz.org/utils/vzctl/4.6.1/vzctl-4.6.1-1.i386.rpm
# wget http://download.openvz.org/utils/vzctl/4.6.1/vzctl-core-4.6.1-1.i386.rpm
# wget http://download.openvz.org/utils/ploop/1.11/ploop-1.11-1.i386.rpm
# wget http://download.openvz.org/utils/ploop/1.11/ploop-devel-1.11-1.i386.rpm
# wget http://download.openvz.org/utils/ploop/1.11/ploop-lib-1.11-1.i386.rpm
# wget http://download.openvz.org/utils/vzquota/3.1/vzquota-3.1-1.i386.rpm
# wget http://download.openvz.org/utils/vzstats/0.5.3/vzstats-0.5.3-1.noarch.rpm

Установка следующих пакетов …

# apt-get install fakeroot alien libcgroup1

И пересобираем пакеты из RPM в DEB для этого нужно выполнить команду:

# fakeroot alien --to-deb --scripts --keep-version vz*.rpm ploop*.rpm

Установка DEB  пакетов следующим образом:

# dpkg -i vz*.deb ploop*.deb

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

dpkg -i vz*.deb ploop*.deb

dpkg -i vz*.deb ploop*.deb

Это означает, что есть и другое ядро в системе (3.8.0), а ядро ​​OpenVZ (2.6.32) уже не первый в списке. Таким образом, чтобы сделать OpenVZ ядро ядром по умолчанию, у нас есть два варианта — отрегулировать ядро по умолчанию в GRUB (рекомендуется) или удалить ядро не-VZ (ы).

Для регулировки ядра по умолчанию в GRUB необходимо открыть /etc/default/grub…

# ee /etc/default/grub

Нам нужно изменить строку с GRUB_DEFAULT (подсчет начинается с 0; наш OpenVZ является третим ядром в дополнительные параметры подменю GRUB Ubuntu (который является вторым вариантом в меню загрузки после ядра 3.8.0), так что мы должны прописать  «1> 2»:

[...]
GRUB_DEFAULT="1>2"
[...]

После чего необходимо обновить GRUB, сделать это можно:

# update-grub

Чтобы удалить ядро которое стоит по умолчанию, выполните:

# apt-get remove linux-image linux-image-3.8.0-19-generic

Обновим GRUB еще 1 раз:

 # update-grub

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

Далее мы должны проверить, что мы используем UUID, вместо имен устройств в /etc/fstab поскольку в противном случае система может не загрузиться с ядром OpenVZ. Запуск …

# blkid

Чтобы узнать UUID, ваших устройств / разделов:

blkid

blkid

Откроем /etc/fstab:

# ee /etc/fstab

Мой первоначальный /etc/fstab выглядит следующим образом (как видите, UUID из /boot раздела уже используется, но для /swap, имена устройств уже используются):

fstab on OpenVZ

fstab on OpenVZ

Изменить его так, чтобы UUID, использовался для всех разделов следующим образом:

fstab on OpenVZ_norm

fstab on OpenVZ_norm

Убедитесь что OpenVZ запускается автоматически при загрузке:

# update-rc.d vz defaults
# update-rc.d vzeventd defaults

Далее нам нужно связать несколько библиотек:

# ln -s /usr/lib64/libvzctl-4.3.1.so /usr/lib
# ln -s /usr/lib64/libploop.so /usr/lib

Если вы хотите использовать Ploop контейнеры, сделайте следующее:

# apt-get install parted

Кроме того, нужно открыть /etc/init.d/vz……:

# ee /etc/init.d/vz

И необходимо добавить строку mkdir $VARLOCK/ploop, чтобы убедиться, что каталог /var/lock/ploop воссоздан после перезагрузки:

#!/bin/sh
[...]
. /usr/libexec/vzctl/scripts/initd-functions
mkdir $VARLOCK/ploop
[...]

Создадим символические ссылки с /vz to/var/lib/vz для обеспечения обратной совместимости:

# ln -s /vz /var/lib/vz

Открываем  /etc/sysctl.conf и смотрим, что у вас есть следующие настройки в нем:

# ee /etc/sysctl.conf
[...]
net.ipv4.conf.all.rp_filter=1
net.ipv4.icmp_echo_ignore_broadcasts=1
net.ipv4.conf.default.forwarding=1
net.ipv4.conf.default.proxy_arp = 0
net.ipv4.ip_forward=1
kernel.sysrq = 1
net.ipv4.conf.default.send_redirects = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.eth0.proxy_arp=1
[...]

Если вы хотите или есть необходимость в изменении /etc/sysctl.conf, то выполните:

# sysctl -p

После этого. Следующий шаг очень важен, если IP-адреса ваших виртуальных машин из другой подсети, чем IP-адрес хост-системы. Если вы не сделаете этого, сеть не будет работать в виртуальных машинах!

Открываем /etc/vz/vz.conf и устанавливаем строку NEIGHBOUR_DEVS всем:

# ee /etc/vz/vz.conf
[...]
# Controls which interfaces to send ARP requests and modify APR tables on.
NEIGHBOUR_DEVS=all
[...]

Нужно установить утилиту vzdump:

# apt-get install vzdump

Наконец, перезагрузим нашу систему:

# reboot

Если перезагрузка произошла без проблем, то все в порядке! Запускаем команду:

# uname -r

и ваше новое ядро ​​OpenVZ должен появиться, Вы должны увидеть что то типа этого:

root@testvps:/usr/local/src/OpenVZ# uname -r
2.6.32-042stab085.17
root@testvps:/usr/local/src/OpenVZ#

3 Использование OpenVZ

Перед тем как мы сможем создавать виртуальные машины с OpenVZ, мы должны иметь шаблон для распределения, что мы хотим использовать на виртуальных машинах в директории /var/lib/vz/template/cache. Виртуальные машины будет создан на основе этого шаблона.

Вы сможете посмотреть список precreated шаблонов на http://wiki.openvz.org/Download/template/precreated и выбрать нужный. Например, мы можем скачать минимальный шаблон следующим образом:
Wheezy Debian (x86_64):

# cd /vz/template/cache
# wget http://download.openvz.org/template/precreated/contrib/debian-7.0-amd64-minimal.tar.gz

Wheezy Debian (x86):

# cd /vz/template/cache
# wget http://download.openvz.org/template/precreated/debian-7.0-x86.tar.gz

(Если ваш хостинг представляет собой систему на i386, вы не сможете использовать шаблон для amd64 — вы должны использовать i386 шаблоны тогда!)

Сейчас я покажу и расскажу о некоторых командах для использования OpenVZ.

Чтобы настроить VPS от Debian-7.0-amd64 минимального шаблона (вы сможете увидеть его в /vz/template/cache), выполните:

# vzctl create 101 --ostemplate debian-7.0-amd64-minimal --config basic

101 должна состоять из эксклюзивного ID — все виртуальные машины должны иметь свой собственный уникальный ID. Можно использовать IP-адреса виртуальной машины для этого (последнюю часть). Например, если IP-адрес вашей виртуальной машины — 192.168.0.101, то можно использувать 101 как ID.

Если вы хотите иметь В.М. запускался во время загрузки, запустите:

# vzctl set 101 --onboot yes --save

Чтобы присвоить имя хоста и IP-адрес для VM, запустите следующую команды:

# vzctl set 101 --hostname test.example.com --save
# vzctl set 101 --ipadd 192.168.0.101 --save

После всего этого мы устанавливаем количество sockets до 120 и назначить несколько сервер имен к ВМ:

# vzctl set 101 --numothersock 120 --save
# vzctl set 101 --nameserver 8.8.8.8 --nameserver 8.8.4.4 --save

(Если вы не можете использовать команды vzctl , вы так же можете просто отредактировать файл конфигурации на виртуальной машины, который хранится в  /etc/vz/conf. Если идентификатор ВМ 101, то файл конфигурации выглядит: /etc/vz/conf/101.conf.)

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

# vzctl start 101

Чтобы установить пароль root для виртуальной машины:

# vzctl exec 101 passwd

Теперь вы можете либо законнектиться к виртуальной машине через SSH (например через PuTTY), или  следующим образом:

# vzctl enter 101

Чтобы закрыть консоль в ВМ выполните:

# exit

Чтобы остановить VM, запустите команду:

# vzctl stop 101

Чтобы перезапустить виртуальную машину, запустите команду:

# vzctl restart 101

Удалить ВМ из жесткого диска (она должен быть остановлена, прежде чем вы сделаете это), запустите команду:

# vzctl destroy 101

Чтобы получить список ваших виртуальных машин и их состояние можно следующим образом:

# vzlist -a
vzlist -a

vzlist -a

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

# vzctl exec 101 cat /proc/user_beancounters
vzctl exec 101 cat /proc/user_beancounters

vzctl exec 101 cat /proc/user_beancounters

Колонна failcnt очень важна, она должна содержать только нули; если это не так, это означает, что виртуальная машина нуждается в большем количестве ресурсов, чем в настоящее время распределена VM. Откройте файл конфигурации виртуальной машины в /etc/vz/conf и поднять соответствующий ресурс, а затем перезапустить виртуальную машину.

Чтобы узнать больше о команде vzctl, запустите команду:

# man vzctl

3.1 Установка квоты внутри контейнера

Чтобы включить квоты внутри контейнера (в данном примере это контейнер с ID 101), выполните следующие команды от хоста:

# vzctl stop 101
# vzctl set 101 --diskquota yes --save
# vzctl set 101 --diskspace 10G --save
# vzctl set 101 --diskinodes 200000:220000 --save
# vzctl set 101 --quotatime 0 --save
# vzctl set 101 --quotaugidlimit 1000 --save
# vzctl start 101

Вы можете выбрать значения для дискового пространства и diskinodes с вашими потребностями. quotaugidlimit устанавливает максимальное количество идентификаторов для пользователей / групп в контейнере, для которого дисковая квота внутри контейнера, будут учитываться.

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

# apt-get install quota quotatool

После этого выполните команду:

# repquota -avug

Должно показать текущие квоты:

repquota -avug

repquota -avug

3.2 Создание Ploop контейнера

Создание Ploop контейнера не сильно отличается от создания обычного, на основе контейнер каталогов — просто убедитесь, что вы используете — макета переключатель для Ploop и укажите дискового пространства (например — дискового пространства 10G) при создании контейнера:

# vzctl create 102 --layout ploop --diskspace 10G --ostemplate debian-7.0-amd64-minimal --config basic

Установка все другие варианты (если необходимо):

# vzctl set 102 --onboot yes --save
# vzctl set 102 --hostname test2.example.com --save
# vzctl set 102 --ipadd 192.168.0.102 --save
# vzctl set 102 --numothersock 120 --save
# vzctl set 102 --nameserver 8.8.8.8 --nameserver 8.8.4.4 --save
# vzctl start 102
# vzctl exec 102 passwd

Чтобы включить квоту внутри Ploop контейнера, нам просто нужно установить опцию quotaugidlimit:

# vzctl stop 102
# vzctl set 102 --quotaugidlimit 1000 --save
# vzctl start 102

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

# apt-get install quota quotatool
# repquota -avug

Должно показать текущие квоты (если нет, то перезапустить контейнер):

repquota -avug

repquota -avug

Установка OpenVZ на Ubuntu подошла к окончанию. Надеюсь все понятно, тема раскрыта полностью и охватывает очень большую часть. Если есть вопросы, то пишите ниже в комментариях.

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

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

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