Установка OpenVZ в Ubuntu. Подготовка гостевой системы традиционным для VZ способом

При выборе тарифа, человек выбирает также и способ виртуализации для сервера. Предлагаем на выбор виртуализации на уровне операционной системы OpenVZ и аппаратную виртуализацию KVM.

Сменить тип виртуализации после запуска невозможно, поскольку серверы находятся на разных аппаратных платформах. Вам придётся заказать новый сервер, перенести проект и отказаться от старого сервера.

Сравнение типов виртуализаций

OpenVZ KVM
ОС из ряда предложенных: Debian, CentOS, Ubuntu Linux, Windows, FreeBSD, установка собственного дистрибутива
Изменение ресурсов без перезагрузки (жёсткий диск, память, процессор) Память и процессор изменятся после перезагрузки, жёсткий диск - только после обращения в поддержку (на готовых тарифах память изменить нельзя)
Смена тарифного плана без перезагрузки

Смена тарифного плана . Сервер будет недоступен 1-2 часа.

Мягкие лимиты: максимальная производительность сервера может отклоняться в большую или меньшую сторону Жёсткие лимиты: каждый сервер получает заявленные ресурсы
Ограничение на запуск высоконагруженных проектов. Запрещено запускать Java-приложения, массовые рассылки и проксировать трафик. TUN/TAP выключен. Возможность запуска любых проектов (кроме систем распределённых вычислений)

Виртуализация OpenVZ

OpenVZ - виртуализация уровня операционной системы. Технология базируется на ядре ОС Linux и позволяет на одном физическом сервере создавать и запускать изолированные друг от друга копии выбранной операционной системы (Debian, CentOS, Ubuntu). Установка другой ОС невозможна, так как виртуальные серверы используют общее ядро Linux.

Технология отличается легкостью управления сервером: пользователь может в личном кабинете самостоятельно добавить количество ресурсов (память, процессор, жесткий диск) или перейти на другой тариф с той же виртуализацией. Изменения ресурсов применяются автоматически, без перезагрузки сервера.

На серверах с виртуализацией OpenVZ запрещается запускать:

  • сервисы для организации проксирования любого вида трафика
  • сервисы потокового вещания
  • игровые серверы
  • системы или элементы систем распределённых вычислений (например, bitcoin mining)
  • сервисы массовой рассылки почтовых сообщений, даже если они используются в легальных целях
  • Java-приложения
  • иные ресурсоёмкие приложения

Такие проекты создают неравномерную нагрузку на родительском сервере и могут мешать соседним виртуальным машинам.

Виртуализация KVM

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

Возможна установка любой операционной системы на выбор (Debian, CentOS, Ubuntu, FreeBSD, Windows Server), либо установка собственного дистрибутива (в панели VMmanager в разделе ISO-образы нажмите кнопку Создать и добавьте свой ISO-образ системы).

Смена тарифного плана возможна только в большую сторону и только в рамках базовой линейки тарифов (Старт, Разгон, Отрыв, Улёт). Если ваш проект «вырастет» из тарифа, напишите запрос в поддержку из Личного кабинета - администраторы сменят тариф на требуемый бесплатно. Изменить тариф в меньшую сторону можно только переносом на новый сервер. Закажите новый сервер и перенесите данные самостоятельно, либо специалисты технической поддержки помогут с переносом за 1 обращение по пакету администрирования или 250 руб.

Помните, что на тарифах VDS-Форсаж и VDS-Атлант , вы можете изменять ресурсы вместо смены тарифа : количество доступных ядер процессора и оперативной памяти самостоятельно в панели управления, а размер жёсткого диска - после обращения в поддержку (в рамках администрирования или за 250 руб.).

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

На серверах с виртуализацией KVM Абоненту запрещается размещать системы или элементы систем распределённых вычислений (например, bitcoin mining ).

Смена виртуализации на сервере

В рамках одного сервера сменить виртуализацию с OpenVZ на KVM и обратно невозможно.

1. Закажите второй сервер с нужной виртуализацией в панели BILLmanager, раздел Виртуальные серверы → Заказать

2. Перенесите на него данные.

3. После переноса и проверки старый сервер можно удалить (Виртуальные серверы → Удалить).


