Установка и использование OpenVZ в Debian

Что такое OpenVZ

OpenVZ позволит Вам запустить еще один (или несколько) экземпляр Linux (в нашем случае Debian) на вашем хосте.

Установка в Debian

Для нормальной работы OpenVZ требуется ядро с vz-патчами. В Debian такие ядра имеют суффикс -openvz и для архитектуры i386 собраны с поддержкой памяти более 4 гигабайт. Установим ядро:

        apt-get install linux-image-2.6.26-2-openvz-686

Все дальнейшие работы будем вести перезагрузившись в это ядро.

Дополнительно

Для работы с VZ необходимы:

        apt-get install vzctl debootstrap vim

Подготовка гостевой системы

Для начала выберите место, где будет находиться Ваша гостевая OS. В данном руководстве будем считать, что гостевая система будет расположена в каталоге /vz/guest. Создадим базовый образ гостевой системы:

        mkdir /vz/guest
        debootstrap lenny /vz/guest

Примечание: Необходимо отметить, что создание образа гостевой системы в OpenVZ предполагается осуществлять при помощи скачивания и распаковки tgz-шаблона операционной системы. Однако в случае Debian совсем необязательно качать сотни мегабайт данных: в Debian имеется утилита debootstrap, которая прекрасно справляется с задачей создания минимальной системы.

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

Этот способ стоит применять, если Вы хотите в гостевой системе установить не Debian, а другую операционную систему. Для этого нужно скачать шаблон интересующей нас системы с сайта. Затем можно распаковать этот шаблон в каталог /vz/guest, либо положить шаблон в каталог /var/lib/vz/template/cache. Во втором случае, для того, чтобы создать гостевую систему необходимо выдать команду:

        vzctl create 10 --ostemplate имя_шаблона --private /vz/guest

где, 10 - идентификатор создаваемой системы, имя_шаблона - имя скачанного шаблона, /vz/guest - путь куда будет установлена гостевая система (распакован шаблон). В случае создания системы из шаблона файл 10.conf в /etc/vz/conf будет создан автоматически.

Выбор идентификатора Вашей гостевой системы

OpenVZ различает гостевые системы по их номеру. Хороший способ задания номера гостевой системы -- последний октет её ip-адреса. К сожалению, сейчас не имеется общепринятого способа отображения номеров VZ в человекочитаемые имена. Утилита vzctl может назначать синонимы для номеров VZ и работать с ними. Однако некоторые из других утилит для VZ могут их не понимать.

Для задания имени-синонима гостю с номером 256 можно создать симлинк:

        /etc/vz/names/guestname -> /etc/vz/conf/256.conf

либо использовать для этой цели vzctl:

        vzctl set 256 --name guestname --save

В дальнейшем можно будет использовать вместо номера VZ его имя (для данного примера - guestname), но это уже после того как гость создан и номер ему назначен, а пока будем считать, что мы создаем гостя с номером 10.

Начало работы с гостем

Идем в каталог /etc/vz/conf и копируем файл-шаблон конфига ve-light.conf-sample в файл с именем 10.conf, где 10 - выбранный нами идентификатор системы. В этом файле мы исправим всего один параметр (вернее, добавим):

        OSTEMPLATE="debian"

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

Дальнейшее конфигурирование системы мы будем вести при помощи утилиты vzctl. Для того, чтобы изменить какой-то из параметров гостя, используется команда

        vzctl set <номер гостя> --параметр значение --параметр значение --save

Открываем man vzctl и идем по параметрам сверху вниз, попутно собирая одну большую конфигурационную команду:

        vzctl set 10 \
                        --onboot yes \
                        --private /vz/private \
                        --ipadd   1.2.3.4 \
                        --nameserver 4.3.2.1 \
                        --searchdomain mydomain.ru \
                        --numproc 100 \
                        --privvmpages 32768
                --save

Большинство параметров, указанных здесь, можно опустить, а некоторые из них -- указать прямо во время создания гостя (смотрите вывод vzctl --help). Единственный необходимый на данный момент параметр -- --private: с его помощью мы укажем vztcl, где искать файлы гостевой системы. Более подробно некоторые параметры будут рассмотрены ниже, а пока, выполнив вышеприведенную команду, мы можем уже запустить гостя:

        vzctl start 10

Для того, чтобы остановить гостя, наберите

        vzctl stop 10

Ну и самое интересное -- зайти в запущенного гостя рутом:

        vzctl enter 10

