PVE
Материал из ALT Linux Wiki
Строка 1: | Строка 1: | ||
= Что это такое = | = Что это такое = | ||
- | Proxmox Virtual Environment — система виртуализации и управления с | + | Proxmox Virtual Environment (PVE) — средство управления виртуальными окружениями на базе гипервизора [http://ru.wikipedia.org/wiki/KVM KVM] |
+ | и системы контейнерной изоляции [http://ru.wikipedia.org/wiki/LXC LXC]. Строго говоря, PVE это не система виртуализации, а инструментарий управления средой, в которой выполняются виртуальные окружения KVM и LXC. Основными компонентами среды являются: | ||
+ | |||
+ | * физические сервера, на которых выполняются процессы гипервизора KVM и процессы, работающие в контейнерах LXC; | ||
+ | * хранилища данных, в которых хранятся образы инсталляционных дисков, образы дисков виртуальных машин KVM и файлы, доступные из контейнеров LXC; | ||
+ | * виртуальные сетевые коммутаторы, к которым подключаются сетевые интерфейсы виртуальных окружений. | ||
+ | |||
+ | = Как это устроено = | ||
+ | Собственно PVE состоит из веб-интерфейса, распределённого хранилища данных конфигурации виртуальных окружений, а также утилит конфигурирования, работающих в командной строке. Все эти инструменты предназначены только для управления средой выполнения виртуальных | ||
+ | окружений. За формирование среды отвечают компоненты системы, не входящие непосредственно в состав PVE. В первую очередь это сетевая и | ||
+ | дисковая подсистемы, а также механизмы аутентификации. | ||
+ | |||
+ | == Веб-интерфейс == | ||
+ | Веб-интерфейс пользователя PVE предназначен для решения следующих задач: | ||
+ | |||
+ | * создание, удаление, настройка виртуальных окружений; | ||
+ | * управление физическими серверами; | ||
+ | * мониторинг активности виртуальных окружений и использования ресурсов среды; | ||
+ | * фиксация состояний (snapshot-ы), создание резервных копий и шаблонов виртуальных окружений, восстановление виртуальных окружений из резервных копий. | ||
+ | |||
+ | Кроме решения пользовательских задач, веб-интерфейс PVE можно использовать ещё и для встраивания в интегрированные системы управления — например, в панели управления хостингом. Для этого он имеет развитый RESTful API с JSON в качестве основного формата данных. | ||
+ | |||
+ | Для аутентификации пользователей веб-интерфейса можно использовать как собственные механизмы PVE, так и PAM. Использование PAM даёт | ||
+ | возможность, например, интегрировать PVE в домен аутентификации. | ||
+ | |||
+ | == Хранилище данных == | ||
+ | В случае локальной установки PVE для размещения данных виртуальных окружений можно дополнительно ничего не настраивать и использовать | ||
+ | локальную файловую систему сервера. Но в случае кластера из нескольких серверов имеет смысл настроить сетевую или распределённую сетевую | ||
+ | файловую систему, обеспечивающую параллельный доступ к файлам со всех серверов, на которых выполняются процессы виртуальных окружений. В | ||
+ | качестве таких файловых систем могут выступать, например, [http://ru.wikipedia.org/wiki/NFS NFS] или [http://ru.wikipedia.org/wiki/CEPH CEPH]. | ||
+ | |||
+ | == Сетевая подсистема == | ||
+ | В отличие от хранилища данных, сетевая подсистема требует специальной настройки даже в случае локальной установки PVE. Это обусловлено тем, | ||
+ | что сетевые интерфейсы виртуальных окружений должны подключаться к какому-то виртуальному же устройству, обеспечивающему соединение с | ||
+ | общей сетью передачи данных. Обычно в качестве такого устройства выступает Ethernet-мост. | ||
+ | |||
+ | = Пример настройки и использования PVE = | ||
+ | В качестве сервера для развёртывания PVE удобно использовать [[starterkits|стартовый набор]] | ||
+ | [http://nightly.altlinux.org/p8/beta/basealt-p8-server-pve-20160615-x86_64.iso Сервер PVE]. Он уже содержит все необходимые компоненты. | ||
+ | |||
+ | Рассмотрим настройку кластера PVE. Локальную установку будем считать частным случаем кластера из одного узла. | ||
+ | |||
+ | == Настройка сетевой подсистемы == | ||
+ | Сначала на всех узлах кластера настроим Ethernet-мост в соответствии с | ||
+ | [[Etcnet#Настройка Ethernet-моста|руководством]]: | ||
+ | |||
+ | <pre> | ||
+ | # mkdir /etc/net/ifaces/vmbr0 | ||
+ | # mv /etc/net/ifaces/eth0/* /etc/net/ifaces/vmbr0/ | ||
+ | # cp /etc/net/ifaces/vmbr0/options /etc/net/ifaces/eth0/ | ||
+ | # cat <<EOF > /etc/net/ifaces/vmbr0/options | ||
+ | BOOTPROTO=static | ||
+ | CONFIG_WIRELESS=no | ||
+ | CONFIG_IPV4=yes | ||
+ | HOST='eth0' | ||
+ | ONBOOT=yes | ||
+ | TYPE=bri | ||
+ | EOF | ||
+ | # cat <<EOF > /etc/net/ifaces/vmbr0/brctl | ||
+ | stp AUTO off | ||
+ | setfd AUTO 0 | ||
+ | EOF | ||
+ | </pre> | ||
+ | |||
+ | Имя интерфейса, обозначенного здесь как eth0, следует указать в соответствии с реальной конфигурацией сервера. | ||
+ | |||
+ | Основная часть разработки PVE ведётся под ОС Debian, и в связи с этим в свежих версиях PVE иногда возникают забавные нюансы. Так в текущей | ||
+ | версии конфигурация Ethernet-мостов и информация о временны́х зонах считывается из специфичных для Debian и его производных | ||
+ | конфигурационных файлов {{path|/etc/network/interfaces}} и {{path|/etc/timezone}}. Поэтому, пока ошибка не исправлена, настройки придётся продублировать: | ||
+ | |||
+ | <pre> | ||
+ | # printf "\nauto vmbr0\n\tiface vmbr0 inet static\n\taddress 10.0.0.254\n\tnetmask 255.255.255.0\n\tgateway 10.0.0.1\n\tbridge_ports eth0\n\tbridge_stp off\n\tbridge_fd 0\n" >> /etc/network/interfaces | ||
+ | # . /etc/sysconfig/clock | ||
+ | # echo $ZONE > /etc/timezone | ||
+ | # ln -sf /usr/share/zoneinfo/$ZONE /etc/localtime | ||
+ | </pre> | ||
+ | |||
+ | Далее необходимо обеспечить взаимно однозначное прямое и обратное преобразование имён для всех узлов кластера. Крайне желательно использовать DNS, но в крайнем случае можно обойтись соответствующими записями в локальных файлах {{path|/etc/hosts}}: | ||
+ | |||
+ | <pre> | ||
+ | # echo "10.0.0.251 pve1.localdomain pve1" >> /etc/hosts | ||
+ | # echo "10.0.0.252 pve2.localdomain pve2" >> /etc/hosts | ||
+ | </pre> | ||
+ | |||
+ | == Настройка взаимодействия компонентов PVE == | ||
+ | В качестве транспорта для передачи команд между узлами кластера применяется протокол SSH. Если мы настраиваем локальную установку PVE, | ||
+ | ничего специального делать не нужно, а если узлов в кластере будет несколько, необходимо на каждом узле разрешить передачу переменной | ||
+ | окружения {{path|LC_PVE_TICKET}}: | ||
+ | |||
+ | <pre> | ||
+ | # N=$(($(sed -n '/^AcceptEnv/{=}' /etc/openssh/sshd_config | tail -1) + 1)); sed -i "${N}i AcceptEnv LC_PVE_TICKET\n" /etc/openssh/sshd_config | ||
+ | # N=$(($(sed -n '/^[[:space:]]*SendEnv/{=}' /etc/openssh/ssh_config | tail -1) + 1)); sed -i "${N}i \ \ \ \ SendEnv LC_PVE_TICKET\n" /etc/openssh/ssh_config | ||
+ | # systemctl restart sshd | ||
+ | </pre> | ||
+ | |||
+ | Кроме того, для передачи команд между узлами кластера необходимо обеспечить взаимную беспарольную аутентификацию пользователя root. Это | ||
+ | можно сделать вручную, а можно при добавлении нового узла в кластер PVE разрешить на «ведущем» узле вход пользователя root по паролю и | ||
+ | ввести пароль. После этого взаимная беспарольная аутентификация root будет настроена автоматически утилитами PVE, и вход root по паролю | ||
+ | можно будет снова отключить. | ||
+ | |||
+ | Важно понимать, что в сконфигурированном кластере PVE все узлы равноправны. «Ведущим», «головным» и так далее один из узлов | ||
+ | становится только в момент добавления в кластер нового узла. После добавления новый узел может стать таким же ведущим при проведении | ||
+ | следующей процедуры добавления очередного узла в кластер. | ||
+ | |||
+ | Теперь осталось настроить ещё два компонента системы, которые утилиты PVE пока не могут полностью автоматически настроить при запуске | ||
+ | кластера. Это демон {{cmd|rrdcached}}, отвечающий за хранение данных мониторинга активности подсистем кластера, и {{cmd|corosync}} — | ||
+ | комплекс ПО, обеспечивающий в пределах кластера элементы высокой доступности. | ||
+ | |||
+ | <pre> | ||
+ | # cp /usr/share/doc/pve-manager/rrdcached.sysconfig | ||
+ | /etc/sysconfig/rrdcached | ||
+ | # mkdir -p /var/lib/rrdcached/{db,journal} | ||
+ | # rm -f /etc/corosync/corosync.conf | ||
+ | </pre> | ||
+ | |||
+ | Конфигурационный файл {{cmd|corosync}} после этого будет создан автоматически при старте PVE. | ||
+ | |||
+ | == Запуск служб кластера == | ||
+ | Запускаем службы кластера и настраиваем их автоматический запуск при старте узла: | ||
+ | |||
+ | <pre> | ||
+ | # systemctl start syslogd ntpd rrdcached ksmtuned crond lxcfs cgmanager nfslock rpcbind corosync pve-cluster | ||
+ | # systemctl enable syslogd ntpd rrdcached ksmtuned crond lxcfs cgmanager nfslock rpcbind corosync pve-cluster | ||
+ | </pre> | ||
+ | |||
+ | Далее, на «головном» (см. выше) узле кластера выполняем команды собственно инициализации конкретного кластера PVE, в данном случае — | ||
+ | «mypve»: | ||
+ | |||
+ | <pre> | ||
+ | # pvecm create mypve | ||
+ | # systemctl restart corosync pve-cluster | ||
+ | </pre> | ||
+ | |||
+ | На «подчинённых» (см. выше) узлах: | ||
+ | |||
+ | <pre> | ||
+ | # pvecm add <головной_узел> | ||
+ | # systemctl restart corosync pve-cluster | ||
+ | </pre> | ||
+ | |||
+ | Далее, запускаем пользовательский интерфейс и добавляем его в список служб, запускаемых при старте узла: | ||
+ | |||
+ | <pre> | ||
+ | # systemctl start pve-manager | ||
+ | # systemctl enable pve-manager | ||
+ | </pre> | ||
+ | |||
+ | Дальнейшие настройки кластера удобно делать через веб интерфейс. | ||
= Ссылки = | = Ссылки = | ||
Строка 6: | Строка 153: | ||
* [[starterkits/server-pve|Развёртывание стартеркита server-pve]] | * [[starterkits/server-pve|Развёртывание стартеркита server-pve]] | ||
* [[:ruwp:Proxmox_Virtual_Environment|Proxmox VE]] | * [[:ruwp:Proxmox_Virtual_Environment|Proxmox VE]] | ||
+ | |||
+ | Автор рекомендаций по развёртыванию -- {{man|shrek}}. | ||
[[Категория:Admin]] | [[Категория:Admin]] | ||
[[Категория:Enterprise Software]] | [[Категория:Enterprise Software]] |
Версия 21:26, 12 июля 2016
Содержание |
Что это такое
Proxmox Virtual Environment (PVE) — средство управления виртуальными окружениями на базе гипервизора KVM и системы контейнерной изоляции LXC. Строго говоря, PVE это не система виртуализации, а инструментарий управления средой, в которой выполняются виртуальные окружения KVM и LXC. Основными компонентами среды являются:
- физические сервера, на которых выполняются процессы гипервизора KVM и процессы, работающие в контейнерах LXC;
- хранилища данных, в которых хранятся образы инсталляционных дисков, образы дисков виртуальных машин KVM и файлы, доступные из контейнеров LXC;
- виртуальные сетевые коммутаторы, к которым подключаются сетевые интерфейсы виртуальных окружений.
Как это устроено
Собственно PVE состоит из веб-интерфейса, распределённого хранилища данных конфигурации виртуальных окружений, а также утилит конфигурирования, работающих в командной строке. Все эти инструменты предназначены только для управления средой выполнения виртуальных окружений. За формирование среды отвечают компоненты системы, не входящие непосредственно в состав PVE. В первую очередь это сетевая и дисковая подсистемы, а также механизмы аутентификации.
Веб-интерфейс
Веб-интерфейс пользователя PVE предназначен для решения следующих задач:
- создание, удаление, настройка виртуальных окружений;
- управление физическими серверами;
- мониторинг активности виртуальных окружений и использования ресурсов среды;
- фиксация состояний (snapshot-ы), создание резервных копий и шаблонов виртуальных окружений, восстановление виртуальных окружений из резервных копий.
Кроме решения пользовательских задач, веб-интерфейс PVE можно использовать ещё и для встраивания в интегрированные системы управления — например, в панели управления хостингом. Для этого он имеет развитый RESTful API с JSON в качестве основного формата данных.
Для аутентификации пользователей веб-интерфейса можно использовать как собственные механизмы PVE, так и PAM. Использование PAM даёт возможность, например, интегрировать PVE в домен аутентификации.
Хранилище данных
В случае локальной установки PVE для размещения данных виртуальных окружений можно дополнительно ничего не настраивать и использовать локальную файловую систему сервера. Но в случае кластера из нескольких серверов имеет смысл настроить сетевую или распределённую сетевую файловую систему, обеспечивающую параллельный доступ к файлам со всех серверов, на которых выполняются процессы виртуальных окружений. В качестве таких файловых систем могут выступать, например, NFS или CEPH.
Сетевая подсистема
В отличие от хранилища данных, сетевая подсистема требует специальной настройки даже в случае локальной установки PVE. Это обусловлено тем, что сетевые интерфейсы виртуальных окружений должны подключаться к какому-то виртуальному же устройству, обеспечивающему соединение с общей сетью передачи данных. Обычно в качестве такого устройства выступает Ethernet-мост.
Пример настройки и использования PVE
В качестве сервера для развёртывания PVE удобно использовать стартовый набор Сервер PVE. Он уже содержит все необходимые компоненты.
Рассмотрим настройку кластера PVE. Локальную установку будем считать частным случаем кластера из одного узла.
Настройка сетевой подсистемы
Сначала на всех узлах кластера настроим Ethernet-мост в соответствии с руководством:
# mkdir /etc/net/ifaces/vmbr0 # mv /etc/net/ifaces/eth0/* /etc/net/ifaces/vmbr0/ # cp /etc/net/ifaces/vmbr0/options /etc/net/ifaces/eth0/ # cat <<EOF > /etc/net/ifaces/vmbr0/options BOOTPROTO=static CONFIG_WIRELESS=no CONFIG_IPV4=yes HOST='eth0' ONBOOT=yes TYPE=bri EOF # cat <<EOF > /etc/net/ifaces/vmbr0/brctl stp AUTO off setfd AUTO 0 EOF
Имя интерфейса, обозначенного здесь как eth0, следует указать в соответствии с реальной конфигурацией сервера.
Основная часть разработки PVE ведётся под ОС Debian, и в связи с этим в свежих версиях PVE иногда возникают забавные нюансы. Так в текущей версии конфигурация Ethernet-мостов и информация о временны́х зонах считывается из специфичных для Debian и его производных конфигурационных файлов /etc/network/interfaces и /etc/timezone. Поэтому, пока ошибка не исправлена, настройки придётся продублировать:
# printf "\nauto vmbr0\n\tiface vmbr0 inet static\n\taddress 10.0.0.254\n\tnetmask 255.255.255.0\n\tgateway 10.0.0.1\n\tbridge_ports eth0\n\tbridge_stp off\n\tbridge_fd 0\n" >> /etc/network/interfaces # . /etc/sysconfig/clock # echo $ZONE > /etc/timezone # ln -sf /usr/share/zoneinfo/$ZONE /etc/localtime
Далее необходимо обеспечить взаимно однозначное прямое и обратное преобразование имён для всех узлов кластера. Крайне желательно использовать DNS, но в крайнем случае можно обойтись соответствующими записями в локальных файлах /etc/hosts:
# echo "10.0.0.251 pve1.localdomain pve1" >> /etc/hosts # echo "10.0.0.252 pve2.localdomain pve2" >> /etc/hosts
Настройка взаимодействия компонентов PVE
В качестве транспорта для передачи команд между узлами кластера применяется протокол SSH. Если мы настраиваем локальную установку PVE, ничего специального делать не нужно, а если узлов в кластере будет несколько, необходимо на каждом узле разрешить передачу переменной окружения LC_PVE_TICKET:
# N=$(($(sed -n '/^AcceptEnv/{=}' /etc/openssh/sshd_config | tail -1) + 1)); sed -i "${N}i AcceptEnv LC_PVE_TICKET\n" /etc/openssh/sshd_config # N=$(($(sed -n '/^[[:space:]]*SendEnv/{=}' /etc/openssh/ssh_config | tail -1) + 1)); sed -i "${N}i \ \ \ \ SendEnv LC_PVE_TICKET\n" /etc/openssh/ssh_config # systemctl restart sshd
Кроме того, для передачи команд между узлами кластера необходимо обеспечить взаимную беспарольную аутентификацию пользователя root. Это можно сделать вручную, а можно при добавлении нового узла в кластер PVE разрешить на «ведущем» узле вход пользователя root по паролю и ввести пароль. После этого взаимная беспарольная аутентификация root будет настроена автоматически утилитами PVE, и вход root по паролю можно будет снова отключить.
Важно понимать, что в сконфигурированном кластере PVE все узлы равноправны. «Ведущим», «головным» и так далее один из узлов становится только в момент добавления в кластер нового узла. После добавления новый узел может стать таким же ведущим при проведении следующей процедуры добавления очередного узла в кластер.
Теперь осталось настроить ещё два компонента системы, которые утилиты PVE пока не могут полностью автоматически настроить при запуске кластера. Это демон rrdcached, отвечающий за хранение данных мониторинга активности подсистем кластера, и corosync — комплекс ПО, обеспечивающий в пределах кластера элементы высокой доступности.
# cp /usr/share/doc/pve-manager/rrdcached.sysconfig /etc/sysconfig/rrdcached # mkdir -p /var/lib/rrdcached/{db,journal} # rm -f /etc/corosync/corosync.conf
Конфигурационный файл corosync после этого будет создан автоматически при старте PVE.
Запуск служб кластера
Запускаем службы кластера и настраиваем их автоматический запуск при старте узла:
# systemctl start syslogd ntpd rrdcached ksmtuned crond lxcfs cgmanager nfslock rpcbind corosync pve-cluster # systemctl enable syslogd ntpd rrdcached ksmtuned crond lxcfs cgmanager nfslock rpcbind corosync pve-cluster
Далее, на «головном» (см. выше) узле кластера выполняем команды собственно инициализации конкретного кластера PVE, в данном случае — «mypve»:
# pvecm create mypve # systemctl restart corosync pve-cluster
На «подчинённых» (см. выше) узлах:
# pvecm add <головной_узел> # systemctl restart corosync pve-cluster
Далее, запускаем пользовательский интерфейс и добавляем его в список служб, запускаемых при старте узла:
# systemctl start pve-manager # systemctl enable pve-manager
Дальнейшие настройки кластера удобно делать через веб интерфейс.
Ссылки
Автор рекомендаций по развёртыванию -- shrek@.