diff options
author | Amet13 <admin@amet13.name> | 2016-07-29 03:11:17 +0300 |
---|---|---|
committer | Amet13 <admin@amet13.name> | 2016-07-29 03:11:17 +0300 |
commit | bdbf065a3546ce11bc574bc3b6c17d8ec47221bd (patch) | |
tree | 987bda36c53cef1a8d96ec33575768eb7cf799cb | |
parent | 550169299f26080b38411b276d6e45d230ea1254 (diff) |
Глобальная чистка
-rw-r--r-- | README.md | 496 |
1 files changed, 240 insertions, 256 deletions
@@ -144,7 +144,7 @@ OpenVZ позволяет создавать множество защищенн Контейнеры можно разделить на две составляющие: * ядро (namespaces, cgroups, CRIU, ploop, vcmmd...) -* пользовательские утилиты (prlctl, vzctl, vzpkg, vzlist, vzdump...) +* пользовательские утилиты (prlctl, vzctl, vzpkg, vzlist...) Namespaces — пространства имен. Это механизм ядра, который позволяет изолировать процессы друг от друга. Изоляция может быть выполнена в шести контекстах (пространствах имен): @@ -205,7 +205,7 @@ VCMM (Virtuozzo containers memory management) — сервис управлен Также представлена "живая" миграция для контейнеров, реализованная с помощью инструментария CRIU и P.Haul. 25 июля 2016 года [анонсирован](https://lists.openvz.org/pipermail/announce/2016-July/000664.html) окончательный релиз продукта под именем OpenVZ 7.0. -В релизе объявлены такие события как отказ от развития SimFS, также объявлено что со следующей версии OpenVZ утилита `vzctl` будет объявлена устаревшей, рекомендуется вместо нее использовать `prlctl` или `virsh`. +В релизе объявлены такие события как отказ от развития SimFS, также объявлено что со следующей версии OpenVZ утилита vzctl будет объявлена устаревшей, рекомендуется вместо нее использовать prlctl или virsh. ## [[⬆]](#toc) <a name='changes'></a>Что нового в OpenVZ 7? Основные изменения по сравнению с OpenVZ 6 (2.6.32): @@ -213,13 +213,14 @@ VCMM (Virtuozzo containers memory management) — сервис управлен * благодаря большой интеграции кода в ванильное ядро, количество патчей значительно сократилось, для сравнения число коммитов в 2.6.18 (RHEL 5) равно 264000, для 2.6.32 (RHEL 6) — 202000, для 3.10 (RHEL 7) — 66000 коммитов * реализация живой миграции с помощью P.Haul и CRIU * возможность создания виртуальных машин на базе KVM -* отказ от управления контейнерами с помощью `vzctl` в пользу `prlctl` и `virsh` +* отказ от управления контейнерами с помощью vzctl в пользу prlctl и virsh * использование механизма VCMM для управления памятью -* отказ от развития SimFS +* отказ от развития SimFS в пользу ploop * унифицированное управление контейнерами и виртуальными машинами с помощью libvirt * гарантированные лимиты памяти * горячее подключение CPU/RAM для виртуальных машин, поддержка KSM * обновленная документация с 2005 года +* интеграция работы с Docker и OpenStack ## [[⬆]](#toc) <a name='install'></a>Установка и подготовительные действия Начиная с версии OpenVZ 7.0 доступен только один вариант установки, с помощью ISO-образа дистрибутива. @@ -273,30 +274,30 @@ VCMM (Virtuozzo containers memory management) — сервис управлен ``` user@localhost ~ $ ssh vzuser@192.168.0.150 vzuser@192.168.0.150's password: пароль_пользователя_vzuser -[vzuser@virtuozzo ~]$ su - +[vzuser@vz ~]$ su - Password: пароль_пользователя_root -[root@virtuozzo ~]# +[root@vz ~]# ``` ### <a name='prepare'></a>Подготовительные действия На сервере важно всегда обновлять программное обеспечение, так как в новых версиях не только могут добавлять новые возможности, но и исправлять уязвимости. Указанная ниже команда обновляет все существующие в системе пакеты: ``` -[root@virtuozzo ~]# yum update +[root@vz ~]# yum update ``` Для сервера важно, чтобы было установлено правильное время. Чтобы синхронизировать время с интернетом необходимо настроить сервер `ntp`. Если во время установки ОС, не была установлена корректная временная зона, то можно это сделать позже: ``` -[root@virtuozzo ~]# timedatectl set-timezone Europe/Moscow +[root@vz ~]# timedatectl set-timezone Europe/Moscow ``` Установка `ntp` и синхронизация времени с удаленными серверами: ``` -[root@virtuozzo ~]# yum install ntp -[root@virtuozzo ~]# systemctl start ntpd -[root@virtuozzo ~]# systemctl enable ntpd -[root@virtuozzo ~]# ntpdate -q 0.ru.pool.ntp.org 1.ru.pool.ntp.org +[root@vz ~]# yum install ntp +[root@vz ~]# systemctl start ntpd +[root@vz ~]# systemctl enable ntpd +[root@vz ~]# ntpdate -q 0.ru.pool.ntp.org 1.ru.pool.ntp.org ``` ## [[⬆]](#toc) <a name='templates-ct'></a>Управление шаблонами контейнеров @@ -305,71 +306,57 @@ Password: пароль_пользователя_root Просмотр списка уже имеющихся локальных шаблонов гостевых ОС: ``` -[root@virtuozzo ~]# vzpkg list -O --with-summary -fedora-23-x86_64 :Fedora 23 (for AMD64/Intel EM64T) Virtuozzo Template -debian-7.0-x86_64 :Debian 7.0 (for AMD64/Intel EM64T) Virtuozzo Template -ubuntu-15.10-x86_64 :Ubuntu 15.10 (for AMD64/Intel EM64T) Virtuozzo Template +[root@vz ~]# vzpkg list -O --with-summary +ubuntu-14.04-x86_64 :Ubuntu 14.04 (for AMD64/Intel EM64T) Virtuozzo Template +ubuntu-16.04-x86_64 :Ubuntu 16.04 (for AMD64/Intel EM64T) Virtuozzo Template +vzlinux-7-x86_64 :VzLinux 7 (for AMD64/Intel EM64T) Virtuozzo Template centos-7-x86_64 :Centos 7 (for AMD64/Intel EM64T) Virtuozzo Template centos-6-x86_64 :Centos 6 (for AMD64/Intel EM64T) Virtuozzo Template -vzlinux-7-x86_64 :VzLinux 7 (for AMD64/Intel EM64T) Virtuozzo Template +debian-8.0-x86_64 :Debian 8.0 (for AMD64/Intel EM64T) Virtuozzo Template +debian-8.0-x86_64-minimal :Debian 8.0 minimal (for AMD64/Intel EM64T) Virtuozzo Template ``` Доступные удаленно шаблоны: ``` -[root@virtuozzo ~]# vzpkg list --available --with-summary -centos-5-x86 -debian-8.0-x86_64 +[root@vz ~]# vzpkg list --available --with-summary +debian-7.0-x86_64 fedora-22-x86_64 +fedora-23-x86_64 suse-42.1-x86_64 -ubuntu-14.04-x86_64 ubuntu-14.10-x86_64 ubuntu-15.04-x86_64 -ubuntu-16.04-x86_64 +ubuntu-15.10-x86_64 vzlinux-6-x86_64 ``` Установка шаблона: ``` -[root@virtuozzo ~]# vzpkg install template ubuntu-16.04-x86_64 +[root@vz ~]# vzpkg install template ubuntu-16.04-x86_64 ``` Альтернативный вариант установки шаблона: ``` -[root@virtuozzo ~]# yum install ubuntu-16.04-x86_64-ez -``` - -После этого можно увидеть текущий локальный список доступных шаблонов гостевых ОС: -``` -[root@virtuozzo ~]# vzpkg list -O --with-summary -[root@virtuozzo ~]# vzpkg list -O --with-summary -fedora-23-x86_64 :Fedora 23 (for AMD64/Intel EM64T) Virtuozzo Template -debian-7.0-x86_64 :Debian 7.0 (for AMD64/Intel EM64T) Virtuozzo Template -ubuntu-16.04-x86_64 :Ubuntu 16.04 (for AMD64/Intel EM64T) Virtuozzo Template -ubuntu-15.10-x86_64 :Ubuntu 15.10 (for AMD64/Intel EM64T) Virtuozzo Template -centos-7-x86_64 :Centos 7 (for AMD64/Intel EM64T) Virtuozzo Template -centos-6-x86_64 :Centos 6 (for AMD64/Intel EM64T) Virtuozzo Template -vzlinux-7-x86_64 :VzLinux 7 (for AMD64/Intel EM64T) Virtuozzo Template +[root@vz ~]# yum install ubuntu-16.04-x86_64-ez ``` Установка и обновление кэша шаблона: ``` -[root@virtuozzo ~]# vzpkg create cache ubuntu-16.04-x86_64 -[root@virtuozzo ~]# vzpkg update cache ubuntu-16.04-x86_64 +[root@vz ~]# vzpkg create cache ubuntu-16.04-x86_64 +[root@vz ~]# vzpkg update cache ubuntu-16.04-x86_64 ``` Если не указывать имя шаблона, то установка или обновление кэша произойдет для всех имеющихся шаблонов. Просмотр даты последнего обновления кэша: ``` -[root@virtuozzo ~]# vzpkg list -O -fedora-23-x86_64 -debian-7.0-x86_64 +[root@vz ~]# vzpkg list -O +ubuntu-14.04-x86_64 ubuntu-16.04-x86_64 2016-05-14 02:10:18 -ubuntu-15.10-x86_64 +vzlinux-7-x86_64 centos-7-x86_64 centos-6-x86_64 -vzlinux-7-x86_64 - +debian-8.0-x86_64 +debian-8.0-x86_64-minimal ``` ### <a name='app-templates'></a>Шаблоны приложений @@ -378,37 +365,36 @@ vzlinux-7-x86_64 Просмотр списка шаблонов приложений для `centos-7-x86_64`: ``` -[root@virtuozzo ~]# vzpkg list centos-7-x86_64 +[root@vz ~]# vzpkg list centos-7-x86_64 centos-7-x86_64 2016-02-09 17:01:05 +centos-7-x86_64 cyrus-imap centos-7-x86_64 tomcat -centos-7-x86_64 mysql centos-7-x86_64 php centos-7-x86_64 docker -centos-7-x86_64 mod_ssl -centos-7-x86_64 spamassassin -centos-7-x86_64 postgresql -centos-7-x86_64 cyrus-imap -centos-7-x86_64 jsdk centos-7-x86_64 mailman +centos-7-x86_64 spamassassin +centos-7-x86_64 devel +centos-7-x86_64 mod_ssl centos-7-x86_64 jre centos-7-x86_64 vzftpd -centos-7-x86_64 devel - +centos-7-x86_64 postgresql +centos-7-x86_64 mysql +centos-7-x86_64 jsdk ``` Пример установки шаблона приложений `tomcat` и `jre`: ``` -[root@virtuozzo ~]# vzpkg list ct5 +[root@vz ~]# vzpkg list ct5 centos-7-x86_64 2016-02-09 17:00:57 -[root@virtuozzo ~]# vzpkg install ct5 tomcat jre -[root@virtuozzo ~]# prlctl exec ct5 systemctl start tomcat -[root@virtuozzo ~]# prlctl exec ct5 systemctl is-active tomcat +[root@vz ~]# vzpkg install ct5 tomcat jre +[root@vz ~]# prlctl exec ct5 systemctl start tomcat +[root@vz ~]# prlctl exec ct5 systemctl is-active tomcat active ``` После установки можно проверить список установленных шаблонов для контейнера: ``` -[root@virtuozzo ~]# vzpkg list ct5 +[root@vz ~]# vzpkg list ct5 centos-7-x86_64 2016-02-09 17:00:57 centos-7-x86_64 tomcat 2016-02-09 19:56:03 centos-7-x86_64 jre 2016-02-09 20:03:50 @@ -416,7 +402,7 @@ centos-7-x86_64 jre 2016-02-09 20:03:50 Удаление шаблона приложения из контейнера: ``` -[root@virtuozzo ~]# vzpkg remove ct5 tomcat +[root@vz ~]# vzpkg remove ct5 tomcat Removed: tomcat noarch 0:7.0.54-2.el7_1 tomcat-admin-webapps noarch 0:7.0.54-2.el7_1 @@ -424,7 +410,7 @@ Removed: tomcat-lib noarch 0:7.0.54-2.el7_1 tomcat-el-2.2-api noarch 0:7.0.54-2.el7_1 -[root@virtuozzo ~]# vzpkg list ct5 +[root@vz ~]# vzpkg list ct5 centos-7-x86_64 2016-02-09 17:00:57 centos-7-x86_64 jre 2016-02-09 20:03:50 ``` @@ -441,7 +427,7 @@ centos-7-x86_64 jre 2016-02-09 20:03:50 При создании контейнера можно использовать типовую конфигурацию. Типовые файлы конфигураций находятся в том же каталоге `/etc/vz/conf/`: ``` -[root@virtuozzo ~]# ls /etc/vz/conf/ | grep sample +[root@vz ~]# ls /etc/vz/conf/ | grep sample ve-basic.conf-sample ve-confixx.conf-sample ve-vswap.1024MB.conf-sample @@ -455,7 +441,7 @@ vps.vzpkgtools.conf-sample В этих конфигурационных файлах описаны контрольные параметры ресурсов, выделенное дисковое пространство, оперативная память и т.д. Например, при использовании конфига `ve-vswap.512MB.conf-sample`, создается контейнер с дисковым пространством 10GB, оперативной памятью 512MB и swap 512MB: ``` -[root@virtuozzo ~]# egrep "DISKSPACE|PHYSPAGES|SWAPPAGES|DISKINODES" /etc/vz/conf/ve-vswap.512MB.conf-sample +[root@vz ~]# egrep "DISKSPACE|PHYSPAGES|SWAPPAGES|DISKINODES" /etc/vz/conf/ve-vswap.512MB.conf-sample PHYSPAGES="131072:131072" SWAPPAGES="131072" DISKSPACE="10485760:10485760" @@ -466,8 +452,8 @@ DISKINODES="655360:655360" Создадим свой конфигурационный файл, на базе уже существующего `vswap.512MB`. Исправим в нем только значения `PHYSPAGES`, `SWAPPAGES`, `DISKSPACE`, `DISKINODES`: ``` -[root@virtuozzo ~]# cp /etc/vz/conf/ve-vswap.512MB.conf-sample /etc/vz/conf/ve-vswap.1GB.conf-sample -[root@virtuozzo ~]# vim /etc/vz/conf/ve-vswap.1GB.conf-sample +[root@vz ~]# cp /etc/vz/conf/ve-vswap.512MB.conf-sample /etc/vz/conf/ve-vswap.1GB.conf-sample +[root@vz ~]# vim /etc/vz/conf/ve-vswap.1GB.conf-sample PHYSPAGES="262144:262144" SWAPPAGES="262144" DISKSPACE="20971520:20971520" @@ -477,14 +463,14 @@ DISKINODES="1310720:1310720" Установка конфигурационного файла шаблона на примере `vswap.1GB` (контейнер должен быть создан): ``` -[root@virtuozzo ~]# prlctl set ct1 --applyconfig vswap.1GB +[root@vz ~]# prlctl set ct1 --applyconfig vswap.1GB The CT has been successfully configured. ``` ### <a name='create-ct'></a>Создание контейнера В качестве параметра к идентификатору контейнера может использоваться любое имя: ``` -[root@virtuozzo ~]# prlctl create ct1 --ostemplate debian-8.0-x86_64 --vmtype=ct +[root@vz ~]# prlctl create ct1 --ostemplate debian-8.0-x86_64 --vmtype=ct Creating the Virtuozzo Container... The Container has been successfully created. ``` @@ -493,16 +479,16 @@ The Container has been successfully created. Теперь можно просмотреть список имеющихся в системе контейнеров: ``` -[root@virtuozzo ~]# prlctl list -a +[root@vz ~]# prlctl list -a UUID STATUS IP_ADDR T NAME {3d32522a-80af-4773-b9fa-ea4915dee4b3} stopped - CT ct1 ``` -Если же при создании контейнера не указывать желаемый шаблон, то Virtuozzo будет использовать шаблон по умолчанию. +Если же при создании контейнера не указывать желаемый шаблон, то OpenVZ будет использовать шаблон по умолчанию. Конфигурационный файл, в котором указаны директивы по умолчанию `/etc/vz/vz.conf`. По умолчанию, используется шаблон `centos-7` и конфигурационный файл `basic`: ``` -[root@virtuozzo ~]# egrep "CONFIGFILE|DEF_OSTEMPLATE" /etc/vz/vz.conf +[root@vz ~]# egrep "CONFIGFILE|DEF_OSTEMPLATE" /etc/vz/vz.conf CONFIGFILE="basic" DEF_OSTEMPLATE=".centos-7" ``` @@ -515,36 +501,36 @@ DEF_OSTEMPLATE=".centos-7" Добавление IP-адресов: ``` -[root@virtuozzo ~]# prlctl set ct1 --ipadd 192.168.0.161/24 -[root@virtuozzo ~]# prlctl set ct1 --ipadd fe80::20c:29ff:fe01:fb08 +[root@vz ~]# prlctl set ct1 --ipadd 192.168.0.161/24 +[root@vz ~]# prlctl set ct1 --ipadd fe80::20c:29ff:fe01:fb08 ``` Установка DNS серверов и hostname: ``` -[root@virtuozzo ~]# prlctl set ct1 --nameserver 192.168.0.1,192.168.0.2 -[root@virtuozzo ~]# prlctl set ct1 --hostname ct1.virtuozzo.localhost +[root@vz ~]# prlctl set ct1 --nameserver 192.168.0.1,192.168.0.2 +[root@vz ~]# prlctl set ct1 --hostname ct1.vz.localhost ``` Установка поискового домена: ``` -[root@virtuozzo ~]# prlctl set ct1 --searchdomain 192.168.0.1 +[root@vz ~]# prlctl set ct1 --searchdomain 192.168.0.1 ``` Установка пароля суперпользователя: ``` -[root@virtuozzo ~]# prlctl set ct1 --userpasswd root:eVjfsDkTE63s5Nw +[root@vz ~]# prlctl set ct1 --userpasswd root:eVjfsDkTE63s5Nw ``` Сгенерировать пароль можно штатными средствами Linux: ``` -[root@virtuozzo ~]# cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 15 | head -1 +[root@vz ~]# cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 15 | head -1 eVjfsDkTE63s5Nw ``` Или воспользоваться утилитой `pwgen`: ``` -[root@virtuozzo ~]# yum localinstall http://dl.fedoraproject.org/pub/epel/7/x86_64/p/pwgen-2.07-1.el7.x86_64.rpm -[root@virtuozzo ~]# pwgen -s 15 1 +[root@vz ~]# yum localinstall http://dl.fedoraproject.org/pub/epel/7/x86_64/p/pwgen-2.07-1.el7.x86_64.rpm +[root@vz ~]# pwgen -s 15 1 esxrcH7dyoA46LY ``` @@ -553,25 +539,25 @@ esxrcH7dyoA46LY Для запуска контейнера при старте хост-ноды добавляем: ``` -[root@virtuozzo ~]# prlctl set ct1 --onboot yes +[root@vz ~]# prlctl set ct1 --onboot yes ``` Также можно добавить краткое описание контейнера: ``` -[root@virtuozzo ~]# prlctl set ct1 --description "Frontend for app" +[root@vz ~]# prlctl set ct1 --description "Frontend for app" ``` ### <a name='run-enter'></a>Запуск и вход Запуск контейнера: ``` -[root@virtuozzo ~]# prlctl start ct1 +[root@vz ~]# prlctl start ct1 Starting the CT... The CT has been successfully started. ``` Проверка сетевых интерфейсов внутри гостевой ОС: ``` -[root@virtuozzo ~]# prlctl exec ct1 ip addr show venet0 +[root@vz ~]# prlctl exec ct1 ip addr show venet0 2: venet0: <BROADCAST,POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default link/void inet 127.0.0.1/32 scope host venet0 @@ -586,29 +572,29 @@ The CT has been successfully started. Проверка корректности hostname: ``` -[root@virtuozzo ~]# prlctl exec ct1 hostname -ct1.virtuozzo.localhost +[root@vz ~]# prlctl exec ct1 hostname +ct1.vz.localhost ``` Проверка доступности контейнера в сети и корректность пароля суперпользователя: ``` -[root@virtuozzo ~]# ssh root@192.168.0.161 +[root@vz ~]# ssh root@192.168.0.161 root@192.168.0.161's password: eVjfsDkTE63s5Nw root@ct1:~# ``` Вход в контейнер напрямую с хост-ноды: ``` -[root@virtuozzo ~]# prlctl enter ct1 +[root@vz ~]# prlctl enter ct1 entered into CT root@ct1:/# exit logout -[root@virtuozzo ~]# +[root@vz ~]# ``` Переход в консоль контейнера: ``` -[root@virtuozzo ~]# prlctl console ct2 +[root@vz ~]# prlctl console ct2 Attached to CT 9d921e42-1087-45e6-bea0-3d706b2d1862 tty2 (type ESC . to detach) CentOS Linux 7 (Core) @@ -625,9 +611,9 @@ Password: ### <a name='status-ct'></a>Управление состоянием контейнера Статус контейнера: ``` -[root@virtuozzo ~]# prlctl status ct1 +[root@vz ~]# prlctl status ct1 CT ct1 exist running -[root@virtuozzo ~]# prlctl status ct2 +[root@vz ~]# prlctl status ct2 CT ct2 exist stopped ``` @@ -635,7 +621,7 @@ CT ct2 exist stopped Остановка контейнера: ``` -[root@virtuozzo ~]# prlctl stop ct1 +[root@vz ~]# prlctl stop ct1 Stopping the CT... The CT has been successfully stopped. ``` @@ -643,14 +629,14 @@ The CT has been successfully stopped. Иногда нужно выключить контейнер как можно быстрее, например если он был подвержен взлому или создает критическую нагрузку на хост-ноду. Для того чтобы срочно выключить контейнер, нужно использовать ключ `--kill`: ``` -[root@virtuozzo ~]# prlctl stop ct1 --kill +[root@vz ~]# prlctl stop ct1 --kill Stopping the CT... The CT has been forcibly stopped ``` Перезапуск контейнера: ``` -[root@virtuozzo ~]# prlctl restart ct1 +[root@vz ~]# prlctl restart ct1 Restarting the CT... The CT has been successfully restarted. ``` @@ -659,22 +645,22 @@ The CT has been successfully restarted. Параметр `suspend` приостанавливает контейнера, а `resume` — восстанавливает: ``` -[root@virtuozzo ~]# prlctl suspend ct1 +[root@vz ~]# prlctl suspend ct1 Suspending the CT... The CT has been successfully suspended. -[root@virtuozzo ~]# prlctl status ct1 +[root@vz ~]# prlctl status ct1 CT ct1 exist suspended -[root@virtuozzo ~]# prlctl resume ct1 +[root@vz ~]# prlctl resume ct1 Resuming the CT... The CT has been successfully resumed. ``` Для удаления контейнера существует параметр `delete` (перед удалением, контейнер нужно сначала остановить): ``` -[root@virtuozzo ~]# prlctl stop ct1 +[root@vz ~]# prlctl stop ct1 Stopping the CT... The CT has been successfully stopped. -[root@virtuozzo ~]# prlctl delete ct1 +[root@vz ~]# prlctl delete ct1 Removing the CT... The CT has been successfully removed. ``` @@ -684,31 +670,31 @@ The CT has been successfully removed. Для того чтобы смонтировать содержимое контейнера без его запуска существует опция `mount`, для размонтирования — `umount`. Это может пригодиться например для того, чтобы поправить конфигурационные файлы контейнера с хост-ноды, если контейнер не стартует: ``` -[root@virtuozzo ~]# prlctl list ct6 +[root@vz ~]# prlctl list ct6 UUID STATUS IP_ADDR T NAME {8de0101f-c166-42ce-ad53-a7900b223d46} stopped 192.168.0.166 CT ct6 -[root@virtuozzo ~]# ls /vz/root/8de0101f-c166-42ce-ad53-a7900b223d46/ -[root@virtuozzo ~]# prlctl mount ct6 +[root@vz ~]# ls /vz/root/8de0101f-c166-42ce-ad53-a7900b223d46/ +[root@vz ~]# prlctl mount ct6 Mounting the CT... The CT has been successfully mounted. -[root@virtuozzo ~]# ls /vz/root/8de0101f-c166-42ce-ad53-a7900b223d46/ +[root@vz ~]# ls /vz/root/8de0101f-c166-42ce-ad53-a7900b223d46/ bin boot dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var -[root@virtuozzo ~]# prlctl status ct6 +[root@vz ~]# prlctl status ct6 CT wordpress-162 exist mounted -[root@virtuozzo ~]# prlctl umount ct6 +[root@vz ~]# prlctl umount ct6 Unmounting the CT... The CT has been successfully unmounted. -[root@virtuozzo ~]# ls /vz/root/8de0101f-c166-42ce-ad53-a7900b223d46/ -[root@virtuozzo ~]# +[root@vz ~]# ls /vz/root/8de0101f-c166-42ce-ad53-a7900b223d46/ +[root@vz ~]# ``` Переместить частную область контейнера в другую область можно с помощью параметра `move`: ``` -[root@virtuozzo ~]# mkdir /home/private -[root@virtuozzo ~]# prlctl move ct6 --dst /home/private +[root@vz ~]# mkdir /home/private +[root@vz ~]# prlctl move ct6 --dst /home/private Move the ct6 CT to /home/private... The CT has been successfully moved. -[root@virtuozzo ~]# ls /home/private/8de0101f-c166-42ce-ad53-a7900b223d46/ +[root@vz ~]# ls /home/private/8de0101f-c166-42ce-ad53-a7900b223d46/ dump/ fs/ .lck .owner root.hdd/ scripts/ templates/ .uptime ve.conf .ve.layout .ve.xml ``` @@ -717,13 +703,13 @@ dump/ fs/ .lck .owner root.hdd/ scripts/ template Переустановка и старт контейнера (для переустановки нужно сначала остановить контейнер): ``` -[root@virtuozzo ~]# prlctl stop ct1 +[root@vz ~]# prlctl stop ct1 Stopping the CT... The CT has been successfully stopped. -[root@virtuozzo ~]# vzctl reinstall ct1 --skipbackup +[root@vz ~]# vzctl reinstall ct1 --skipbackup ... Container was successfully reinstalled -[root@virtuozzo ~]# prlctl start ct1 +[root@vz ~]# prlctl start ct1 Starting the CT... The CT has been successfully started. ``` @@ -732,12 +718,12 @@ The CT has been successfully started. Для того, чтобы не копировать частную область предыдущего контейнера, необходимо использовать ключ `--skipbackup`. ### <a name='clone-ct'></a>Клонирование контейнера -Virtuozzo позволяет клонировать контейнеры: +OpenVZ позволяет клонировать контейнеры: ``` -[root@virtuozzo ~]# prlctl clone ct1 --name ct2 +[root@vz ~]# prlctl clone ct1 --name ct2 Clone the ct1 CT to CT ct2... The CT has been successfully cloned. -[root@virtuozzo ~]# prlctl list -a +[root@vz ~]# prlctl list -a UUID STATUS IP_ADDR T NAME {3d32522a-80af-4773-b9fa-ea4915dee4b3} running 192.168.0.161 CT ct1 {54bc2ba6-b040-469e-9fda-b0eabda822d4} stopped 192.168.0.161 CT ct2 @@ -745,7 +731,7 @@ UUID STATUS IP_ADDR T NAME При клонировании контейнера необходимо помнить о смене IP-адреса, иначе при попытке запуска будет наблюдаться ошибка: ``` -[root@virtuozzo ~]# prlctl start ct2 +[root@vz ~]# prlctl start ct2 Starting the CT... Failed to start the CT: PRL_ERR_VZCTL_OPERATION_FAILED Unable to add ip 192.168.0.161: Address already in use @@ -754,25 +740,25 @@ Failed to start the Container Сначала нужно удалить старые IP-адреса: ``` -[root@virtuozzo ~]# prlctl set ct2 --ipdel 192.168.0.161/24 -[root@virtuozzo ~]# prlctl set ct2 --ipdel fe80::20c:29ff:fe01:fb08 +[root@vz ~]# prlctl set ct2 --ipdel 192.168.0.161/24 +[root@vz ~]# prlctl set ct2 --ipdel fe80::20c:29ff:fe01:fb08 ``` Затем добавить новые: ``` -[root@virtuozzo ~]# prlctl set ct2 --ipadd 192.168.0.162/24 -[root@virtuozzo ~]# prlctl set ct2 --ipadd fe80::20c:29ff:fe01:fb09 +[root@vz ~]# prlctl set ct2 --ipadd 192.168.0.162/24 +[root@vz ~]# prlctl set ct2 --ipadd fe80::20c:29ff:fe01:fb09 ``` Смена hostname: ``` -[root@virtuozzo ~]# prlctl set ct2 --hostname ct2.virtuozzo.localhost +[root@vz ~]# prlctl set ct2 --hostname ct2.vz.localhost The CT has been successfully configured. ``` После этого контейнер можно запустить: ``` -[root@virtuozzo ~]# prlctl start ct2 +[root@vz ~]# prlctl start ct2 Starting the CT... The CT has been successfully started. ``` @@ -780,15 +766,15 @@ The CT has been successfully started. ### <a name='run-commands'></a>Запуск команд в контейнере с хост-ноды Пример запуска команды в контейнере: ``` -[root@virtuozzo ~]# prlctl exec ct1 cat /etc/issue +[root@vz ~]# prlctl exec ct1 cat /etc/issue Debian GNU/Linux 8 \n \l ``` Иногда бывает нужно выполнить команду на нескольких контейнерах. Для этого можно использовать конструкцию: ``` -[root@virtuozzo ~]# CMD="cat /etc/issue" -[root@virtuozzo ~]# for i in `prlctl list -o name -H`; do echo "CT $i"; prlctl exec $i $CMD; done +[root@vz ~]# CMD="cat /etc/issue" +[root@vz ~]# for i in `prlctl list -o name -H`; do echo "CT $i"; prlctl exec $i $CMD; done CT ct1 Debian GNU/Linux 8 \n \l @@ -799,7 +785,7 @@ Debian GNU/Linux 8 \n \l ## [[⬆]](#toc) <a name='resources-ct'></a>Управление ресурсами контейнеров Доступные контейнеру ресурсы контролируются с помощью набора параметров управления ресурсами. Все эти параметры можно редактировать в файлах шаблонов, в каталоге `/etc/vz/conf/`. -Их можно установить вручную, редактируя соответствующие конфиги или используя утилиты Virtuozzo. +Их можно установить вручную, редактируя соответствующие конфиги или используя утилиты OpenVZ. Параметры контроля ресурсов контейнеров условно разделяют на группы: * дисковые квоты @@ -809,13 +795,13 @@ Debian GNU/Linux 8 \n \l * сеть ### <a name='quota'></a>Дисковые квоты -Администратор сервера Virtuozzo может устанавливать дисковые квоты, в терминах дискового пространства и количества inodes, число которых примерно равно количеству файлов. +Администратор сервера OpenVZ может устанавливать дисковые квоты, в терминах дискового пространства и количества inodes, число которых примерно равно количеству файлов. Это первый уровень дисковой квоты. В дополнение к этому, администратор может использовать обычные утилиты внутри окружения, для настроек стандартных дисковых квот UNIX для пользователей и групп. -Для использования дисковых квот, соответствующая директива должна присутствовать в конфигурационном файле Virtuozzo: +Для использования дисковых квот, соответствующая директива должна присутствовать в конфигурационном файле OpenVZ: ``` -[root@virtuozzo ~]# grep DISK_QUOTA /etc/vz/vz.conf +[root@vz ~]# grep DISK_QUOTA /etc/vz/vz.conf DISK_QUOTA=yes ``` @@ -845,14 +831,14 @@ QUOTATIME="600" Аналогично, можно установить эти параметры с помощью `vzctl`: ``` -[root@virtuozzo ~]# vzctl set ct1 --diskspace 5G:6G --save +[root@vz ~]# vzctl set ct1 --diskspace 5G:6G --save Resize the image /vz/private/3d32522a-80af-4773-b9fa-ea4915dee4b3/root.hdd to 6291456K dumpe2fs 1.42.9 (28-Dec-2013) -[root@virtuozzo ~]# vzctl set ct1 --diskinodes 10000:110000 --save +[root@vz ~]# vzctl set ct1 --diskinodes 10000:110000 --save ``` ### <a name='cpu'></a>Процессор -Планировщик процессора в Virtuozzo также двухуровневый. +Планировщик процессора в OpenVZ также двухуровневый. На первом уровне планировщик решает, какому контейнеру дать квант процессорного времени, базируясь на значении параметра `CPUUNITS` для контейнера. На втором уровне стандартный планировщик GNU/Linux решает, какому процессу в выбранном контейнере дать квант времени, базируясь на стандартных приоритетах процесса. @@ -867,35 +853,35 @@ dumpe2fs 1.42.9 (28-Dec-2013) По умолчанию для каждого контейнера это значение равно 1000. То есть, если для контейнера `ct1` установить значение 2000, а для контейнера `ct2` оставить значение 1000, то при равных условиях контейнер `ct1` получит ровно в два раза больше процессорного времени. ``` -[root@virtuozzo ~]# prlctl set ct1 --cpuunits 2000 +[root@vz ~]# prlctl set ct1 --cpuunits 2000 set cpuunits 2000 ``` Если система многопроцессорная, то установка параметра `CPUMASK` может пригодиться для привязки контейнера к конкретным процессорам. В случае восьмипроцессорной системы можно привязать контейнер к процессорам 0-3, 6, 7: ``` -[root@virtuozzo ~]# prlctl set ct1 --cpumask 0-3,6,7 +[root@vz ~]# prlctl set ct1 --cpumask 0-3,6,7 set cpu mask 0-3,6,7 ``` Параметр `CPULIMIT` указывает общий верхний лимит процессорного времени для всех ядер процессора: ``` -[root@virtuozzo ~]# prlctl set ct1 --cpulimit 15 +[root@vz ~]# prlctl set ct1 --cpulimit 15 set cpulimit 15% ``` Для одноядерного процессора верхний лимит будет равен 100%, для двухядерного 200% и так далее. Существует также возможность задания `CPULIMIT` в абсолютных значениях (MHz): ``` -[root@virtuozzo ~]# prlctl set ct1 --cpulimit 600m +[root@vz ~]# prlctl set ct1 --cpulimit 600m set cpulimit 600Mhz ``` В параметре `CPUS` задается число доступных для контейнера процессорных ядер. Контейнер по умолчанию получает в использование все процессорные ядра: ``` -[root@virtuozzo ~]# CPUINFO="grep processor /proc/cpuinfo" -[root@virtuozzo ~]# prlctl exec ct1 $CPUINFO +[root@vz ~]# CPUINFO="grep processor /proc/cpuinfo" +[root@vz ~]# prlctl exec ct1 $CPUINFO processor : 0 processor : 1 processor : 2 @@ -904,16 +890,16 @@ processor : 3 Установим для контейнера лимит в 2 процессорных ядра: ``` -[root@virtuozzo ~]# prlctl set ct1 --cpus 2 +[root@vz ~]# prlctl set ct1 --cpus 2 set cpus(4): 2 -[root@virtuozzo ~]# prlctl exec ct1 $CPUINFO +[root@vz ~]# prlctl exec ct1 $CPUINFO processor : 0 processor : 1 ``` Для систем архитектуры NUMA существует возможность привязки контейнера к процессорам NUMA-нод: ``` -[root@virtuozzo ~]# vzctl set ct1 --nodemask 0 --save +[root@vz ~]# vzctl set ct1 --nodemask 0 --save ``` Аналогично все параметры можно вручную прописать в конфигурационный файл контейнера: @@ -930,7 +916,7 @@ NODEMASK="0" При этом контейнер может потреблять больше времени, чем определено этой величиной, если нет другого конкурирующего с ним за время CPU сервера. ### <a name='io'></a>Операции ввода/вывода -В Virtuozzo существует возможность управления дисковыми операциями ввода/вывода. +В OpenVZ существует возможность управления дисковыми операциями ввода/вывода. Можно устанавливать значения таких параметров как: * `IOPRIO` * `IOLIMIT` @@ -941,7 +927,7 @@ NODEMASK="0" Изменение значения параметра можно регулировать от 0 (максимальный приоритет) до 7: ``` -[root@virtuozzo ~]# prlctl set ct1 --ioprio 6 +[root@vz ~]# prlctl set ct1 --ioprio 6 set ioprio 6 ``` @@ -950,7 +936,7 @@ set ioprio 6 Установка значения в MB/s: ``` -[root@virtuozzo ~]# prlctl set ct1 --iolimit 20 +[root@vz ~]# prlctl set ct1 --iolimit 20 Set up iolimit: 20971520 ``` @@ -966,7 +952,7 @@ Set up iolimit: 20971520 Параметр `IOPSLIMT` позволяет установить численное значение операций ввода/вывода в секунду, например 300: ``` -[root@virtuozzo ~]# prlctl set ct1 --iopslimit 300 +[root@vz ~]# prlctl set ct1 --iopslimit 300 set IOPS limit 300 ``` @@ -998,13 +984,13 @@ root@ct1:/# dd if=/dev/zero of=test bs=1048576 count=10 ``` ### <a name='memory'></a>Память -В Virtuozzo используется управление памятью четвертого поколения с помощью VCMM. +В OpenVZ используется управление памятью четвертого поколения с помощью VCMM. В прошлом же использовалось управление памятью с помощью: * VSwap (третье поколение) * SLM (второе поколение) * User Beancounters (первое поколение) -С пользовательской стороны управление памятью с помощью VSwap и VCMM ничем не отличаются, однако с точки зрения реализации, VCMM уже находится в ванильном ядре и не требует патчей со стороны разработчиков Virtuozzo. +С пользовательской стороны управление памятью с помощью VSwap и VCMM ничем не отличаются, однако с точки зрения реализации, VCMM уже находится в ванильном ядре и не требует патчей со стороны разработчиков OpenVZ. Ограничение физической памяти и swap задаются в конфигурационном файле контейнера параметрами `PHYSPAGES` и `SWAPPAGES`. Значения устанавливаются в блоках, например: @@ -1016,7 +1002,7 @@ SWAPPAGES="262144:262144" С помощью `prlctl` значения параметров можно указывать в метрической системе: ``` -[root@virtuozzo ~]# prlctl set ct1 --memsize 1G --swappages 1G +[root@vz ~]# prlctl set ct1 --memsize 1G --swappages 1G Set the memsize parameter to 1024Mb. Set swappages 262144 ``` @@ -1034,7 +1020,7 @@ VM_OVERCOMMIT="2" Также возможна установка параметра с помощью `vzctl`: ``` -[root@virtuozzo ~]# vzctl set ct1 --vm_overcommit 2 --save +[root@vz ~]# vzctl set ct1 --vm_overcommit 2 --save ``` При использовании значения 2 для ранее упомянутого контейнера с 2048MB памяти, будет доступно (2048MB * 2 = 4096MB) памяти. @@ -1043,7 +1029,7 @@ VM_OVERCOMMIT="2" ### <a name='monitoring'></a>Мониторинг ресурсов С помощью утилиты `vznetstat` можно увидеть входящий и исходящий трафик (в байтах и пакетах) для всех контейнеров: ``` -[root@virtuozzo ~]# vznetstat +[root@vz ~]# vznetstat UUID Net.Class Input(bytes) Input(pkts) Output(bytes) Output(pkts) 0 0 244486 3024 1567749 2491 54bc2ba6-b040-469e-9fda-b0eabda822d4 0 0 0 0 0 @@ -1053,14 +1039,14 @@ UUID Net.Class Input(bytes) Input(pkts) Outpu Для конкретного контейнера можно воспользоваться ключом `-v`: ``` -[root@virtuozzo ~]# vznetstat -v 3d32522a-80af-4773-b9fa-ea4915dee4b3 +[root@vz ~]# vznetstat -v 3d32522a-80af-4773-b9fa-ea4915dee4b3 UUID Net.Class Input(bytes) Input(pkts) Output(bytes) Output(pkts) 3d32522a-80af-4773-b9fa-ea4915dee4b3 0 2925512 49396 49398885 49254 ``` Утилита `vzstat` позволяет узнать информацию по нагрузке на контейнер, занятым ресурсам и состоянии сети: ``` -[root@virtuozzo ~]# vzstat -p 3d32522a-80af-4773-b9fa-ea4915dee4b3 -t +[root@vz ~]# vzstat -p 3d32522a-80af-4773-b9fa-ea4915dee4b3 -t loadavg 0 0 0 CTNum 3 procs 289 1 288 0 0 0 0 @@ -1086,19 +1072,19 @@ Disks stats 0.000 0.000 `vzpid` позволяет узнать к какому контейнеру принадлежит процесс, это может быть полезно при просмотре списка процессов с хост-ноды и поиска "процесса-грузчика": ``` -[root@virtuozzo ~]# top +[root@vz ~]# top ... PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 5625 33 20 0 364432 6232 1284 S 26.2 0.6 0:03.20 apache2 ... -[root@virtuozzo ~]# vzpid 5625 +[root@vz ~]# vzpid 5625 Pid VEID Name 5625 3d32522a-80af-4773-b9fa-ea4915dee4b3 apache2 ``` Утилита `vzps` аналогична утилите `ps`, она позволяет вывести список процессов и их состояние для конкретного контейнера: ``` -[root@virtuozzo ~]# vzps aufx -E 3d32522a-80af-4773-b9fa-ea4915dee4b3 +[root@vz ~]# vzps aufx -E 3d32522a-80af-4773-b9fa-ea4915dee4b3 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND 0 2432 0.0 0.0 0 0 ? S 20:10 0:00 [kthreadd/3d3252] 0 2433 0.0 0.0 0 0 ? S 20:10 0:00 \_ [khelper] @@ -1125,7 +1111,7 @@ Disks stats 0.000 0.000 Утилита `vztop` теперь заменена алиасом на `htop` с отображением UUID контейнера, которому принадлежит процесс: ``` -[root@virtuozzo ~]# which vztop +[root@vz ~]# which vztop alias vztop='htop -s CTID' /usr/bin/htop ``` @@ -1143,21 +1129,21 @@ alias vztop='htop -s CTID' По умолчанию модуль TUN уже загружен в ядро, проверить это можно командой `lsmod`: ``` -[root@virtuozzo ~]# lsmod | grep tun +[root@vz ~]# lsmod | grep ^tun tun 27183 1 ``` Если все-таки модуль отключен, то включить его можно командой `modprobe`: ``` -[root@virtuozzo ~]# modprobe tun +[root@vz ~]# modprobe tun ``` Проброс модуля TUN в контейнер: ``` -[root@virtuozzo ~]# vzctl set ct3 --devnodes net/tun:rw --save +[root@vz ~]# vzctl set ct3 --devnodes net/tun:rw --save Setting devices Create /etc/tmpfiles.d/device-tun.conf -[root@virtuozzo ~]# prlctl exec ct3 ls -l /dev/net/tun +[root@vz ~]# prlctl exec ct3 ls -l /dev/net/tun crw------- 1 root root 10, 200 Feb 10 13:12 /dev/net/tun ``` @@ -1174,29 +1160,29 @@ FUSE может пригодиться, например при монтиров Для того, чтобы для контейнеров был доступен FUSE, его необходимо включить на хост-ноде: ``` -[root@virtuozzo ~]# modprobe fuse -[root@virtuozzo ~]# lsmod | grep fuse +[root@vz ~]# modprobe fuse +[root@vz ~]# lsmod | grep fuse fuse 106371 0 ``` Также необходимо добавить модуль в автозагрузку, чтобы он подгружался автоматически при рестарте хост-ноды: ``` -[root@virtuozzo ~]# echo fuse >> /etc/modules-load.d/vz.conf +[root@vz ~]# echo fuse >> /etc/modules-load.d/vz.conf ``` Включение FUSE для контейнера: ``` -[root@virtuozzo ~]# vzctl set ct3 --devnodes fuse:rw --save +[root@vz ~]# vzctl set ct3 --devnodes fuse:rw --save Setting devices Create /etc/tmpfiles.d/device-fuse.conf -[root@virtuozzo ~]# prlctl exec ct3 ls -l /dev/fuse +[root@vz ~]# prlctl exec ct3 ls -l /dev/fuse crw------- 1 root root 10, 229 Feb 10 13:42 /dev/fuse ``` Пример подключения Яндекс.Диска в контейнере: ``` -[root@virtuozzo ~]# prlctl exec ct3 yum install fuse davfs2 -[root@virtuozzo ~]# prlctl exec ct3 mount -t davfs https://webdav.yandex.ru /mnt/ +[root@vz ~]# prlctl exec ct3 yum install fuse davfs2 +[root@vz ~]# prlctl exec ct3 mount -t davfs https://webdav.yandex.ru /mnt/ Please enter the username to authenticate with server https://webdav.yandex.ru or hit enter for none. Username: user @@ -1206,13 +1192,13 @@ https://webdav.yandex.ru or hit enter for none. ``` ## [[⬆]](#toc) <a name='vm'></a>Работа с виртуальными машинами -Помимо создания контейнеров, Virtuozzo 7 поддерживает создание и управление виртуальными машинами на базе QEMU/KVM. +Помимо создания контейнеров, OpenVZ 7 поддерживает создание и управление виртуальными машинами на базе QEMU/KVM. Утилита `prlctl` имеет возможность создавать и управлять виртуальными машинами, помимо этого также доступно управление ВМ с помощью `libvirt`. ### <a name='create-vm'></a>Создание и запуск ВМ Создание виртуальной машины практически ничем не отличается от создания контейнера: ``` -[root@virtuozzo ~]# prlctl create vm1 --distribution rhel7 --vmtype vm +[root@vz ~]# prlctl create vm1 --distribution rhel7 --vmtype vm Creating the virtual machine... Generate the VM configuration for rhel7. The VM has been successfully created. @@ -1221,7 +1207,7 @@ The VM has been successfully created. Ключ `--distribution` указывает на семейство ОС или дистрибутив для оптимизации виртуального окружения. Список всех официально поддерживаемых ОС: ``` -[root@virtuozzo ~]# prlctl create vm1 -d list +[root@vz ~]# prlctl create vm1 -d list The following values are allowed: win-2000 win-xp win-2003 win-vista win-2008 win-7 win-8 win-2012 @@ -1237,7 +1223,7 @@ chrome-1 chrome Для каждой виртуальной машины в каталоге `/vz/vmprivate/` создается собственная директория с именем, соответствующим ее UUID: ``` -[root@virtuozzo ~]# ls /vz/vmprivate/1bdb465a-31e6-46c5-ad7b-947f6ff00208/ +[root@vz ~]# ls /vz/vmprivate/1bdb465a-31e6-46c5-ad7b-947f6ff00208/ config.pvs config.pvs.backup harddisk.hdd ``` @@ -1255,7 +1241,7 @@ config.pvs config.pvs.backup harddisk.hdd Просмотр только что созданной ВМ: ``` -[root@virtuozzo ~]# prlctl list -a +[root@vz ~]# prlctl list -a UUID STATUS IP_ADDR T NAME {6fe60288-fe50-49fe-a68d-7a8330837358} stopped 192.168.0.161 CT ct1 {2cdb07fd-a68a-4279-81c1-3d269460c2f7} stopped 192.168.0.162 CT ct2 @@ -1264,36 +1250,36 @@ UUID STATUS IP_ADDR T NAME По аналогии с контейнерами установим необходимые параметры для виртуальной машины: ``` -[root@virtuozzo ~]# prlctl set vm1 --description "Backend for app" -[root@virtuozzo ~]# prlctl set vm1 --device-set net0 --ipadd 192.168.0.180/24 -[root@virtuozzo ~]# prlctl set vm1 --device-set net0 --ipadd 192.168.0.180/24 -[root@virtuozzo ~]# prlctl set vm1 --device-set net0 --ipadd FE80:0:0:0:20C:29FF:FE01:FB07 -[root@virtuozzo ~]# prlctl set vm1 --nameserver 192.168.0.1,192.168.0.2 -[root@virtuozzo ~]# prlctl set vm1 --memsize 1024 -[root@virtuozzo ~]# prlctl set vm1 --cpus 2 -[root@virtuozzo ~]# prlctl set vm1 --cpuunits 1000 -[root@virtuozzo ~]# prlctl set vm1 --cpulimit 1024m -[root@virtuozzo ~]# prlctl set vm1 --cpumask 0-1 -[root@virtuozzo ~]# prlctl set vm1 --ioprio 6 -[root@virtuozzo ~]# prlctl set vm1 --iolimit 0 -[root@virtuozzo ~]# prlctl set vm1 --iopslimit 0 +[root@vz ~]# prlctl set vm1 --description "Backend for app" +[root@vz ~]# prlctl set vm1 --device-set net0 --ipadd 192.168.0.180/24 +[root@vz ~]# prlctl set vm1 --device-set net0 --ipadd 192.168.0.180/24 +[root@vz ~]# prlctl set vm1 --device-set net0 --ipadd FE80:0:0:0:20C:29FF:FE01:FB07 +[root@vz ~]# prlctl set vm1 --nameserver 192.168.0.1,192.168.0.2 +[root@vz ~]# prlctl set vm1 --memsize 1024 +[root@vz ~]# prlctl set vm1 --cpus 2 +[root@vz ~]# prlctl set vm1 --cpuunits 1000 +[root@vz ~]# prlctl set vm1 --cpulimit 1024m +[root@vz ~]# prlctl set vm1 --cpumask 0-1 +[root@vz ~]# prlctl set vm1 --ioprio 6 +[root@vz ~]# prlctl set vm1 --iolimit 0 +[root@vz ~]# prlctl set vm1 --iopslimit 0 ``` Ключ `--videosize` указывает размер выделяемой видеопамяти в MB для виртуальной машины. ``` -[root@virtuozzo ~]# prlctl set vm1 --videosize 64 +[root@vz ~]# prlctl set vm1 --videosize 64 ``` -<!--Ключ `--autostart` аналогичен `--onboot` для контейнеров, который указывает возможность автостарта контейнера при старте хост-ноды. +Ключ `--autostart` аналогичен `--onboot` для контейнеров, который указывает возможность автостарта контейнера при старте хост-ноды. +``` +[root@vz ~]# prlctl set vm1 --autostart on ``` -[root@virtuozzo ~]# prlctl set vm1 --autostart on -```--> Параметры виртуальной машины установлены, ее можно запускать, однако для установки гостевой ОС необходим образ ОС. Для хранения образов ОС можно создать отдельный каталог и централизованно хранить все образы там: ``` -[root@virtuozzo ~]# mkdir /vz/vmprivate/images/ -[root@virtuozzo ~]# ls /vz/vmprivate/images/ -1 +[root@vz ~]# mkdir /vz/vmprivate/images/ +[root@vz ~]# ls /vz/vmprivate/images/ -1 CentOS-7-x86_64-Minimal-1503-01.iso 9200.16384.WIN8_RTM.120725-1247_X64FRE_SERVER_EVAL_RU-RU-HRM_SSS_X64FREE_RU-RU_DV5.ISO ``` @@ -1302,17 +1288,17 @@ CentOS-7-x86_64-Minimal-1503-01.iso Установка ВМ с образа `CentOS-7-x86_64-Minimal-1503-01.iso`: ``` -[root@virtuozzo ~]# prlctl set vm1 --device-set cdrom1 --image "/vz/vmprivate/images/CentOS-7-x86_64-Minimal-1503-01.iso" --iface scsi --position 1 +[root@vz ~]# prlctl set vm1 --device-set cdrom1 --image "/vz/vmprivate/images/CentOS-7-x86_64-Minimal-1503-01.iso" --iface scsi --position 1 ``` Изменение размера диска до 8G: ``` -[root@virtuozzo ~]# prl_disk_tool resize --hdd /vz/vmprivate/vm1.pvm/harddisk.hdd --size 8G +[root@vz ~]# prl_disk_tool resize --hdd /vz/vmprivate/vm1.pvm/harddisk.hdd --size 8G ``` Просмотр конфигурации виртуальной машины перед ее запуском: ``` -[root@virtuozzo ~]# prlctl list vm1 -i | grep Hardware -A9 +[root@vz ~]# prlctl list vm1 -i | grep Hardware -A9 Hardware: cpu cpus=2 VT-x accl=high mode=32 cpuunits=1000 cpulimit=1024Mhz ioprio=6 iolimit='0' mask=0-1 memory 1024Mb @@ -1328,7 +1314,7 @@ Hardware: ### <a name='vnc'></a>VNC Подключение VNC для ВМ: ``` -[root@virtuozzo ~]# prlctl set vm1 --vnc-mode manual --vnc-port 5901 --vnc-passwd Oiwaiqud +[root@vz ~]# prlctl set vm1 --vnc-mode manual --vnc-port 5901 --vnc-passwd Oiwaiqud Configure VNC: Remote display: mode=manual port=5901 ``` @@ -1339,7 +1325,7 @@ Configure VNC: Remote display: mode=manual port=5901 Запуск виртуальной машины: ``` -[root@virtuozzo ~]# prlctl start vm1 +[root@vz ~]# prlctl start vm1 Starting the VM... The VM has been successfully started. ``` @@ -1368,21 +1354,21 @@ root@192.168.0.180's password: eihaixahghath7A ``` ### <a name='guest-tools'></a>Дополнения гостевой ОС -Virtuozzo поддерживает Virtuozzo Guest Tools (дополнения гостевой ОС), которые позволяют выполнять некоторые операции в ВМ такие как: +OpenVZ поддерживает Virtuozzo Guest Tools (дополнения гостевой ОС), которые позволяют выполнять некоторые операции в ВМ такие как: * запуск команд в ВМ с помощью `prlctl exec` * установка паролей для пользователей с помощью `prlctl set --userpasswd` * управление сетевыми настройками в ВМ Установка дополнений для `vm1` с хост-ноды: ``` -[root@virtuozzo ~]# prlctl installtools vm1 +[root@vz ~]# prlctl installtools vm1 Installing... The Parallels tools have been successfully installed. ``` Далее необходимо войти в ВМ, например по SSH и запустить скрипт установки дополнений: ``` -[root@virtuozzo ~]# ssh root@192.168.0.180 +[root@vz ~]# ssh root@192.168.0.180 root@192.168.0.180's password: eihaixahghath7A [root@vm1 ~]# mount /dev/cdrom /mnt/ mount: /dev/sr0 is write-protected, mounting read-only @@ -1401,11 +1387,11 @@ Done! Проверка корректности установки дополнений с хост-ноды: ``` -[root@virtuozzo ~]# prlctl exec vm1 uname -a +[root@vz ~]# prlctl exec vm1 uname -a Linux vm1.tld 3.10.0-229.el7.x86_64 #1 SMP Fri Mar 6 11:36:42 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux -[root@virtuozzo ~]# prlctl set vm1 --userpasswd testuser:iel9cophoo2Aisa +[root@vz ~]# prlctl set vm1 --userpasswd testuser:iel9cophoo2Aisa Authentication tokens updated successfully. -[root@virtuozzo ~]# prlctl exec vm1 id testuser +[root@vz ~]# prlctl exec vm1 id testuser uid=1000(testuser) gid=1000(testuser) groups=1000(testuser) ``` @@ -1416,7 +1402,7 @@ uid=1000(testuser) gid=1000(testuser) groups=1000(testuser) Автоматическое обновление дополнений гостевой ОС в ВМ: ``` -[root@virtuozzo ~]# prlctl set vm1 --tools-autoupdate on +[root@vz ~]# prlctl set vm1 --tools-autoupdate on ``` ### <a name='pause-vm'></a>Приостановка виртуальных машин @@ -1439,12 +1425,12 @@ uid=1000(testuser) gid=1000(testuser) groups=1000(testuser) Вдобавок к этим командам существует возможность приостанавливать ВМ: ``` -[root@virtuozzo ~]# prlctl pause vm1 +[root@vz ~]# prlctl pause vm1 Pause the VM... The VM has been successfully paused. -[root@virtuozzo ~]# prlctl status vm1 +[root@vz ~]# prlctl status vm1 VM vm1 exist paused -[root@virtuozzo ~]# prlctl start vm1 +[root@vz ~]# prlctl start vm1 Starting the VM... The VM has been successfully started. ``` @@ -1454,21 +1440,21 @@ The VM has been successfully started. Пример создания шаблона `config-1024MB-centos7`, основанный на ранее настроенной `vm1`: ``` -[root@virtuozzo ~]# mkdir /etc/parallels/samples -[root@virtuozzo ~]# cp /vz/vmprivate/vm1.pvm/config.pvs /etc/parallels/samples/config-1024MB-centos7.pvs -[root@virtuozzo ~]# prlctl create vm3 +[root@vz ~]# mkdir /etc/parallels/samples +[root@vz ~]# cp /vz/vmprivate/vm1.pvm/config.pvs /etc/parallels/samples/config-1024MB-centos7.pvs +[root@vz ~]# prlctl create vm3 Creating the virtual machine... Generate the VM configuration for win-2008. The VM has been successfully created. -[root@virtuozzo ~]# prlctl list vm3 -i | egrep "cpu|memory|video|hdd0" +[root@vz ~]# prlctl list vm3 -i | egrep "cpu|memory|video|hdd0" Boot order: hdd0 cdrom0 cpu cpus=1 VT-x accl=high mode=32 ioprio=4 iolimit='0' memory 512Mb video 32Mb 3d acceleration=highest vertical sync=yes memory_guarantee auto hdd0 (+) scsi:0 image='/vz/vmprivate/vm3.pvm/harddisk.hdd' type='expanded' 65536Mb subtype=virtio-scsi -[root@virtuozzo ~]# prlctl set vm3 --applyconfig config-1024MB-centos7 -[root@virtuozzo ~]# prlctl list vm3 -i | egrep "cpu|memory|video|hdd0" +[root@vz ~]# prlctl set vm3 --applyconfig config-1024MB-centos7 +[root@vz ~]# prlctl list vm3 -i | egrep "cpu|memory|video|hdd0" Boot order: hdd0 cdrom0 cpu cpus=2 VT-x accl=high mode=32 cpuunits=1000 cpulimit=1024Mhz ioprio=4 iolimit='0' mask=0-1 memory 1024Mb @@ -1487,13 +1473,13 @@ Boot order: hdd0 cdrom0 Добавление дополнительного HDD для виртуальной машины с Linux: ``` -[root@virtuozzo ~]# prlctl list vm1 -i | grep hdd +[root@vz ~]# prlctl list vm1 -i | grep hdd Boot order: hdd0 cdrom1 hdd0 (+) scsi:0 image='/vz/vmprivate/vm1.pvm/harddisk.hdd' type='expanded' 8192Mb subtype=virtio-scsi -[root@virtuozzo ~]# prlctl set vm1 --device-add hdd --size 2048 --iface scsi +[root@vz ~]# prlctl set vm1 --device-add hdd --size 2048 --iface scsi Creating hdd1 (+) scsi:2 image='/vz/vmprivate/vm1.pvm/harddisk1.hdd' type='expanded' 2048Mb subtype=virtio-scsi Created hdd1 (+) scsi:2 image='/vz/vmprivate/vm1.pvm/harddisk1.hdd' type='expanded' 2048Mb subtype=virtio-scsi -[root@virtuozzo ~]# prlctl list vm1 -i | grep hdd +[root@vz ~]# prlctl list vm1 -i | grep hdd Boot order: hdd0 cdrom1 hdd1 hdd0 (+) scsi:0 image='/vz/vmprivate/vm1.pvm/harddisk.hdd' type='expanded' 8192Mb subtype=virtio-scsi hdd1 (+) scsi:2 image='/vz/vmprivate/vm1.pvm/harddisk1.hdd' type='expanded' 2048Mb subtype=virtio-scsi @@ -1501,7 +1487,7 @@ Boot order: hdd0 cdrom1 hdd1 После того как диск добавлен, нужно создать на нем раздел и отформатировать его: ``` -[root@virtuozzo ~]# prlctl enter vm1 +[root@vz ~]# prlctl enter vm1 [root@vm1 /]# lsblk | grep sd sda 8:0 0 8G 0 disk ├─sda1 8:1 0 500M 0 part /boot @@ -1524,10 +1510,10 @@ Command (m for help): w С помощью ключа `--device-disconnect` можно отключить устройство от ВМ: ``` -[root@virtuozzo ~]# prlctl set vm1 --device-disconnect cdrom1 +[root@vz ~]# prlctl set vm1 --device-disconnect cdrom1 Disconnect device: cdrom1 The device successfully disconnected -[root@virtuozzo ~]# prlctl list vm1 -i | grep cdrom1 +[root@vz ~]# prlctl list vm1 -i | grep cdrom1 Boot order: hdd0 cdrom1 hdd1 cdrom1 (+) scsi:1 image='/vz/vmprivate/images/CentOS-7-x86_64-Minimal-1503-01.iso' state=disconnected subtype=virtio-scsi ``` @@ -1536,31 +1522,31 @@ Boot order: hdd0 cdrom1 hdd1 Чтобы полностью удалить устройство, нужно использовать ключ `--device-del`: ``` -[root@virtuozzo ~]# prlctl set vm1 --device-del usb +[root@vz ~]# prlctl set vm1 --device-del usb Remove the usb device. -[root@virtuozzo ~]# prlctl set vm1 --device-del cdrom1 +[root@vz ~]# prlctl set vm1 --device-del cdrom1 Remove the cdrom1 device. -[root@virtuozzo ~]# prlctl list vm1 -i | egrep "cdrom1|usb" +[root@vz ~]# prlctl list vm1 -i | egrep "cdrom1|usb" ``` При удалении HDD из виртуальной машины можно сохранить сам виртуальный диск, для этого используется ключ `--detach-only`, по умолчанию диск удаляется, что является умолчанием ключа `--destroy-image`. Изменение приоритета загрузки устройств: ``` -[root@virtuozzo ~]# prlctl list vm1 -i | grep "Boot order" +[root@vz ~]# prlctl list vm1 -i | grep "Boot order" Boot order: hdd0 hdd1 -[root@virtuozzo ~]# prlctl set vm1 --device-bootorder "hdd1 hdd0" -[root@virtuozzo ~]# prlctl list vm1 -i | grep "Boot order" +[root@vz ~]# prlctl set vm1 --device-bootorder "hdd1 hdd0" +[root@vz ~]# prlctl list vm1 -i | grep "Boot order" Boot order: hdd1 hdd0 ``` Пример добавления дополнительного сетевого устройства: ``` -[root@virtuozzo ~]# prlctl set vm1 --device-add net --network Bridged --mac auto --ipadd 192.168.0.181 --gw 192.168.122.1 --nameserver 192.168.0.1 --adapter-type virtio +[root@vz ~]# prlctl set vm1 --device-add net --network Bridged --mac auto --ipadd 192.168.0.181 --gw 192.168.122.1 --nameserver 192.168.0.1 --adapter-type virtio Enable automatic reconfiguration for this network adapter. Creating net1 (+) dev='' ifname='eth1' network='Bridged' mac=001C42AFDC9B card=virtio ips='192.168.0.181/255.255.255.0 ' gw='192.168.0.1' Created net1 (+) dev='vme42afdc9b' network='Bridged' mac=001C42AFDC9B card=virtio ips='192.168.0.181/255.255.255.0 ' gw='192.168.0.1' -[root@virtuozzo ~]# prlctl list vm1 -i | grep -i net +[root@vz ~]# prlctl list vm1 -i | grep -i net net0 (+) dev='vme4292dc5f' network='Bridged' mac=001C4292DC5F card=virtio ips='192.168.0.180/255.255.255.0 FE80:0:0:0:20C:29FF:FE01:FB07/64 ' net1 (+) dev='vme42afdc9b' network='Bridged' mac=001C42AFDC9B card=virtio ips='192.168.0.181/255.255.255.0 ' gw='192.168.0.1' ``` @@ -1572,20 +1558,20 @@ Created net1 (+) dev='vme42afdc9b' network='Bridged' mac=001C42AFDC9B card=virti Для добавления оперативной памяти "налету" необходимо установить значение ключа `--mem-hotplug` в `on`: ``` -[root@virtuozzo ~]# prlctl list vm1 -i | grep "memory " +[root@vz ~]# prlctl list vm1 -i | grep "memory " memory 1024Mb -[root@virtuozzo ~]# prlctl set vm1 --mem-hotplug on +[root@vz ~]# prlctl set vm1 --mem-hotplug on set mem hotplug: 1 ``` После установки параметра нужно единожды перезагрузить виртуальную машину и затем изменять количество памяти: ``` -[root@virtuozzo ~]# prlctl restart vm1 +[root@vz ~]# prlctl restart vm1 Restarting the VM... The VM has been successfully restarted. -[root@virtuozzo ~]# prlctl set vm1 --memsize 1536M +[root@vz ~]# prlctl set vm1 --memsize 1536M Set the memsize parameter to 1536Mb. -[root@virtuozzo ~]# prlctl list vm1 -i | grep "memory " +[root@vz ~]# prlctl list vm1 -i | grep "memory " memory 1536Mb hotplug ``` @@ -1596,22 +1582,22 @@ Set the memsize parameter to 1536Mb. Включение CPU hotplug происходит по аналогии с MEM hotplug: ``` -[root@virtuozzo ~]# prlctl list vm1 -i | grep cpu +[root@vz ~]# prlctl list vm1 -i | grep cpu cpu cpus=2 VT-x accl=high mode=32 cpuunits=1000 cpulimit=1024Mhz ioprio=6 iolimit='0' mask=0-1 -[root@virtuozzo ~]# prlctl set vm1 --cpu-hotplug on +[root@vz ~]# prlctl set vm1 --cpu-hotplug on set cpu hotplug: 1 ``` Перезагрузка виртуальной машины и проверка ресурсов: ``` -[root@virtuozzo ~]# prlctl restart vm1 +[root@vz ~]# prlctl restart vm1 Restarting the VM... The VM has been successfully restarted. -[root@virtuozzo ~]# prlctl set vm1 --cpuunits 2000 --cpus 3 --cpumask 0-2 +[root@vz ~]# prlctl set vm1 --cpuunits 2000 --cpus 3 --cpumask 0-2 set cpus(4): 3 set cpuunits 2000 set cpu mask 0-2 -[root@virtuozzo ~]# prlctl list vm1 -i | grep cpu +[root@vz ~]# prlctl list vm1 -i | grep cpu cpu cpus=3 VT-x hotplug accl=high mode=32 cpuunits=2000 cpulimit=1024Mhz ioprio=6 iolimit='0' mask=0-2 ``` @@ -1626,22 +1612,22 @@ KSM (Kernel Same-Page Merging) — технология ядра Linux, кото KSM обеспечивает системам виртуализации возможность перезакладки ресурсов оперативной памяти (memory overcommitment). В условиях достаточно однородных экземпляров гостевых операционных систем возможен значительный эффект, в частности, экспериментальная реализация KSM от Red Hat показала, что 52 виртуальных экземпляра Windows XP с выделенными 1GB памяти, могут работать на хост-ноде с 16GB оперативной памяти. -Для включения KSM в Virtuozzo необходимо запустить сервисы `ksm` и `ksmtuned`: +Для включения KSM в OpenVZ необходимо запустить сервисы `ksm` и `ksmtuned`: ``` -[root@virtuozzo ~]# systemctl start ksm -[root@virtuozzo ~]# systemctl start ksmtuned -[root@virtuozzo ~]# systemctl enable ksm -[root@virtuozzo ~]# systemctl enable ksmtuned +[root@vz ~]# systemctl start ksm +[root@vz ~]# systemctl start ksmtuned +[root@vz ~]# systemctl enable ksm +[root@vz ~]# systemctl enable ksmtuned ``` Работоспособность KSM можно проверить на примере общих страниц в памяти (shared memory pages): ``` -[root@virtuozzo ~]# cat /sys/kernel/mm/ksm/pages_sharing +[root@vz ~]# cat /sys/kernel/mm/ksm/pages_sharing 120990 ``` ## [[⬆]](#toc) <a name='migration'></a>Миграция контейнеров и виртуальных машин -В Virtuozzo поддерживается "живая" миграция контейнеров и виртуальных машин с использованием CRIU и P.Haul. +В OpenVZ поддерживается "живая" миграция контейнеров и виртуальных машин с использованием CRIU и P.Haul. Пример миграции контейнера `ct3` с хост-ноды `vz-source` на `vz-dest` (192.168.0.180). @@ -1667,7 +1653,7 @@ UUID STATUS IP_ADDR T NAME ## [[⬆]](#toc) <a name='extra-info'></a>Расширенная информация о контейнерах и ВМ Подробную информацию о контейнере или виртуальной машине можно получить с помощью параметра `list` с ключом `-i` (`--info`): ``` -[root@virtuozzo ~]# prlctl list -i ct4 +[root@vz ~]# prlctl list -i ct4 INFO ID: {22c418d7-948b-456e-9d84-d59ab5ead661} EnvID: 22c418d7-948b-456e-9d84-d59ab5ead661 @@ -1709,23 +1695,23 @@ Auto compress virtual disks: on Nested virtualization: off PMU virtualization: off Offline management: (-) -Hostname: ct4.virtuozzo.localhost +Hostname: ct4.vz.localhost DNS Servers: 192.168.0.1 192.168.0.2 Search Domains: 192.168.0.1 ``` Существует также возможность просмотра дополнительной информации о контейнерах: ``` -[root@virtuozzo ~]# prlctl list -o type,status,name,hostname,dist,ip -T STATUS NAME HOSTNAME DIST IP_ADDR -CT running ct2 ct2.virtuozzo.localhost debian 192.168.0.162 FE80:0:0:0:20C:29FF:FE01:FB09 -CT running ct1 ct1.virtuozzo.localhost debian 192.168.0.161 FE80:0:0:0:20C:29FF:FE01:FB08 -VM stopped vm1 vm1.virtuozzo.localhost rhel7 192.168.0.163 FE80:0:0:0:20C:29FF:FE01:FB07 +[root@vz ~]# prlctl list -o type,status,name,hostname,dist,ip +T STATUS NAME HOSTNAME DIST IP_ADDR +CT running ct2 ct2.vz.localhost debian 192.168.0.162 FE80:0:0:0:20C:29FF:FE01:FB09 +CT running ct1 ct1.vz.localhost debian 192.168.0.161 FE80:0:0:0:20C:29FF:FE01:FB08 +VM stopped vm1 vm1.vz.localhost rhel7 192.168.0.163 FE80:0:0:0:20C:29FF:FE01:FB07 ``` Список всех доступных полей: ``` -[root@virtuozzo ~]# prlctl list -L +[root@vz ~]# prlctl list -L uuid UUID envid ENVID status STATUS @@ -1754,7 +1740,7 @@ ha_prio HA_PRIO * если работа хост-ноды замедлилась, для анализа нагрузки можно воспользоваться утилитами `vzps`, `vztop`, `iotop`, `atop` * для обнаружения сетевых проблем можно воспользоваться утилитами `ping`, `traceroute`, `nmap`, `mtr`, `tcpdump`, `nc`, `iftop`, `netstat`, `ss` * `strace` будет верным помощником для отслеживания системных вызовов -* используйте RAID, LVM +* используйте RAID * для экстренных ситуаций, когда могут быть проблемы с сетью необходимо всегда иметь под рукой IPMI или KVM-доступ * не перезагружайте хост-ноду без выяснения обстоятельств неполадок, делайте это только в самых крайних случаях * следите за временем на сервере, используйте для синхронизации NTP на хост-ноде @@ -1785,7 +1771,7 @@ ha_prio HA_PRIO * https://bugs.openvz.org/secure/Dashboard.jspa ## [[⬆]](#toc) <a name='todo'></a>TODO -* управление сетью в Virtuozzo (veth/vlan/shaping) +* управление сетью в OpenVZ (veth/vlan/shaping) * снапшоты * клонирование шаблонов * проброс устройств (nfs/pptp/usb/vlan) (http://habrahabr.ru/post/210460/) @@ -1793,8 +1779,6 @@ ha_prio HA_PRIO * некоторые ключи для `prlctl set`: `--3d-accelerate` `--vertical-sync` `--memguarantee` `--template` `--autostop` `--start-as-user` * создание шаблона приложения для автоматического создания контейнера (https://bugs.openvz.org/browse/OVZ-6682) * создание шаблона гостевой ОС на основе vztt/vzmktmpl -* измененная схема архитектуры Virtuozzo (старая схема тут: https://raw.githubusercontent.com/Amet13/virtuozzo-tutorial/master/images/vz7-architect.png) -* не работает `autostart`, `autostart-delay` для ВМ (https://bugs.openvz.org/browse/OVZ-6715) * не работает `prlctl capture` * `vztop`/`vzps`/`vzstat`/`vznetstat` работают только с UUID (https://bugs.openvz.org/browse/OVZ-6504) |