OpenVZ7

Материал из ALT Linux Wiki
Stub.png
Данная страница находится в разработке.
Эта страница ещё не закончена. Информация, представленная здесь, может оказаться неполной или неверной.
Внимание! В разработке! Статья не закончена! Инструкции неполные!


Известные проблемы

Внимание! Пакет util-linux версии 2.39.1 не работает! Корневая файловая система монтируется в read only. Последняя работоспособная версия - 2.38.1


Установка (только ветки p10, Sisyphus)

# apt-get update
# apt-get install update-kernel vzctl vztt vzstat
# update-kernel -t ovz-el7
# systemctl enable vz.service
# systemctl enable vzevent.service

При этом установятся ядро с поддержкой vz7 и необходимые утилиты и службы; далее необходимо перегрузить систему и при загрузке выбрать ядро -ovz-el7. В ветке p10 используется стабильное ядро, основанное на RHEL 7.9 (3.10.0-1160), в Sisyphus устанавливается иногда изменяемое ядро из RHEL 7.9 (3.10.0-1160). Утилита vzstat — это аналог top для наблюдения за активностью контейнеров. В пакет vztt входят утилиты для работы с шаблонами контейнеров (специально преобразованные rootfs образы операционных систем, которые будут запускаться в контейнерах). Пакет vzctl содержит основные команды для управления контейнерами: vzctl и vzlist, а также необходимые для работы контейнеров скрипты, службы и библиотеки.

Внимание! Проблемы при создании файловой системы со свойством metadata_csum и её монтировании с опцией lazytime


Т.к. в ALT используются современные утилиты для работы с файловой системой, то последняя создаётся с включённым свойством metadata_csum (см. /etc/mke2fs.conf, секция [fs_types], раздел про ext4). Однако, в RHEL 7 нет полноценной поддержки этого свойства (см. known problems in Red Hat Enterprise Linux). Поэтому при создании файловой системы с metadata_csum внутри ploop-устройства, могут быть проблемы при интенсивном использовании этой файловой системы. Особенно при монтировании с опцией lazytime (включена по умолчанию, начиная с ядра rh7-3.10.0-1160.15.2.vz7.173.4). Поэтому в ядре ALT OpenVZ 7 эта опция отключена, а с версии ploop 7.0.255 файловая система внутри ploop-устройства создаётся без metadata_csum (все имеющиеся шаблоны контейнеров необходимо пересоздать). Возможно, для /var/lib/vz имеет смысл отключать это свойство (mkfs.ext4 -O ^metadata_csum при создании или tune2fs -O ^metadata_csum для существующей ФС).

UPDATE: В ядре ALT 3.10.0-alt4.1160.21.1.vz7.174.14 ошибка исправлена (возможно).


Внимание! При создании файловой системы после загрузки ядра OpenVZ 7 необходимо явно указывать свойство extent - mkfs.ext4 -O extent, т.к. иначе mkfs.ext4 считает, что ядро не поддерживает это свойство, и создаёт файловую систему без него. После чего не работает ploop.


Создание шаблонов контейнеров

Шаблоны контейнеров создаются на основе архива, содержащего файлы корневой файловой системы (rootfs). Разработчики ALT Linux предоставляет такие архивы в разделе для облачных платформ. Архивы для других дистрибутивов Linux, подготовленные разработчиками OpenVZ, можно найти здесь. Также доступны архивы, созданные пользователями OpenVZ.

Полученный архив необходимо преобразовать в шаблон контейнера с помощью утилиты /usr/libexec/ovz-template-converter. Пример показан ниже. Формат имени архива для конвертирования имеет следующий вид: DISTRIBUTION-VERSION-ARCH[-NAME].tar.gz, где DISTRIBUTION — имя дистрибутива (в случае AltLinux - alt); VERSION — версия, ветка; ARCH — архитектура (поддерживается только x86_64 и x86); NAME — дополнительное имя, позволяющее иметь несколько различных шаблонов для данного набора дистрибутив-ветка-архитектура.