OpenVZ - это реализация технологии виртуализации на уровне операционной системы, которая базируется на ядре Linux. OpenVZ позволяет на одном физическом сервере запускать множество изолированных копий операционной системы, называемых Виртуальные Частные Серверы (Virtual Private Servers, VPS ) или Виртуальные Среды (Virtual Environments, VE ).

Поскольку OpenVZ базируется на ядре Linux, в отличие от виртуальных машин (напр. VMware) или паравиртуализационных технологий (напр. Xen), в роли «гостевых» систем могут выступать только дистрибутивы Linux . Однако, виртуализация на уровне операционной системы в OpenVZ даёт лучшую производительность, масштабируемость, плотность размещения, динамическое управление ресурсами, а также лёгкость в администрировании, чем у альтернативных решений. Согласно сайту OpenVZ, накладные расходы на виртуализацию очень малы, и падение производительности составляет всего 1-3 %, по сравнению с обычными Linux-системами. OpenVZ является базовой платформой для Virtuozzo - проприетарного продукта Parallels, Inc. OpenVZ распространяется на условиях лиценции GNU GPL v.2. OpenVZ состоит из модифицированного ядра Linux и пользовательских утилит.

OpenVZ - это технология ядра Linux, позволяющая запускать несколько виртуальных частных серверов (VPS) на одном физическом компьютере. Каждый из серверов при этом выглядит как отдельный сервер с отдельными доступом root, IP-адресом, таблицей процессов, файловой системой, правилами брандмауэра и т. д. От средств полной виртуализации вроде Xen или VMWare эту программу отличает то, что в каждом экземпляре VPS используется одна и та же разделяемая копия ядра Linux. По этому, например, с OpenVZ нельзя загрузить экземпляр Windows 7 и экземпляр RedHat, и нельзя загружать модули ядра независимо в каждый VPS. Но «пространство пользователя» в каждом VPS может быть разным, поэтому можно, например, запустить CentOS и SUSE рядом на одном и том же ядре. Это эффективное решение, и можно создать достаточно полную иллюзию отдельно администрируемых компьютеров, чтобы удовлетворить пользователей, которые не хотят много платить за хостинг-услуги.

Ядро OpenVZ - это модифицированное ядро Linux, которое обеспечивает виртуализацию, изоляцию, управление ресурсами и чекпоинтинг (сохранение текущего состояния VE).

Утилиты OpenVZ

    vzctl - утилита для манипулирования VPS (создание, уничтожение, установка параметров …)

    vzquota - утилита для квотирования VPSs. Чаще используется неявно через vzctl.

    vzpid - позволяет определить, какому контейнеру принадлежит процесс (в качестве параметра принимает pid процесса).

    vzubc - утилита, заменяющая такой инструмент, как cat /proc/user_beancounters.

    vzlist - печатает листинг контейнеров.

    vzmemcheck, vzcpucheck, vzcalc - служат для получения информации об используемых ресурсах.

vzctl

    Запустить контейнер по его имени или CTID: # vzctl start example1 # vzctl start 101

    Проверить состояние VE: # vzctl status 101 CTID 101 exist mounted running # vzlist -a CTID NPROC STATUS IP_ADDR HOSTNAME 101 8 running 10.161.85.101 my.example.com

    Выполнить в нём одиночную команду: vzctl exec 101 uname -a

    Перейти в командную строку контейнера с правами суперпользователя: vzctl enter example1

Сервер OpenVZ

    Файловая система . Разбивка HDD на аппаратном узле. Рекомендуется использовать отдельный раздел для хранения данных VE. (по умолчанию /vz/private/). Причина этого в том, что если вы захотите использовать дисковые квоты на каждый VE, используемые OpenVZ, вы не сможете использовать обычные квоты Linux. На том же разделе. В данном контексте OpenVZ-квота не является чистой квотой, она действует как обычная дисковая квота, но в рамках VE, а не аппаратного узла. Квоты OpenVZ поддерживаются только для файловых систем ext2/ext3, если квоты не важны рекомендуется ставить ext4 . Избегайте использовать корневой раздел для хранения данных VE. В такой ситуации администратор VE может превысить дисковый барьер в 5%, полностью заполнить корневой раздел аппаратного узла, и вызвать крах системы.

