AltEduPve
Содержание
Зачем и почему
Этот раздел не технический. Если цели и задачи понятны, то его можно пропустить :)
Что это?
Это статья, описывающая процесс развёртывания Proxmox Virtual Environment (PVE) в дистрибутиве Alt Education (Альт Образование)
Для чего?
При современных возможностях вычислительной техники при обучении IT-специальностям (и не только им) полезно бывает использовать виртуальные окружения для проведения лабораторных работ.
PVE является отличной альтернативой средам настольной виртуализации и превосходит по возможностям, важным с точки зрения получения обучающимися практических навыков работы с различным спектром программного обеспечения, начиная от базовых основ операционных систем, заканчивая высокоуровневыми языками программирования и платформами разработки программного обеспечения.
Среди ключевых важных и полезных возможностей PVE при использовании с образовательных целях следует отметить следующие:
- Веб-интерфейс управления (обучающемуся не обязательно находиться физически на компьютере, чтобы иметь полный доступ к виртуальной машине)
- Разграничение прав доступа (ресурсы одной аппаратной машины посредством механизма пользователей и ролей можно распределить между несколькими обучающимися)
- Шаблонизация и связанные копии (на базе шаблонов виртуальных машин можно быстро (очень быстро, секунды) создавать клонов, диски которых будут представлять из себя связанные копии относительно диска шаблона) -- это позволяет экономить дисковые и временнЫе ресурсы (проверено при работе с хранилищами на ZFS)
- Удобный интерфейс взаимодействия с внешними хранилищами (всё настраивается из Веб-интерфейса). При использовании нескольких физических машин с PVE посредством подключения хранилищ можно легко организовать обмен резервными копиями и шаблонами
- Возможность предоставления доступа к виртуальным машинам извне (вынеся порт Веб-интерфейса за пределы шлюза веб интерфейс со всем функционалом доступа к виртуальным машинам будет доступен извне) -- может быть актуально при полностью или частично дистанционном подходе к практическому обучению
- Возможность кластеризации решения. Кластеризация даёт удобный механизм управления группой физических машин из одного Веб-интерфейса (из любого из Веб-интерфейсов на любой машине-узле кластера). Помимо единого "командного пункта" кластеризация даёт возможность миграции виртуальных машин между физическими узлами (без необходимости ввода команд в консоли (мышкой из веб интерфейса), без остановки машин - всё автоматизировано (опять же: без консоли, мышкой))
- Снимки (снапшоты). У каждой виртуальной машины после её инсталляции и настройки можно заморозить состояние (снять снимок (снапшот)). Это свойство как нельзя кстати подходит под задачи обучения. В любой момент времени в процессе использования обучающимся виртуальной машины может быть снят снимок, до которого в дальнейшем можно легко восстановить состояние системы. Снимков может быть любое количество и к каждому можно вернуться (например, если обучающийся запутался в сложной задаче). Особенно механизм замораживания состояний виртуальной машины снимком полезен преподавателю, т.к. это даёт ему инструмент, позволяющий за секунды или десятки секунд обнулить состояние изменённой обучающимся машины. Таким образом, одна и та же виртуальная машина (заранее настроенная и с которой снят базовый снимок) может быть многократно использована на большом количестве обучающихся.
- Наверняка, что-то важное из плюсов данного решения, должного быть здесь, упущено...
Установка
Важная информация
Операционная система "Альт Образование" бесплатна для использования физическими лицами на домашних компьютерах.
Для использования операционной системы "Альт Образование" юридическими лицами (в том числе образовательными организациями) необходимо приобрести лицензию у компании "Базальт СПО" (https://www.basealt.ru) и/или заключить договор о сотрудничестве.
Использование дистрибутива "Альт Образование" физическими лицами в организациях запрещено лицензией на дистрибутив.
Для домашнего использования физическими лицами дистрибутив "Альт Образование" доступен бесплатно. Загрузить установочный образ можно по этой ссылке:
https://getalt.org/ru/alt-education
Для решения, в частности описанного в данной статье, использовался образ, расположенный по ссылке:
https://mirror.yandex.ru/altlinux/p9/images/education/x86_64/alt-education-9.2-20210520-x86_64.iso
Установка операционной системы
Установка операционной системы для целей данной статьи осуществлялась из образа:
https://mirror.yandex.ru/altlinux/p9/images/education/x86_64/alt-education-9.2-20210520-x86_64.iso
на следующую разметку жёсткого диска (MBR):
/dev/sda1 /boot (размер 1GB) /dev/sda2 (lvm pv для группы томов "alt-vg")
/dev/alt-vg/root / (корень файловой системы на логическом разделе "root" размером от 40GB в группе томов lvm "alt-vg") /dev/alt-vg/swap_1 (раздел подкачки на логическом разделе "swap_1" размером от 1GB в группе томов lvm "alt-vg")
До этого раздела данной разметки достаточно. После ещё появится логический том
vmstorage
, который будет занимать всё оставшееся пространство жёсткого диска (оно на разных серверах разное, поэтому имеет смысл его конфигурировать уже после)
На этом логическом томе позже будет сделан пулл zfs, который будет выступать в качестве хранилища для дисков виртуальных машин.
Почему zfs поверх lvm?
Для удобства администрирования и экономии времени.
При создании в хранилище zfs виртуальных машин и последующим создании шаблона виртуальной машины при клонировании виртуальных машин из шаблона создаются связанные копии дисков и фактическое дисковое пространство PVE внутри zfs пула не тратится до тех пор, пока виртуальной машиной, созданной таким образом, не начинают пользоваться и вносить изменения в её файловую систему.
Отдельно следует отметить скорость, с которой создаются связанные копии таких дисков (виртуальные машины с дисками 100 и более гигабайт клонируются таким образом за несколько секунд).
Установка PVE
Представим, что после установки ваша операционная система доступна в сети по адресу:
172.16.224.198
, в системе имеется единственный обычный пользователь
student
с паролем, который вам известен. Также вам известен пароль от суперпользователя (он же root).
Представили? Тогда продолжим с этими исходными данными.
Входим на сервер по ssh:
ssh student@172.16.224.198
Переключаемся в суперпользователя:
su -
Заводим переменные, в которых будем хранить наше имя хоста и сетевые параметры:
MACHINE_NAME='altedu-pve-template' MACHINE_IP='172.16.87.87' MACHINE_MASK='16' MACHINE_GATEWAY='172.16.1.1' MACHINE_DNS='172.16.1.1' MACHINE_ETH_DEVICE='eth0'
Переименовываем машину и настраиваем определённым образом хост-файл:
hostnamectl set-hostname $MACHINE_NAME IP=$MACHINE_IP HOST=$(hostname) echo "127.0.0.1 localhost" > /etc/hosts echo "$IP $HOST.nntc.nnov.ru $HOST" >> /etc/hosts
Обновляем систему
apt-get update -qq apt-get -y dist-upgrade
Устанавливаем необходимые пакеты и включаем необходимые сервисы
apt-get install -qq -y pve-manager kernel-modules-zfs-std-def
systemctl start rrdcached ksmtuned crond lxcfs openvswitch nfs-client.target lxc lxc-net lxc-monitord pvedaemon pve-firewall pvestatd pve-ha-lrm pve-ha-crm spiceproxy pveproxy pve-cluster
systemctl enable rrdcached ksmtuned crond lxcfs openvswitch nfs-client.target corosync lxc lxc-net lxc-monitord pve-cluster pvedaemon pve-firewall pvestatd pve-ha-lrm pve-ha-crm spiceproxy pveproxy pve-guests pve-cluster
Перенастраиваем сеть в режим "мост":
rm -rf /etc/net/ifaces/* mkdir /etc/net/ifaces/vmbr0 cat << EOF > /etc/net/ifaces/vmbr0/options TYPE=bri VLAN_AWARE=yes VIDS=2-2048 ONBOOT=yes DISABLED=no NM_CONTROLLED=no CONFIG_WIRELESS=no CONFIG_IPV4=yes CONFIG_IPV6=no BOOTPROTO=static HOST="$MACHINE_ETH_DEVICE" EOF echo "$MACHINE_IP/$MACHINE_MASK" > /etc/net/ifaces/vmbr0/ipv4address echo "default via $MACHINE_GATEWAY" > /etc/net/ifaces/vmbr0/ipv4route echo "nameserver $MACHINE_GATEWAY" > /etc/resolve.conf service network restart
Перезагружаемся (чтобы убедиться, что после полного рестарта все сервисы были запущены и система готова).
Веб-интерфейс системы должен находиться по адресу:
https://localhost:8006
Для доступа в систему по ssh от пользователя root рекомендуется использовать ключи доступа ssh. Если же по каким-либо причинам необходимо разрешить доступ под суперпользователем по паролю, то это можно включить следующими командами (выполнять их нужно из-под суперпользователя):
sed -i 's/#PermitRootLogin without-password/PermitRootLogin yes/g' /etc/openssh/sshd_config systemctl restart sshd
Для использования возможностей файловой системы zfs необходимо включить загрузку модуля ядра по умолчанию:
sed -i 's/#zfs/zfs/g' /etc/modules-load.d/zfs.conf
затем
/sbin/modprobe zfs
или перезагрузиться:
reboot
Настройка zfs хранилища
Для того, чтобы на хостовой машине с PVE задействовать оставшееся пространство физического тома lvm необходимо увеличить диск, в котором содержится этот том. Для этого посредством, например, утилиты disk, его необходимо удалить, затем создать новый, оставив по умолчанию его правую границу. После этой операции необходимо расширить группу томов и создать новый том, занимающий всё свободное пространство увеличившейся группы томов.
Изменяем размер раздела с pv lvm
DISK='/dev/sda' fdisk $DISK <<EOF d 2 n p 2 N w EOF
Обновляем состояние разделов на диске
partprobe
Изменяем размер физического тома на уровне lvm
pvresize "${DISK}2"
Пересканируем lvm разделы
vgchange -ay
Далее создаём новый логический том и пулл zfs в нём. В примере команды логический том будет занимать 400 гигабайт.
lvcreate -y alt-vg --name vmstorage -L 400g zpool create zfspool /dev/alt-vg/vmstorage -f zfs set compression=off zfspool zfs set sync=disabled zfspool
Добавляем zfs пулл в качестве хранилища образов и жёстких дисков виртуальных машин к PVE
pvesm add zfspool vmstorage --pool zfspool --content images,rootdir
Подключение cifs (samba) хранилищ
Если в сети существуют действующие серверы, предоставляющие доступ к файлам по протоколу cifs/samba, то их можно также подключить к PVE в качестве хранилищ.
Например, такой командой может быть подключен ресурс smb://mQcluster1@172.16.254.123/mQcluster1 в качестве хранилища для iso-образов и для резервного копирования
pvesm add cifs pveshare --server 172.16.254.123 --share mQcluster1 --username mQcluster1 --password --content iso,backup
Например, такой командой может быть подключен ресурс smb://Qstorage@172.16.90.100/Qstorage в качестве хранилища для резервного копирования
pvesm add cifs pQrdbstorage --server 172.16.90.100 --share Qstorage --username Qstorage --password --content backup
Настройка cifs (samba) сервера на узле PVE
Для чего?
Для предоставления хранилища с настраиваемого в этой статье сервера PVE для других аналогичных серверов PVE можно настроить ресурс, отдаваемый с этого PVE по протоколу cifs/samba (для того, чтобы другой такой же PVE сервер мог использовать это хранилище для своих целей (например, резервного копирования))
Почему именно cifs/samba?
Для универсальности доступа в сетях с не только GNU/Linux машинами, для доступа со специфического оборудования (различные сетевые хранилища, например, с функцией резервирования)
Процесс настройки ресурса по протоколу cifs/samba
adduser storage smbpasswd -a storage smbpasswd -e storage mv /etc/samba/smb.conf /etc/samba/smb.conf.orig mkdir /zfspool/storage chown storage:storage /zfspool/storage -R
cat << EOF > /etc/samba/smb.conf # Global parameters [global] log file = /var/log/samba/log.%m logging = file map to guest = Bad User max log size = 1000 obey pam restrictions = Yes pam password change = Yes panic action = /usr/share/samba/panic-action %d passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* . passwd program = /usr/bin/passwd %u server role = standalone server server string = %h server (Samba, Ubuntu) unix password sync = Yes usershare allow guests = Yes idmap config * : backend = tdb [storage] browseable = Yes comment = storage valid users = storage create mask = 0755 directory mask = 0755 path = /zfspool/storage read only = No veto files = /._*/.DS_Store/.T*/Thumbs.db/Network Trash Folder/Temporary Items/*.exe/*.bat/*.msi delete veto files = yes EOF
service smb restart