На этом шаге Вы можете приступить к собственно конфигурированию гостя: установке сервера ssh, любимого редактора, шелла и т.п. Скорее всего, Вы сразу наткнетесь на ограничения, выставленные гостю по умолчанию, например "слишком маленький диск" или "слишком мало памяти", ниже мы рассмотрим (а выше мы частично уже рассмотрели), как изменять эти ограничения, добавлю лишь, что изнутри гостя всегда можно посмотреть, какие ограничения у Вас установлены:

        cat /proc/user_beancounters

Эта команда работает и на хост-системе, выведя ограничения для всех гостей, а также максимальные значения параметров (контейнер с номером 0).

Перезапускать гостя после изменения каких-то из его параметров чаще всего необязательно, например, параметры, связанные с ограничениями памяти, дисковой квоты, количеством процессов и сетевые параметры этого не требуют. Если перезагрузка гостя всё-таки понадобилась, то сделать это можно с использованием той же утилиты:

        vzctl restart 10

Параметры гостя

VZ позволяет устанавливать множество параметров для гостевой системы. На этом вики вы можете найти подробное описание параметров конфигурирования контейнеров, а вот некоторые из них:

Параметр

vps.conf

Значение

Описание

Общие и сетевые параметры

--name

NAME

слово

Задает имя гостевой системе, которое можно использовать вместо числового идентификатора

--private

VE_PRIVATE

путь

Путь к расположению гостя в файловой системе

--root

VE_ROOT

путь

Путь отображения файловой системы гостя при старте

--onboot

ONBOOT

yes/no

Запускать ли гостя при загрузке системы

--ipadd

IP_ADDRESS

IP

Добавить IP адрес к гостевой системе

--ipdel

IP_ADDRESS

IP

Удалить IP адрес из гостевой системы

--hostname

HOSTNAME

имя

Установить hostname гостевой системе

--nameserver

NAMESERVER

IP

Установить используемый DNS-сервер гостевой системе

--searchdomain

SEARCHDOMAIN

домен

Установить домен поиска гостевой системе

--netif_add

интерфейс,параметры

установить сетевой интерфейс в гостевой системе

--netif_del

интерфейс

удалить сетевой интерфейс из гостевой системы

--netdev_add

интерфейс

передать гостевой системе интерфейс из хостовой системы

--netdev_del

интерфейс

удалить из гостевой системы интерфейс

Лимиты

--numproc

NUMPROC

число

Число одновременно запущенных процессов

--numtcpsock

NUMTCPSOCK

число

Число TCP-сокетов

--numothersock

NUMOTHERSOCK

число

Число не-TCP-сокетов

--privvmpages

PRIVVMPAGES

страниц

Количество 4096-байтных блоков памяти выделенных гостю

--numfile

NUMFILE

число

Количество одновременно открытых файлов

--numflock

NUMFLOCK

число

Количество возможных файловых блокировок

--cpus

CPUS

число

Количество CPU делегируемых гостю

--cpulimit

CPULIMIT

число%

Максимальная загрузка CPU гостем

--diskspace

DISKSPACE

число[GMK]

Объем дискового пространства, выделенный гостю

Необходимо отметить, что во многих случаях вместо просто числа можно писать два числа через двоеточие. Первое число будет означать "барьер" лимита параметра. А второе собственно лимит. При прохождении гостем "барьера" будет срабатывать счетчик, значение которого Вы можете посмотреть в файле /proc/user_beancounters в последней графе.

Многие параметры можно вводить несколько раз (с разными значениями), например, для добавления двух сетевых интерфейсов в гостя можно ввести два раза --netif_add с разными значениями.

Важно: Необходимо отметить, что некоторые параметры собственно гостевой системы нельзя или бессмысленно менять из гостевой системы. Это касается всех параметров, которые изменяются при помощи утилиты vzctl: при каждом новом старте гостя VZ изменяет его настройки на установленные в конфиг-файле этого гостя.

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

        имя=значение

конфигурационного файла. Значения этих параметров можно посмотреть в man vz.conf и man vps.conf. После изменения произвольного параметра этим способом гостя необходимо перезапустить.

Оптимизации

Утилита debootstrap создает минимальный Debian для использования его в произвольном месте (не только в виртуальной системе), поэтому некоторые вещи во вновь созданной системе могут показаться Вам лишними. Например процессы getty явно не нужны в гостевой системе. Чтобы выключить их, откройте на редактирование файл /etc/inittab, найдите в нем строки, содержащие /sbin/getty и закоментируйте их. Затем выдайте внутри гостя команду telinit q, либо перезапустите гостя для уничтожения ненужных процессов.

Ссылки

На этом вики

Внешние