Точка монтирования Тип файловой системы Комментарии
/ ext4 Корневой раздел для файлов ОС аппаратного узла. 8-10 Гб
/swap swap Пространство подкачки Linux. 2хОЗУ или 1хОЗУ
LVM - Все свободное место.
LVM /tmp ext4 /tmp 10GB
LVM /home ext4 /home 20GB
LVM /vz ext4 /vz Rest
LVM /noexec ext4 /vz/noexec 10GB

    Выбираем минимальную установку. В руководстве безопасности OpenVZ настоятельно рекомендуется не использовать на уровне аппаратного узла никаких сетевых сервисов кроме sshd (Защита демона sshd).

    Доставим дополнительные пакеты # yum install nano mc wget lsof mailx mlocate ntsysv

    Установка ядра с поддержкой OpenVZ, для этого добавим официальный репозиторий OpenVZ: # cd /etc/yum.repos.d # wget -P /etc/yum.repos.d/ http://ftp.openvz.org/openvz.repo # rpm --import http://ftp.openvz.org/RPM-GPG-Key-OpenVZ # yum install vzkernel

    Редактируем загрузчик ОС в файле menu.lst, в котором ядро с поддержкой OpenVZ должно стоять первым или единственным # cp /boot/grub/menu.lst /boot/grub/menu.lst.bak # nano /boot/grub/menu.lst

    Установка инструментов администрирования OpenVZ # yum install vzctl vzquota ploop # shutdown -r now

    Настраиваем sysctl : 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

    Запуск # service vz start

Установка VE

    Cкачиваем готовые шаблоны для VE: Precreated template caches for different distributions . Также скачиваем контрольные суммы для проверки целостности файлов шаблона (OpenVZ - проверка целостности template). # cd /vz/template/cache/ # wget -c http://download.openvz.org/template/precreated/debian-6.0-x86_64.tar.gz # wget -c http://download.openvz.org/template/precreated/debian-6.0-x86_64.tar.gz.asc # wget -c http://download.openvz.org/template/precreated/contrib/debian-5.0-i386-minimal.tar.gz # wget -c http://download.openvz.org/template/precreated/contrib/debian-5.0-i386-minimal.tar.gz.asc # wget -O - http://download.openvz.org/RPM-GPG-Key-OpenVZ | gpg --import # gpg --verify debian-6.0-x86_64.tar.gz.asc

В OpenVZ существует два основных варианта размещения файлов контейнера, они называются ploop и simfs. Simfs – более старый способ размещения файлов контейнера. При его использовании все файлы находятся в определенном каталоге файловой системы физического узла. Ploop более новый способ, при его использовании все файлы контейнера размещаются в одном отдельном большом файле.

    Создание контейнера simfs для debian-5.0-i386-minimal.tar.gz: # vzctl create 101 --ostemplate debian-5.0-i386-minimal --layout simfs CT configuration saved to /etc/vz/conf/101.conf

    Выполним настройку контейнера: Включить автоматический запуск виртуального окружения при старте сервера # vzctl set 101 --save --onboot yes --name talk-mss --ipadd 10.161.85.101 --hostname my.example.com --nameserver "208.67.222.222 8.8.4.4"

    save приказывает сохранить изменения в conf-файле. Без этого параметра они будут применены к запущенному контейнеру без сохранения; onboot приказывает запускать контейнер при старте OpenVZ; name задаёт произвольное читабельное имя, которое затем можно использовать вместо VEID. Например, "vzctl status talk-mss"; ipadd назначает контейнеру IP-адрес во внутренней сети OpenVZ; hostname изменяет имя системы, используемое внутри контейнера для самоидентификации; "nameserver" конфигурирует контейнер на использование указанного DNS -сервера;

Монтирование разделов в VE

Лимиты VE

OpenVZ ограничивает для контейнеров потребление всех системных ресурсов: процессора, оперативной памяти, дискового пространства, системных буферов, сокетов и т. д. Начальные лимиты настолько строгие, что даже команда apt-get update в только что созданном контейнере завершается с сообщением об ошибке.

Управление ограничениями в системе с OpenVZ является двухуровневым: для контейнера в целом – средствами OpenVZ, внутри контейнера – стандартными средствами Linux, через ulimit и дисковые квоты.

Для проверки внешних ограничений служит файл /proc/user_beancounters . Внутри контейнера этот файл заполнен информацией по данному контейнеру, во внешней системе содержит сведения обо всех запущенных окружениях. Основной интерес в нём представляет последний столбец, «failcnt» («failure counter», т. е. «количество сбоев»):

# egrep -v " 0$" /proc/user_beancounters

Процессорные лимиты

