Установка 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) загружается при перезапуске системы. В выходе последней команды, вы должны увидеть что-то вроде этого:
Это означает, что есть и другое ядро в системе (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, ваших устройств / разделов:
Откроем /etc/fstab:
# ee /etc/fstab
Мой первоначальный /etc/fstab выглядит следующим образом (как видите, UUID из /boot раздела уже используется, но для /swap, имена устройств уже используются):
Изменить его так, чтобы UUID, использовался для всех разделов следующим образом:
Убедитесь что 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
Чтобы узнать о ресурсах, выделяемых на виртуальной машине, запустите команду:
# 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
Должно показать текущие квоты:
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
Должно показать текущие квоты (если нет, то перезапустить контейнер):
Установка OpenVZ на Ubuntu подошла к окончанию. Надеюсь все понятно, тема раскрыта полностью и охватывает очень большую часть. Если есть вопросы, то пишите ниже в комментариях.