# mv alt-p10-rootfs-sysvinit-i586.tar.xz alt-p10-x86-sysvinit.tar.gz
# mkdir -p /var/lib/vz/tmp
# TMPDIR=/var/lib/vz/tmp /usr/libexec/ovz-template-converter alt-p10-x86-sysvinit.tar.gz
#

Теперь в каталоге /var/lib/vz/template/cache/ появился архив alt-9-x86-sysvinit.plain.ploopv2.tar.lz4, из которого будут разворачиваться новые контейнеры. Также, появился каталог /var/lib/vz/template/alt.

Список готовых к использованию шаблонов контейнеров можно посмотреть с помощью команды vzpkg.

# vzpkg list
alt-p10-x86-sysvinit          2020-03-12 16:13:50
#

Обратите внимание, что в архиве rootfs для ALT Linux в качестве архитектуры указано i586, которую мы переименовали в x86, поскольку в качестве имени архитектуры в OpenVZ поддерживаются только x86 и x86_64. Также, обратите внимание на то, что исходный архив был упакован с помощью утилиты xz(1), мы не стали его пережимать в формат gzip(1), а просто сменили расширение архива с .xz на .gz. Утилита /usr/libexec/ovz-template-converter справилась со своей задачей. Однако, не забывайте, что расширение сжатого архива обязано быть именно .tar.gz.

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

# vzctl create 10110 --ostemplate alt-p10-x86_64-sysv --config vswap.1024MB \
  --ipadd 192.168.1.10 --name test-sysv-etcnet
# vzctl set 10110 --diskspace 20G --nameserver 8.8.8.8 --nameserver 8.8.4.4 --cpus 2 --ram 1G --save

Создаём из шаблона alt-p10-x86_64-sysv с образцом конфига из /etc/vz/conf/vswap.1024MB.conf-sample контейнер под именем test-sysv-etcnet, назначаем IP адрес 192.168.1.10, устанавливаем размер диска в 20ГБ, ограничиваем ресурсы (CPU — 2 ядра, память — 1ГБ) и настраиваем DNS (будут использованы публичные сервера Google). Обязательно указываем в команде vzctl set аргумент --save, чтобы сохранить все изменения в конфигурационном файле.

Примечание: Внимание! В каталоге /etc/vz/conf/ содержатся символические ссылки на конфигурационные файлы контейнеров, сами файлы находятся в /var/lib/vz/private/XXX/ve.conf, где XXX - идентификатор контейнера. При ручном редактировании этих файлов не удалите случайно ссылки!


Запуск контейнера

# vzctl start 10110
# vzlist -o ctid,numproc,status,ip,name,hostname,onboot
 CTID      NPROC STATUS    IP_ADDR         NAME                          HOSTNAME         ONBOOT
10110         10 running   192.168.1.10    test-sysv-etcnet              -                yes

Использование NFS внутри контейнера

Чтобы добавить возможность монтировать NFS внутри контейнера, необходимо включить нужную FEATURES:

# vzctl set 10110 --features "nfs:on" --save [--setmode restart]

после чего перезапустить контейнер (vzctl restart или --setmode restart).

Внутри контейнера устанавливаем необходимые пакеты и монтируем NFS:

# vzctl enter 10110
CT-10110 /# apt-get install nfs-clients
CT-10110 /# mkdir /NFS
CT-10110 /# echo '192.168.1.1:/nfs/export /NFS nfs \
noauto,ro,noexec,nosuid,nodev,nolock,x-systemd.automount,_netdev,soft,intr,nfsvers=3' >>/etc/fstab
CT-10110 /# mount /NFS

При использовании nfsd внутри контейнера (FEATURES="nfsd:on") необходимо иметь в виду, что, начиная с ядра rh7-3.10.0-1160.6.1.vz7.171.1, внутри контейнера не видны ядерные треды, т.е. процессы nfsd можно наблюдать только снаружи контейнера. (См. OVZ-7245). UPDATE: исправлено в rh7-3.10.0-1160.11.1.vz7.172.10 (ядро ALT 3.10.0-alt4.1160.11.1.vz7.172.10).

Полезные команды

Чтобы посмотреть сетевые соединения из хостовой системы (т.к. там netstat -n их теперь не показывает!), используйте

ip -all netns exec netstat -n