"Вес" CPU для данного контейнера. Аргументом может быть положительное число в диапазоне от 8 до 500000. Устанавливает зависимость распределения CPU между разными контейнерами. Значение по умолчанию - 1000. Значение 1000 в одном контейнере и 2000 в другом означает, что при прочих равных условиях второй контейнер получит вдвое больше CPU.

    –cpulimit num[%]

Лимит использования CPU контейнером. В процентах. Если компьютер имеет два CPU, то это значит он имеет всего 200% CPU, которые можно распределить между контейнерами. Значение по умолчанию - 0 (нет лимита).

Устанавливает количество процессоров (не ядер) доступных в контейнере.

Клонирование VPS сервера

Клонирование VPS сервера на OpenVZ:

    Остановим сервер, который будем клонировать # vzctl stop 101

    Клонируем конфигурационный файл, в нем как минимум нужно изменить IP до запуска нового VE # cp /etc/vz/conf/101.conf /etc/vz/conf/103.conf

    Если используется mount # cp /etc/vz/conf/101.mount /etc/vz/conf/103.mount # mkdir /vz/noexec/vz-103-home

    Клонируем сервер копированием при помощи утилиты Использование rsync в примерах , ключ -а позволяет сохранить права на файлы и указывает на рекурсивное копирование, слеш "/" в конце директории, указывает, что мы ее копируем. # rsync -av /vz/private/107/ /vz/private/108 # rsync -av /vz/noexec/vz-107-home/ /vz/noexec/vz-108-home

    Для переноса VE между серверами можно использовать утилиту tar с ключом -p, который позволяет сохранить права на файлы. Например: на первом хосте # cd /vz/private/ # tar -cpvf 109-mb3_3.tar 109/

    Любым способом копируем на второй хост и на нем запускаем

    # cd /vz/private/ # tar -xvpf 109-mb3_3.tar

FAQ

Как включить в VE OpenVZ запись истории команд bash?

    Как включить в VE OpenVZ запись истории команд пользователя, которые отображаются командой history в консоли? (No bash history in VE). По умолчанию в bash всё пишется в файл ~/.bash_history. Если хотим хранить историю в другом файле, то нужно в.bashrc, задать команду HISTFILE=~/.my_history. Выясним в какой файл записывается история в нашем VE # env | grep -i HISTFILE HISTFILE=/dev/null

    И видим что история сразу затирается. Редактируем файл и задаем параметр HISTFILE глобально /etc/bash.bashrc или в.bashrc пользователя)

    # nano /root/.bashrc ... HISTFILE =~/ .bash_history HISTSIZE =1000 HISTFILESIZE =2000 ...
  • HISTSIZE - определяет число строк, хранящихся в списке истории (в памяти интерпретатора).

    HISTFILESIZE - максимальное количество команд хранящихся в файле истории.

Dnsmasq в контейнере OpenVZ

Доступ к устройствам из VE

Из виртуальных окружений прямой доступ отсутствует и к железу, и к ядру. Каталог /dev почти пуст и содержит только логические устройства: null, zero, random, tty, console и т. д.

USB устройство в VE

Задача . Сделать доступным в VE подключенный USB ключ (на флешке лицензия).

    Вывести список USB устройств. Нас интересуется флешка вставленная в Bus 006 Device 002 # lsusb Bus 004 Device 002: ID 046b:ff10 American Megatrends, Inc. Virtual Keyboard and Mouse Bus 006 Device 002: ID 04b9:0300 SafeNet USB SuperPro/UltraPro

    Подробности об устройстве: # ls -al /dev/bus/usb/006/002 crw-rw-r-- 1 root root 189, 641 Ноя 27 09:10 /dev/bus/usb/006/002

    Войдем в VE и создадим это устройство в нем (mknod) # vzctl enter VEID # mkdir -p /dev/bus/usb/006 # cd /dev/bus/usb/006 # mknod 002 c 189 641

    В конфигурационный файл /etc/vz/conf/VEID.conf добавим строку DEVNODES="bus/usb/006/002:rw "

    Перезагрузим VE и проверим видимость USB ключа в VE # vzctl restart VEID # vzctl enter VEID # lsusb Bus 006 Device 002: ID 04b9:0300 SafeNet USB SuperPro/UltraPro

Установка tun/tap для OpenVPN на OpenVZ VE

