OpenVZ7 — различия между версиями

Материал из ALT Linux Wiki
Перейти к: навигация, поиск
(Создание шаблонов контейнеров)
м (Установка (только ветки p9, Sisyphus))
 
(не показано 13 промежуточных версий 2 участников)
Строка 1: Строка 1:
 
{{Stub}}
 
{{Stub}}
 
{{Attention|В разработке! Статья не закончена! Инструкции неполные!}}
 
{{Attention|В разработке! Статья не закончена! Инструкции неполные!}}
__NOTOC__
+
 
 +
__TOC__
  
 
=== Установка (только ветки p9, Sisyphus) ===
 
=== Установка (только ветки p9, Sisyphus) ===
Строка 13: Строка 14:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
При этом установятся ядро с поддержкой vz7 и необходимые утилиты и службы; далее необходимо перегрузить систему и при загрузке выбрать ядро <tt>-ovz-el7</tt>. В ветке p9 используется стабильное ядро, основанное на RHEL 7.6 (3.10.0-957), в Sisyphus устанавливается активно изменяемое ядро из RHEL 7.7 (3.10.0-1062). Утилита <code>vzstat</code> - это аналог <code>top</code> для наблюдения за активностью контейнеров. В пакет <code>vztt</code> входят утилиты для работы с шаблонами контейнеров (специально преобразованные rootfs образы операционных систем, которые будут запускаться в контейнерах). Пакет <code>vzctl</code> содержит основные команды для управления контейнерами: <code>vzctl</code> и <code>vzlist</code>, а также необходимые для работы контейнеров скрипты, службы и библиотеки.
+
При этом установятся ядро с поддержкой vz7 и необходимые утилиты и службы; далее необходимо перегрузить систему и при загрузке выбрать ядро <code>-ovz-el7</code>. В ветке p9 используется стабильное ядро, основанное на RHEL 7.6 (3.10.0-957), в 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>).
  
 
=== Создание шаблонов контейнеров ===
 
=== Создание шаблонов контейнеров ===
  
{{todo|Указать источник rootfs образов для создания шаблонов.}}
+
Шаблоны контейнеров создаются на основе архива, содержащего файлы корневой файловой системы (rootfs). Разработчики
 +
ALT Linux предоставляет такие архивы в [http://ftp.altlinux.ru/pub/distributions/ALTLinux/p9/images/cloud/ разделе для облачных платформ]. Архивы для других дистрибутивов Linux,
 +
подготовленные разработчиками OpenVZ, можно найти
 +
[http://download.openvz.org/template/precreated/precreated/ здесь]. Также доступны архивы,
 +
[http://download.openvz.org/template/precreated/contrib/ созданные пользователями] OpenVZ.
  
Формат имени архива для конвертирования в шаблон контейнера фиксирован: <tt>DISTRIBUTION-VERSION-ARCH[-NAME].tar.gz</tt>,
+
Полученный архив необходимо преобразовать в шаблон контейнера с помощью утилиты
где DISTRIBUTION - имя дистрибутива (в нашем случае - alt); VERSION - версия, ветка; ARCH - архитектура (поддерживается только x86_64 и x86); NAME - дополнительное имя, позволяющее иметь несколько различных шаблонов для данного набора дистрибутив-ветка-архитектура (см. подкаталоги в <code>/var/lib/vz/template/alt/</code>). Архив должен быть именно <tt>tar.gz</tt>!
+
<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>
 
<syntaxhighlight>
# mv base-20190912-x86_64.tar.gz alt-p9-x86_64-sysv.tar.gz
+
# mv alt-p9-rootfs-sysvinit-i586.tar.xz alt-p9-x86-sysvinit.tar.gz
 
# mkdir -p /var/lib/vz/tmp
 
# mkdir -p /var/lib/vz/tmp
# TMPDIR=/var/lib/vz/tmp /usr/libexec/ovz-template-converter alt-p9-x86_64-sysv.tar.gz
+
# TMPDIR=/var/lib/vz/tmp /usr/libexec/ovz-template-converter alt-p9-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>
 
# vzpkg list
 
# vzpkg list
alt-p9-x86_64-sysv                2019-09-12 16:13:50
+
alt-p9-x86-sysvinit          2020-03-12 16:13:50
 +
#
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Теперь в каталоге <tt>/var/lib/vz/template/cache/</tt> появился архив <tt>alt-p9-x86_64-sysv.plain.ploopv2.tar.lz4</tt>, из которого будут разворачиваться новые контейнеры.
+
Обратите внимание, что с архиве rootfs для ALT Linux в качестве архитектуры указано <tt>i586</tt>, которую мы переименовали в <tt>x86</tt>, поскольку в качестве имени архитектуры поддерживаются только <tt>x86</tt> и <tt>x86_64</tt>. Также, обратите внимание на то, что исходный архив был упакован с помощью утилиты xz(1), мы не стали его
 +
пережимать в формат gzip(1), а просто сменили расширение архива с .xz на .gz. Утилита <tt>/usr/libexec/ovz-template-converter</tt> справилась со своей задачей. Однако, не забывайте, что расширение сжатого архива обязано быть именно <tt>.tar.gz</tt>.
  
 
=== Создание контейнера ===
 
=== Создание контейнера ===
Строка 41: Строка 72:
  
 
Создаём из шаблона <tt>alt-p9-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>, чтобы сохранить все изменения в конфигурационном файле.
 
Создаём из шаблона <tt>alt-p9-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 - идентификатор контейнера. При ручном редактировании этих файлов не удалите случайно ссылки!}}
  
 
=== Запуск контейнера ===
 
=== Запуск контейнера ===
Строка 50: Строка 83:
 
10110        10 running  192.168.1.10    test-sysv-etcnet              -                yes
 
10110        10 running  192.168.1.10    test-sysv-etcnet              -                yes
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 +
=== Использование NFS внутри контейнера ===
 +
 +
Чтобы добавить возможность монтировать NFS внутри контейнера, необходимо включить нужную FEATURES:
 +
 +
<syntaxhighlight>
 +
# vzctl set 10110 --features "nfs:on" --save [--setmode restart]
 +
</syntaxhighlight>
 +
 +
после чего перезапустить контейнер (<code>vzctl restart</code> или <code>--setmode restart</code>).
 +
 +
Внутри контейнера устанавливаем необходимые пакеты и монтируем NFS:
 +
 +
<syntaxhighlight>
 +
# 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.
  
  

Текущая версия на 15:54, 30 марта 2021

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


Установка (только ветки p9, 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. В ветке p9 используется стабильное ядро, основанное на RHEL 7.6 (3.10.0-957), в 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).

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

Шаблоны контейнеров создаются на основе архива, содержащего файлы корневой файловой системы (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-p9-rootfs-sysvinit-i586.tar.xz alt-p9-x86-sysvinit.tar.gz
# mkdir -p /var/lib/vz/tmp
# TMPDIR=/var/lib/vz/tmp /usr/libexec/ovz-template-converter alt-p9-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-p9-x86-sysvinit          2020-03-12 16:13:50
#

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

Создание контейнера[править]

# vzctl create 10110 --ostemplate alt-p9-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-p9-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.