AltEduPve

Материал из wiki.nntc.nnov.ru
Перейти к навигации Перейти к поиску

Зачем и почему

Этот раздел не технический. Если цели и задачи понятны, то его можно пропустить :)

Что это?

Это статья, описывающая процесс развёртывания 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.224.198'
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
update-kernel -f

Устанавливаем необходимые пакеты и включаем необходимые сервисы

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/net/ifaces/vmbr0/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