OpenVZ7: различия между версиями
(bad util-linux 2.39.1) |
|||
(не показаны 32 промежуточные версии 3 участников) | |||
Строка 1: | Строка 1: | ||
{{Stub}} | {{Stub}} | ||
{{Attention|В разработке! Статья не закончена! Инструкции неполные!}} | {{Attention|В разработке! Статья не закончена! Инструкции неполные!}} | ||
__TOC__ | |||
<syntaxhighlight> | === Известные проблемы === | ||
{{Attention|Пакет <code>util-linux</code> версии 2.39.1 не работает! Корневая файловая система монтируется в read only. | |||
Последняя работоспособная версия - 2.38.1}} | |||
=== Установка (только ветки p10, Sisyphus) === | |||
<syntaxhighlight lang="text"> | |||
# apt-get update | # apt-get update | ||
# apt-get install update-kernel vzctl vztt vzstat | # apt-get install update-kernel vzctl vztt vzstat | ||
# update-kernel -t ovz-el7 | # update-kernel -t ovz-el7 | ||
# systemctl enable vz.service | |||
# systemctl enable vzevent.service | |||
</syntaxhighlight> | </syntaxhighlight> | ||
При этом установятся ядро с поддержкой vz7 и необходимые утилиты; далее необходимо перегрузить систему и при загрузке выбрать ядро < | При этом установятся ядро с поддержкой vz7 и необходимые утилиты и службы; далее необходимо перегрузить систему и при загрузке выбрать ядро <code>-ovz-el7</code>. В ветке p10 используется стабильное ядро, основанное на RHEL 7.9 (3.10.0-1160), в Sisyphus устанавливается иногда изменяемое ядро из RHEL 7.9 (3.10.0-1160). Утилита <code>vzstat</code> — это аналог <code>top</code> для наблюдения за активностью контейнеров. В пакет <code>vztt</code> входят утилиты для работы с шаблонами контейнеров (специально преобразованные rootfs образы операционных систем, которые будут запускаться в контейнерах). Пакет <code>vzctl</code> содержит основные команды для управления контейнерами: <code>vzctl</code> и <code>vzlist</code>, а также необходимые для работы контейнеров скрипты, службы и библиотеки. | ||
{{Attention|Проблемы при создании файловой системы со свойством <code>metadata_csum</code> | |||
и её монтировании с опцией <code>lazytime</code>}} | |||
Т.к. в ALT используются современные утилиты для работы с файловой системой, то последняя создаётся с включённым | |||
свойством <code>metadata_csum</code> (см. <code>/etc/mke2fs.conf</code>, секция <code>[fs_types]</code>, раздел про <code>ext4</code>). | |||
Однако, в RHEL 7 нет полноценной поддержки этого свойства (см. [https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/7.7_release_notes/known_issues known problems in Red Hat Enterprise Linux]). | |||
Поэтому при создании файловой системы с <code>metadata_csum</code> внутри ploop-устройства, | |||
могут быть проблемы при интенсивном использовании этой файловой системы. Особенно при монтировании | |||
с опцией <code>lazytime</code> (включена по умолчанию, начиная с ядра rh7-3.10.0-1160.15.2.vz7.173.4). | |||
Поэтому в ядре ALT OpenVZ 7 эта опция отключена, а с версии <code>ploop</code> 7.0.255 файловая система внутри ploop-устройства | |||
создаётся без <code>metadata_csum</code> (все имеющиеся шаблоны контейнеров необходимо пересоздать). | |||
Возможно, для <code>/var/lib/vz</code> имеет смысл отключать это свойство | |||
(<code>mkfs.ext4 -O ^metadata_csum</code> при создании или <code>tune2fs -O ^metadata_csum</code> для существующей ФС). | |||
'''UPDATE:''' В ядре ALT 3.10.0-alt4.1160.21.1.vz7.174.14 ошибка исправлена (возможно). | |||
{{Attention|При создании файловой системы после загрузки ядра OpenVZ 7 необходимо явно указывать свойство <code>extent</code> - | |||
<code>mkfs.ext4 -O extent</code>, т.к. иначе mkfs.ext4 считает, что ядро не поддерживает это свойство, и создаёт файловую систему без него. После чего не работает ploop. }} | |||
=== Создание шаблонов контейнеров === | === Создание шаблонов контейнеров === | ||
Шаблоны контейнеров создаются на основе архива, содержащего файлы корневой файловой системы (rootfs). Разработчики | |||
ALT Linux предоставляет такие архивы в [http://ftp.altlinux.ru/pub/distributions/ALTLinux/p10/images/cloud/ разделе для облачных платформ]. Архивы для других дистрибутивов Linux, | |||
подготовленные разработчиками OpenVZ, можно найти | |||
[http://download.openvz.org/template/precreated/ здесь]. Также доступны архивы, | |||
[http://download.openvz.org/template/precreated/contrib/ созданные пользователями] OpenVZ. | |||
Полученный архив необходимо преобразовать в шаблон контейнера с помощью утилиты | |||
<tt>/usr/libexec/ovz-template-converter</tt>. Пример показан ниже. | |||
Формат имени архива для конвертирования имеет следующий вид: <tt>DISTRIBUTION-VERSION-ARCH[-NAME].tar.gz</tt>, | |||
где DISTRIBUTION — имя дистрибутива (в случае AltLinux - alt); VERSION — версия, ветка; ARCH — архитектура (поддерживается только x86_64 и x86); NAME — дополнительное имя, позволяющее иметь несколько различных шаблонов для данного набора дистрибутив-ветка-архитектура. | |||
<syntaxhighlight lang="text"> | |||
# 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 | |||
# | |||
</syntaxhighlight> | |||
Теперь в каталоге <tt>/var/lib/vz/template/cache/</tt> появился архив <tt>alt-9-x86-sysvinit.plain.ploopv2.tar.lz4</tt>, из которого будут разворачиваться новые контейнеры. Также, появился каталог <code>/var/lib/vz/template/alt</code>. | |||
< | Список готовых к использованию шаблонов контейнеров можно посмотреть с помощью команды <tt>vzpkg</tt>. | ||
<syntaxhighlight lang="text"> | |||
# vzpkg list | # vzpkg list | ||
alt- | alt-p10-x86-sysvinit 2020-03-12 16:13:50 | ||
# | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Обратите внимание, что в архиве rootfs для ALT Linux в качестве архитектуры указано <tt>i586</tt>, которую мы переименовали в <tt>x86</tt>, поскольку в качестве имени архитектуры в OpenVZ поддерживаются только <tt>x86</tt> и <tt>x86_64</tt>. Также, обратите внимание на то, что исходный архив был упакован с помощью утилиты xz(1), мы не стали его | |||
пережимать в формат gzip(1), а просто сменили расширение архива с .xz на .gz. Утилита <tt>/usr/libexec/ovz-template-converter</tt> справилась со своей задачей. Однако, не забывайте, что расширение сжатого архива обязано быть именно <tt>.tar.gz</tt>. | |||
=== Создание контейнера === | === Создание контейнера === | ||
<syntaxhighlight> | <syntaxhighlight lang="text"> | ||
# vzctl create 10110 --ostemplate alt- | # vzctl create 10110 --ostemplate alt-p10-x86_64-sysv --config vswap.1024MB \ | ||
--ipadd 192.168.1.10 --name test-sysv-etcnet | --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 --save | # vzctl set 10110 --diskspace 20G --nameserver 8.8.8.8 --nameserver 8.8.4.4 --cpus 2 --ram 1G --save | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Создаём из шаблона alt- | Создаём из шаблона <tt>alt-p10-x86_64-sysv</tt> с образцом конфига из <tt>/etc/vz/conf/vswap.1024MB.conf-sample</tt> контейнер под именем <tt>test-sysv-etcnet</tt>, назначаем IP адрес <tt>192.168.1.10</tt>, устанавливаем размер диска в <tt>20ГБ</tt>, ограничиваем ресурсы (CPU — 2 ядра, память — 1ГБ) и настраиваем DNS (будут использованы публичные сервера Google). Обязательно указываем в команде <code>vzctl set</code> аргумент <code>--save</code>, чтобы сохранить все изменения в конфигурационном файле. | ||
{{note|Внимание! В каталоге <tt>/etc/vz/conf/</tt> содержатся символические ссылки на конфигурационные файлы контейнеров, сами файлы находятся в <tt>/var/lib/vz/private/XXX/ve.conf</tt>, где XXX - идентификатор контейнера. При ручном редактировании этих файлов не удалите случайно ссылки!}} | |||
=== Запуск контейнера === | === Запуск контейнера === | ||
<syntaxhighlight> | <syntaxhighlight lang="text"> | ||
# vzctl start 10110 | # 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 | |||
</syntaxhighlight> | </syntaxhighlight> | ||
=== Использование NFS внутри контейнера === | |||
Чтобы добавить возможность монтировать NFS внутри контейнера, необходимо включить нужную FEATURES: | |||
<syntaxhighlight lang="text"> | |||
# vzctl set 10110 --features "nfs:on" --save [--setmode restart] | |||
</syntaxhighlight> | |||
после чего перезапустить контейнер (<code>vzctl restart</code> или <code>--setmode restart</code>). | |||
Внутри контейнера устанавливаем необходимые пакеты и монтируем NFS: | |||
<syntaxhighlight lang="text"> | |||
# 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 | |||
</syntaxhighlight> | |||
При использовании nfsd внутри контейнера (<code>FEATURES="nfsd:on"</code>) необходимо иметь в виду, что, начиная с ядра rh7-3.10.0-1160.6.1.vz7.171.1, внутри контейнера не видны ядерные треды, т.е. процессы nfsd можно наблюдать только снаружи контейнера. (См. [https://bugs.openvz.org/browse/OVZ-7245 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 их теперь не показывает!), используйте | |||
<code>ip -all netns exec netstat -n</code> | |||
Текущая версия от 16:22, 11 июля 2023
Известные проблемы
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 ошибка исправлена (возможно).
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
, чтобы сохранить все изменения в конфигурационном файле.
Запуск контейнера
# 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