По умолчанию запрещено использование этих виртуальных драйверов.

    Загрузим модуль tun в HN: modprobe tun

    проверим

    Lsmod | grep tun

    Выясним параметры устройства tun в HN для использования в mknod VE ls -la /dev/net/tun crw-rw-rw- 1 root root 10, 200 Авг 27 08:26 /dev/net/tun

    Включаем поддержку на самом VE сервере (111 - номер VE сервера) vzctl set 111 --devnodes net/tun:rw --save vzctl set 111 --devices c:10:200:rw --save vzctl set 111 --capability net_admin:on --save vzctl exec 111 mkdir -p /dev/net vzctl exec 111 chmod 600 /dev/net/tun

    Перезагрузите VE сервер vzctl restart 111

VE маршрутизация 2 сетевых интерфейсов

В случае когда VE OpenVZ два и более сетевых интерфейса, например venet0:0 и venet0:1 может возникнуть проблема прохождения пакетов между HN OpenVZ, то есть не в пределах одного сервера OpenVZ (где все они соединены через интерфейс venet0), а между двумя и более HN OpenVZ. Самое простое решение использовать NAT на HW, но тогда будет подменяться IP, что не всегда нужно. Втрое решение исправить в VE изменить маску сети на /24

Ifconfig venet0:1 netmask 255.255.255.0

Более подробно решение проблемы здесь: OpenVZ multiple networks on CTs . Можно также запускать эту команду при помощи файла /etc/rc.local

/sbin/ifconfig venet0:1 netmask 255.255.255.0

или для CentOS создать выполняемый файл /sbin/ifup-local. Для добавления маршрута на новую сеть (например 10.26.95.0/24) в VE обязательно нужно указать источник src .

ifup-local #!/bin/bash / sbin/ ifconfig venet0:1 netmask 255.255.255.0 / sbin/ ip route add 10.26.95.0/ 24 dev venet0:1 src 10.161.85.112

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

Физически файлы контейнера просто находятся в некоторой директории на HN. При запуске VE эта директория монтируются в другую, посредством механизмов, напоминающих mount –bind и последующий chroot. Т.е. для резервного копирования достаточно скопировать или архивировать эту директорию. Т.к. контейнер может быть запущен либо остановлен, то и резервное копирование может быть выполнено «горячее», либо «холодное». При горячем копировании может произойти порча структуры файлов, которые не были закрыты запущенными в контейнере программами. Особенно это чревато для баз данных. По этому этот метод нужно использовать очень осторожно. Этих недостатков лишено холодное копирование, но для него необходимо остановить контейнер, что не всегда приемлемо, да и вообще не хорошо вмешиваться в работу VE.

Для осуществление живой миграции контейнеров между HN у OpenVZ есть специальное состояние - checkpoint . При входе в это состояние все процессы контейнера замораживаются и содержимое памяти сбрасывается в дамп. Сохраняется также ядерная информация (например, о состоянии открытых сокетов). После перемещения файлов и дампа памяти VE на другой HN можно его там «оживить». Если промежуток времени от заморозки до оживления составляет единицы-десятки секунд, то приложения могут даже не заметить перемещения контейнера, а сетевые клиенты могут не отключиться.

Этот режим тоже можно использовать для резервного копирования контейнера OpenVZ. Конечно, через некоторое время, при восстановлении из этой копии, подключенных клиентов уже не будет, но зато целостность системы сохранится и можно будет остановить сервисы для получения полноценной «холодной» системы и запустить вновь.

Данный метод позволяет сократить время простоя виртуальной машины до минимума.** При использовании данного метода, наиболее полезны опции: –stdexcludes - позволяет исключить временные файлы (/tmp и т.д.) –exclude-path - позволяет исключить определенные директории. Адреса директорий задаются с помощью regexp. modprobe vzcpt vzdump --suspend 121 --mailto root vzdump --compress --suspend 121 --mailto root

Возможные проблемы: ERROR: Backup of VM 121 failed - command "vzctl --skiplock chkpnt 121 --suspend" failed with exit code 16

Исправить

Modprobe vzcpt

Восстановить VE с другим CTID vzrestore / vz/ dump/ vzdump-openvz-121 -2016 _02_09-12 _27_09.tgz 123

Сейчас наблюдается большой ажиотаж в отношении технологий контейнерной виртуализации. И почему-то в этом контексте особенно часто упоминается 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 вы найдете в заметке .

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

Вывод