Альт Виртуализация 10.2

Документация

Руководство пользователя

Редакция май, 2024

Аннотация

Данная документация находится в разработке.

Добро пожаловать в документацию дистрибутива Альт Виртуализация. Данное руководство предназначено как для начинающих, так и для опытных пользователей. Руководство описывает подготовку системы для установки, процесс установки дистрибутива, а также процедуру настройки и использования системы.

Названия компаний и продуктов, встречающихся в руководстве, могут являться торговыми знаками соответствующих компаний.

Данное руководство соответствует текущему состоянию сведений, но какие-либо окончательные правки могли не попасть в него. В случае обнаружения ошибок и неточностей в руководство вносятся изменения.

⁠Часть I. Что такое Альт Виртуализация? [Черновик]

В этой части рассматривается что такое Linux и Альт Виртуализация.

⁠Глава 1. Что такое Альт Виртуализация [Черновик]

Операционная система Альт Виртуализация (альтернативное название Альт Сервер Виртуализации) — многофункциональный дистрибутив для серверов, прежде всего, предназначен для создания виртуальной среды, обеспечивающей функционирование виртуальных машин и управление ими.

Альт Виртуализация представляет собой совокупность интегрированных программных продуктов, созданных на основе ОС Linux и обеспечивает обработку, хранение и передачу информации в круглосуточном режиме эксплуатации. Дистрибутив предоставляет интегрированную операционную систему на единой оптимизированной пакетной базе с поддержкой различных аппаратных платформ.

Включает в себя средства виртуализации:

вычислений (ЦПУ и память);

сети;

хранения данных.

Управление системой виртуализации возможно через командный интерфейс, веб-интерфейс, с использованием API.

Альт Виртуализация оснащён удобным пользовательским интерфейсом для настройки. Управление сервером может осуществляться с любого компьютера через веб-браузер.

ОС Альт Виртуализация включает в себя:

базовый гипервизор (libvirt + qemu-kvm);

кластер серверов виртуализации на основе проекта PVE;

облачную виртуализацию уровня предприятия на основе проекта OpenNebula;

контейнерную виртуализацию (docker, kubernetes, podman, lxd/lxc, cri-o);

ПО для организации хранилища (Ceph, GlusterFS, NFS, iSCSI, Linstor);

ПО для сети (openvswitch, haproxy, keepalived);

мониторинг (Zabbix-agent, Telegraf, Collectd, Monit, Prometheus, Nagios NRPE).

⁠1.1. Системные требования [Черновик]

Минимальный размер RAM (без учета ВМ) — 1 Гбайт;

Рекомендуемый размер RAM (без учета ВМ) — от 2 Гбайт;

Минимальное количество CPU — 1;

Место на жёстком диске (без учета ВМ) — от 10 Гбайт.

⁠1.2. Ограничения для логических объектов виртуализации [Черновик]

Максимальное число узлов в кластере — нет явного ограничения на количество узлов в кластере (на практике реально возможное количество узлов может быть ограничено производительностью хоста и сети).

Максимальные лимиты на хост:

CPU — 8192 Поддерживается до 8192 ядер, hyper-threading (HT) тоже учитывается. На двух-процессорном сервере, с включенным HT, смогут работать (8192/2/2=) два 2048 ядерных процессора (x86_64);

RAM — 32 ТБ;

HDD — нет явного ограничения;

NIC — нет.

Максимальные лимиты на ВМ:

CPU — 240;

RAM — 4 ТБ. Поддерживает максимальную память которую вы можете выделить ВМ. 32-х разрядные ВМ с поддержкой расширения физических адресов (PAE) могут получить доступ только к 64 ГБ — это ограничение виртуального оборудования;

HDD — со стороны PVE нет ограничений (зависит от самой файловой системы);

NIC — 32;

PCI — 16.

⁠Глава 2. Что такое Linux [Черновик]

⁠2.1. Свободные программы [Черновик]

Операционная система (далее — ОС) Linux — ядро, основные компоненты системы и большинство её пользовательских приложений — свободные программы. Свободные программы можно:

запускать на любом количестве компьютеров;

распространять бесплатно или за деньги без каких-либо ограничений;

получать исходные тексты этих программ и вносить в них любые изменения.

Свобода программ обеспечила их широкое использование и интерес к ним со стороны тысяч разработчиков. Основные программы для Linux выходят под лицензией GNU General Public License (далее — GPL). Лицензия GNU не только гарантирует свободу, но и защищает её. Она допускает дальнейшее распространение программ только под той же лицензией, поэтому исходный код ядра Linux, компиляторов, библиотеки glibc, пользовательских графических оболочек не может быть использован для создания приложений с закрытым кодом. В этом принципиальное отличие Linux от свободных ОС семейства BSD (FreeBSD, NetBSD, OpenBSD), фрагменты которых вошли в Microsoft Windows и даже стали основой OS X. Linux включает в себя многие разработки BSD, но его компиляторы и системные библиотеки разработаны в рамках проекта GNU (http://www.gnu.org/home.ru.html).

⁠2.2. Разработка Linux [Черновик]

В отличие от распространённых несвободных ОС, Linux не имеет географического центра разработки. Нет фирмы, которая владела бы этой ОС, нет и единого координационного центра. Программы для Linux — результат работы тысяч проектов. Большинство из них объединяет программистов из разных стран, связанных друг с другом только перепиской. Лишь некоторые проекты централизованы и сосредоточены в фирмах. Создать свой проект или присоединиться к уже существующему может любой программист, и, в случае успеха, результаты этой работы станут известны миллионам пользователей. Пользователи принимают участие в тестировании свободных программ, общаются с разработчиками напрямую. Это позволяет за короткий срок добавлять в программное обеспечение новые возможности, оперативно находить ошибки и исправлять их.

Именно гибкая и динамичная система разработки, невозможная для проектов с закрытым кодом, определяет исключительную экономическую эффективность Linux. Низкая стоимость свободных разработок, отлаженные механизмы тестирования и распространения, привлечение независимых специалистов, обладающих индивидуальным, самостоятельным видением проблем, защита исходного текста программ лицензией GPL — всё это стало причиной успеха свободных программ.

Такая высокая эффективность разработки не могла не заинтересовать крупные фирмы. Они стали создавать свои свободные проекты, основывающиеся на тех же принципах. Так появились Mozilla, LibreOffice, свободный клон Interbase, SAP DB. IBM способствовала переносу Linux на свои мейнфреймы.

Открытый код программ значительно снизил себестоимость разработки закрытых систем для Linux и позволил снизить цену решения для пользователя. Вот почему Linux стала платформой, часто рекомендуемой для таких продуктов, как Oracle, DB2, Informix, Sybase, SAP ERP, Lotus Domino.

⁠2.3. Защищённость [Черновик]

ОС Linux унаследовала от UNIX надёжность и отличную систему защиты. Система разграничения доступа к файлам позволяет не бояться вирусов. Но всё же, программ без ошибок не бывает, и Linux не исключение. Благодаря открытости исходного кода программ, аудит системы может осуществить любой специалист без подписок о неразглашении и без необходимости работы в стенах нанявшей его компании. Сообщества разработчиков и пользователей свободных программ создали множество механизмов оповещения об ошибках и их исправления. Сообщить об ошибке и принять участие в её исправлении независимому программисту или пользователю так же просто, как специалисту фирмы-разработчика или автору проекта. Благодаря этому ошибки защиты эффективно выявляются и быстро исправляются.

⁠2.4. Дистрибутивы Linux [Черновик]

Большинство пользователей для установки Linux используют дистрибутивы. Дистрибутив — это не просто набор программ, а готовое решение для выполнения различных задач пользователя, обладающее идентичностью установки, управления, обновления, а также едиными системами настройки и поддержки.

⁠2.5. Новичку [Черновик]

Linux — самостоятельная операционная система. Все операционные системы разные: Linux — не Windows, не OS X и не FreeBSD. В Linux свои правила, их необходимо изучить и к ним необходимо привыкнуть. Терпение и настойчивость в изучении Linux обернётся значительным повышением эффективности и безопасности вашей работы. То, что сегодня кажется странным и непривычным, завтра понравится и станет нормой.

Не стесняйтесь задавать вопросы, ведь самый простой способ найти ответ — совет опытного специалиста. Взаимопомощь и общение — традиция в мире Linux. Всегда можно обратиться за помощью к сообществу пользователей и разработчиков Linux. Большинство вопросов повторяются, поэтому для начала стоит поискать ответ на свой вопрос в документации, затем в сети Интернет. Если вы не нашли ответа в перечисленных источниках, не стесняйтесь, пишите на форум или в списки рассылки так, как писали бы своим друзьям, и вам обязательно помогут.

⁠Глава 3. Что такое системы Альт [Черновик]

⁠3.1. ALT Linux Team [Черновик]

Команда ALT Linux (http://www.altlinux.org/ALT_Linux_Team) — это интернациональное сообщество, насчитывающее более 200 разработчиков свободного программного обеспечения.

⁠3.2. Сизиф [Черновик]

Sisyphus (https://packages.altlinux.org) — наш ежедневно обновляемый банк программ (часто называемый репозиторий). Поддерживаемая ALT Linux Team целостность Sisyphus, оригинальная технология сборки программ, утилита apt-get и её графическая оболочка synaptic позволяют пользователям легко обновлять свои системы и быть в курсе актуальных новостей мира свободных программ.

Ежедневно изменяющийся репозиторий содержит самое новое программное обеспечение со всеми его преимуществами и недостатками (иногда ещё неизвестными). Поэтому, перед обновлением вашей системы из Sisyphus, мы советуем взвесить преимущества новых возможностей, реализованных в последних версиях программ, и вероятность возникновения неожиданностей в работе с ними (http://www.altlinux.org/Sisyphus_changes).

Разработка Sisyphus полностью доступна. У нас нет секретных изменений кода и закрытого тестирования с подписками о неразглашении. То, что мы сделали сегодня, завтра вы найдёте в сети. По сравнению с другими аналогичными банками программ (Debian unstable, Mandriva Cooker, PLD, Fedora), в Sisyphus есть немало самобытного. Особое внимание уделяется защите системы, локализации на русский язык, полноте и корректности зависимостей.

Название Sisyphus (Сизиф) заимствовано из греческой мифологии. С кропотливым Сизифом, непрерывно закатывающим в гору камни, команду ALT Linux Team объединяет постоянная работа над усовершенствованием технологий, заложенных в репозиторий.

Sisyphus, в первую очередь, — открытая лаборатория решений. Если вам это интересно, если вы хотите дополнить Sisyphus новыми решениями, если вы считаете, что можете собрать какую-то программу лучше — присоединяйтесь к проекту ALT Linux Team (http://www.altlinux.org/Join).

⁠3.3. Что такое десятая платформа [Черновик]

Как уже говорилось ранее, Sisyphus является часто обновляемым репозиторием, скорее предназначенным для разработчиков. Решением для тех пользователей, которым стабильность и предсказуемость работы системы важнее расширенной функциональности (а это в первую очередь начинающие и корпоративные пользователи), являются дистрибутивы Альт. Такие дистрибутивы базируются на стабильном срезе репозитория Sisyphus. Эти срезы называются платформами.

Десятая платформа (p10) была создана в июле 2021 года и её поддержка продлится до июля 2025.

⁠3.3.1. Основные новшества в десятой платформе [Черновик]

Синхронная сборка p10 производится для пяти основных архитектур:

64-битных x86_64, aarch64 и ppc64le;

32-битных i586 и armh (armv7hf);

Ядра реального времени — для архитектуры x86_64 собраны два realtime-ядра: Xenomai и Real Time Linux (PREEMPT_RT);

Расширение набора групповых политик — групповые политики поддерживают параметры gsettings для управления рабочими средами MATE и Xfce;

Центр администрирования Active Directory (admc) — графическое приложение для управления пользователями, группами и групповыми политиками домена Active Directory;

Платформа Deploy — предназначена для развёртывания системных служб на локальном компьютере с помощью Ansible. Поддерживаемые роли: Apache, MariaDB, MediaWiki, Nextcloud, PostgreSQL и Moodle;

Модуль настройки многотерминального режима alterator-multiseat.

⁠Часть II. Установка дистрибутива [Черновик]

В этой части рассматривается процесс установки дистрибутива.

⁠Глава 4. Подготовка установочного диска [Черновик]

Наиболее частый способ установки операционной системы на компьютер представляет собой установку с установочного DVD-диска. В этой главе описываются различные способы записи дистрибутива на DVD-диск.

Установочные образы являются гибридными, что позволяет производить установку, записав такой образ на USB Flash. О записи установочного образа на USB Flash также рассказано в этой главе.

⁠4.1. Запись ISO-образа дистрибутива на DVD [Черновик]

⁠4.1.1. Запись образа диска под операционной системой MS Windows [Черновик]

Файл ISO-образа диска — это файл специального формата, подготовленный для записи на диск. Для записи ISO-образа под операционной системой MS Windows используйте специальные программы: SCDWriter, Nero BurningROM и другие. Рекомендуем для записи использовать новые диски от известных производителей, таких как: Verbatim, TDK. Записанный на плохой диск образ может вызвать неразрешимые проблемы при установке.

⁠4.1.1.1. Запись образа диска с помощью Small CD-Writer [Черновик]

Весь процесс записи установочного диска при помощи Small CD-Writer состоит из следующих шагов:

скачать образ дистрибутива;

скачать архив программы Small CD-Writer http://gluek.info/wiki/_media/software/scdwriter14.zip;

распаковать файлы программы из архива в любой каталог;

вставить чистый диск в привод;

войти в распакованный каталог и запустить программу SCDWriter.exe;

открыть пункт меню Диск → Записать ISO-образ на диск и, в появившемся окне, указать путь к образу диска;

нажать кнопку Записать.

⁠4.1.1.2. Запись образа диска с помощью Nero BurningROM [Черновик]

Процесс записи установочного диска при помощи Nero BurningROM состоит из следующих шагов:

скачать образ дистрибутива;

скачать программу Nero BurningROM с сайта производителя http://www.nero.com и установить её;

запустить программу и выбрать в списке устройств необходимый для записи CD/DVD дисковод;

нажать кнопку Открыть в главном окне. В появившемся окне выбрать необходимый ISO-образ для записи и нажать кнопку Открыть;

в окне Записать проект на вкладке Запись установить отметку в поле Запись и настроить необходимые параметры прожига;

записать ISO-образа на диск, щёлкнув по кнопке Прожиг.

⁠4.1.2. Запись образа диска под операционной системой Linux [Черновик]

Для записи ISO-образов можно использовать множество утилит и программ с графическим или текстовым интерфейсом. Наиболее удобно использовать программы K3b или Brasero, которые поставляются в комплекте любого дистрибутива операционной системы Linux.

⁠4.1.2.1. Запись образа диска с помощью K3b [Черновик]

Весь процесс записи установочного диска при помощи K3b состоит из следующих шагов:

если программа k3b отсутствует, необходимо установить её в систему, используя стандартные для вашего дистрибутива инструменты установки программ;

запустить программу k3b. При правильных настройках программа сообщит об отсутствии проблем с системой и предложит перейти к записи на диск;

в меню главного окна Сервис (Service) выбрать пункт Записать образ DVD (Burn DVD image);

в появившемся окне Записать образ DVD (Burn DVD image) нажать на кнопку Выбор файла для записи. Откроется диалог, в котором необходимо выбрать ISO-образ для записи и после выбора нажать кнопку ОК;

программа k3b покажет информацию о ISO-файле и начнёт вычислять контрольную сумму. Эта операция может занять несколько минут. Полученную контрольную сумму можно сравнить с MD5SUM суммой на странице дистрибутива;

если контрольные суммы не совпадают, значит, для записи был выбран не тот файл или скачанный ISO-образ был испорчен во время передачи данных по сети;

если контрольные суммы совпадают, вставить диск для записи в дисковод. Дождаться активации кнопки Начать (Start);

нажать на кнопку Начать (Start).

⁠4.2. Запись установочного образа на USB Flash [Черновик]

Предупреждение [Черновик]

Запись образа дистрибутива на flash-диск приведёт к изменению таблицы разделов на носителе, таким образом, если flash-диск выполнил функцию загрузочного\установочного устройства и требуется вернуть ему функцию переносного накопителя данных, то необходимо удалить все имеющиеся разделы на flash-диске и создать нужное их количество заново.

Для восстановления совместимости flash-диска с операционными системами семейства Windows может понадобиться также пересоздание таблицы разделов (например, при помощи parted). Нужно удалить таблицу GPT и создать таблицу типа msdos. Кроме того, должен быть только один раздел с FAT или NTFS.

Для создания загрузочного flash-диска понадобится файл ISO-образа установочного диска с дистрибутивом. ISO-образы установочных дисков являются гибридными (Hybrid ISO/IMG), что позволяет записать их на flash-накопитель.

⁠4.2.1. В операционной системе Windows [Черновик]

Для создания загрузочного flash-диска под операционной системой MS Windows используйте специальные программы: ALT Media Writer, Win32 Disk Imager, HDD Raw Copy Tool и другие.

ALT Media Writer — это инструмент, который помогает записывать образы ALT на портативные накопители, такие как flash-диски. Он может автоматически загружать образы из интернета и записывать их. Для записи образа на flash-диск необходимо:

скачать и установить ALT Media Writer;

вставить flash-диск в USB-разъем;

запустить ALT Media Writer;

выбрать дистрибутив и нажать кнопку Создать Live USB…:

начнётся загрузка образа из интернета;

выбрать устройство (flash-диск);

после окончания загрузки нажать кнопку Записать на диск (если был отмечен пункт Записать образ после загрузки, запись образа начнётся автоматически).

Инструкция для записи образа в программе Win32 Disk Imager:

скачать и установить программу Win32 Disk Imager;

скачать образ дистрибутива;

вставить flash-диск в USB-разъем (размер flash-диска должен быть не меньше размера скачанного образа диска);

запустить Win32 Disk Imager;

в появившимся окне выбрать ISO-образ дистрибутива, выбрать устройство (flash-диск):

нажать кнопку Write для записи образа на flash-диск.

Для записи образа на flash-диск подойдёт и утилита HDD Raw Copy Tool. На первом шаге нужно выбрать файл с образом диска:

На втором шаге нужно выбрать flash-диск, на который будет записан образ:

Предупреждение [Черновик]

Будьте внимательны при указании имени usb-устройства — запись образа по ошибке на свой жёсткий диск приведёт к почти гарантированной потере данных на нём!

После проверки правильности выбранных параметров и нажатия кнопки Continue можно приступать к записи, нажав кнопку START. По успешному завершению записи окно с индикацией процесса записи закроется, после чего можно закрыть и окно самой программы.

⁠4.2.2. В операционной системе Linux [Черновик]

Для записи образа на flash-диск можно воспользоваться одной из программ с графическим интерфейсом:

ALT Media Writer (altmediawriter):

ALT Media Writer может автоматически загружать образы из интернета и записывать их, при необходимости извлекая сжатые образы (img.xz).

SUSE Studio Imagewriter (imagewriter):

Предупреждение [Черновик]

Будьте внимательны при указании имени usb-устройства — запись образа по ошибке на свой жёсткий диск приведёт к почти гарантированной потере данных на нём!

Предупреждение [Черновик]

Не добавляйте номер раздела, образ пишется на flash-диск с самого начала!

Для записи установочного образа можно воспользоваться утилитой командной строки dd:

# dd oflag=direct if=<файл-образа.iso> of=/dev/sdX bs=1M status=progress;sync

где <файл-образа.iso> — образ диска ISO, а /dev/sdX — устройство, соответствующее flash-диску.

Для удобства показа прогресса записи можно установить пакет pv и использовать команду:

# pv <файл-образа.iso> | dd oflag=direct of=/dev/sdX bs=1M;sync

где <файл-образа.iso> — образ диска ISO, а /dev/sdX — устройство, соответствующее flash-диску.

Просмотреть список доступных устройств можно командой lsblk или (если такой команды нет) blkid.

Например, так можно определить имя flash-диска:

$ lsblk | grep disk
sda      8:0    0 931,5G  0 disk
sdb      8:16   0 931,5G  0 disk
sdc      8:32   1   7,4G  0 disk

flash-диск имеет имя устройства sdc.

Затем записать:

# dd oflag=direct if=/iso/alt-server-v-10.2-x86_64.iso of=/dev/sdc bs=1M status=progress; sync

или, например, так:

# pv /iso/alt-server-v-10.2-x86_64.iso | dd oflag=direct of=/dev/sdc bs=1M;sync
dd: warning: partial read (524288 bytes); suggest iflag=fullblock
3GiB 0:10:28 [4,61MiB/s] [===================================>  ] 72% ETA 0:04:07

Предупреждение [Черновик]

Не извлекайте flash-диск, пока образ не запишется до конца! Определить финал процесса можно по прекращению моргания индикатора flash-диска либо посредством виджета Безопасное извлечение съемных устройств.

⁠4.2.3. В операционной системе OS X [Черновик]

В операционной системе OS X для создания загрузочного flash-диска можно использовать команду:

sudo dd if=alt-server-v-10.2-x86_64.iso of=/dev/rdiskX bs=10M
sync

где alt-server-v-10.2-x86_64.iso — образ диска ISO, а /dev/rdiskX — flash-диск.

Просмотреть список доступных устройств можно командой:

diskutil list

Предупреждение [Черновик]

Будьте внимательны при указании имени usb-устройства — запись образа по ошибке на свой жёсткий диск приведёт к почти гарантированной потере данных на нём!

⁠4.2.4. Проверка целостности записанного образа [Черновик]

Для проверки целостности записанного образа необходимо выполнить следующие шаги:

определить длину образа в байтах:

$  du -b alt-server-v-10.2-x86_64.iso | cut -f1
2603843584

посчитать контрольную сумму образа (или просмотреть контрольную сумму образа из файла MD5SUM на сервере FTP):

$ md5sum alt-server-v-10.2-x86_64.iso
dd3c2a2a1bfd81fa3f95dc3cfefebc07  alt-server-v-10.2-x86_64.iso

подсчитать контрольную сумму записанного образа на DVD или USB Flash (выполняется под правами пользователя root):

#  head -c 2603843584 /dev/sdd | md5sum
dd3c2a2a1bfd81fa3f95dc3cfefebc07

где размер после -c — вывод в п.1, а /dev/sdd — устройство DVD или USB Flash, на которое производилась запись.

⁠Глава 5. Сохранение данных и меры предосторожности [Черновик]

Если необходимо установить ОС Альт Виртуализация и при этом сохранить уже установленную на компьютере операционную систему (например, другую версию GNU/Linux или Microsoft Windows), то нужно обязательно позаботиться о подготовке компьютера к установке второй системы и о сохранении ценных для вас данных.

Если у вас нет загрузочного диска для уже установленной системы, создайте его. В случае прерванной установки ОС Альт Виртуализация или неправильной настройки загрузчика, вы можете потерять возможность загрузиться в вашу предыдущую ОС.

Если на диске, выбранном для установки ОС Альт Виртуализация, не осталось свободного раздела, то программа установки должна будет изменить размер существующего раздела. От этой операции могут пострадать ваши данные, поэтому предварительно надо сделать следующие действия:

Выполнить проверку раздела, который вы собираетесь уменьшать. Для этого воспользуйтесь соответствующим программным обеспечением (далее — ПО), входящим в состав уже установленной ОС. Программа установки Альт Виртуализация может обнаружить некоторые очевидные ошибки при изменении размера раздела, но специализированное ПО предустановленной ОС справится с этой задачей лучше.

Выполнить дефрагментацию уменьшаемого раздела в целях повышения уровня безопасности данных. Это действие не является обязательным, но мы настоятельно рекомендуем его произвести: изменение размера раздела пройдёт легче и быстрее.

Предупреждение [Черновик]

Полной гарантией от проблем, связанных с потерей данных, является резервное копирование!

⁠Глава 6. Начало установки: загрузка системы [Черновик]

⁠6.1. Способы первоначальной загрузки [Черновик]

Для загрузки компьютера с целью установки системы необходимо воспользоваться носителем, содержащим начальный загрузчик.

Простейший способ запустить программу установки — загрузить компьютер с помощью загрузочного носителя, находящегося на установочном DVD с дистрибутивом (при условии, что система поддерживает загрузку с устройства для чтения DVD).

Программу установки можно также запустить с другого загрузочного носителя. Например, в качестве загрузочного носителя может использоваться загрузочный USB flash-накопитель.

⁠6.2. Загрузка системы [Черновик]

Для того чтобы начать установку ОС Альт Виртуализация, достаточно загрузиться с носителя, на котором записан дистрибутив.

Примечание [Черновик]

Предварительно следует включить в BIOS опцию загрузки с оптического привода или с USB-устройства.

В большинстве случаев указание способа входа в BIOS отображается на вашем мониторе непосредственно после включения компьютера. Способ входа в меню BIOS и информация о расположении настроек определяется производителем используемого оборудования. За информацией можно обратиться к документации на ваше оборудование.

Загрузка с установочного диска или специально подготовленного USB-flash-накопителя начинается с меню, в котором перечислено несколько вариантов загрузки. Кроме установки системы с установочного диска, в данном меню доступны несколько вариантов сетевой установки.

Boot from hard drive — запуск уже установленной на жестком диске операционной системы;

Install ALT Server-V 10.2 — установка операционной системы;

VNC install ALT Server-V 10.2 (edit to set server IP address) — установка по VNC с соединением с устанавливаемой машины на сервер VNC с заданным IP-адресом. Параметры установки по VNC передаются как параметры ядра. Нажатие клавиши E позволяет задать IP-адрес компьютера, с которого будет происходить управление (для приёма подключения на сервере VNC следует запустить, например, vncviewer --listen):

VNC install ALT Server 10.2 (edit to set password and connect here) — установка по VNC с соединением в сторону устанавливаемой машины. Параметры установки по VNC передаются как параметры ядра. Нажатие клавиши E позволяет задать пароль (по умолчанию — VNCPWD):

Rescue LiveCD — восстановление уже установленной, но так или иначе поврежденной ОС Linux путем запуска небольшого образа ОС в оперативной памяти. Восстановление системы потребует некоторой квалификации. Этот пункт также может быть использован для сбора информации об оборудовании компьютера, которую можно отправить разработчикам, если ОС Альт Виртуализация устанавливается и работает неправильно. Загрузка восстановительного режима заканчивается приглашением командной строки:

[root@localhost /]#

Change language (press F2) — позволяет выбрать язык интерфейса загрузчика и программы установки (нажатие клавиши F2 вызывает такое же действие);

Memory Test (may not work with Secure Boot) — проверка целостности оперативной памяти. Процесс диагностики заключается в проведении нескольких этапов тестирования каждого отдельного модуля ОЗУ (данный процесс будет выполняться бесконечно, пока его не остановят, необходимо дождаться окончания хотя бы одного цикла проверки);

UEFI Shell (may not work with Secure Boot) — оболочка/терминал для прошивки, позволяющий запускать EFI-приложения, в том числе загрузчики UEFI;

UEFI Firmware Settings — позволяет получить доступ к настройкам UEFI.

Примечание [Черновик]

Начальный загрузчик в режиме Legacy:

Пункт Boot from hard drive — позволяет запустить уже установленную на жёсткий диск операционную систему.

Примечание [Черновик]

Мышь на этом этапе установки не поддерживается. Для выбора опций установки и различных вариантов необходимо использовать клавиатуру.

Нажатием клавиши E можно вызвать редактор параметров текущего пункта загрузки. Если система настроена правильно, то редактировать их нет необходимости.

Чтобы начать процесс установки, нужно клавишами перемещения курсора вверх и вниз выбрать пункт меню Install ALT Server-V 10.2 и нажать Enter. Начальный этап установки не требует вмешательства пользователя: происходит автоматическое определение оборудования и запуск компонентов программы установки. Сообщения о происходящем на данном этапе можно просмотреть, нажав клавишу ESC.

Примечание [Черновик]

В начальном загрузчике установлено небольшое время ожидания: если в этот момент не предпринимать никаких действий, то будет загружена та система, которая уже установлена на жестком диске. Если вы пропустили нужный момент, перезагрузите компьютер и вовремя выберите пункт Install ALT Server-V 10.2.

⁠Глава 7. Последовательность установки [Черновик]

До того как будет произведена установка базовой системы на жёсткий диск, программа установки работает с образом системы, загруженным в оперативную память компьютера.

Если инициализация оборудования завершилась успешно, будет запущен графический интерфейс программы-установщика. Процесс установки разделён на шаги. Каждый шаг посвящён настройке или установке определённого свойства системы. Шаги нужно проходить последовательно. Переход к следующему шагу происходит по нажатию кнопки Далее. При помощи кнопки Назад, при необходимости, можно вернуться к уже пройденному шагу и изменить настройки. Однако возможность перехода к предыдущему шагу ограничена теми шагами, в которых нет зависимости от данных, введённых ранее.

Если по каким-то причинам возникла необходимость прекратить установку, необходимо нажать кнопку <Reset> на корпусе системного блока компьютера.

Примечание [Черновик]

Совершенно безопасно выполнить отмену установки только до шага Подготовка диска, поскольку до этого момента не производится никаких изменений на жёстком диске. Если прервать установку между шагами Подготовка диска и Установка загрузчика, существует вероятность, что после этого с жёсткого диска не сможет загрузиться ни одна из установленных систем (если такие имеются).

Технические сведения о ходе установки можно посмотреть, нажав Ctrl+Alt+F1, вернуться к программе установки — Ctrl+Alt+F7. По нажатию Ctrl+Alt+F2 откроется отладочная виртуальная консоль.

Каждый шаг сопровождается краткой справкой, которую можно вызвать, щёлкнув кнопку Справка или нажав клавишу F1.

Нажатие на кнопку Последовательность установки позволяет показать/скрыть панель со списком шагов установки:

Во время установки системы выполняются следующие шаги:

Язык;

Лицензионное соглашение;

Дата и время;

Подготовка диска;

Перемонтирование;

Установка системы;

Сохранение настроек;

Установка загрузчика;

Настройка сети;

Администратор системы;

Системный пользователь;

Установка пароля на шифрованные разделы;

Завершение установки.

⁠Глава 8. Язык [Черновик]

Установка Альт Виртуализация начинается с выбора основного языка — языка интерфейса программы установки и устанавливаемой системы. В списке, помимо доступных языков региона (выбранного на этапе начальной загрузки), указан и английский язык.

На этом же этапе выбирается вариант переключения раскладки клавиатуры. Раскладка клавиатуры — это привязка букв, цифр и специальных символов к клавишам на клавиатуре. Помимо ввода символов на основном языке, в любой системе Linux необходимо иметь возможность вводить латинские символы (имена команд, файлов и т.п.). Для этого обычно используется стандартная английская раскладка клавиатуры. Переключение между раскладками осуществляется при помощи специально зарезервированных для этого клавиш. Для русского языка доступны следующие варианты переключения раскладки:

клавиши Alt и Shift одновременно;

клавиша CapsLock;

клавиши Control и Shift одновременно;

клавиша Control;

клавиша Alt.

Если выбранный основной язык имеет всего одну раскладку (например, при выборе английского языка в качестве основного), эта единственная раскладка будет принята автоматически.

⁠Глава 9. Лицензионное соглашение [Черновик]

Перед продолжением установки следует внимательно прочитать условия лицензии. В лицензии говорится о ваших правах. В частности, за вами закрепляются права на:

эксплуатацию программ на любом количестве компьютеров и в любых целях;

распространение программ (сопровождая их копией авторского договора);

получение исходных текстов программ.

Если вы приобрели дистрибутив, то данное лицензионное соглашение прилагается в печатном виде к вашей копии дистрибутива. Лицензия относится ко всему дистрибутиву Альт Виртуализация. Если вы согласны с условиями лицензии, отметьте пункт Да, я согласен с условиями и нажмите кнопку Далее.

⁠Глава 10. Дата и время [Черновик]

На данном этапе выполняется выбор региона и города, по которым будет определен часовой пояс и установлены системные часы.

Для корректной установки даты и времени достаточно правильно указать часовой пояс и выставить желаемые значения для даты и времени.

На этом шаге следует выбрать часовой пояс, по которому нужно установить часы. Для этого в соответствующих списках выберите регион, а затем город. Поиск по списку можно ускорить, набирая на клавиатуре первые буквы искомого слова.

Пункт Хранить время в BIOS по Гринвичу выставляет настройки даты и времени в соответствии с часовыми поясами, установленными по Гринвичу, и добавляет к местному времени часовую поправку для выбранного региона.

После выбора часового пояса будут предложены системные дата и время по умолчанию.

Для ручной установки текущих даты и времени нужно нажать кнопку Изменить…. Откроется окно ручной настройки системных параметров даты и времени.

Для синхронизации системных часов с удалённым сервером времени (NTP) по локальной сети или по сети Интернет нужно отметить пункт Получать точное время с NTP-сервера и указать предпочитаемый NTP-сервер. В большинстве случаев можно указать сервер pool.ntp.org.

Если выбрана опция Получать точное время с NTP-сервера, то компьютер может и сам быть сервером точного времени. Например, использоваться как сервер точного времени машинами локальной сети. Для активации этой возможности необходимо отметить пункт Работать как NTP-сервер.

Для сохранения настроек и продолжения установки системы в окне ручной установки даты и времени необходимо нажать кнопку ОК и затем в окне Дата и время нажать кнопку Далее.

Примечание [Черновик]

В случае если ОС Альт Виртуализация устанавливается как вторая ОС, необходимо снять отметку с пункта Хранить время в BIOS по Гринвичу, иначе время в уже установленной ОС может отображаться некорректно.

⁠Глава 11. Подготовка диска [Черновик]

На этом этапе подготавливается площадка для установки Альт Виртуализация, в первую очередь — выделяется свободное место на диске.

Переход к этому шагу может занять некоторое время. Время ожидания зависит от производительности компьютера, объёма жёсткого диска, количества разделов на нём и других параметров.

⁠11.1. Выбор профиля разбиения диска [Черновик]

После завершения первичной конфигурации загрузочного носителя откроется окно Подготовка диска. В списке разделов перечислены уже существующие на жёстких дисках разделы (в том числе здесь могут оказаться съёмные flash-диски, подключённые к компьютеру в момент установки).

В списке Выберите профиль перечислены доступные профили разбиения диска. Профиль — это шаблон распределения места на диске для установки ОС. Можно выбрать один из профилей:

Minimal server (rootfs only /) — единственная файловая система ext4 под корень (swap и раздел под efi автоматически);

Generic Server KVM/Docker/LXD/Podman/CRI-O/PVE — большой раздел под /var;

Вручную.

Первые два профиля предполагают автоматическое разбиение диска.

⁠11.2. Автоматический профиль разбиения диска [Черновик]

Выбор автоматического профиля разбиения диска влияет на предлагаемый по умолчанию профиль устанавливаемого программного обеспечения.

При выборе пункта Minimal server (rootfs only /) — при разбиении диска будут выделены разделы для подкачки, для efi и для корневой файловой системы.

При выборе пункта Generic Server KVM/Docker/LXD/Podman/CRI-O/PVE — при разбиении диска будут выделены отдельные разделы для подкачки, для efi и для корневой файловой системы. Оставшееся место будет отведено под раздел /var.

Если было выбрано несколько дисков, то на этих дисках будет создан RAID-массив.

Если результат вас по каким-то причинам не устраивает, прямо сейчас можно его отредактировать.

От возможности редактировать результат разбиения можно отказаться, сняв выделение с пункта Предложить сделать мои изменения после применения профиля. В этом случае никакой информации о распределении дискового пространства на экране отображаться не будет. После осуществления физических изменений на жестком диске начнется установка базовой системы. Этот вариант подойдет для установки на чистый диск.

Рядом с названием каждого профиля указан минимальный объём свободного места на диске, требуемый для установки в соответствии с данным профилем. Если при применении одного из профилей автоматического разбиения диска доступного места на выбранных дисках окажется недостаточно, то на монитор будет выведено сообщение об ошибке: Невозможно применить профиль, недостаточно места на диске.

В этом случае можно воспользоваться методом ручной разметки: профиль Вручную или установить отметку на пункте Очистить выбранные диски перед применением профиля.

Примечание [Черновик]

При отмеченном пункте Очистить выбранные диски перед применением профиля будут удалены все данные с выбранных дисков (включая внешние USB-носители) без возможности восстановления. Рекомендуется использовать эту возможность при полной уверенности в том, что диски не содержат никаких ценных данных.

Для продолжения установки следует нажать кнопку Далее. Появится окно со списком настроенных разделов и их точек монтирования. Если вы уверены в том, что подготовка диска завершена, подтвердите переход к следующему шагу нажатием кнопки ОК.

⁠11.3. Ручной профиль разбиения диска [Черновик]

При необходимости освободить часть дискового пространства следует воспользоваться профилем разбиения Вручную. В этом случае можно удалить некоторые из существующих разделов или содержащиеся в них файловые системы. После этого можно создать необходимые разделы самостоятельно или вернуться к шагу выбора профиля и применить автоматический профиль. Выбор этой возможности требует знаний об устройстве диска и технологиях его разметки.

По нажатию кнопки Далее будет произведена запись новой таблицы разделов на диск и форматирование разделов. Только что созданные на диске программой установки разделы пока не содержат данных и поэтому форматируются без предупреждения. Уже существовавшие, но изменённые разделы, которые будут отформатированы, помечаются специальным значком в колонке Файловая система слева от названия. При уверенности в том, что подготовка диска завершена, подтвердите переход к следующему шагу нажатием кнопки Далее.

Не следует форматировать разделы с теми данными, которые вы хотите сохранить, например, со старыми пользовательскими данными (/home) или с другими операционными системами. С другой стороны, отформатировать можно любой раздел, который вы хотите «очистить» (удалить все данные).

Предупреждение [Черновик]

Не уменьшайте NTFS-раздел с установленной Microsoft Windows Vista/Windows 7 средствами программы установки. В противном случае вы не сможете загрузить Microsoft Windows Vista/Windows 7 после установки Альт Виртуализация. Для выделения места под установку Альт Виртуализация воспользуйтесь средствами, предоставляемыми самой Microsoft Windows Vista/Windows 7: Управление дисками → Сжать.

Для того чтобы система правильно работала (в частности могла загрузиться) с UEFI, при ручном разбиении диска надо обязательно сделать точку монтирования /boot/efi, в которую нужно смонтировать vfat раздел с загрузочными записями. Если такого раздела нет, то его надо создать вручную. При разбивке жёсткого диска в автоматическом режиме такой раздел создаёт сам установщик. Особенности разбиения диска в UEFI-режиме:

требуется создать новый или подключить существующий FAT32-раздел с GPT-типом ESP (efi system partition) размером ~100—500 Мб (будет смонтирован в /boot/efi);

может понадобиться раздел типа bios boot partition минимального размера, никуда не подключенный и предназначенный для встраивания grub2-efi;

остальные разделы — и файловая система, и swap — имеют GPT-тип basic data; актуальный тип раздела задаётся отдельно.

Для сохранения всех внесенных настроек и продолжения установки в окне Подготовка диска нужно нажать кнопку Далее. Появится окно со списком настроенных разделов и их точек монтирования. Если вы уверены в том, что подготовка диска завершена, подтвердите переход к следующему шагу нажатием кнопки ОК.

⁠11.4. Дополнительные возможности разбиения диска [Черновик]

Ручной профиль разбиения диска позволяет установить ОС на программный RAID-массив, разместить разделы в томах LVM и использовать шифрование на разделах. Данные возможности требуют от пользователя понимания принципов функционирования указанных технологий.

⁠11.4.1. Создание программного RAID-массива [Черновик]

Избыточный массив независимых дисков RAID (redundant array of independent disks) — технология виртуализации данных, которая объединяет несколько жёстких дисков в логический элемент для избыточности и повышения производительности.

Примечание [Черновик]

Для создания программного RAID-массива потребуется минимум два жёстких диска.

Программа установки поддерживает создание программных RAID-массивов следующих типов:

RAID 1;

RAID 0;

RAID 4/5/6;

RAID 10.

Процесс подготовки к установке на RAID условно можно разбить на следующие шаги:

создание разделов на жёстких дисках;

создание RAID-массивов на разделах жёсткого диска;

создание файловых систем на RAID-массиве.

Важно [Черновик]

Для создания программного RAID-массива может потребоваться предварительно удалить существующую таблицу разделов с жёсткого диска.

Важно [Черновик]

Системный раздел EFI должен быть физическим разделом в основной таблице разделов диска.

Для настройки параметров нового раздела из состава RAID-массива необходимо выбрать неразмеченный диск в окне профиля разбивки пространства Вручную и нажать кнопку Создать раздел.

Для создания программного массива на GPT-разделах следует сначала создать разделы типа basic data и не создавать на них том (снять отметку с пункта Создать том):

В этом окне необходимо настроить следующие параметры:

Размер — в поле необходимо указать размер будущего раздела в Мбайт;

Смещение — в поле необходимо указать смещение начала данных на диске в Мбайт;

Тип раздела — в выпадающем поле нужно выбрать значение basic data для последующего включения раздела в RAID-массив.

Примечание [Черновик]

В режиме Legacy при создании разделов на жёстких дисках для последующего включения их в RAID-массивы следует указать Тип раздела для них равным Linux RAID:

На втором диске создать два раздела с типом basic data без создания на них томов. При этом разделы на разных дисках должны совпадать по размеру.

Примечание [Черновик]

При создании разделов следует учесть, что объём результирующего массива может зависеть от размера, включённых в него разделов жёсткого диска. Например, при создании RAID 1 результирующий размер массива будет равен размеру минимального участника.

После создания разделов на дисках можно переходить к организации самих RAID-массивов. Для этого в списке следует выбрать пункт RAID, после чего нажать кнопку Создать RAID:

Далее мастер предложит выбрать тип массива:

И указать участников RAID-массива (по умолчанию выбираются все разделы, поэтому необходимо снять отметку с раздела sdb1):

Результат создания RAID-массива:

После того, как RAID-массив создан, его можно использовать как обычный раздел на жёстких дисках, то есть на нём можно создавать файловые системы или же, например, включать в LVM-тома.

Примечание [Черновик]

После установки системы можно будет создать ещё один RAID-массив и добавить в него загрузочный раздел (/boot/efi).

⁠11.4.2. Создание LVM-томов [Черновик]

Менеджер логических дисков LVM (Logical Volume Manager) — средство гибкого управления дисковым пространством, позволяющее создавать поверх физических разделов (либо неразбитых дисков) логические тома, которые в самой системе будут видны как обычные блочные устройства с данными (обычные разделы).

Процесс подготовки к установке на LVM условно можно разбить на следующие шаги:

создание разделов на жёстких дисках;

создание группы томов LVM;

создание томов LVM;

создание файловых систем на томах LVM.

Важно [Черновик]

Для создания группы томов LVM может потребоваться предварительно удалить существующую таблицу разделов с жёсткого диска.

Важно [Черновик]

Системный раздел EFI должен быть физическим разделом в основной таблице разделов диска, не под LVM.

Для настройки параметров нового раздела необходимо выбрать неразмеченный диск в окне профиля разбивки пространства Вручную и нажать кнопку Создать раздел:

При создании разделов на жёстких дисках для последующего включения их в LVM-тома следует указать Тип раздела для них равным basic data и не создавать на них том (снять отметку с пункта Создать том):

Примечание [Черновик]

В режиме Legacy при создании разделов на жёстких дисках для последующего включения их в LVM-тома следует указать Тип раздела для них равным Linux LVM:

После создания разделов на дисках можно переходить к созданию группы томов LVM. Для этого в списке следует выбрать пункт LVM, после чего нажать кнопку Создать группу томов:

В открывшемся окне необходимо выбрать разделы, которые будут входить в группу томов, указать название группы томов и выбрать размер экстента:

Примечание [Черновик]

Размер экстента представляет собой наименьший объем пространства, который может быть выделен тому. Размер экстента по умолчанию 65536 (65536*512 байт = 32 Мб, где 512 байт — размер сектора).

После того, как группа томов LVM создана, её можно использовать как обычный жёсткий диск, то есть внутри группы томов можно создавать тома (аналог раздела на физическом жёстком диске) и файловые системы внутри томов.

⁠11.4.3. Создание шифрованных разделов [Черновик]

Программа установки Альт Виртуализация позволяет создавать шифрованные разделы.

Процесс создания шифрованного раздела ничем не отличается от процесса создания обычного раздела и инициируется нажатием на кнопку Создать шифруемый раздел.

После создания шифрованного раздела мастер, как и при создании обычного раздела, предложит создать на нём файловую систему и при необходимости потребует указать точку монтирования.

Предупреждение [Черновик]

Установка загрузчика на шифрованный раздел не поддерживается.

⁠11.4.4. Создание подтомов BtrFS [Черновик]

BtrFS — файловая система, которая может работать с очень большими файлами, имеется поддержка снимков файловой системы (снапшотов), сжатие и подтома.

Подтом (subvolume) не является блочным устройством, но в каждом томе BtrFS создаётся один подтом верхнего уровня (subvolid=5), в этом подтоме могут создаваться другие подтома и снапшоты. Подтома (подразделы, subvolumes) создаются ниже вершины дерева BtrFS по мере необходимости, например, для / и /home создаются подтома с именами @ и @home. Это означает, что для монтирования подтомов необходимы определенные параметры вместо корня системы BtrFS по умолчанию:

подтом @ монтируется в / с помощью опции subvol=@;

подтом @home, если он используется, монтируется в /home с помощью параметра монтирования subvol=@home.

Программа установки Альт Виртуализация позволяет создать подтома (subvolume), указав разные точки монтирования.

Процесс подготовки к установке на подтома условно можно разбить на следующие шаги:

создание разделов на жёстких дисках;

создание подтомов на разделах жёсткого диска.

В данном разделе рассмотрен вариант подготовки раздела BtrFS с разбивкой на подтома @ и @home.

Для настройки параметров нового раздела необходимо выбрать неразмеченный диск в окне профиля разбивки пространства Вручную и нажать кнопку Создать раздел.

При создании раздела на жёстком диске следует указать Тип раздела равным Linux filesystem или basic data:

При создании раздела на жёстком диске следует указать Тип раздела равным Linux filesystem или basic data:

Примечание [Черновик]

В режиме Legacy при создании раздела на жёстком диске для последующего создания подтомов BtrFS следует указать Тип раздела равным Linux:

На следующем шаге выбрать файловую систему BtrFS:

В окне Изменить точку монтирования нажать кнопку Отмена (не указывать точку монтирования для раздела):

После создания раздела можно переходить к созданию подтомов. Для этого в списке следует выбрать раздел с файловой системой BtrFS, после чего нажать кнопку Создать подтом:

В открывшемся окне следует указать имя подтома или путь до него. Создание подтома @home:

Данное действие следует повторить для создания подтома @.

После создания подтомов необходимо указать точки монтирования для каждого тома. Для этого выбрать подтом и нажать кнопку Изменить точку монтирования:

В открывшемся окне указать точку монтирования:

Далее можно установить систему как обычно.

⁠Глава 12. Перемонтирование [Черновик]

По завершении этапа подготовки диска начинается шаг перемонтирования. Он проходит автоматически и не требует вмешательства пользователя. На экране отображается индикатор выполнения.

⁠Глава 13. Установка системы [Черновик]

На данном этапе происходит распаковка ядра и установка набора программ, необходимых для работы Альт Виртуализация.

Программа установки предлагает выбрать дополнительные пакеты программ, которые будут включены в состав Альт Виртуализация и установлены вместе с ней на диск.

⁠13.1. Дополнительные приложения [Черновик]

В дистрибутиве Альт Виртуализация доступно значительное количество программ, часть из них составляет саму операционную систему, а остальные — это прикладные программы и утилиты.

В Альт Виртуализация все операции установки и удаления производятся над пакетами — отдельными компонентами системы. Пакет и программа соотносятся неоднозначно: иногда одна программа состоит из нескольких пакетов, иногда один пакет включает несколько программ.

В процессе установки системы обычно не требуется детализированный выбор компонентов на уровне пакетов — это требует слишком много времени и знаний от проводящего установку, тем более, что комплектация дистрибутива подбирается таким образом, чтобы из имеющихся программ можно было составить полноценную рабочую среду для соответствующей аудитории пользователей. Поэтому в процессе установки системы пользователю предлагается выбрать из небольшого списка групп пакетов именно те, которые необходимы для решения наиболее распространённых задач. Под списком групп на экране отображается информация об объёме дискового пространства, которое будет занято после установки пакетов, входящих в выбранные группы.

При установке сервера доступны следующие профили:

Минимальная установка — дополнительное ПО в состав устанавливаемых пакетов включаться не будет;

Сервер управления Opennebula — управляющий сервер Opennebula;

Вычислительный узел Opennebula KVM — гипервизор с виртуальными машинами;

Вычислительный узел Opennebula LXC — гипервизор LXC контейнеров;

Виртуальное Окружение Proxmox — узел кластера Proxmox Virtual Enviroment. Все ноды кластера равнозначны: нет деления на сервер управления и гипервизор;

Базовая виртуализация — минимальный гипервизор, qemu + libvirtd;

Docker — сервер с предустановленным docker.

После выбора профиля можно изменить состав устанавливаемых пакетов.

Под списком групп на экране отображается информация об объёме дискового пространства, которое будет занято после установки пакетов, входящих в выбранные группы.

При выборе группы пакетов будет показан список программных пакетов, входящих в состав этой группы:

Выбрав необходимые группы, следует нажать кнопку Далее, после чего начнётся установка пакетов.

⁠13.2. Установка пакетов [Черновик]

На этом этапе происходит установка набора программ, необходимых для работы системы.

Установка происходит автоматически в два этапа:

получение пакетов;

установка пакетов.

Получение пакетов осуществляется из источника, выбранного на этапе начальной загрузки. При сетевой установке время выполнения этого шага будет зависеть от скорости соединения и может быть значительно большим в сравнении с установкой с лазерного диска.

⁠Глава 14. Сохранение настроек [Черновик]

Начиная с данного этапа, программа установки работает с файлами только что установленной базовой системы. Все последующие изменения можно будет совершить после завершения установки посредством редактирования соответствующих конфигурационных файлов или при помощи модулей управления, включенных в дистрибутив.

По завершении установки базовой системы начинается шаг сохранения настроек. Он проходит автоматически и не требует вмешательства пользователя. На экране отображается индикатор выполнения.

На этом шаге производится перенос настроек, выполненных на первых шагах установки, в только что установленную базовую систему. Производится также запись информации о соответствии разделов жесткого диска смонтированным на них файловым системам (заполняется конфигурационный файл /etc/fstab).

После сохранения настроек осуществляется автоматический переход к следующему шагу.

⁠Глава 15. Установка загрузчика [Черновик]

Загрузчик ОС — это программа, которая позволяет загружать Альт Виртуализация и другие ОС, если они установлены на данной машине.

При установке на EFI модуль установки загрузчика предложит вариант установить загрузчик в специальный раздел «EFI» (рекомендуется выбрать автоматическое разбиение на этапе разметки диска для создания необходимых разделов для загрузки с EFI):

Варианты установки загрузчика при установке в режиме EFI:

EFI (рекомендуемый) — при установке загрузчика в NVRAM будет добавлена запись, без которой большинство компьютеров не смогут загрузиться во вновь установленную ОС;

EFI (сначала очистить NVRAM) — перед добавлением записи в NVRAM её содержимое будет сохранено в /root/.install-log, после чего из неё будут удалены все загрузочные записи, что приведёт к восстановлению полностью заполненной NVRAM и гарантирует загрузку вновь установленной ОС;

EFI (запретить запись в NVRAM) — этот вариант следует выбрать, только если инсталлятор не может создать запись в NVRAM или если заведомо известно, что запись в NVRAM может вывести компьютер из строя (вероятно, запись в NVRAM придётся создать после установки ОС средствами BIOS Setup);

EFI (для съёмных устройств) — этот вариант следует выбрать, только если ОС устанавливается на съёмный накопитель. Этот вариант также можно использовать вместо варианта EFI (запретить запись в NVRAM) при условии, что это будет единственная ОС на данном накопителе. Создавать запись в NVRAM не потребуется.

Выбор варианта установки загрузчика, зависит от вашего оборудования. Если не работает один вариант, попробуйте другие.

Примечание [Черновик]

Установка загрузчика при установке в режиме Legacy:

Программа установки автоматически определяет, в каком разделе жёсткого диска следует располагать загрузчик для возможности корректного запуска ОС Альт Виртуализация. Положение загрузчика, в случае необходимости, можно изменить в списке Устройство, выбрав другой раздел.

Если же вы планируете использовать и другие ОС, уже установленные на этом компьютере, тогда имеет значение, на каком жёстком диске или в каком разделе будет расположен загрузчик.

Для ограничения доступа к опциям загрузки можно установить пароль на загрузчик. Для этого необходимо отметить пункт Установить или сбросить пароль и задать пароль в появившихся полях для ввода.

Примечание [Черновик]

При необходимости изменения опций загрузки при старте компьютера потребуется ввести имя пользователя «boot» и заданный на этом шаге пароль.

Для подтверждения выбора и продолжения работы программы установки необходимо нажать кнопку Далее.

⁠Глава 16. Настройка сети [Черновик]

На этом этапе необходимо задать параметры работы сетевой карты и настройки сети: IP-адреса сетевых интерфейсов, DNS-сервер, шлюз и т.п. Конкретные значения будут зависеть от используемого вами сетевого окружения. Ручного введения настроек можно избежать при наличии в сети настроенного DHCP-сервера. В этом случае все необходимые сетевые настройки будут получены автоматически.

Важно [Черновик]

При установке PVE в поле Имя компьютера необходимо указать FQDN (полное имя с доменом).

Для установки PVE должен быть указан статический IP-адрес.

Примечание [Черновик]

Для настройки Ethernet-моста следует нажать кнопку Настроить сетевой мост:

В открывшемся окне необходимо выбрать сетевой интерфейс в списке Доступные интерфейсы, переместить его в список Члены, в выпадающем списке Тип моста выбрать тип моста: Linux Bridge (по умолчанию) или Open vSwitch и нажать кнопку Ок:

Настроить сетевой интерфейс vmbr0: ввести имя компьютера, задать IP-адрес и нажать кнопку Добавить, ввести адрес шлюза по умолчанию и DNS-сервера:

Важно [Черновик]

Если в сервере есть несколько сетевых карт, то одну можно использовать для управления (на неё следует назначить IP-адрес без моста), вторую использовать только для моста, в который будут подключаться виртуальные машины. Для использования CEPH, iSCSI, NFS или другого сетевого хранилища стоит использовать третью сетевую карту, желательно 10G.

Для сохранения настроек сети и продолжения работы программы установки необходимо нажать кнопку Далее.

⁠Глава 17. Администратор системы [Черновик]

На данном этапе загрузчик создает учетную запись администратора. В открывшемся окне необходимо ввести пароль учетной записи администратора (root). Чтобы исключить опечатки при вводе пароля, пароль учетной записи вводится дважды.

Примечание [Черновик]

Чтобы избежать последствий неверной раскладки клавиатуры можно просмотреть пароль, который будет сохранен. Для этого нажмите на значок глаза в поле ввода:

Для автоматической генерации пароля необходимо отметить пункт Создать автоматически. Система предложит пароль, сгенерированный автоматическим образом в соответствии с требованиями по стойкости паролей.

В любой системе Linux всегда присутствует один специальный пользователь — администратор системы, он же суперпользователь. Для него зарезервировано стандартное системное имя — root.

Администратор системы отличается от всех прочих пользователей тем, что ему позволено производить любые, в том числе самые разрушительные изменения в системе. Поэтому выбор пароля администратора системы — очень важный момент для безопасности. Любой, кто сможет ввести его правильно (узнать или подобрать), получит неограниченный доступ к системе. Даже ваши собственные неосторожные действия от имени root могут иметь катастрофические последствия для всей системы.

Важно [Черновик]

Стоит запомнить пароль root — его нужно будет вводить для получения права изменять настройки системы с помощью стандартных средств настройки Альт Виртуализация. Более подробную информацию о режиме суперпользователя вы можете прочитать в главе Режим суперпользователя.

Подтверждение введенного (или сгенерированного) пароля учетной записи администратора (root) и продолжение работы программы установки выполняется нажатием кнопки Далее.

⁠Глава 18. Системный пользователь [Черновик]

На данном этапе программа установки создает учетную запись системного пользователя (пользователя) Альт Виртуализация.

Помимо администратора (root) в систему необходимо добавить, по меньшей мере, одного обычного системного пользователя. Работа от имени администратора системы считается опасной, поэтому повседневную работу в Linux следует выполнять от имени ограниченного в полномочиях системного пользователя.

При добавлении системного пользователя предлагается ввести имя учётной записи пользователя. Имя учётной записи всегда представляет собой одно слово, состоящее только из строчных латинских букв (заглавные запрещены), цифр и символа подчёркивания «_» (причём цифра и символ «_» не могут стоять в начале слова).

Для того чтобы исключить опечатки, пароль пользователя вводится дважды. Пароль пользователя можно создать автоматически, по аналогии с автоматическим созданием пароля суперпользователя.

Для автоматической генерации пароля необходимо отметить пункт Создать автоматически. Система предложит пароль, сгенерированный автоматическим образом в соответствии с требованиями по стойкости паролей.

В процессе установки предлагается создать только одну учётную запись системного пользователя — от его имени можно выполнять задачи, не требующие привилегий суперпользователя. Учётные записи для всех прочих пользователей системы можно будет создать в любой момент после установки операционной системы.

Подтверждение введенного (или сгенерированного) пароля учетной записи системного пользователя и продолжение работы программы установки выполняется нажатием кнопки Далее.

⁠Глава 19. Установка пароля на шифрованные разделы [Черновик]

Примечание [Черновик]

Если вы не создавали шифруемые разделы, то этот шаг пропускается автоматически. В этом случае сразу переходите к главе Завершение установки.

На этом этапе требуется ввести пароль для шифруемых разделов. Этот пароль потребуется вводить для того, чтобы получать доступ к информации на данных разделах.

Например, если вы зашифровали /home, то во время загрузки системы будет необходимо ввести пароль для этого раздела, иначе вы не сможете получить доступ в систему под своим именем пользователя.

⁠Глава 20. Завершение установки [Черновик]

На экране последнего шага установки отображается информация о завершении установки Альт Виртуализация.

После нажатия кнопки Завершить автоматически начнется перезагрузка системы.

Не забудьте извлечь установочный DVD (если это не происходит автоматически). Далее можно загружать установленную систему в обычном режиме.

⁠Глава 21. Обновление системы до актуального состояния [Черновик]

После установки системы, её лучше сразу обновить до актуального состояния. Можно не обновлять систему и сразу приступать к работе только в том случае, если вы не планируете подключаться к сети или Интернету, не собираетесь устанавливать дополнительных программ.

Для обновления системы необходимо выполнить команды (с правами администратора):

# apt-get update
# apt-get dist-upgrade
# update-kernel
# apt-get clean
# reboot

Примечание [Черновик]

Получить права администратора можно, выполнив в терминале команду:

$ su -

или зарегистрировавшись в системе (например, на второй консоли Ctrl+Alt+F2) под именем root. Про режим суперпользователя можно почитать в главе Режим суперпользователя.

Примечание [Черновик]

Подробнее про обновление пакетов можно прочитать в главах Обновление всех установленных пакетов и Обновление ядра.

⁠Глава 22. Первая помощь [Черновик]

Важно [Черновик]

В случае возникновения каких-либо неприятностей не паникуйте, а спокойно разберитесь в сложившейся ситуации. Linux не так уж просто довести до полной неработоспособности и утраты ценных данных. Поспешные действия отчаявшегося пользователя могут привести к плачевным результатам. Помните, что решение есть, и оно обязательно найдётся!

⁠22.1. Проблемы при установке системы [Черновик]

Важно [Черновик]

При возникновении проблем с UEFI или Legacy/CSM рекомендуется изменить выбор используемого вида прошивки на другой. Не следует выбирать режим смешанной загрузки Legacy/UEFI! Рекомендуется отключить всевозможные оптимизации и ускорение UEFI-загрузки, а также отключить на время установки SecureBoot.

Если в системе не произошла настройка какого-либо компонента после стадии установки пакетов, не отчаивайтесь, доведите установку до конца, загрузитесь в систему и попытайтесь в спокойной обстановке повторить настройку.

Нажатием клавиши E можно вызвать редактор параметров текущего пункта загрузки. В открывшемся редакторе следует найти строку, начинающуюся с linux$linux_suffix /boot/vmlinuz, в её конец дописать требуемые параметры, отделив пробелом и нажать F10.

Примеры параметров пункта загрузки:

nomodeset — не использовать modeset-драйверы для видеокарты;

vga=normal — отключить графический экран загрузки установщика;

xdriver=vesa — явно использовать видеодрайвер vesa. Данным параметром можно явно указать нужный вариант драйвера;

acpi=off noapic — отключение ACPI (управление питанием), если система не поддерживает ACPI полностью.

Если вы вообще не смогли установить систему (не произошла или не завершилась стадия установки пакетов), то сначала попробуйте повторить попытку в безопасном режиме (apm=off acpi=off mce=off barrier=off vga=normal). В безопасном режиме отключаются все параметры ядра, которые могут вызвать проблемы при загрузке. В этом режиме установка будет произведена без поддержки APIC. Возможно, у вас какое-то новое или нестандартное оборудование, но может оказаться, что оно отлично настраивается со старыми драйверами.

Если вы хотите получить точный ответ, то сообщите, пожалуйста, подробный состав вашего оборудования и подробное описание возникшей проблемы в нашей системе отслеживания ошибок.

⁠22.2. Проблемы с загрузкой системы [Черновик]

Если не загружается ни одна из установленных операционных систем, то значит, есть проблема в начальном загрузчике. Такие проблемы могут возникнуть после установки системы, в случае если загрузчик все-таки не установлен или установлен с ошибкой. При установке или переустановке Windows на вашем компьютере загрузчик Linux будет перезаписан в принудительном порядке, и станет невозможно запускать Linux.

Повреждение или перезапись загрузчика никак не затрагивает остальные данные на жёстком диске, поэтому в такой ситуации очень легко вернуть работоспособность: для этого достаточно восстановить загрузчик.

Если у вас исчез загрузчик другой операционной системы или другого производителя, то внимательно почитайте соответствующее официальное руководство на предмет его восстановления. Но в большинстве случаев вам это не потребуется, так как загрузчик, входящий в состав Альт Виртуализация, поддерживает загрузку большинства известных операционных систем.

Для восстановления загрузчика достаточно любым доступным способом загрузить Linux и получить доступ к тому жёсткому диску, на котором находится повреждённый загрузчик. Для этого проще всего воспользоваться восстановительным режимом, который предусмотрен на установочном диске дистрибутива (пункт Восстановление системы).

Загрузка восстановительного режима заканчивается приглашением командной строки: [root@localhost /]#. Начиная с этого момента, система готова к вводу команд.

В большинстве случаев для восстановления загрузчика можно просто воспользоваться командой fixmbr без параметров. Программа попытается переустановить загрузчик в автоматическом режиме.

⁠22.3. Полезные ссылки [Черновик]

Если у вас что-то не получается, вы всегда можете поискать решение на ресурсах, указанных в разделе Техническая поддержка продуктов «Базальт СПО».

⁠Часть III. Начало использования Альт Виртуализация [Черновик]

В этой части рассматривается загрузка установленной операционной системы и вход в среду рабочего стола.

⁠Глава 23. Загрузка системы [Черновик]

Запуск Альт Виртуализация выполняется автоматически после запуска компьютера и отработки набора программ BIOS.

На экране появляется меню, в котором перечислены возможные варианты загрузки операционной системы.

Важно [Черновик]

При первом старте, в условиях установки нескольких ОС на один компьютер, возможно отсутствие в загрузочном меню пункта/пунктов с другой/другими операционными системами, они будут добавлены в список при последующей перезагрузке. Все перечисленные в меню после перезагрузки варианты могут быть загружены загрузчиком Linux.

Стрелками клавиатуры Вверх и Вниз выберите нужную операционную систему. Дополнительно к основным вариантам запуска ОС из этого меню можно загрузить Linux в безопасном режиме или запустить проверку памяти.

Загрузка операционной системы по умолчанию (первая в списке) начинается автоматически после небольшого времени ожидания (обычно несколько секунд). Нажав клавишу Enter, можно начать загрузку немедленно.

Нажатием клавиши E можно вызвать редактор параметров текущего пункта загрузки. Если система настроена правильно, то редактировать их нет необходимости.

В процессе загрузки Альт Виртуализация пользователь может следить за информацией процесса загрузки, которая отображает этапы запуска различных служб и программных серверов в виде отдельных строк, на экране монитора.

При этом каждая строка начинается словом вида [XXXXXXX] (FAILED или OK), являющегося признаком нормального или ненормального завершения этапа загрузки. Слово XXXXXXX=FAILED (авария) свидетельствует о неуспешном завершении этапа загрузки, что требует вмешательства и специальных действий администратора системы.

Загрузка операционной системы может занять некоторое время, в зависимости от производительности компьютера. Основные этапы загрузки операционной системы — загрузка ядра, подключение (монтирование) файловых систем, запуск системных служб — периодически могут дополняться проверкой файловых систем на наличие ошибок. В этом случае время ожидания может быть занять больше времени, чем обычно. Подробную информацию о шагах загрузки можно получить, нажав клавишу Esc.

⁠Глава 24. Получение доступа к зашифрованным разделам [Черновик]

В случае, если вы создали шифрованный раздел, вам потребуется вводить пароль при обращении к этому разделу.

Например, если был зашифрован домашний раздел /home, то для того, чтобы войти в систему под своим именем пользователя, вам потребуется ввести пароль этого раздела и затем нажать Enter.

Важно [Черновик]

Если не ввести пароль за отведенный промежуток времени, то загрузка системы завершится ошибкой. В этом случае вам следует перезагрузить систему, нажав для этого два раза Enter, а затем клавиши Ctrl+Alt+Delete.

⁠Глава 25. Вход в систему [Черновик]

Стандартная установка Альт Виртуализация включает базовую систему, работающую в консольном режиме.

При загрузке в консольном режиме работа загрузчика Альт Виртуализация завершается запросом на ввод логина и пароля учетной записи.

Для дальнейшего входа в систему необходимо ввести логин и пароль учетной записи пользователя.

В случае успешного прохождения процедуры аутентификации и идентификации будет выполнен вход в систему. ОС Альт Виртуализация перейдет к штатному режиму работы и предоставит дальнейший доступ к консоли.

Примечание [Черновик]

После загрузки будут показаны имя и IP-адрес компьютера, а также, если были установлены OpenNebula или PVE, адрес доступа к панели управления:

В процессе работы ОС Альт Виртуализация активно несколько виртуальных консолей. Каждая виртуальная консоль доступна по одновременному нажатию клавиш Ctrl, Alt и функциональной клавиши с номером этой консоли от F1 до F6.

На первых шести виртуальных консолях (от Ctrl+Alt+F1 до Ctrl+Alt+F6) пользователь может зарегистрироваться и работать в текстовом режиме. Двенадцатая виртуальная консоль (Ctrl+Alt+F12) выполняет функцию системной консоли – на нее выводятся сообщения о происходящих в системе событиях.

⁠Часть IV. OpenNebula [Черновик]

OpenNebula — это платформа облачных вычислений для управления разнородными инфраструктурами распределенных центров обработки данных. Платформа OpenNebula управляет виртуальной инфраструктурой центра обработки данных для создания частных, общедоступных и гибридных реализаций инфраструктуры как службы.

Облачная архитектура определяется 3-мя элементами: хранилищем данных, сетью и системой виртуализации.

OpenNebula состоит из следующих компонентов:

Сервер управления (Front-end) — на нём выполняются сервисы OpenNebula;

Серверы с виртуальными машинами;

Хранилище данных — содержит образы виртуальных машин;

Физическая сеть — обеспечивает связь между хранилищем данных, серверами с виртуальными машинами, поддерживает VLAN-ы для виртуальных машин, а также управление сервисами OpenNebula.

Примечание [Черновик]

Компоненты OpenNebula будут установлены в систему, если при установке дистрибутива выбрать профиль Вычислительный узел Opennebula KVM, Вычислительный узел Opennebula LXC или Сервер управления Opennebula (см. главу Установка системы).

⁠Глава 26. Планирование ресурсов [Черновик]

⁠26.1. Сервер управления [Черновик]

⁠

Таблица 26.1. Минимальные требования к серверу управления [Черновик]

Ресурс

Минимальное значение

Оперативная память

2 ГБ

CPU

1 CPU (2 ядра)

Диск

100 ГБ

Сеть

2 интерфейса

Максимальное количество серверов (узлов виртуализации), управляемых одним сервером управления, зависит от инфраструктуры, особенно от производительности хранилища. Обычно рекомендуется не управлять более чем 500 серверами из одной точки, хотя существуют примеры с более чем 1000 серверами.

⁠26.2. Серверы виртуализации [Черновик]

Серверы виртуализации — это физические машины, на которых выполняются виртуальные машины. Подсистема виртуализации — это компонент, который отвечает за связь с гипервизором, установленным на узлах, и выполнение действий, необходимых для каждого этапа жизненного цикла виртуальной машины (ВМ).

Серверы (узлы) виртуализации имеют следующие характеристики и их рекомендованные значения:

CPU — в обычных условиях каждое ядро, предоставляемое ВМ, должно быть реальным ядром физического процессора. Например, для обслуживания 40 ВМ с двумя процессорами в каждой, облако должно иметь 80 физических ядер. При этом они могут быть распределены по разным серверам: 10 серверов с восемью ядрами или 5 серверов с 16 ядрами на каждом. В случае перераспределения недостаточных ресурсов используются атрибуты CPU и VCPU: CPU определяет физические ядра, выделенные для ВМ, а VCPU — виртуальные ядра для гостевой ОС.

Память — по умолчанию OpenNebula не предоставляет памяти для гостевых систем больше, чем есть на самом деле. Желательно рассчитывать объём памяти с запасом в 10% на гипервизор. Например, для 45 ВМ с 2 ГБ памяти на каждой, необходимо 90 ГБ физической памяти. Важным параметром является количество физических серверов: каждый сервер должен иметь 10% запас для работы гипервизора, так, 10 серверов с 10 ГБ памяти на каждом могут предоставить по 9 ГБ для виртуальных машин и смогут обслужить 45 машин из этого примера (10% от 10 ГБ = 1 ГБ на гипервизор).

⁠26.3. Хранилище данных [Черновик]

OpenNebula работает с двумя видами данных в хранилище: образами ВМ и дисками самих ВМ (подробнее см. Работа с хранилищами в OpenNebula).

Одним из основных способов управления хранилищем данных является ограничение хранилища, доступного для пользователей, путем определения квот по максимальному количеству ВМ, а также максимального объема энергозависимой памяти, который может запросить пользователь, и обеспечения достаточного пространства хранения системных данных и образов, отвечающего предельным установленным квотам. OpenNebula позволяет администратору добавлять хранилища системных данных и образов, если это необходимо.

Планирование хранилища — является критически важным аспектом, поскольку от него зависит производительность облака. Размер хранилищ сильно зависит от базовой технологии. Например, при использовании Ceph для среднего по размеру облака, необходимо взять как минимум 3 сервера в следующей конфигурации: 5 дисков по 1 ТБ, 16 ГБ памяти, 2 CPU по 4 ядра в каждом и как минимум 2 сетевые карты.

⁠26.4. Сетевая инфраструктура [Черновик]

Сетевая инфраструктура должна быть спланирована так, чтобы обеспечить высокую надёжность и пропускную способность. Рекомендуется использовать 2 сетевых интерфейса на сервере управления и по 4 на каждом сервере виртуализации (публичный, внутренний, для управления и для связи с хранилищем).

⁠Глава 27. Запуск сервера управления OpenNebula [Черновик]

⁠27.1. Установка пароля для пользователя oneadmin [Черновик]

При установке OpenNebula система автоматически создает нового пользователя oneadmin, все дальнейшие действия по управлению OpenNebula необходимо выполнять от этого пользователя.

Примечание [Черновик]

Файл /var/lib/one/.one/one_auth будет создан со случайно сгенерированным паролем. Необходимо поменять этот пароль перед запуском OpenNebula.

Для установки пароля для пользователя oneadmin необходимо выполнить команду:

# passwd oneadmin

Теперь зайдя под пользователем oneadmin следует заменить содержимое /var/lib/one/.one/one_auth. Он должен содержать следующее: oneadmin:<пароль>. Например:

$ echo "oneadmin:mypassword" > ~/.one/one_auth

⁠27.2. Настройка MySQL (MariaDB) для хранения конфигурации [Черновик]

По умолчанию OpenNebula работает с SQLite. Если планируется использовать OpenNebula с MySQL, следует настроить данную конфигурацию перед первым запуском OpenNebula, чтобы избежать проблем с учетными данными oneadmin и serveradmin.

Примечание [Черновик]

Задать пароль root для mysql и настройки безопасности:

# mysql_secure_installation

Создать нового пользователя, предоставить ему привилегии в базе данных opennebula (эта база данных будет создана при первом запуске OpenNebula) и настроить уровень изоляции:

$ mysql -u root -p
Enter password:

MariaDB > GRANT ALL PRIVILEGES ON opennebula.* TO 'oneadmin' IDENTIFIED BY '<thepassword>';
Query OK, 0 rows affected (0.003 sec)

MariaDB > SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED;
Query OK, 0 rows affected (0.001 sec)

MariaDB > quit

Перед запуском сервера OpenNebula в первый раз необходимо настроить параметры доступа к базе данных в конфигурационном файле /etc/one/oned.conf:

#DB = [ BACKEND = "sqlite" ]
#       TIMEOUT = 2500 ]

# Sample configuration for MySQL
DB = [ BACKEND = "mysql",
       SERVER  = "localhost",
       PORT    = 0,
       USER    = "oneadmin",
       PASSWD  = "<thepassword>",
       DB_NAME = "opennebula",
       CONNECTIONS = 25,
       COMPARE_BINARY = "no" ]

⁠27.3. Запуск OpenNebula [Черновик]

Для добавления в атозапуск и запуска OpenNebula необходимо выполнить следующие команды:

# systemctl enable --now opennebula
# systemctl enable --now opennebula-sunstone

⁠27.4. Проверка установки [Черновик]

После запуска OpenNebula в первый раз, следует проверить, что команды могут подключаться к демону OpenNebula. Это можно сделать в командной строке или в графическом интерфейсе пользователя: Sunstone.

В командной строке

$ oneuser show
USER 0 INFORMATION
ID              : 0
NAME            : oneadmin
GROUP           : oneadmin
PASSWORD        : 3bc15c8aae3e4124dd409035f32ea2fd6835efc9
AUTH_DRIVER     : core
ENABLED         : Yes

USER TEMPLATE
TOKEN_PASSWORD="ec21d27e2fe4f9ed08a396cbd47b08b8e0a4ca3c"

VMS USAGE & QUOTAS

VMS USAGE & QUOTAS - RUNNING

DATASTORE USAGE & QUOTAS

NETWORK USAGE & QUOTAS

IMAGE USAGE & QUOTAS

Можно также попробовать войти в веб-интерфейс Sunstone. Для этого необходимо перейти по адресу http://<внешний адрес>:9869. Если все в порядке, будет предложена страница входа.

Необходимо ввести в соответствующие поля имя пользователя (oneadmin) и пароль пользователя (тот, который находится в файле /var/lib/one/.one/one_auth):

После входа в систему будет доступна панель инструментов:

Примечание [Черновик]

Для смены языка интерфейса необходимо в левом меню выбрать пункт Settings, и на открывшейся странице в выпадающем списке Language выбрать пункт Russian (ru_RU):

Язык интерфейса будет изменён на русский:

⁠27.5. Ключи для доступа по SSH [Черновик]

Сервер управления OpenNebula подключается к узлам гипервизора по SSH. Необходимо распространить открытый ключ пользователя oneadmin со всех машин в файл /var/lib/one/.ssh/authorized_keys на всех машинах.

При установке сервера управления OpenNebula ключ SSH был сгенерирован и добавлен в авторизованные ключи. Необходимо синхронизировать id_rsa, id_rsa.pub и authorized_keys сервера управления и узлов. Кроме того, следует создать файл known_hosts и также синхронизировать его с узлами. Чтобы создать файл known_hosts, необходимо выполнить следующую команду (от пользователя oneadmin на сервере управления) со всеми именами узлов и именем сервера управления в качестве параметров:

$ ssh-keyscan <сервер_управления> <узел1> <узел2> <узел3> ... >> /var/lib/one/.ssh/known_hosts

Примечание [Черновик]

Команду ssh-keyscan необходимо выполнить, как для имён, так и для IP-адресов узлов/сервера управления:

$ ssh-keyscan <IP-узел1> <hostname-узел1> ... >> /var/lib/one/.ssh/known_hosts

Например:

$ ssh-keyscan 192.168.0.185 server 192.168.0.190 host-01 >> /var/lib/one/.ssh/known_hosts

Далее необходимо скопировать каталог /var/lib/one/.ssh на все узлы. Самый простой способ — установить временный пароль для oneadmin на всех узлах и ​​скопировать каталог с сервера управления:

$ scp -rp /var/lib/one/.ssh <узел1>:/var/lib/one/
$ scp -rp /var/lib/one/.ssh <узел2>:/var/lib/one/
$ scp -rp /var/lib/one/.ssh <узел3>:/var/lib/one/
...

После этого следует убедиться, что ни одно из этих подключений (под пользователем oneadmin) не заканчивается ошибкой, и пароль не запрашивается:

от сервера управления к самому серверу управления;

от сервера управления ко всем узлам;

от всех узлов на все узлы;

от всех узлов к серверу управления.

Эту проверку можно выполнить, например, на сервере управления:

# от сервера управления к самому серверу управления
ssh <сервер_управления>
exit

# от сервера управления к узлу1, обратно на сервер управления и к другим узлам
ssh <узел1>
ssh <сервер_управления>
exit
ssh <узел2>
exit
ssh <узел3>
exit
exit

И так далее для всех узлов.

Если требуется дополнительный уровень безопасности, можно хранить закрытый ключ только на сервере управления, а не копировать его на весь гипервизор. Таким образом, пользователь oneadmin в гипервизоре не сможет получить доступ к другим гипервизорам. Это достигается путем изменения /var/lib/one/.ssh/config на сервере управления и добавления параметра ForwardAgent к узлам гипервизора для пересылки ключа:

$ cat /var/lib/one/.ssh/config
 Host host-01
    User oneadmin
    ForwardAgent yes
 Host host-02
    User oneadmin
    ForwardAgent yes

⁠27.6. Конфигурация сети [Черновик]

Сервисам, работающим на сервере управления, необходим доступ к узлам с целью управления гипервизорами и их мониторинга, а также для передачи файлов образов. Для этой цели рекомендуется использовать выделенную сеть.

Примечание [Черновик]

Настройка сети необходима только на серверах с виртуальными машинами. Точное имя ресурсов (br0, br1 и т.д.) значения не имеет, но важно, чтобы мосты и сетевые карты имели одно и то же имя на всех узлах.

⁠Глава 28. Настройка узлов [Черновик]

⁠28.1. Установка и настройка узла OpenNebula KVM [Черновик]

Перед добавлением узла типа KVM на сервер OpenNebula следует настроить узел KVM.

Для создания узла типа KVM при установке дистрибутива нужно выбрать профиль Вычислительный узел Opennebula KVM (см. главу Установка системы):

Примечание [Черновик]

Для создания узла типа KVM в уже установленной системе можно установить пакет opennebula-node-kvm:

# apt-get install opennebula-node-kvm

И добавить службу libvirtd в автозапуск и запустить её:

# systemctl enable --now libvirtd

После создания узла следует задать пароля для пользователя oneadmin:

# passwd oneadmin

и настроить доступ по SSH (см. раздел Ключи для доступа по SSH).

⁠28.2. Установка и настройка узла OpenNebula LXC [Черновик]

LXD — это гипервизор LXC контейнеров.

Перед добавлением хоста типа LXC на сервер OpenNebula следует настроить узел LXC.

Важно [Черновик]

Для работы с LXC в OpenNebula должна быть настроена пара хранилищ (хранилище образов и системное) НЕ типа qcow2 (например, shared или ssh).

Для создания узла типа LXC, при установке дистрибутива нужно выбрать профиль Вычислительный узел Opennebula LXC (см. главу Установка системы):

Примечание [Черновик]

Для создания узла типа LXC в уже установленной системе необходимо выполнить следующие шаги:

установить пакет opennebula-node-lxc:

# apt-get install opennebula-node-lxc

запустить и добавить в автозапуск lxc:

# systemctl enable --now lxc

После создания узла следует задать пароля для пользователя oneadmin:

# passwd oneadmin

и настроить доступ по SSH (см. раздел Ключи для доступа по SSH).

⁠Глава 29. Добавление узлов в OpenNebula [Черновик]

Чтобы использовать существующие физические узлы, их необходимо зарегистрировать в OpenNebula. Этот шаг может быть выполнен в командной строке или в графическом пользовательском интерфейсе Sunstone.

Примечание [Черновик]

Перед добавлением узла следует убедиться, что к узлу можно подключиться по SSH без запроса пароля.

⁠29.1. Добавление узла типа KVM в OpenNebula-Sunstone [Черновик]

Для добавления узла, необходимо в левом меню выбрать Инфраструктура → Узлы и на загруженной странице нажать кнопку +:

Далее необходимо указать тип виртуализации, заполнить поле Имя хоста (можно ввести IP-адрес узла или его имя) и нажать кнопку Создать:

Затем следует вернуться к списку узлов и убедиться, что узел перешел в состояние ВКЛ (это должно занять от 20 секунд до 1 минуты, можно нажать кнопку Обновить для обновления состояния):

Далее на этой вкладке можно включать, отключать, удалять и просматривать информацию об узлах.

⁠29.2. Добавление узла типа LXС в OpenNebula-Sunstone [Черновик]

Для добавления узла типа LXС на сервере OpenNebula, необходимо в левом меню выбрать Инфраструктура → Узлы и на загруженной странице нажать кнопку +:

Далее необходимо указать тип виртуализации — LXС, заполнить поле Имя хоста (можно ввести IP-адрес узла или его имя) и нажать кнопку Создать:

Затем следует вернуться к списку узлов и убедиться, что узел перешел в состояние ВКЛ (это должно занять от 20 секунд до 1 минуты).

⁠29.3. Работа с узлами в командной строке [Черновик]

onehost — это инструмент управления узлами в OpenNebula. Описание всех доступных опций утилиты onehost можно получить, выполнив команду:

$ man onehost

Для добавления узла KVM в облако, необходимо выполнить следующую команду от oneadmin на сервере управления:

$ onehost create host-01 --im kvm --vm kvm
ID: 0

Команда добавления узла типа LXС:

$ onehost create host-02 --im lxс --vm lxс
ID: 1

Список узлов можно просмотреть, выполнив команду:

$ onehost list
  ID NAME         CLUSTER    TVM      ALLOCATED_CPU      ALLOCATED_MEM STAT
   1 host-02      default      0       0 / 100 (0%)     0K / 945M (0%) on
   0 host-01      default      0     0 / 10000 (0%)     0K / 7.6G (0%) on

Примечание [Черновик]

Если возникли проблемы с добавлением узла, то, скорее всего, неправильно настроен SSH. Ошибки можно просмотреть в /var/log/one/oned.log.

Для указания узла можно использовать его ID или имя. Например, удаление узла с указанием ID:

$ onehost delete 1

или имени:

$ onehost delete host-02

Изменение статуса узла:

$ onehost disable host-01 // деактивировать узел
$ onehost enable host-01 // активировать узел
$ onehost offline host-01 // полностью выключить узел

Примечание [Черновик]

Команды onehost disable и onehost offline не меняют состояние уже работающих на узле ВМ. Если необходимо автоматически перенести работающие ВМ, следует использовать команду onehost flush.

Команда onehost flush перенесет все активные ВМ с указанного узла на другой сервер с достаточной емкостью. При этом указанный узел будет отключен. Эта команда полезна для очистки узла от активных ВМ. Процесс миграции можно выполнить с помощью переноса (resched) или действия восстановления, удаления и воссоздания. Это поведение можно настроить в /etc/one/cli/onehost.yaml, установив в поле default_actions\flush значение delete-recreate или resched. Например:

:default_actions:
  - :flush: resched

Просмотр информации об узле:

$ onehost show host-01

Вывод данной команды содержит:

общую информацию об узле;

информацию о процессоре и объёме оперативной памяти (Host Shares);

информацию о локальном хранилище данных (Local System Datastore), если узел настроен на использование локального хранилища данных;

данные мониторинга;

информацию о ВМ, запущенных на узле.

⁠Глава 30. Виртуальные сети [Черновик]

OpenNebula позволяет создавать виртуальные сети, отображая их поверх физических.

При запуске новой ВМ OpenNebula подключит свои виртуальные сетевые интерфейсы (определяемые атрибутами NIC) к сетевым устройствам гипервизора, так как определено в соответствующей виртуальной сети. Это позволит ВМ иметь доступ к публичным и частным сетям.

onevnet — инструмент управления виртуальными сетями в OpenNebula. Описание всех доступных опций утилиты onevnet можно получить, выполнив команду:

$ man onevnet

Вывести список виртуальных сетей можно, выполнив команду:

$ onevnet list
  ID USER     GROUP    NAME              CLUSTERS   BRIDGE               LEASES
   2 oneadmin oneadmin VirtNetwork       0          onebr2               0
   0 oneadmin oneadmin LAN               0          vmbr0                1

Вывести информацию о сети:

$ onevnet show 0

Создавать, редактировать, удалять и просматривать информацию о виртуальных сетях можно в веб-интерфейсе:

OpenNebula поддерживает следующие сетевые режимы:

Bridged (режим Сетевой мост) — сетевой адаптер ВМ напрямую соединяется с существующим мостом в узле виртуализации;

802.1Q (режим VLAN) — сетевой адаптер ВМ соединяется с существующим мостом в узле виртуализации, а виртуальная сеть настраивается для изоляции VLAN 802.1Q;

VXLAN — сетевой адаптер ВМ соединяется с существующим мостом в узле виртуализации, а виртуальная сеть реализует изоляцию с помощью инкапсуляции VXLAN;

Open vSwitch — сетевой адаптер ВМ соединяется с существующим мостом Open vSwitch в узле виртуализации, а виртуальная сеть дополнительно обеспечивает изоляцию VLAN 802.1Q;

Open vSwitch — VXLAN — сетевой адаптер ВМ соединяется с существующим мостом Open vSwitch в узле виртуализации, а виртуальная сеть дополнительно обеспечивает изоляцию с помощью инкапсуляции VXLAN и, при необходимости, VLAN 802.1Q.

Атрибут VN_MAD виртуальной сети определяет, какой из вышеуказанных сетевых режимов используется.

⁠30.1. Режим Bridged [Черновик]

В этом режиме трафик ВМ передается напрямую через мост Linux на узлах гипервизора. Мостовые сети могут работать в трёх различных режимах в зависимости от дополнительной фильтрации трафика, выполняемой OpenNebula:

Bridged — сетевой мост без фильтрации, управляемый мост;

Bridged & Security Groups (сетевой мост с группами безопасности) — для реализации правил групп безопасности устанавливаются правила iptables;

Bridged & ebtables VLAN (сетевой мост с правилами ebtables) — аналогично Bridged & Security Groups, плюс дополнительные правила ebtables для обеспечения изоляции L2 виртуальных сетей.

При фильтрации трафика необходимо учитывать следующее:

в режимах Bridged и Bridged & Security Groups для обеспечения сетевой изоляции можно добавлять тегированные сетевые интерфейсы;

режим Bridged with ebtables VLAN предназначен для небольших сред без соответствующей аппаратной поддержки для реализации VLAN. Данный режим ограничен сетями /24 и IP-адреса не могут перекрываться в виртуальных сетях. Этот режим рекомендуется использовать только в целях тестирования.

На узле виртуализации необходимо создать сетевой мост для каждой сети, в которой будут работать ВМ. При этом следует использовать одно имя сети на всех узлах.

⁠

Таблица 30.1. Параметры виртуальной сети в режиме Bridged [Черновик]

Параметр

Значение

Обязательный

NAME

Имя виртуальной сети

Да

VN_MAD

Режим:

bridge — режим без фильтрации;

fw — фильтрация с группами безопасности;

ebtables — фильтрация с изоляцией ebtables;

Да

BRIDGE

Имя сетевого моста в узлах виртуализации

Нет

PHYDEV

Имя физического сетевого устройства (на узле виртуализации), которое будет подключено к мосту

Нет

AR

Диапазон адресов, доступных в виртуальной сети

Нет

Пример создания виртуальной сети с использованием конфигурационного файла:

Создать файл net-bridged.conf со следующим содержимым:

NAME = "VirtNetwork"
VN_MAD = "bridge"
BRIDGE = "vmbr0"
PHYDEV = "enp3s0"

AR=[
    TYPE = "IP4",
    IP   = "192.168.0.140",
    SIZE = "5"
]

Выполнить команду:

$ onevnet create net-bridged.conf
ID: 1

Пример создания виртуальной сети в веб-интерфейсе:

в левом меню выбрать пункт Сеть → Вирт. сети, на загруженной странице нажать кнопку + и выбрать пункт Создать.

на вкладке Общие указать название виртуальной сети:

на вкладке Конфигурация необходимо указать интерфейс сетевого моста, выбрать режим работы сети:

на вкладке Адреса можно указать диапазон IP-адресов, который будет использоваться при выделении IP-адресов для ВМ:

нажать кнопку Создать.

Примечание [Черновик]

Если в качестве интерфейса моста указать интерфейс, через который производится управление и доступ к узлу, то при запуске ВМ этот интерфейс будет автоматически включен в сетевой мост и соединение с сервером будет потеряно. Поэтому в качестве интерфейса, на котором будут автоматически создаваться сетевые мосты (bridge) для виртуальных сетей, необходимо использовать отдельный сетевой интерфейс (в примере интерфейс enp3s0).

⁠30.2. Режим 802.1Q VLAN [Черновик]

В этом режиме для каждой виртуальной сети OpenNebula создаётся мост, сетевой интерфейс подключается к этому мосту с тегами VLAN. Этот механизм соответствует стандарту IEEE 802.1Q.

Идентификатор VLAN будет автоматически назначен OpenNebula и будет одинаков для каждого интерфейса в данной сети. Идентификатор VLAN также можно назначить принудительно, указав параметр VLAN_ID в шаблоне виртуальной сети.

Идентификатор VLAN рассчитывается в соответствии со следующим параметром конфигурации /etc/one/oned.conf:

VLAN_IDS = [
    START    = "2",
    RESERVED = "0, 1, 4095"
]

Драйвер сначала попытается выделить VLAN_IDS[START] + VNET_ID где

START — первый VLAN_ID, который будет использоваться;

RESERVED — список VLAN_ID или диапазонов, которые не будут назначаться виртуальной сети (два числа, разделенные двоеточием, обозначают диапазон).

⁠

Таблица 30.2. Параметры виртуальной сети в режиме 802.1Q [Черновик]

Параметр

Значение

Обязательный

NAME

Имя виртуальной сети

Да

VN_MAD

802.1Q

Да

BRIDGE

Имя сетевого моста (по умолчанию onebr<net_id> или onebr.<vlan_id>)

Нет

PHYDEV

Имя физического сетевого устройства (на узле виртуализации), которое будет подключено к мосту

Да

VLAN_ID

ID сети VLAN (если не указан и AUTOMATIC_VLAN_ID = "YES", то идентификатор будет сгенерирован)

Да (если AUTOMATIC_VLAN_ID = "NO")

AUTOMATIC_VLAN_ID

Генерировать VLAN_ID автоматически

Да (если не указан VLAN_ID)

MTU

MTU для тегированного интерфейса и моста

Нет

AR

Диапазон адресов, доступных в виртуальной сети

Нет

Пример создания виртуальной сети с использованием конфигурационного файла:

Создать файл net-vlan.conf со следующим содержимым:

NAME = "VLAN"
VN_MAD = "802.1Q"
BRIDGE = "vmbr1"
PHYDEV = "enp3s0"
AUTOMATIC_VLAN_ID = "Yes"
AR=[
    TYPE = "IP4",
    IP   = "192.168.0.150",
    SIZE = "5"
]

Выполнить команду:

$ onevnet create net-vlan.conf
ID: 6

Пример создания виртуальной сети в режиме 802.1Q в веб-интерфейсе:

В этом примере драйвер проверит наличие моста vmbr1. Если его не существует, он будет создан. Сетевой интерфейс enp3s0 будет помечен тегом (например, enp3s0.7) и подсоединён к vmbr1.

⁠30.3. Режим VXLAN [Черновик]

В режиме VXLAN (Virtual eXtensible Local Area Network) для каждой виртуальной сети OpenNebula создаётся мост, сетевой интерфейс подключается к этому мосту с тегами VXLAN.

Идентификатор VLAN будет автоматически назначен OpenNebula и будет одинаков для каждого интерфейса в данной сети. Идентификатор VLAN также можно назначить принудительно, указав параметр VLAN_ID в шаблоне виртуальной сети.

С каждой сетью VLAN связывается адрес многоадресной рассылки для инкапсуляции широковещательного и многоадресного трафика L2. По умолчанию данный адрес будет принадлежать диапазону 239.0.0.0/8 в соответствии с RFC 2365 (многоадресная IP-адресация с административной областью). Адрес многоадресной рассылки получается путем добавления значения атрибута VLAN_ID к базовому адресу 239.0.0.0/8.

В данном сетевом режиме задействован стандартный UDP-порт сервера 8472.

Примечание [Черновик]

Сетевой интерфейс, который будет выступать в роли физического устройства, должен иметь IP-адрес.

Начальный идентификатор VXLAN можно указать в файле /etc/one/oned.conf:

VXLAN_IDS = [
    START = "2"
]

⁠

Таблица 30.3. Параметры виртуальной сети в режиме VXLAN [Черновик]

Параметр

Значение

Обязательный

NAME

Имя виртуальной сети

Да

VN_MAD

vxlan

Да

BRIDGE

Имя сетевого моста (по умолчанию onebr<net_id> или onebr.<vlan_id>)

Нет

PHYDEV

Имя физического сетевого устройства, которое будет подключено к мосту

Нет

VLAN_ID

ID сети VLAN (если не указан и AUTOMATIC_VLAN_ID = "YES", то идентификатор будет сгенерирован)

Да (если AUTOMATIC_VLAN_ID = "NO")

AUTOMATIC_VLAN_ID

Генерировать VLAN_ID автоматически

Да (если не указан VLAN_ID)

MTU

MTU для тегированного интерфейса и моста

Нет

AR

Диапазон адресов, доступных в виртуальной сети

Нет

Пример создания виртуальной сети с использованием конфигурационного файла:

Создать файл net-vxlan.conf со следующим содержимым:

NAME = "vxlan"
VN_MAD = "vxlan"
BRIDGE = "vxlan50"
PHYDEV = "enp3s0"
VLAN_ID = 50
AR=[
    TYPE = "IP4",
    IP   = "192.168.0.150",
    SIZE = "5"
]

Выполнить команду:

$ onevnet create net-vxlan.conf
ID: 7

Пример создания виртуальной сети в режиме VXLAN в веб-интерфейсе:

В этом примере драйвер проверит наличие моста vxlan50. Если его не существует, он будет создан. Сетевой интерфейс enp3s0 будет помечен тегом (enp3s0.10) и подсоединён к vxlan50.

⁠30.4. Режим Open vSwitch [Черновик]

Сети Open vSwitch создаются на базе программного коммутатора Open vSwitch.

Примечание [Черновик]

На узлах виртуализации должен быть установлен пакет openvswitch:

# apt-get install openvswitch

Запупущена и добавлена в автозагрузку служба openvswitch:

# systemctl enable --now openvswitch.service

Идентификатор VLAN будет автоматически назначен OpenNebula и будет одинаков для каждого интерфейса в данной сети. Идентификатор VLAN также можно назначить принудительно, указав параметр VLAN_ID в шаблоне виртуальной сети.

Идентификатор VLAN можно настроить в файле /etc/one/oned.conf:

VLAN_IDS = [
    START    = "2",
    RESERVED = "0, 1, 4095"
]

⁠

Таблица 30.4. Параметры виртуальной сети в режиме Open vSwitch [Черновик]

Параметр

Значение

Обязательный

NAME

Имя виртуальной сети

Да

VN_MAD

ovswitch

Да

BRIDGE

Имя сетевого моста Open vSwitch

Нет

PHYDEV

Имя физического сетевого устройства, которое будет подключено к мосту

Нет (если не используются VLAN)

VLAN_ID

ID сети VLAN (если не указан и AUTOMATIC_VLAN_ID = "YES", то идентификатор будет сгенерирован)

Нет

AUTOMATIC_VLAN_ID

Генерировать VLAN_ID автоматически (игнорируется, если определен VLAN_ID)

Нет

MTU

MTU для моста Open vSwitch

Нет

AR

Диапазон адресов, доступных в виртуальной сети

Нет

Пример создания виртуальной сети с использованием конфигурационного файла:

Создать файл net-ovs.conf со следующим содержимым:

NAME = "OVS"
VN_MAD = "ovswitch"
BRIDGE = "vmbr1"
AR=[
    TYPE = "IP4",
    IP   = "192.168.0.150",
    SIZE = "5"
]

Выполнить команду:

$ onevnet create net-ovs.conf
ID: 8

Пример создания виртуальной сети в режиме Open vSwitch в веб-интерфейсе:

⁠30.5. VXLAN в Open vSwitch [Черновик]

В качестве основы используется оверлейная сеть VXLAN с Open vSwitch (вместо обычного моста Linux). Трафик на самом низком уровне изолируется протоколом инкапсуляции VXLAN, а Open vSwitch обеспечивает изоляцию второго уровня с помощью тегов VLAN 802.1Q внутри инкапсулированного трафика. Основная изоляция всегда обеспечивается VXLAN, а не VLAN 802.1Q. Если для изоляции VXLAN требуется 802.1Q, драйвер необходимо настроить с использованием созданного пользователем физического интерфейса с тегами 802.1Q.

⁠

Таблица 30.5. Параметры виртуальной сети в режиме Open vSwitch VXLAN [Черновик]

Параметр

Значение

Обязательный

NAME

Имя виртуальной сети

Да

VN_MAD

ovswitch_vxlan

Да

BRIDGE

Имя сетевого моста Open vSwitch

Нет

PHYDEV

Имя физического сетевого устройства, которое будет подключено к мосту

Да

OUTER_VLAN_ID

ID внешней сети VXLAN (если не указан и AUTOMATIC_OUTER_VLAN_ID = "YES", то идентификатор будет сгенерирован)

Да (если AUTOMATIC_OUTER_VLAN_ID = "NO")

AUTOMATIC_OUTER_VLAN_ID

Генерировать ID автоматически (игнорируется, если определен OUTER_VLAN_ID)

Да (если не указан OUTER_VLAN_ID)

VLAN_ID

Внутренний идентификатор VLAN 802.1Q. (если не указан и AUTOMATIC_VLAN_ID = "YES", то идентификатор будет сгенерирован)

Нет

AUTOMATIC_VLAN_ID

Генерировать VLAN_ID автоматически (игнорируется, если определен VLAN_ID)

Нет

MTU

MTU для интерфейса и моста VXLAN

Нет

AR

Диапазон адресов, доступных в виртуальной сети

Нет

Пример создания виртуальной сети с использованием конфигурационного файла:

Создать файл net-ovsx.conf со следующим содержимым:

NAME = "private"
VN_MAD = "ovswitch_vxla"
PHYDEV = "eth0"
BRIDGE = "ovsvxbr0.10000"
OUTER_VLAN_ID = 10000
VLAN_ID = 50
AR=[
    TYPE = "IP4",
    IP   = "192.168.0.150",
    SIZE = "5"
]

Выполнить команду:

$ onevnet create net-ovsx.conf
ID: 11

В этом примере драйвер проверит наличие моста ovsvxbr0.10000. Если его нет, он будет создан. Также будет создан интерфейс VXLAN eth0.10000 и подключен к мосту Open vSwitch ovsvxbr0.10000. При создании экземпляра виртуальной машины ее порты моста будут помечены идентификатором 802.1Q VLAN ID 50.

Пример создания виртуальной сети в режиме Open vSwitch VXLAN в веб-интерфейсе:

⁠Глава 31. Работа с хранилищами в OpenNebula [Черновик]

⁠31.1. Типы хранилищ [Черновик]

OpenNebula использует три типа хранилищ данных:

хранилище образов (Images Datastore) — используется для хранения образов ВМ, которые можно использовать для создания ВМ;

системное хранилище (System Datastore) — используется для хранения дисков ВМ, работающих в текущий момент. Образы дисков перемещаются, или клонируются, в хранилище образов или из него при развертывании и отключении ВМ, при подсоединении или фиксировании мгновенного состояния дисков;

хранилище файлов и ядер (Files & Kernels Datastore) — используется для хранения простых файлов, используемых в контекстуализации, или ядер ВМ, используемых некоторыми гипервизорами.

В зависимости от назначения выделяют два типа образов:

постоянные (persistent) — предназначены для хранения пользовательских данных (например, БД). Изменения, внесенные в такие образы, будут сохранены после завершения работы ВМ. В любой момент времени может быть только одна ВМ, использующая постоянный образ.

непостоянные (non-persistent) — используются для хранения дисков ВМ, работающих в текущий момент. Образы дисков копируются, или клонируются, в хранилище образов или из него при развертывании и отключении ВМ, при подсоединении или фиксировании мгновенного состояния дисков. После удаления ВМ копия образа в системном хранилище также удаляется.

Образы дисков передаются между хранилищем образов и системным хранилищем с помощью драйверов Transfer Manager (TM). Эти драйверы представляют собой специальные элементы ПО, которые выполняют низкоуровневые операции хранения.

Образы сохраняются в соответствующий каталог хранилища (/var/lib/one/datastores/<идентификатор_хранилища>). Кроме того, для каждой работающей ВМ существует каталог /var/lib/one/datastores/<идентификатор_хранилища>/<идентификатор_ВМ> в соответствующем системном хранилище. Эти каталоги содержат диски ВМ и дополнительные файлы, например, контрольные точки или снимки.

Например, система с хранилищем образов (1) с тремя образами и тремя ВМ (ВМ 0 и 2 работают, 7 — остановлена), развернутыми на системном хранилище (0), будет иметь следующую структуру:

/var/lib/one/datastores
|-- 0/
|   |-- 0/
|   |   |-- disk.0
|   |   `-- disk.1
|   |-- 2/
|   |   `-- disk.0
|   `-- 7/
|       |-- checkpoint
|       `-- disk.0
`-- 1
|-- 19217fdaaa715b04f1c740557826514b
|-- 99f93bd825f8387144356143dc69787d
`-- da8023daf074d0de3c1204e562b8d8d2

Драйвер передачи ssh использует локальную файловую систему узлов для размещения образов работающих ВМ. Все файловые операции выполняются локально, но образы всегда приходится копировать на узлы, что может оказаться очень ресурсоемкой операцией.

Драйвер shared предполагает, что на всех узлах установлена и настроена распределенная файловая система, например, NFS. Все файловые операции (ln, cp и т.д.) выполняются на узле виртуализации. Данный метод передачи сокращает время развертывания ВМ и обеспечивает возможность динамического перемещения.

Драйвер lvm рекомендуется использовать при наличии высокопроизводительной сети SAN. Один и тот же LUN можно экспортировать на все узлы, а ВМ будут работать непосредственно из SAN. При этом образы хранятся как обычные файлы (в /var/lib/one/datastores//<идентификатор_хранилища>) в хранилище образов, но при создании ВМ они будут сброшены в логические тома (LV). ВМ будут запускаться с логических томов узла.

⁠31.2. Хранилища по умолчанию [Черновик]

По умолчанию в OpenNebula созданы три хранилища: хранилище образов (Images), системное (System) и файлов (Files).

По умолчанию хранилища настроены на использование локальной файловой системы (каталоги /var/lib/one/datastores/<идентификатор_хранилища>). При этом для передачи данных между хранилищем образов и системным хранилищем используется метод ssh.

Примечание [Черновик]

Стандартный путь для хранилищ /var/lib/one/datastores/ можно изменить, указав нужный путь в параметре DATASTORE_LOCATION в конфигурационном файле /etc/one/oned.conf.

onedatastore — инструмент управления хранилищами в OpenNebula. Описание всех доступных опций утилиты onedatastore можно получить, выполнив команду:

$ man onedatastore

Вывести список хранилищ данных можно, выполнив команду:

$ onedatastore list
ID NAME                       SIZE AVA CLUSTERS IMAGES TYPE DS      TM      STAT
2 files                      95.4G 91% 0             1 fil  fs      ssh     on
1 default                    95.4G 91% 0             8 img  fs      ssh     on
0 system                         - -   0             0 sys  -       ssh     on

Вывести информацию о хранилище образов:

$ onedatastore show default
DATASTORE 1 INFORMATION
ID             : 1
NAME           : default
USER           : oneadmin
GROUP          : oneadmin
CLUSTERS       : 0
TYPE           : IMAGE
DS_MAD         : fs
TM_MAD         : ssh
BASE PATH      : /var/lib/one//datastores/1
DISK_TYPE      : FILE
STATE          : READY

DATASTORE CAPACITY
TOTAL:         : 95.4G
FREE:          : 55.9G
USED:          : 34.6G
LIMIT:         : -

PERMISSIONS
OWNER          : um-
GROUP          : u--
OTHER          : ---

DATASTORE TEMPLATE
ALLOW_ORPHANS="YES"
CLONE_TARGET="SYSTEM"
DISK_TYPE="FILE"
DS_MAD="fs"
LN_TARGET="SYSTEM"
RESTRICTED_DIRS="/"
SAFE_DIRS="/var/tmp"
TM_MAD="ssh"
TYPE="IMAGE_DS"

IMAGES
0
1
2
17

Вывести информацию о системном хранилище:

$ onedatastore show system
DATASTORE 0 INFORMATION
ID             : 0
NAME           : system
USER           : oneadmin
GROUP          : oneadmin
CLUSTERS       : 0
TYPE           : SYSTEM
DS_MAD         : -
TM_MAD         : ssh
BASE PATH      : /var/lib/one//datastores/0
DISK_TYPE      : FILE
STATE          : READY

DATASTORE CAPACITY
TOTAL:         : -
FREE:          : -
USED:          : -
LIMIT:         : -

PERMISSIONS
OWNER          : um-
GROUP          : u--
OTHER          : ---

DATASTORE TEMPLATE
ALLOW_ORPHANS="YES"
DISK_TYPE="FILE"
DS_MIGRATE="YES"
RESTRICTED_DIRS="/"
SAFE_DIRS="/var/tmp"
SHARED="NO"
TM_MAD="ssh"
TYPE="SYSTEM_DS"

IMAGES

Информация о хранилище содержит следующие разделы:

INFORMATION — содержит базовую информацию о хранилище (название, путь к файлу хранилища, тип) и набор драйверов (DS_MAD и TM_MAD), используемых для хранения и передачи образов;

CAPACITY — содержит основные показатели использования (общее, свободное и использованное пространство);

TEMPLATE — содержит атрибуты хранилища;

IMAGES — список образов, хранящихся в данный момент в этом хранилище.

В данном примере хранилище образов использует файловый драйвер (DS_MAD="fs") и протокол SSH для передачи (TM_MAD=ssh). Для системного хранилища определен только драйвер передачи (TM_MAD). Для системного хранилища также не указываются показатели использования (CAPACITY), так как драйвер ssh использует локальную область хранения каждого узла.

Примечание [Черновик]

Чтобы проверить доступное пространство на конкретном узле, можно воспользоваться командой onehost show.

В зависимости используемого драйвера хранилища и инфраструктуры, для описания хранилища используются определенные атрибуты. Эти атрибуты описаны в следующих разделах. Кроме того, существует набор общих атрибутов, которые можно использовать в любом хранилище. Эти атрибуты описаны в таблице ниже.

⁠

Таблица 31.1. Общие атрибуты хранилищ [Черновик]

Атрибут

Описание

Description

Описание

RESTRICTED_DIRS

Каталоги, которые нельзя использовать для размещения образов. Список каталогов, разделенный пробелами.

SAFE_DIRS

Разрешить использование каталога, указанного в разделе RESTRICTED_DIRS, для размещения образов. Список каталогов, разделенный пробелами.

NO_DECOMPRESS

Не пытаться распаковать файл, который нужно зарегистрировать.

LIMIT_TRANSFER_BW

Максимальная скорость передачи при загрузке образов с URL-адреса http/https (в байтах/секунду). Могут использоваться суффиксы K, M или G.

DATASTORE_CAPACITY_CHECK

Проверять доступную емкость хранилища данных перед созданием нового образа.

LIMIT_MB

Максимально допустимая емкость хранилища данных в МБ.

BRIDGE_LIST

Список мостов узла, разделенных пробелами, которые имеют доступ к хранилищу для добавления новых образов в хранилище.

STAGING_DIR

Путь на узле моста хранения для копирования образа перед его перемещением в конечный пункт назначения. По умолчанию /var/tmp.

DRIVER

Применение специального драйвера сопоставления изображений. Данный атрибут переопределяет DRIVER образа, установленный в атрибутах образа и шаблоне ВМ.

COMPATIBLE_SYS_DS

Только для хранилищ образов. Установить системные хранилища данных, которые можно использовать с данным хранилищем образов (например, «0,100»).

CONTEXT_DISK_TYPE

Указывает тип диска, используемый для контекстных устройств: BLOCK или FILE (по умолчанию).

Примечание [Черновик]

Для использования BRIDGE_LIST, следует установить любой инструмент, необходимый для доступа к базовому хранилищу, а также универсальные инструменты, такие как qemu-img.

Системные хранилища можно отключить, чтобы планировщик не мог развернуть в них новую ВМ. При этом существующие ВМ продолжат работать. Отключение хранилища:

$ onedatastore disable system
$ onedatastore show system
DATASTORE 0 INFORMATION
ID             : 0
NAME           : system
...
STATE          : DISABLED
...

Создавать, включать, отключать, удалять и просматривать информацию о хранилищах можно в веб-интерфейсе:

⁠31.3. Создание хранилищ [Черновик]

Для создания хранилища необходимо выполнить следующие действия:

подготовить систему хранения данных в соответствии с выбранной технологией хранения;

создать хранилище в OpenNebula, указав его имя, тип и метод передачи данных;

смонтировать подготовленную систему хранения данных в каталог хранилища (на узле управления и узлах виртуализации).

⁠31.3.1. Локальное хранилище [Черновик]

Данная конфигурация использует локальную область хранения каждого узла для запуска ВМ. Кроме того, потребуется место для хранения образа диска ВМ. Образы дисков передаются с сервера управления на узлы по протоколу SSH.

На сервере управления в /var/lib/one/datastores/ должно быть достаточно места для:

хранилища образов;

системного хранилища (для временных дисков и файлов остановленных и неразвернутых ВМ).

На узле виртуализации в /var/lib/one/datastores/ должно быть достаточно места для хранения дисков ВМ, работающих на этом узле.

Необходимо зарегистрировать два хранилища (системное и хранилище образов).

Чтобы создать новое системное хранилище, необходимо указать следующие параметры:

NAME — название хранилища;

TYPE — SYSTEM_DS;

TM_MAD — shared (для режима общей передачи), qcow2 (для режима передачи qcow2), ssh (для режима передачи ssh).

Зарегистрировать системное хранилище можно как веб-интерфейсе Sunstone:

Так и в командной строке. Например, для создания системного хранилища можно создать файл systemds.conf со следующим содержимым:

NAME    = local_system
TM_MAD  = ssh
TYPE    = SYSTEM_DS

И выполнить команду:

$ onedatastore create systemds.conf
ID: 101

Чтобы создать новое хранилище образов, необходимо указать следующие параметры:

NAME — название хранилища;

DS_MAD — fs (драйвер хранилища данных);

TYPE — IMAGE_DS;

TM_MAD — shared (для режима общей передачи), qcow2 (для режима передачи qcow2), ssh (для режима передачи ssh).

Примечание [Черновик]

Необходимо использовать одинаковый метод передачи данных TM_MAD для системного хранилища и для хранилища образов.

Зарегистрировать хранилище образов можно как веб-интерфейсе Sunstone, так и в командной строке. Например, для создания хранилища образов можно создать файл imageds.conf со следующим содержимым:

NAME    = local_image
TM_MAD  = ssh
TYPE    = IMAGE_DS
DS_MAD  = fs

И выполнить команду:

$ onedatastore create imageds.conf
ID: 102

⁠31.3.2. Хранилище NFS/NAS [Черновик]

Эта конфигурация хранилища предполагает, что на узлах монтируются каталоги, расположенные на сервере NAS (сетевое хранилище). Эти каталоги используются для хранения файлов образов дисков ВМ. ВМ также будут загружаться с общего каталога.

Масштабируемость этого решения ограничена производительностью NAS-сервера.

Примечание [Черновик]

В /var/lib/one/datastores/ можно смонтировать каталог с любого сервера NAS/SAN в сети.

Необходимо зарегистрировать два хранилища (системное и хранилище образов).

Чтобы создать новое системное хранилище, необходимо указать следующие параметры:

NAME — название хранилища;

TYPE — SYSTEM_DS;

TM_MAD — shared (для режима общей передачи), qcow2 (для режима передачи qcow2), ssh (для режима передачи ssh).

Зарегистрировать системное хранилище можно как веб-интерфейсе Sunstone, так и в командной строке. Например, для создания системного хранилища можно создать файл systemds.conf со следующим содержимым:

NAME    = nfs_system
TM_MAD  = shared
TYPE    = SYSTEM_DS

И выполнить команду:

$ onedatastore create systemds.conf
ID: 101

Чтобы создать новое хранилище образов, необходимо указать следующие параметры:

NAME — название хранилища;

DS_MAD — fs (драйвер хранилища данных);

TYPE — IMAGE_DS;

TM_MAD — shared (для режима общей передачи), qcow2 (для режима передачи qcow2), ssh (для режима передачи ssh).

Примечание [Черновик]

Необходимо использовать одинаковый метод передачи данных TM_MAD для системного хранилища и для хранилища образов.

Зарегистрировать хранилище образов можно как веб-интерфейсе Sunstone, так и в командной строке. Например, для создания хранилища образов можно создать файл imageds.conf со следующим содержимым:

NAME    = nfs_images
TM_MAD  = shared
TYPE    = IMAGE_DS
DS_MAD  = fs

И выполнить команду:

$ onedatastore create imageds.conf
ID: 102

На узле управления (в /var/lib/one/datastores/) будут созданы два каталога: 101 и 102. На узлах виртуализации эти каталоги автоматически не создаются, поэтому на узлах виртализации требуется создать каталоги с соответствующими идентификаторами:

$ mkdir /var/lib/one/datastores/101
$ mkdir /var/lib/one/datastores/102

В каталог /var/lib/one/datastores/<идентификатор_хранилища> на узле управления и узлах виртуализации необходимо смонтировать удалённый каталог NFS. Например:

# mount -t nfs 192.168.0.157:/export/storage /var/lib/one/datastores/102

Для автоматического монтирования к NFS-серверу при загрузке необходимо добавить следующую строку в файл /etc/fstab:

192.168.0.157:/export/storage /var/lib/one/datastores/102   nfs   intr,soft,nolock,_netdev,x-systemd.automount    0 0

Примечание [Черновик]

Для возможности монтирования NFS-хранилища на всех узлах должен быть запущен nfs-client:

# systemctl enable --now nfs-client.target

Получить список совместных ресурсов с сервера NFS можно, выполнив команду:

# showmount -e 192.168.0.157

Важно [Черновик]

При использовании файловой технологии хранения, после добавления записи об автоматическом монтировании в файле /etc/fstab и перезагрузки ОС, необходимо назначить на каталог этого хранилища владельца oneadmin. Например:

# chown oneadmin: /var/lib/one/datastores/102

⁠31.3.3. NFS/NAS и локальное хранилище [Черновик]

При использовании хранилища NFS/NAS можно повысить производительность ВМ, разместив диски в локальной файловой системе узла. Таким образом, хранилище образов будет размещено на сервере NFS, но ВМ будут работать с локальных дисков.

Чтобы настроить этот сценарий, следует настроить хранилище образов и системное хранилища, как описано выше (TM_MAD=shared). Затем добавить системное хранилище (TM_MAD=ssh). Любой образ, зарегистрированный в хранилище образов, можно будет развернуть с использованием любого из этих системных хранилищ.

Чтобы выбрать (альтернативный) режим развертывания, следует добавить в шаблон ВМ атрибут:

TM_MAD_SYSTEM="ssh"

⁠31.3.4. Хранилище SAN [Черновик]

Эта конфигурация хранилища предполагает, что узлы имеют доступ к устройствам хранения (LUN), экспортированным сервером сети хранения данных (SAN) с использованием подходящего протокола, такого как iSCSI или Fibre Channel (FC).

Для организации хранилищ требуется выделение как минимум 2 LUN на системе хранения. Эти LUN должны быть презентованы каждому участнику кластера — узлам управления и узлам виртуализации.

Для хранения образов в виде файлов, используется хранилище файлового типа. Блочные устройства такого хранилища (созданные и презентованные выше LUN) должны быть отформатированы в кластерную файловую систему. Существует также возможность хранить образы исполняемых ВМ в виде томов LVM.

Хранилище SAN может получить доступ к файлам образов двумя способами:

режим NFS — файлы образов доступны непосредственно на узлах виртуализации через распределенную файловую систему, например NFS или OCFS2 (fs_lvm);

режим SSH — файлы образов передаются на узел по SSH (fs_lvm_ssh).

В любом режиме серверу управления необходимо иметь доступ к хранилищам образов путем монтирования соответствующего каталога в /var/lib/one/datastores/<идентификатор_хранилища>. В случае режима NFS каталог необходимо смонтировать с сервера NAS. В режиме SSH можно смонтировать любой носитель данных в каталог хранилища.

Сервер управления также должен иметь доступ к общему LVM либо напрямую, либо через узел виртуализации, указав его в атрибуте BRIDGE_LIST в шаблоне хранилища.

⁠31.3.4.1. Создание хранилищ [Черновик]

Чтобы создать новое системное хранилище, необходимо указать следующие параметры:

NAME — название хранилища;

TM_MAD — fs_lvm (для режима NFS), fs_lvm_ssh (для режима SSH);

TYPE — SYSTEM_DS;

BRIDGE_LIST — список узлов, имеющих доступ к логическим томам. НЕ требуется, если внешний интерфейс настроен на доступ к логическим томам.

Зарегистрировать системное хранилище можно как веб-интерфейсе Sunstone, так и в командной строке. Например, для создания системного хранилища можно создать файл systemds.conf со следующим содержимым:

NAME    = lvm-system
TM_MAD  = fs_lvm_ssh
TYPE    = SYSTEM_DS
BRIDGE_LIST = "host-01 host-02"

И выполнить команду:

$ onedatastore create systemds.conf
ID: 101

Чтобы создать новое хранилище образов, необходимо указать следующие параметры:

NAME — название хранилища;

TM_MAD — fs_lvm (для режима NFS), fs_lvm_ssh (для режима SSH);

DS_MAD — fs;

TYPE — IMAGE_DS;

BRIDGE_LIST — список узлов, имеющих доступ к логическим томам. НЕ требуется, если внешний интерфейс настроен на доступ к логическим томам;

DISK_TYPE — BLOCK.

Зарегистрировать хранилище образов можно как веб-интерфейсе Sunstone, так и в командной строке. Например, для создания хранилища образов можно создать файл imageds.conf со следующим содержимым:

NAME    = lvm-images
TM_MAD  = fs_lvm_ssh
TYPE    = IMAGE_DS
DISK_TYPE = "BLOCK"
DS_MAD  = fs

И выполнить команду:

$ onedatastore create imageds.conf
ID: 102

Примечание [Черновик]

Необходимо использовать одинаковый метод передачи данных TM_MAD для системного хранилища и для хранилища образов.

На узле управления (в /var/lib/one/datastores/) будут созданы два каталога: 101 и 102. На узлах виртуализации эти каталоги автоматически не создаются, поэтому требуется создать каталоги с соответствующими идентификаторами:

$ mkdir /var/lib/one/datastores/101
$ mkdir /var/lib/one/datastores/102

⁠31.3.4.2. Подключение СХД [Черновик]

⁠31.3.4.2.1. Особенности подключения СХД по FC [Черновик]

Алгоритм подключения:

Подготовить СХД (создать LUNы).

На сервере установить FC HBA, драйверы к ним.

Настроить сетевое подключение.

Подключить СХД к серверу.

Предоставить серверу доступ к СХД по WWPN.

Примечание [Черновик]

Для того чтобы узнать глобальные имена портов (WWPN), можно воспользоваться утилитой systool из пакета sysfsutils.

Пакет sysfsutils необходимо установить из репозитория:

# apt-get install sysfsutils

Чтобы найти WWPN, следует ввести следующую команду:

# systool -c fc_host -A port_name
Class = "fc_host"
Class Device = "host1"
port_name = "0x10000090fa59a61a"
Device = "host1"
Class Device = "host16"
port_name = "0x10000090fa59a61b"
Device = "host16"

Просмотреть список подключенных устройств можно, например, выполнив команду:

# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 59G 0 disk
sdb 8:16 0 931,3G 0 disk
└─mpatha 253:0 0 931,3G 0 mpath
sdc 8:32 0 931,3G 0 disk
└─mpatha 253:0 0 931,3G 0 mpath
sdd 8:48 0 931,3G 0 disk
└─mpatha 253:0 0 931,3G 0 mpath
sde 8:64 0 931,3G 0 disk
└─mpatha 253:0 0 931,3G 0 mpath

В данном примере один LUN на 1000GB виден по четырем путям.

⁠31.3.4.2.2. Особенности подключения СХД по ISCSI [Черновик]

Все необходимые соединения iSCSI должны запускаться во время загрузки узла. Сделать это можно, установив для параметра node.startup значение automatic. Значение по умолчанию для параметра node.session.timeo.replacement_timeout составляет 120 секунд. Рекомендуется использовать значение — 15 секунд.

Эти параметры можно указать в файле в /etc/iscsi/iscsid.conf (по умолчанию). Если iSCSI target уже подключен, то необходимо изменить настройки по умолчанию для конкретной цели в файле /etc/iscsi/nodes/<TARGET>/<PORTAL>/default.

На всех узлах PVE необходимо:

Установить пакет open-iscsi, запустить и добавить в автозагрузку сервис iscsid:

# apt-get install open-iscsi
# systemctl enable --now iscsid

Указать следующие параметры в файле /etc/iscsi/iscsid.conf:

node.startup = automatic
node.session.timeo.replacement_timeout = 15

Присоединить iSCSI хранилище к кластеру:

# iscsiadm -m discovery -t sendtargets -p <iscsi-target-1-ip>
# iscsiadm -m discovery -t sendtargets -p <iscsi-target-2-ip>
# iscsiadm -m node --login

Настроить автоматическое подключение iSCSI-target-ов. Для этого необходимо поменять следующие параметры:

в файле /etc/iscsi/iscsid.conf:

node.startup = automatic

в файлах /var/lib/iscsi/send_targets/<TargetServer>,<Port>/st_config:

discovery.sendtargets.use_discoveryd = Yes

После перезагрузки должны появиться подключенные устройства:

# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 59G 0 disk
sdb 8:16 0 931,3G 0 disk
└─mpatha 253:0 0 931,3G 0 mpath
sdc 8:32 0 931,3G 0 disk
└─mpatha 253:0 0 931,3G 0 mpath
sdd 8:48 0 931,3G 0 disk
└─mpatha 253:0 0 931,3G 0 mpath
sde 8:64 0 931,3G 0 disk
└─mpatha 253:0 0 931,3G 0 mpath

В данном примере один LUN на 1000GB виден по четырем путям.

Примечание [Черновик]

Примеры использования команды iscsiadm:

отключить хранилище (отключить все цели):

# iscsiadm -m node --logout

отключить только определенную цель:

# iscsiadm -m node --targetname "iscsi-target-1.test.alt:server.target1" --logout

переопросить устройства на ISCSI:

# iscsiadm -m node -R

посмотреть все текущие подключения iSCSI:

# iscsiadm -m session

⁠31.3.4.3. Настройка Multipath [Черновик]

Многопутевой ввод-вывод (Multipath I/O) — технология подключения узлов СХД с использованием нескольких маршрутов. В случае отказа одного из контроллеров, ОС будет использовать другой для доступа к устройству. Это повышает отказоустойчивость системы и позволяет распределять нагрузку.

Multipath устройства объединяются в одно устройство с помощью специализированного ПО в новое устройство. Multipath обеспечивает выбор пути и переключение на новый маршрут при отказе текущего. Кроме того Multipath позволяет увеличить пропускную способность за счет балансировки нагрузки.

На всех узлах должен быть установлен пакет для multipath:

# apt-get install multipath-tools

И запущена служба multipathd:

# systemctl enable --now multipathd && sleep 5; systemctl status multipathd

⁠31.3.4.3.1. Конфигурация multipath [Черновик]

Примечание [Черновик]

Команда multipath используется для обнаружения и объединения нескольких путей к устройствам.

Некоторые параметры команды multipath:

-l — отобразить текущую multipath-топологию, полученную из sysfs и устройства сопоставления устройств;

-ll — отобразить текущую multipath-топологию, собранную из sysfs, устройства сопоставления устройств и всех других доступных компонентов системы;

-f device — удалить указанное multipath-устройство;

-F — удалить все неиспользуемые multipath-устройства;

-w device — удалить WWID указанного устройства из файла wwids;

-W — сбросить файл wwids, чтобы включить только текущие многопутевые устройства;

-r — принудительная перезагрузка multipath-устройства.

После подключения, устройство хранения данных должно автоматически определиться как multipath-устройство:

# multipath -ll
mpatha (3600c0ff00014f56ee9f3cf6301000000) dm-0 HP,P2000 G3 FC
size=931G features='1 queue_if_no_path' hwhandler='1 alua' wp=rw
|-+- policy='service-time 0' prio=50 status=active
| |- 1:0:0:1 sdb 8:16 active ready running
| `- 16:0:1:1 sde 8:64 active ready running
`-+- policy='service-time 0' prio=10 status=enabled
|- 1:0:1:1 sdc 8:32 active ready running
`- 16:0:0:1 sdd 8:48 active ready running

Вывод этой команды разделить на три части:

Информация о multipath-устройстве:

mpatha (3600c0ff00014f56ee9f3cf6301000000): алиас

dm-0: имя устройства dm

HP,P2000 G3 FC: поставщик, продукт

size=931G: размер

features='1 queue_if_no_path': функции

hwhandler='01 alua': аппаратный обработчик

wp=rw: права на запись

Информация о группе путей:

policy='service-time 0': политика планирования

prio=50: приоритет группы путей

status=active: статус группы путей

Информация о пути:

7:0:1:1: хост:канал:идентификатор:Lun

sde: диск

8:80: номера major:minor

active: статус dm

ready: статус пути

running: online статус

Для получения дополнительной информации об используемых устройствах можно выполнить команду:

# multipath -v3

Настройки multipath содержатся в файле /etc/multipath.conf:

defaults {
    find_multipaths         yes
    user_friendly_names     yes
}

Если для параметра user_friendly_names установлено значение no, то для имени multipath-устройства задается значение World Wide Identifier (WWID). Имя устройства будет /dev/mapper/WWID и /dev/dm-X:

# ls /dev/mapper/
3600c0ff00014f56ee9f3cf6301000000

# lsblk
NAME                                        MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINTS
sda                                           8:0    0    59G  0 disk
sdb                                           8:16   0 931,3G  0 disk
└─3600c0ff00014f56ee9f3cf6301000000         253:0    0 931,3G  0 mpath
sdc                                           8:32   0 931,3G  0 disk
└─3600c0ff00014f56ee9f3cf6301000000         253:0    0 931,3G  0 mpath
sdd                                           8:48   0 931,3G  0 disk
└─3600c0ff00014f56ee9f3cf6301000000         253:0    0 931,3G  0 mpath
sde                                           8:64   0 931,3G  0 disk
└─3600c0ff00014f56ee9f3cf6301000000         253:0    0 931,3G  0 mpath

Если для параметра user_friendly_names установлено значение yes, то для имени multipath-устройства задаётся алиас (псевдоним), в форме mpathХ. Имя устройства будет /dev/mapper/mpathХ и /dev/dm-X:

# ls /dev/mapper/
mpatha

# lsblk
NAME             MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINTS
sda                8:0    0    59G  0 disk
sdb                8:16   0 931,3G  0 disk
└─mpatha         253:0    0 931,3G  0 mpath
sdc                8:32   0 931,3G  0 disk
└─mpatha         253:0    0 931,3G  0 mpath
sdd                8:48   0 931,3G  0 disk
└─mpatha         253:0    0 931,3G  0 mpath
sde                8:64   0 931,3G  0 disk
└─mpatha         253:0    0 931,3G  0 mpath

Однако не гарантируется, что имя устройства будет одинаковым на всех узлах, использующих это multipath-устройство.

ОС при загрузке определяет пути к устройствам в изменяющейся среде выполнения (например, при новой загрузке в среде выполнения ОС появились новые устройства хранения или исчезли старые, и т.п.) по отношению к предыдущей загрузке или по отношению к заданной ранее конфигурации. Это может приводить к противоречиям при именовании устройств. Для того чтобы избежать такого поведения, рекомендуется:

Сделать явное исключение для устройства (раздела) хранения (например, для 3600c0ff00014f56ee9f3cf6301000000, которое в настоящее время определяется как /dev/mapper/mpatha). Для этого в файл /etc/multipath.conf добавить секции:

blacklist {
        wwid .*
}

blacklist_exceptions {
        wwid "3600c0ff00014f56ee9f3cf6301000000"
}

Данная настройка предписывается внести в черный список любые найденные устройства хранения данных, за исключением нужного.

Создать еще одну секцию:

multipaths {
  multipath {
        wwid "3600c0ff00014f56ee9f3cf6301000000"
        alias mpatha
  }
}

В этом случае устройство всегда будет доступно только по имени /dev/mapper/mpatha. Вместо mpatha можно вписать любое желаемое имя устройства.

Примечание [Черновик]

Получить WWID конкретного устройства можно, выполнив команду:

# /lib/udev/scsi_id -g -u -d /dev/sdb
3600c0ff00014f56ee9f3cf6301000000

Для устройств в одном multipath WWID будут совпадать.

В файл /etc/multipath.conf может также потребоваться внести рекомендованные производителем СХД параметры.

После внесения изменений в файл /etc/multipath.conf необходимо перезапустить службу multipathd для активации настроек:

# systemctl restart multipathd.service

Примечание [Черновик]

Проверить файл /etc/multipath.conf на наличие ошибок можно, выполнив команду:

# multipath -t

⁠31.3.4.4. Разметка хранилища образов [Черновик]

Устройство, на котором размещается хранилище образов должно быть отформатировано кластерной ФС.

Ниже показано создание кластерной ФС ocfs2 на multipath-устройстве и подключение этого устройства в OpenNebula.

⁠31.3.4.4.1. Кластерная ФС ocfs2 [Черновик]

На всех узлах кластера необходимо установить пакет ocfs2-tools:

# apt-get install ocfs2-tools

Примечание [Черновик]

Основной конфигурационный файл для OCFS2 — /etc/ocfs2/cluster.conf. Этот файл должен быть одинаков на всех узлах кластера, при изменении в одном месте его нужно скопировать на остальные узлы. При добавлении нового узла в кластер, описание этого узла должно добавлено быть на всех остальных узлах до монтирования раздела ocfs2 с нового узла.

Создание кластерной конфигурации возможно с помощью команд или с помощью редактирования файла конфигурации /etc/ocfs2/cluster.conf.

Пример создания кластера из трёх узлов:

В командной строке:

Создать кластер с именем mycluster:

# o2cb_ctl -C -n mycluster -t cluster -a name=mycluster

Добавить узелы, выполнив команду для каждого:

# o2cb_ctl -C -n <имя_узла> -t node -a number=0 -a ip_address=<IP_узла> -a ip_port=7777 -a cluster=mycluster

Редактирование конфигурационного файла /etc/ocfs2/cluster.conf:

cluster:
node_count = 3
heartbeat_mode = local
name = mycluster

node:
ip_port = 7777
ip_address = <IP_узла-01>
number = 0
name = <имя_узла-01>
cluster = mycluster

node:
ip_port = 7777
ip_address = <IP_узла-02>
number = 1
name = <имя_узла-02>
cluster = mycluster

node:
ip_port = 7777
ip_address = <IP_узла-03>
number = 2
name = <имя_узла-03>
cluster = mycluster

Примечание [Черновик]

Имя узла кластера должно быть таким, как оно указано в файле /etc/hostname.

Для включения автоматической загрузки сервиса OCFS2 можно использовать скрипт /etc/init.d/o2cb:

# /etc/init.d/o2cb configure

Для ручного запуска кластера нужно выполнить:

# /etc/init.d/o2cb load
checking debugfs...
Loading filesystem "ocfs2_dlmfs": OK
Creating directory '/dlm': OK
Mounting ocfs2_dlmfs filesystem at /dlm: OK
# /etc/init.d/o2cb online mycluster
checking debugfs...
Setting cluster stack "o2cb": OK
Registering O2CB cluster "mycluster": OK
Setting O2CB cluster timeouts : OK

Далее на одном из узлов необходимо создать раздел OCFS2, для этого следует выполнить следующие действия:

создать физический раздел /dev/mapper/mpatha-part1 на диске /dev/mapper/mpatha:

# fdisk /dev/mapper/mpatha

отформатировать созданный раздел, выполнив команду:

# mkfs.ocfs2 -b 4096 -C 4k -L DBF1 -N 3 /dev/mapper/mpatha-part1
mkfs.ocfs2 1.8.7
Cluster stack: classic o2cb
Label: DBF1
…
mkfs.ocfs2 successful

⁠

Таблица 31.2. Параметры команды mkfs.ocfs2 [Черновик]

Параметр

Описание

-L метка_тома

Метка тома, позволяющая его однозначно идентифицировать при подключении на разных узлах. Для изменения метки тома можно использовать утилиту tunefs.ocfs2

-C размер_кластера

Размер кластера — это наименьшая единица пространства, выделенная файлу для хранения данных. Возможные значения: 4, 8, 16, 32, 64, 128, 256, 512 и 1024 КБ. Размер кластера невозможно изменить после форматирования тома

-N количество_узлов_кластера

Максимальное количество узлов, которые могут одновременно монтировать том. Для изменения количества узлов можно использовать утилиту tunefs.ocfs2

-b размер_блока

Наименьшая единица пространства, адресуемая ФС. Возможные значения: 512 байт (не рекомендуется), 1 КБ, 2 КБ или 4 КБ (рекомендуется для большинства томов). Размер блока невозможно изменить после форматирования тома

Примечание [Черновик]

Для создания нового раздела может потребоваться предварительно удалить существующие данные раздела на устройстве /dev/mpathX (следует использовать с осторожностью!):

# dd if=/dev/zero of=/dev/mapper/mpathX bs=512 count=1 conv=notrunc

⁠31.3.4.4.2. OCFS2 в OpenNebula [Черновик]

На каждом узле OpenNebula необходимо добавить данную ФС OCFS2 к каталогам, которые будут автоматически монтироваться при загрузке узла:

определить UUID раздела:

# blkid
/dev/mapper/mpatha-part1: LABEL="DBF1" UUID="df49216a-a835-47c6-b7c1-6962e9b7dcb6" BLOCK_SIZE="4096" TYPE="ocfs2" PARTUUID="15f9cd13-01"

добавить монтирование этого UUID в /etc/fstab:

UUID=<uuid> /var/lib/one/datastores/<идентификатор_хранилища> ocfs2 _netdev,defaults 0 0

Например:

UUID=df49216a-a835-47c6-b7c1-6962e9b7dcb6       /var/lib/one/datastores/102     ocfs2 _netdev,defaults 0 0

убедиться, что монтирование прошло без ошибок, выполнив команду:

# mount -a

Результатом выполнения команды должен быть пустой вывод без ошибок.

пример получившейся конфигурации:

# lsblk
NAME             MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINTS
sda                8:0    0    59G  0 disk
`-sda1             8:1    0   255M  0 part  /boot/efi
sdb                8:16   0 931.3G  0 disk
`-mpatha         253:0    0 931.3G  0 mpath
  `-mpatha-part1 253:1    0 931.3G  0 part  /var/lib/one/datastores/102
sdc                8:32   0 931.3G  0 disk
|-sdc1             8:33   0 931.3G  0 part
`-mpatha         253:0    0 931.3G  0 mpath
  `-mpatha-part1 253:1    0 931.3G  0 part  /var/lib/one/datastores/102
sdd                8:48   0 931.3G  0 disk
`-mpatha         253:0    0 931.3G  0 mpath
  `-mpatha-part1 253:1    0 931.3G  0 part  /var/lib/one/datastores/102
sde                8:64   0 931.3G  0 disk
`-mpatha         253:0    0 931.3G  0 mpath
  `-mpatha-part1 253:1    0 931.3G  0 part  /var/lib/one/datastores/102

Примечание [Черновик]

Опция _netdev позволяет монтировать данный раздел только после успешного старта сетевой подсистемы.

Важно [Черновик]

При использовании файловой технологии хранения, после добавления записи об автоматическом монтировании в файле /etc/fstab и перезагрузки ОС, необходимо назначить на каталог этого хранилища владельца oneadmin. Например:

# chown oneadmin: /var/lib/one/datastores/102

Примечание [Черновик]

Вывести все файловые системы OCFS2 на данном узле:

# mounted.ocfs2 -f
Device                    		Stack  Cluster  F  	Nodes
/dev/mapper/mpatha-part1  	o2cb               		server, host-02, host-01
# mounted.ocfs2 -d
Device                    Stack  Cluster  F  UUID                              Label
/dev/mapper/mpatha-part1  o2cb               DF49216AA83547C6B7C16962E9B7DCB6  DBF

⁠31.3.4.5. Разметка системного хранилища [Черновик]

LUN для системного хранилища будет обслуживаться менеджером томов LVM.

Предварительные условия:

lvmetad должен быть отключен. Для этого следует установить параметр use_lvmetad = 0 в /etc/lvm/lvm.conf (в разделе global) и отключить службу lvm2-lvmetad.service, если она запущена.

Пользователь oneadmin должен входить в группу disk:

 # gpasswd -a oneadmin disk

Все узлы должны иметь доступ к одним и тем же LUN.

Для каждого хранилища необходимо создать LVM VG с именем vg-one-<идентификатор_хранилища> в общих LUN.

Примечание [Черновик]

LUN должен быть виден в системе по пути /dev/mapper/.

LUN должен быть не размечен. Его необходимо очистить от разметки и/или файловых систем на стороне СХД, или выполнить команду:

# wipefs -fa /dev/mapper/[LUN_WWID]

На узле управления необходимо:

Создать физический том (PV) на LUN, например:

# pvcreate /dev/mapper/mpathb
Physical volume "/dev/mapper/mpathb" successfully created.

Создать группу томов с именем vg-one-<идентификатор_хранилища>, например:

# vgcreate vg-one-101 /dev/mapper/mpathb
Volume group "vg-one-101" successfully created

Вывести информацию о физических томах:

# pvs
PV                       VG         Fmt  Attr PSize   PFree
/dev/mapper/mpathb       vg-one-101 lvm2 a--  931.32g 931.32g

Созданные хранилища будут отображаться в веб-интерфейсе OpenNebula. Индикация объёма хранилища должна соответствать выделенному на СХД для каждого LUN.

После создания и запуска ВМ будет создан логический раздел:

# lvscan
  ACTIVE            '/dev/vg-one-101/lv-one-52-0' [50,00 GiB] inherit
# lsblk
sde                               8:64   0   931.3G  0 disk
└─mpathb                        253:1    0   931.3G  0 mpath
  └─vg--one--101-lv--one--52--0 253:3    0   51G     0 lvm

где 52 — идентификатор ВМ.

⁠31.3.5. Хранилище файлов и ядер [Черновик]

Хранилище файлов и ядер позволяет хранить простые файлы, которые будут использоваться в качестве ядер ВМ, виртуальных дисков или любых других файлов, которые необходимо передать ВМ в процессе контекстуализации. Данное хранилище не предоставляет никакого специального механизма хранения, но представляет простой и безопасный способ использования файлов в шаблонах ВМ.

Чтобы создать новое хранилище файлов и ядер, необходимо указать следующие параметры:

NAME — название хранилища;

TYPE — FILE_DS;

DS_MAD — fs;

TM_MAD — ssh.

Зарегистрировать хранилище файлов и ядер можно как веб-интерфейсе Sunstone, так и в командной строке. Например, для создания хранилища файлов и ядер можно создать файл fileds.conf со следующим содержимым:

NAME    = local_file
DS_MAD  = fs
TM_MAD  = ssh
TYPE    = FILE_DS

И выполнить команду:

$ onedatastore create fileds.conf
ID: 105

Примечание [Черновик]

Выше приведены рекомендованные значения DS_MAD и TM_MAD, но можно использовать любые другие.

Для того чтобы изменить параметры хранилища, можно создать файл с необходимыми настройками (пример см.выше) и выпонить команду:

$ onedatastore update <идентификатор_хранилища> <имя_файла>

⁠Глава 32. Работа с образами в OpenNebula [Черновик]

Система хранилищ позволяет пользователям настраивать/устанавливать образы, которые могут быть образами ОС или данных, для использования в ВМ. Данные образы могут использоваться несколькими ВМ одновременно, а также предоставляться другим пользователями.

Типы образов для дисков ВМ (хранятся в хранилище образов):

OS — образ загрузочного диска;

CDROM — файл образа, содержащий CDROM. Эти образы предназначены только для чтения. В каждом шаблоне ВМ, можно использовать только один образ данного типа;

DATABLOCK — файл образа, содержащий блок данных (например, базу данных) или может быть отформатирован как пустой диск.

Типы файлов (хранятся в файловом хранилище):

KERNEL — файл, который будет использоваться в качестве ядра ВМ (kernels);

RAMDISK — файл для использования в качестве виртуального диска;

CONTEXT — файл для включения в контекстный CD-ROM.

Образы могут работать в двух режимах:

persistent (постоянные) — изменения, внесенные в такие образы, будут сохранены после завершения работы ВМ. В любой момент времени может быть только одна ВМ, использующая постоянный образ.

non-persistent (непостоянный) — изменения не сохранятся после завершения работы ВМ. Непостоянные образы могут использоваться несколькими ВМ одновременно, поскольку каждая из них будет работать со своей собственной копией.

Управлять образами можно, используя интерфейс командной строки — команда oneimage.

Управлять образами можно также в веб-интерфейсе на вкладке Образы.

⁠32.1. Создание образа ОС в среде OpenNebula [Черновик]

Для создания образа ОС, необходимо подготовить ВМ и извлечь её диск.

⁠32.1.1. Создание образов дисков [Черновик]

Создать образ типа CDROM с установочным ISO-образом.

Для этого перейти в раздел Хранилище → Образы, на загруженной странице нажать + → Создать:

В открывшемся окне заполнить поле Название, выбрать тип образа CD-ROM только для чтения, выбрать хранилище, выбрать расположение образа Путь/URL, указать путь к файлу (.iso) и нажать кнопку Создать:

Примечание [Черновик]

Если указывается путь на сервере OpenNebula, то ISO-образ должен быть загружен в каталог, к которому имеет доступ пользователь oneadmin.

Создать пустой образ диска, на который будет установлена операционная система.

Для этого создать новый образ. Заполнить поле Название, в выпадающем списке Тип выбрать значение Generic storage datablock, в выпадающем списке Этот образ является постоянным выбрать значение Да, выбрать хранилище, в разделе Расположение образа выбрать пункт Пустой образ диска, установить размер выбранного блока, например, 45ГБ, в разделе Расширенные настройки указать формат qcow2 и нажать кнопку Создать:

Примечание [Черновик]

Эти же действия можно выполнить в командной строке.

Создать образ типа CDROM в хранилище данных по умолчанию (ID = 1):

$ oneimage create -d 1 --name "ALT Workstation ISO" \
    --path /var/tmp/alt-workstation-10.0-x86_64.iso --type CDROM
ID: 31

Создать пустой образ диска (тип образа — DATABLOCK, размер 45 ГБ, драйвер qcow2):

$ oneimage create -d 1 --name "ALT Workstation" \
    --type DATABLOCK --size 45G --persistent --driver qcow2
ID: 33

⁠32.1.2. Создание шаблона ВМ [Черновик]

Примечание [Черновик]

Создание шаблона в командной строке:

Создать файл template со следующим содержимым:

NAME = "ALT Workstation"
CONTEXT = [
  NETWORK = "YES",
  SSH_PUBLIC_KEY = "$USER[SSH_PUBLIC_KEY]" ]
CPU = "1"
DISK = [
  IMAGE = "ALT Workstation ISO",
  IMAGE_UNAME = "oneadmin" ]
DISK = [
  DEV_PREFIX = "vd",
  IMAGE = "ALT Workstation",
  IMAGE_UNAME = "oneadmin" ]
GRAPHICS = [
  LISTEN = "0.0.0.0",
  TYPE = "SPICE" ]
HYPERVISOR = "kvm"
INPUTS_ORDER = ""
LOGO = "images/logos/alt.png"
MEMORY = "1024"
MEMORY_UNIT_COST = "MB"
NIC = [
  NETWORK = "VirtNetwork",
  NETWORK_UNAME = "oneadmin",
  SECURITY_GROUPS = "0" ]
NIC_DEFAULT = [
  MODEL = "virtio" ]
OS = [
  BOOT = "disk1,disk0" ]
SCHED_REQUIREMENTS = "ID=\"0\""

Создать шаблон:

$ onetemplate create template
ID: 22

Ниже рассмотрен пример создания шаблона в веб-интерфейсе.

В левом меню выбрать Шаблоны → ВМ, на загруженной странице нажать кнопку + и выбрать пункт Создать:

На вкладке Общие необходимо указать параметры процессора, оперативной памяти, а также гипервизор:

На вкладке Хранилище необходимо указать ранее созданный диск с установщиком ОС. Далее следует добавить новый диск и указать ранее созданный пустой диск (DATABLOCK), в разделе Расширенные настройки в выпадающем списке Шина выбрать Virtio.

На вкладке Сеть в поле Default hardware model to emulate for all NICs указать Virtio и если необходимо выбрать сеть:

На вкладке ОС и ЦПУ необходимо указать архитектуру устанавливаемой системы и выбрать порядок загрузки. Можно установить в качестве первого загрузочного устройства — пустой диск (DATABLOCK), а в качестве второго — CDROM (при такой последовательности загрузочных устройств при пустом диске загрузка произойдёт с CDROM, а в дальнейшем, когда ОС будет уже установлена на диск, загрузка будет осуществляться с него).

На вкладке Ввод/Вывод следует включить SPICE:

На вкладке Контекст необходимо включить параметр Использовать сетевое задание контекста, а также авторизацию по RSA-ключам (укажите свой открытый SSH (.pub) для доступа к ВМ по ключу, если оставить поле пустым, будет использована переменная $USER[SSH_PUBLIC_KEY]):

На вкладке Расписание если необходимо можно выбрать кластер/узел, на котором будет размещаться виртуальное окружение:

Для создания шаблона ВМ нажать кнопку Создать.

⁠32.1.3. Создание ВМ [Черновик]

Для инициализации создания ВМ из шаблона в левом меню следует выбрать пункт Шаблоны → ВМ, выбрать шаблон и нажать кнопку Создать ВМ:

В открывшемся окне необходимо указать имя ВМ и нажать кнопку Создать ВМ:

Примечание [Черновик]

Создание экземпляра ВМ из шаблона в командной строке:

$ onetemplate instantiate 9
VM ID: 5

⁠32.1.4. Подключение к ВМ и установка ОС [Черновик]

Примечание [Черновик]

Процесс создания ВМ может занять несколько минут. Следует дождаться статуса — «ЗАПУЩЕНО» («RUNNING»).

Подключиться к ВМ можно как из веб-интерфейса Sunstone, раздел Экземпляры ВМ → ВМ выбрать ВМ и подключиться по SPICE:

Так и используя любой клиент SPICE:

spice://192.168.0.180:5905

где 192.168.0.180 — IP-адрес узла с ВМ, а 5 — идентификатор ВМ (номер порта 5900 + 5).

Далее необходимо провести установку системы:

⁠32.1.5. Настройка контекстуализации [Черновик]

OpenNebula использует метод, называемый контекстуализацией, для отправки информации на ВМ во время загрузки. Контекстуализация позволяет установить или переопределить данные ВМ, имеющие неизвестные значения или значения по умолчанию (имя узла, IP-адрес, .ssh/authorized_keys).

Пример настройки контекстуализации на установленной ОС Альт:

Подключиться к ВМ через SPICE или по ssh.

Установить пакет opennebula-context:

# apt-get update && apt-get install opennebula-context

Переключиться на systemd-networkd:

установить пакет systemd-timesyncd:

# apt-get install systemd-timesyncd

создать файл автонастройки всех сетевых интерфейсов по DHCP /etc/systemd/network/lan.network со следующим содержимым:

[Match]
Name = *

[Network]
DHCP = ipv4

переключиться с etcnet/NetworkManager на systemd-networkd:

# systemctl disable network NetworkManager && systemctl enable systemd-networkd systemd-timesyncd

Перезагрузить систему.

После перезагрузки доступ в систему будет возможен по ssh-ключу, ВМ будет назначен IP-адрес, который OpenNebula через механизм IPAM (подсистема IP Address Management) выделит из пула адресов.

⁠32.1.6. Создание образа типа ОС [Черновик]

После завершения установки и настройки системы следует выключить и удалить ВМ. Диск находится в состоянии Persistent, поэтому все внесенные изменения будут постоянными.

Для удаления ВМ в левом меню следует выбрать пункт Экземпляры ВМ → ВМ, выбрать ВМ и нажать кнопку Уничтожить:

Примечание [Черновик]

Удаление ВМ в командной строке:

$ onevm terminate 5

Затем перейти в Хранилище → Образы ВМ, выбрать образ с установленной ОС (ALT Workstation) и изменить тип блочного устройства с Блок данных на ОС и состояние на Non Persistent:

Примечание [Черновик]

Изменить тип блочного устройства на ОС и состояние на Non Persistent:

$ oneimage chtype 1 OS
$ oneimage nonpersistent 1

Образ готов. Далее можно использовать как имеющийся шаблон, так и создать новый на основе образа диска «ALT Workstation».

⁠32.2. Использование магазинов приложений OpenNebula [Черновик]

Магазины приложений OpenNebula предоставляют простой способ интеграции облака с популярными поставщиками приложений и изображений.

Список доступных магазинов можно увидеть, выбрав в меню Хранилище → Магазины приложений:

Список магазинов приложений, настроенных в OpenNebula, можно вывести, выполнив команду:

$ onemarket list
  ID NAME                               SIZE AVAIL        APPS MAD     ZONE STAT
   3 DockerHub                            0M -             175 dockerh    0 on
   2 TurnKey Linux Containers             0M -               0 turnkey    0 on
   1 Linux Containers                     0M -               0 linuxco    0 on
   0 OpenNebula Public                    0M -              54 one        0 on

⁠32.2.1. OpenNebula Public [Черновик]

OpenNebula Public — это каталог виртуальных устройств, готовых к работе в среде OpenNebula.

Для загрузки приложения из магазина OpenNebula Public необходимо выбрать OpenNebula Public → Приложения в списке магазинов. Появится список доступных приложений:

Каждое приложение содержит образ и шаблон.

Чтобы импортировать приложение, необходимо его выбрать и нажать кнопку Импорт в хранилище:

В открывшемся окне указать имя для образа и шаблона, выбрать хранилище и нажать кнопку Загрузить:

Настройка образов, загруженных из магазина приложений:

Изменить состояние образа на Постоянный (необходимо дождаться состояния ГОТОВО).

Настроить шаблон.

Создать на основе шаблона ВМ.

Подключиться к ВМ. Установить/настроить необходимые компоненты.

Удалить ВМ.

Изменить состояние образа на Не постоянный.

Далее можно создать новые шаблоны на основе этого образа или использовать существующий.

⁠32.2.2. Скачивание шаблона контейнера из магазина DockerHub [Черновик]

Магазин DockerHub предоставляет доступ к официальным образам DockerHub. Контекст OpenNebula устанавливается в процессе импорта образа, поэтому после импорта образ полностью готов к использованию.

Примечание [Черновик]

Для возможности загрузки контейнеров из магазина приложений DockerHub на сервере управления необходимо:

Установить Docker:

# apt-get install docker-engine

Добавить пользователя oneadmin в группу docker:

# gpasswd -a oneadmin docker

и выполнить повторный вход в систему

Запустить и добавить в автозагрузку службу docker:

# systemctl enable --now docker

Перезапустить opennebula:

# systemctl restart opennebula

Для загрузки контейнера из магазина DockerHub необходимо перейти в Хранилище → Магазины приложений, выбрать DockerHub → Приложения:

Чтобы импортировать контейнер, необходимо его выбрать и нажать кнопку Импорт в хранилище:

Каждый контейнер содержит образ и шаблон.

В открывшемся окне указать название для образа и шаблона, выбрать хранилище и нажать кнопку Загрузить:

Из полученного шаблона можно разворачивать контейнеры (ВМ в терминологии Opennebula). Процесс разворачивания контейнера из шаблона такой же, как и процесс разворачивания ВМ из шаблона:

В Магазине приложений DockerHub перечислены только официальные образы. Для того чтобы использовать неофициальный образ, следует создать образ (oneimage create), используя в качестве PATH (или опции --path) URL-адрес следующего формата:

docker://<image>?size=<image_size>&filesystem=<fs_type>&format=raw&tag=<tag>&distro=<distro>

где:

<image> — имя образа DockerHub;

<image_size> — размер результирующего образа в МБ (этот размер должен быть больше фактического размера образа);

<fs_type> — тип файловой системы (ext4, ext3, ext2 или xfs);

<tag> — тег образа (по умолчанию latest);

<distro> — дистрибутив образа (опционально).

Примечание [Черновик]

OpenNebula автоматически определяет дистрибутив образа, запуская контейнер и проверяя файл /etc/os-release. Если эта информация недоступна внутри контейнера, необходимо использовать аргумент distro.

Например, чтобы создать новый образ alt-p10 на основе образа alt из DockerHub размером 3 ГБ с использованием ext4 и тега p10, можно выполнить команду:

$ oneimage create --name alt-p10 --path 'docker://alt?size=3072&filesystem=ext4&format=raw&tag=p10' --datastore 1
   ID: 22

Примечание [Черновик]

Этот формат URL-адреса также можно использовать в диалоговом окне создания образа в веб-интерфейсе:

⁠Глава 33. Управление пользователями [Черновик]

Ресурсы, к которым пользователь может получить доступ в OpenNebula, контролируются системой разрешений. По умолчанию только владелец ресурса может использовать и управлять им. Пользователи могут делиться ресурсами, предоставляя разрешения на использование или управление другим пользователям в своей группе или любому другому пользователю в системе.

⁠33.1. Пользователи [Черновик]

Пользователь в OpenNebula определяется именем пользователя и паролем. Каждый пользователь имеет уникальный идентификатор и принадлежит как минимум к одной группе.

При установке OpenNebula создаются две административные учетные записи (oneadmin и serveradmin).

oneuser — инструмент командной строки для управления пользователями в OpenNebula.

Посмотр списка пользователей:

$ oneuser list
  ID NAME                 ENAB GROUP    AUTH            VMS     MEMORY        CPU
   1 serveradmin          yes  oneadmin server_c    0 /   -      0M /   0.0 /   -
   0 oneadmin             yes  oneadmin core              -          -          -

Создание нового пользователя:

$ oneuser create <user_name> <password>

По умолчанию новый пользователь будет входить в группу users. Изменить группу пользователя:

$ oneuser chgrp <user_name> oneadmin

Что бы удалить пользователя из группы, необходимо переместить его обратно в группу users.

Временно отключить пользователя:

$ oneuser disable <user_name>

Включить отключённого пользователя:

$ oneuser enable <user_name>

Удалить пользователя:

$ oneuser delete <user_name>

Все операции с пользователями можно производить в веб-интерфейсе:

Созданный пользователь может аутентифицироваться в веб-интерфейсе OpenNebula и изменить настройки (изменить язык интерфейса, пароль, добавить ssh-ключ для доступа на ВМ и т.д.):

Примечание [Черновик]

Пользователи могут просматривать информацию о своей учётной записи и изменять свой пароль.

⁠33.2. Группы пользователей [Черновик]

При установке OpenNebula создаются две группы (oneadmin и users).

onegroup — инструмент командной строки для управления группами в OpenNebula.

Просмотр списка групп:

$ onegroup list
  ID NAME                 USERS       VMS            MEMORY         CPU
   1 users                    1   0 /   -      0M /       -  0.0 /    -
   0 oneadmin                 3         -                 -           -

Создание новой группы:

$ onegroup create group_name
ID: 100

Новая группа получила идентификатор 100, чтобы отличать специальные группы от созданных пользователем.

После создания группы может быть создан связанный пользователь-администратор. По умолчанию этот пользователь сможет создавать пользователей в новой группе.

Пример создания новой группы с указанием, какие ресурсы могут быть созданы пользователями группы (по умолчанию VM+IMAGE+TEMPLATE):

$ onegroup create --name testgroup \
--admin_user testgroup-admin --admin_password somestr \
--resources TEMPLATE+VM

При выполнении данной команды также будет создан администратор группы.

Сделать существующего пользователя администратором группы:

$ onegroup addadmin <groupid_list> <userid>

Все операции с группами можно производить в веб-интерфейсе:

⁠33.3. Управление разрешениями [Черновик]

У ресурсов OpenNebula (шаблонов, ВМ, образов и виртуальных сетей) есть права назначенные владельцу, группе и всем остальным. Для каждой из этих групп можно установить три права: Использование (use), Управление (manage) и Администрирование (admin).

Просмотреть/изменить права доступа можно в веб-интерфейсе, выбрав соответсвующий ресурс:

Просмотреть права можно и в командной строке:

$ onevm show 8
VIRTUAL MACHINE 8 INFORMATION
ID                  : 8
NAME                : test
USER                : oneadmin
GROUP               : oneadmin
STATE               : POWEROFF
LCM_STATE           : LCM_INIT
LOCK                : None
RESCHED             : No
HOST                : host-01
CLUSTER ID          : 0
CLUSTER             : default
START TIME          : 04/08 16:12:53
END TIME            : -
DEPLOY ID           : 69ab21c2-22ad-4afb-bfc1-7b4e4ff2364f

VIRTUAL MACHINE MONITORING
ID                  : 8
TIMESTAMP           : 1712756284

PERMISSIONS
OWNER          : um-
GROUP          : ---
OTHER          : ---
…

В данном примере показаны права на ВМ с ID=8.

Для изменения прав в командной строке используется команда chmod. Права записываются в числовом формате. Пример изменения прав:

$ onevm chmod 8 607
$ onevm show 8
…
PERMISSIONS
OWNER          : um-
GROUP          : ---
OTHER          : uma

Примечание [Черновик]

Разрешения по умолчанию для создаваемых ресурсов могут быть установлены:

глобально в oned.conf (атрибут DEFAULT_UMASK);

индивидуально для каждого пользователя с помощью команды oneuser umask.

Маска должна состоять из 3 восьмеричных цифр. Каждая цифра — это маска, которая, соответственно, отключает разрешение для владельца, группы и всех остальных. Например, если значение маски равно 137, то для нового объекта будут установлены права 640 (um- u-- ---).

⁠33.4. Управление правилами ACL [Черновик]

Система правил ACL позволяет точно настроить разрешенные операции для любого пользователя или группы пользователей. Каждая операция генерирует запрос на авторизацию, который проверяется на соответствие зарегистрированному набору правил ACL. Затем ядро ​​может дать разрешение или отклонить запрос.

Просмотреть список правил можно, выполнив команду:

$ oneacl list
  ID     USER RES_VHNIUTGDCOZSvRMAPt   RID OPE_UMAC  ZONE
   0       @1     V--I-T---O-S----P-     *     ---c     *
   1        *     ----------Z-------     *     u---     *
   2        *     --------------MA--     *     u---     *
   3       @1     -H----------------     *     -m--    #0
   4       @1     --N---------------     *     u---    #0
   5       @1     -------D----------     *     u---    #0
   6       #3     ---I--------------   #30     u---    #0

Данные правила соответсвуют следующим:

@1      VM+IMAGE+TEMPLATE+DOCUMENT+SECGROUP/*   CREATE  *
*       ZONE/*                                  USE     *
*       MARKETPLACE+MARKETPLACEAPP/*            USE     *
@1      HOST/*                                  MANAGE  #0
@1      NET/*                                   USE     #0
@1      DATASTORE/*                             USE     #0
#3      IMAGE/#30                                    USE     *

Первые шесть правил были созданы при начальной загрузке OpenNebula, а последнее — с помощью oneacl:

$ oneacl create "#3 IMAGE/#30 USE"
ID: 6

Столбцы в выводе oneacl list:

ID — идентификатор правила;

USER — пользователь. В этом поле может быть указан идентификатор пользователя (#), идентификатор группы (@) или все пользователи (*);

Resources — тип ресурса, к которому применяется правило:

V — ВМ;

H — узел;

N — виртуальная сеть;

I — образ;

U — пользователь;

T — шаблон;

G — группа;

D — хранилище;

C — кластер;

O — документ;

Z — зона;

S — группа безопасности;

v — виртуальный дата центр (VDC);

R — виртуальный маршрутизатор;

M — магазин приложений;

A — приложение из магазина приложений;

P — группа ВМ;

t — шаблон виртуальной сети;

RID — идентификатор ресурса. В этом поле может быть указан идентификатор отдельного объекта (#), группы (@) или кластера (%), или все объекты (*);

Operations — разрешённые операции:

U — использовать;

M — управлять;

A — администрировать;

C — создавать;

Zone — зоны, в которых применяется правило. В этом поле может быть указан идентификатор отдельной зоны (#), или всех зон (*).

Для удаления правила используется команда:

$ oneacl delete <ID>

Управлять правилами ACL удобно в веб-интерфейсе:

Для создания нового правила ACL, следует нажать кнопку Создать. В открывшемся диалоговом окне можно определить ресурсы, на которые распространяется правило, и разрешения, которые им предоставляются:

Примечание [Черновик]

Каждое правило ACL добавляет новые разрешения и не может ограничивать существующие: если какое-либо правило даёт разрешение, операция разрешается.

⁠33.5. Аутентификация пользователей [Черновик]

По умолчанию OpenNebula работает с внутренней системой аутентификации (пользователь/пароль). Но можно включить внешний драйвер аутентификации.

⁠33.5.1. LDAP аутентификация [Черновик]

LDAP аутентификация позволяет пользователям и группам пользователей, принадлежащих практически любому аутентификатору на основе LDAP, получать доступ к виртуальным рабочим столам и приложениям.

Важно [Черновик]

На сервере LDAP должна быть настроена отдельная учётная запись с правами чтения LDAP. От данной учетной записи будет выполняться подключение к серверу каталогов.

Для включения LDAP аутентификации необходимо в файл /etc/one/oned.conf добавить строку DEFAULT_AUTH = "ldap":

…
AUTH_MAD = [
    EXECUTABLE = "one_auth_mad",
    AUTHN = "ssh,x509,ldap,server_cipher,server_x509"
]

DEFAULT_AUTH = "ldap"
…

Важно [Черновик]

В файле /etc/one/sunstone-server.conf для параметра :auth должно быть указано значение opennebula:

:auth: opennebula

Ниже приведён пример настройки аутентификации в Active Directory (домен test.alt).

Для подключения к Active Directory в файле /etc/one/auth/ldap_auth.conf необходимо указать:

:user — пользователь AD с правами на чтение (пользователь указывается в формате opennebula@test.alt);

:password — пароль пользователя;

:host — IP-адрес или имя сервера AD (имя должно разрешаться через DNS или /etc/hosts);

:base — базовый DN для поиска пользователя;

:user_field — для этого параметра следует установить значение sAMAccountName;

:rfc2307bis — для этого параметра следует установить значение true.

Пример файла /etc/one/auth/ldap_auth.conf:

 server 1:
    :user: 'opennebula@test.alt'
    :password: 'Pa$$word'
    :auth_method: :simple
    :host: dc1.test.alt
    :port: 389
    :base: 'dc=test,dc=alt'
    :user_field: 'sAMAccountName'
    :mapping_generate: false
    :mapping_timeout: 300
    :mapping_filename: server1.yaml
    :mapping_key: GROUP_DN
    :mapping_default: 100
    :rfc2307bis: true
:order:
    - server 1

Примечание [Черновик]

В параметре :order указывается порядок, в котором будут опрошены настроенные серверы. Элементы в :order обрабатываются по порядку, пока пользователь не будет успешно аутентифицирован или не будет достигнут конец списка. Сервер, не указанный в :order, не будет опрошен.

Примечание [Черновик]

Пример файла /etc/one/auth/ldap_auth.conf для настройки аутентификации в домене FreeIPA (домен example.test):

 server 1:
    :user: 'uid=admin,cn=users,cn=accounts,dc=example,dc=test'
    :password: '12345678'
    :auth_method: :simple
    :host: ipa.example.test
    :port: 389
    :base: 'dc=example,dc=test'
    :user_field: 'uid'
    :mapping_generate: false
    :mapping_timeout: 300
    :mapping_filename: server1.yaml
    :mapping_key: GROUP_DN
    :mapping_default: 100
    :rfc2307bis: true
:order:
    - server 1

После того как пользователь AD авторизуется в веб-интерфейсе OpenNebula, у администратора появится возможность изменять его настройки:

Новых пользователей можно автоматически включать в определенную группу/группы. Для этого создается сопоставление группы AD с существующей группой OpenNebula. Эта система использует файл сопоставления, указанный в параметре :mapping_file (файл должен находиться в каталоге /var/lib/one/).

Файл сопоставления может быть сгенерирован автоматически с использованием данных в шаблоне группы, который определяет, какая группа AD сопоставляется с этой конкретной группой (для параметра :mapping_generate должно быть установлено значение true). Если в шаблон группы добавить строку:

GROUP_DN="CN=office,CN=Users,DC=test,DC=alt"

И в файле /etc/one/auth/ldap_auth.conf для параметра :mapping_key установить значение GROUP_DN, то поиск DN сопоставляемой группы будет осуществляться в этом параметре шаблона. В этом случае файл /var/lib/one/server1.yaml будет сгенерирован со следующим содержимым:

---
CN=office,CN=Users,DC=test,DC=alt: '100'

и пользователи из группы AD office, будут сопоставлены с группой ALT (ID=100).

Можно отключить автоматическую генерацию файла сопоставления, установив значение :mapping_generate равным false, и выполнить сопоставление вручную. Файл сопоставления имеет формат YAML и содержит хеш, где ключ — это DN группы AD, а значение — идентификатор группы OpenNebula. Например, если содержимое файла /var/lib/one/server1.yaml:

CN=office,CN=Users,DC=test,DC=alt: '100'
CN=Domain Admins,CN=Users,DC=test,DC=alt: '101'

то пользователи из группы AD office, будут сопоставлены с группой ALT (ID=100), а из группы AD Domain Admin — с группой Admin (ID=101):

⁠Глава 34. Настройка отказоустойчивого кластера [Черновик]

В данном разделе рассмотрена настройка отказоустойчивого кластера (High Available, HA) для основных служб OpenNebula: core (oned), scheduler (mm_sched).

OpenNebula использует распределенный консенсусный протокол Raft, для обеспечения отказоустойчивости и согласованности состояний между службами. Алгоритм консенсуса построен на основе двух концепций:

состояние системы — данные, хранящиеся в таблицах базы данных (пользователи, списки управления доступом или виртуальные машины в системе);

журнал (log) — последовательность операторов SQL, которые последовательно применяются к базе данных OpenNebula на всех серверах для изменения состояния системы.

Чтобы сохранить согласованное представление о системе на всех серверах, изменения состояния системы выполняются через специальный узел, лидер или ведущий (Leader). Leader периодически посылает запросы (heartbeats) другим серверам, ведомым (Follower), чтобы сохранить свое лидерство. Если Leader не может послать запрос, Follower-серверы продвигаются к кандидатам и начинают новые выборы.

Каждый раз, когда система изменяется (например, в систему добавляется новая ВМ), Leader обновляет журнал и реплицирует запись у большинства Follower, прежде чем записывать её в базу данных. Таким образом, увеличивается задержка операций с БД, но состояние системы безопасно реплицируется, и кластер может продолжить свою работу в случае отказа узла.

Для настройки High Available требуется:

нечетное количество серверов (рекомендуемый размер развертывания — 3 или 5 серверов, что обеспечивает отказоустойчивость при отказе 1 или 2 серверов соответственно);

рекомендуется идентичная конфигурация серверов;

идентичная программная конфигурация серверов (единственное отличие — это поле SERVER_ID в /etc/one/oned.conf);

рекомендуется использовать подключение к базе данных одного типа (MySQL);

серверы должны иметь беспарольный доступ для связи друг с другом;

плавающий IP, который будет назначен лидеру;

общая файловая система.

Добавлять дополнительные серверы или удалять старые можно после запуска кластера.

В данном примере показана настройка HA кластера из трех серверов:

192.168.0.186 opennebula

192.168.0.187 server02

192.168.0.188 server03

192.168.0.200 Floating IP

⁠34.1. Первоначальная конфигурация Leader [Черновик]

Запустить сервис OpenNebula и добавить локальный сервер в существующую или новую зону (в примере зона с ID 0):

$ onezone list
C   ID NAME             ENDPOINT                                      FED_INDEX
*    0 OpenNebula       http://localhost:2633/RPC2                    -1

$ onezone server-add 0 --name opennebula --rpc http://192.168.0.186:2633/RPC2

$ onezone show 0
ZONE 0 INFORMATION
ID                : 0
NAME              : OpenNebula

ZONE SERVERS
ID NAME            ENDPOINT
 0 opennebula      http://192.168.0.186:2633/RPC2

HA & FEDERATION SYNC STATUS
ID NAME            STATE      TERM       INDEX      COMMIT     VOTE  FED_INDEX
 0 opennebula      solo       0          -1         0          -1    -1

ZONE TEMPLATE
ENDPOINT="http://localhost:2633/RPC2"

Остановить сервис opennebula и обновить конфигурацию SERVER_ID в файле /etc/one/oned.conf:

FEDERATION = [
    MODE          = "STANDALONE",
    ZONE_ID       = 0,
    SERVER_ID     = 0, # изменить с -1 на 0 (0 — это ID сервера)
    MASTER_ONED   = ""
]

Включить Raft-обработчики, чтобы добавить плавающий IP-адрес в кластер (файл /etc/one/oned.conf):

RAFT_LEADER_HOOK = [
    COMMAND = "raft/vip.sh",
    ARGUMENTS = "leader enp0s3 192.168.0.200/24"
]

# Executed when a server transits from leader->follower
RAFT_FOLLOWER_HOOK = [
    COMMAND = "raft/vip.sh",
    ARGUMENTS = "follower enp0s3 192.168.0.200/24"
]

Запустить сервис OpenNebula и проверить зону:

$ onezone show 0
ZONE 0 INFORMATION
ID                : 0
NAME              : OpenNebula

ZONE SERVERS
ID NAME            ENDPOINT
 0 opennebula      http://192.168.0.186:2633/RPC2

HA & FEDERATION SYNC STATUS
ID NAME            STATE      TERM       INDEX      COMMIT     VOTE  FED_INDEX
 0 opennebula      leader     1          5          5          0     -1

ZONE TEMPLATE
ENDPOINT="http://localhost:2633/RPC

Сервер opennebula стал Leader-сервером, так же ему был присвоен плавающий адрес (Floating IP):

$ ip -o a sh enp0s3
2: enp0s3    inet 192.168.0.186/24 brd 192.168.0.255 scope global enp0s3\       valid_lft forever preferred_lft forever
2: enp0s3    inet 192.168.0.200/24 scope global secondary enp0s3\       valid_lft forever preferred_lft forever
2: enp0s3    inet6 fe80::a00:27ff:fec7:38e6/64 scope link \       valid_lft forever preferred_lft forever

⁠34.2. Добавление дополнительных серверов [Черновик]

Предупреждение [Черновик]

Данная процедура удалит полностью базу на сервере и заменит её актуальной с Leader-сервера.

Предупреждение [Черновик]

Рекомендуется добавлять по одному узлу за раз, чтобы избежать конфликта в базе данных.

На Leader создать полную резервную копию актуальной базы и перенести её на другие серверы вместе с файлами из каталога /var/lib/one/.one/:

$ onedb backup -u oneadmin -d opennebula -p oneadmin
MySQL dump stored in /var/lib/one/mysql_localhost_opennebula_2021-6-23_13:43:21.sql
Use 'onedb restore' or restore the DB using the mysql command:
mysql -u user -h server -P port db_name < backup_file

$ scp /var/lib/one/mysql_localhost_opennebula_2021-6-23_13\:43\:21.sql <ip>:/tmp

$ ssh <ip> rm -rf /var/lib/one/.one
$ scp -r /var/lib/one/.one/ <ip>:/var/lib/one/

Остановить сервис OpenNebula на Follower-узлах и восстановить скопированную базу:

$ onedb restore -f -u oneadmin -p oneadmin -d opennebula /tmp/mysql_localhost_opennebula_2021-6-23_13\:43\:21.sql
MySQL DB opennebula at localhost restored.

Перейти на Leader и добавить в зону новые узлы (рекомендуется добавлять серверы по-одному):

$ onezone server-add 0 --name server02 --rpc http://192.168.0.187:2633/RPC2

Проверить зону на Leader-сервере:

$ onezone show 0
ZONE 0 INFORMATION
ID                : 0
NAME              : OpenNebula

ZONE SERVERS
ID NAME            ENDPOINT
 0 opennebula      http://192.168.0.186:2633/RPC2
 1 server02        http://192.168.0.187:2633/RPC2

HA & FEDERATION SYNC STATUS
ID NAME            STATE      TERM       INDEX      COMMIT     VOTE  FED_INDEX
 0 opennebula      leader     4          22         22         0     -1
 1 server02        error      -          -          -          -     -

ZONE TEMPLATE
ENDPOINT="http://localhost:2633/RPC2"

Новый сервер находится в состоянии ошибки, так как OpenNebula на новом сервере не запущена. Следует запомнить идентификатор сервера, в этом случае он равен 1.

Переключиться на добавленный Follower-сервер и обновить конфигурацию SERVER_ID в файле /etc/one/oned.conf, (указать в качестве SERVER_ID значение из предыдущего шага). Включить Raft-обработчики, как это было выполнено на Leader.

Запустить сервис OpenNebula на Follower-сервере и проверить на Leader-сервере состояние зоны:

$ onezone show 0
ZONE 0 INFORMATION
ID                : 0
NAME              : OpenNebula

ZONE SERVERS
ID NAME            ENDPOINT
 0 opennebula      http://192.168.0.186:2633/RPC2
 1 server02        http://192.168.0.187:2633/RPC2

HA & FEDERATION SYNC STATUS
ID NAME            STATE      TERM       INDEX      COMMIT     VOTE  FED_INDEX
 0 opennebula      leader     4          28         28         0     -1
 1 server02        follower   4          28         28         0     -1

ZONE TEMPLATE
ENDPOINT="http://localhost:2633/RPC2""

Повторить данные действия, чтобы добавить третий сервер в кластер.

Примечание [Черновик]

Добавлять серверы в кластер, следует только в случае нормальной работы кластера (работает Leader, а остальные находятся в состоянии Follower). Если в состоянии error присутствует хотя бы один сервер, необходимо это исправить.

Проверка работоспособности кластера:

$ onezone show 0
ZONE 0 INFORMATION
ID                : 0
NAME              : OpenNebula

ZONE SERVERS
ID NAME            ENDPOINT
 0 opennebula      http://192.168.0.186:2633/RPC2
 1 server02        http://192.168.0.187:2633/RPC2
 2 server03        http://192.168.0.188:2633/RPC2

HA & FEDERATION SYNC STATUS
ID NAME            STATE      TERM       INDEX      COMMIT     VOTE  FED_INDEX
 0 opennebula      leader     4          35         35         0     -1
 1 server02        follower   4          35         35         0     -1
 2 server03        follower   4          35         35         0     -1

ZONE TEMPLATE
ENDPOINT="http://localhost:2633/RPC2"

Если какой-либо узел находится в состоянии ошибки, следует проверить журнал (/var/log/one/oned.log), как в текущем Leader (если он есть), так и в узле, который находится в состоянии Error. Все сообщения Raft будут регистрироваться в этом файле.

⁠34.3. Добавление и удаление серверов [Черновик]

Команда добавления сервера:

$ onezone server-add <zoneid>

параметры:

-n, --name — имя сервера зоны;

-r, --rpc — конечная точка RPC сервера зоны;

-v, --verbose — подробный режим;

--user name — имя пользователя, используемое для подключения к OpenNebula;

--password password — пароль для аутентификации в OpenNebula;

--endpoint endpoint — URL конечной точки интерфейса OpenNebula xmlrpc.

Команда удаления сервера:

$ onezone server-del <zoneid> <serverid>

параметры:

-v, --verbose — подробный режим;

--user name — имя пользователя, используемое для подключения к OpenNebula;

--password password — пароль для аутентификации в OpenNebula;

--endpoint endpoint — URL конечной точки интерфейса OpenNebula xmlrpc.

⁠34.4. Восстановление сервера [Черновик]

Если Follower-сервер в течение некоторого времени не работает, он может выпасть из окна восстановления. Чтобы восстановить этот сервер необходимо:

Leader: создать резервную копию БД и скопировать её на отказавший сервер (повторно использовать предыдущую резервную копию нельзя).

Follower: остановить OpenNebula.

Follower: восстановить резервную копию БД.

Follower: запустить OpenNebula.

Leader: сбросить отказавший Follower, выполнив команду:

$ onezone server-reset <zone_id> <server_id_of_failed_follower>

⁠34.5. Sunstone [Черновик]

Есть несколько способов развертывания Sunstone в среде HA. Базовым является Sunstone, работающий на каждом интерфейсном узле OpenNebula. Клиенты используют только один сервер — Leader с плавающим IP.

⁠Часть V. Средство управления виртуальными окружениями PVE [Черновик]

Proxmox Virtual Environment (PVE) — средство управления виртуальными окружениями на базе гипервизора KVM и системы контейнерной изоляции LXC. Основными компонентами среды являются:

физические серверы, на которых выполняются процессы гипервизора KVM, и процессы, работающие в контейнерах LXC;

хранилища данных, в которых хранятся образы установочных дисков, образы дисков виртуальных машин KVM и файлы, доступные из контейнеров LXC;

виртуальные сетевые коммутаторы, к которым подключаются сетевые интерфейсы виртуальных окружений.

PVE состоит из веб-интерфейса, распределённого хранилища данных конфигурации виртуальных окружений и утилит конфигурирования, работающих в командной строке. Все эти инструменты предназначены только для управления средой выполнения виртуальных окружений. За формирование среды отвечают компоненты системы, не входящие непосредственно в состав PVE. В первую очередь это сетевая и дисковая подсистемы, а также механизмы аутентификации.

⁠Глава 35. Системные требования [Черновик]

Минимальные cистемные требования (для тестирования):

CPU: 64bit (Intel EMT64 или AMD64), поддержка Intel VT/AMD-V CPU/Mainboard;

минимум 1 Гб ОЗУ;

жёсткий диск;

сетевая карта.

Рекомендуемые cистемные требования:

CPU: мультипроцессорный 64bit (Intel EMT64 или AMD64), поддержка Intel VT/AMD-V CPU/Mainboard;

минимум 2 Гб ОЗУ для ОС и сервисов PVE. Плюс выделенная память для гостевых систем. Для Ceph или ZFS требуется дополнительная память, примерно 1 ГБ ОЗУ на каждый ТБ используемого хранилища;

хранилище для ОС: аппаратный RAID;

хранилище для ВМ: аппаратный RAID для локального хранилища, или non-RAID для ZFS. Также возможно совместное и распределенное хранение;

быстрые жёсткие диски 15krpm SAS, Raid10;

сетевая карта.

Реальные системные требования определяются количеством и требованиями гостевых систем.

⁠Глава 36. Краткое описание возможностей [Черновик]

⁠36.1. Веб-интерфейс [Черновик]

Веб-интерфейс PVE предназначен для решения следующих задач:

создание, удаление, настройка виртуальных окружений;

управление физическими серверами;

мониторинг активности виртуальных окружений и использования ресурсов среды;

фиксация состояний (snapshot-ы), создание резервных копий и шаблонов виртуальных окружений, восстановление виртуальных окружений из резервных копий.

Кроме решения пользовательских задач, веб-интерфейс PVE можно использовать еще и для встраивания в интегрированные системы управления — например, в панели управления хостингом. Для этого он имеет развитый RESTful API с JSON в качестве основного формата данных.

Для аутентификации пользователей веб-интерфейса можно использовать как собственные механизмы PVE, так и PAM. Использование PAM дает возможность, например, интегрировать PVE в домен аутентификации.

Так как используется кластерная файловая система (pmxcfs), можно подключиться к любому узлу для управления всем кластером. Каждый узел может управлять всем кластером.

Веб-интерфейс PVE доступен по адресу https://<имя-компьютера>:8006. Потребуется пройти аутентификацию (логин по умолчанию: root, пароль указывается в процессе установки ОС):

Пользовательский интерфейс PVE состоит из четырех областей:

заголовок — верхняя часть. Показывает информацию о состоянии и содержит кнопки для наиболее важных действий;

дерево ресурсов — с левой стороны. Дерево навигации, где можно выбирать конкретные объекты;

панель контента — центральная часть. Здесь отображаются конфигурация и статус выбранных объектов;

панель журнала — нижняя часть. Отображает записи журнала для последних задач. Чтобы получить более подробную информацию или прервать выполнение задачи, следует дважды щелкнуть левой клавишей мыши по записи журнала.

Примечание [Черновик]

Есть возможность работы с PVE из мобильного приложения, например, Proxmox. В приложении можно получить доступ к узлам, ВМ и контейнерам:

Можно зайти в консоль ВМ с помощью noVNC или SPICE, осуществлять необходимые манипуляции внутри ВМ:

⁠36.2. Хранилище данных [Черновик]

В случае локальной установки PVE для размещения данных виртуальных окружений можно дополнительно ничего не настраивать и использовать локальную файловую систему сервера. Но в случае кластера из нескольких серверов имеет смысл настроить сетевую или распределенную сетевую файловую систему, обеспечивающую параллельный доступ к файлам со всех серверов, на которых выполняются процессы виртуальных окружений. В качестве таких файловых систем могут выступать, например, NFS или CEPH.

⁠36.3. Сетевая подсистема [Черновик]

В отличие от хранилища данных, сетевая подсистема требует специальной настройки даже в случае локальной установки PVE. Это обусловлено тем, что сетевые интерфейсы виртуальных окружений должны подключаться к какому-то виртуальному устройству, обеспечивающему соединение с общей сетью передачи данных. Перед началом настройки сети следует принять решение о том, какой тип виртуализации (LXC/KVM) и какой тип подключения будет использоваться (маршрутизация/мост).

⁠Глава 37. Установка и настройка PVE [Черновик]

Примечание [Черновик]

Компоненты PVE будут установлены в систему, если при установке дистрибутива выбрать профиль Виртуальное окружение Proxmox (см. главу Установка системы).

При установке дистрибутива, необходимо настроить Ethernet-мост vmbr0 и при заполнении поля с именем компьютера указать полное имя с доменом (см. главу Настройка сети).

Все остальные настройки можно делать в веб-интерфейсе см. Создание кластера PVE.

⁠37.1. Установка PVE [Черновик]

Если развертывание PVE происходит в уже установленной системе на базе Десятой платформы, достаточно на всех нодах (узлах) любым штатным способом (apt-get, aptitude, synaptic) установить пакет pve-manager:

# apt-get install pve-manager

Все необходимые компоненты при этом будут установлены автоматически.

Следует также убедиться в том, что пакет systemd обновлен до версии, находящейся в репозитории P10.

⁠37.2. Настройка сетевой подсистемы [Черновик]

На всех узлах необходимо настроить Ethernet-мост.

Важно [Черновик]

Мосту должно быть назначено имя vmbr0 и оно должно быть одинаково на всех узлах.

Важно [Черновик]

При использовании дистрибутива Альт Виртуализация интерфейс vmbr0 создаётся и настраивается в процессе установки системы (см. Настройка сети).

⁠37.2.1. Настройка Ethernet-моста в командной строке [Черновик]

Перед настройкой Ethernet-моста (далее — моста) с помощью etcnet сначала необходимо убедиться, что установлен пакет bridge-utils. Etcnet использует утилиту brctl для настройки моста, и, если утилита не установлена, то при перезапуске системы сеть станет недоступна.

Если интерфейсы, входящие в состав моста, являются единственными физически подключенными и настройка моста происходит с удаленного узла через эти интерфейсы, то требуется соблюдать осторожность, т.к. эти интерфейсы перестанут быть доступны. В случае ошибки в конфигурации потребуется физический доступ к серверу. Для страховки, перед перезапуском сервиса network можно открыть еще одну консоль и запустить там, например, команду: sleep 500 && reboot.

Для настройки Ethernet-моста с именем vmbr0, следует выполнить следующие команды:

# mkdir /etc/net/ifaces/vmbr0
# cp /etc/net/ifaces/enp0s3/* /etc/net/ifaces/vmbr0/
# rm -f /etc/net/ifaces/enp0s3/{i,r}*
# cat <<EOF > /etc/net/ifaces/vmbr0/options
BOOTPROTO=static
CONFIG_WIRELESS=no
CONFIG_IPV4=yes
HOST='enp0s3'
ONBOOT=yes
TYPE=bri
EOF

Имя интерфейса, обозначенного здесь как enp0s3, следует указать в соответствии с реальной конфигурацией сервера.

IP-адрес для интерфейса будет взят из /etc/net/ifaces/enp0s3/ipv4address.

В опции HOST файла /etc/net/ifaces/vmbr0/options нужно указать те интерфейсы, которые будут входить в мост. Если в него будут входить интерфейсы, которые до этого имели IP-адрес (например, enp0s3), то этот адрес должен быть удален (например, можно закомментировать содержимое файла /etc/net/ifaces/enp0s3/ipv4address).

Для того чтобы изменения вступили в силу, необходим перезапуск сервиса network:

# systemctl restart network

При старте сети сначала поднимаются интерфейсы, входящие в мост, затем сам мост (автоматически).

⁠37.2.2. Настройка Ethernet-моста в веб-интерфейсе [Черновик]

При установленных пакетах alterator-net-eth и alterator-net-bridge, для настройки Ethernet-моста можно воспользоваться веб-интерфейсом центра управления системой (ЦУС).

Примечание [Черновик]

Для возможности использования веб-интерфейса ЦУС должен быть установлен пакет alterator-fbi и запущены сервисы ahttpd и alteratord:

# apt-get install alterator-fbi
# systemctl start ahttpd
# systemctl start alteratord

Веб-интерфейс ЦУС доступен по адресу https://<ip-адрес>:8080.

Для настройки Ethernet-моста необходимо выполнить следующие действия:

В веб-интерфейсе ЦУС выбрать пункт Сеть → Ethernet-интерфейсы.

У сетевого интерфейса, который будет входить в мост, удалить IP-адрес и шлюз по умолчанию.

Нажать кнопку Создать сетевой мост…:

В открывшемся окне, в поле Интерфейс-мост задать имя моста vmbr0, переместить сетевые интерфейсы, которые будут входить в мост, из списка Доступные интерфейсы в список Члены и и нажать кнопку Ок:

Настроить созданный сетевой интерфейс vmbr0: задать IP-адрес и нажать кнопку Добавить, ввести адрес шлюза по умолчанию и DNS-сервера:

⁠Глава 38. Создание кластера PVE [Черновик]

Рекомендации:

все узлы должны иметь возможность подключаться друг к другу через UDP порты 5404 и 5405;

дата и время должны быть синхронизированы;

между узлами используется SSH туннель на 22 TCP порту;

если необходимо обеспечение высокой доступности (High Availability), необходимо иметь как минимум три узла для организации кворума. На всех узлах должна быть установлена одна версия PVE;

рекомендуется использовать выделенный сетевой адаптер для трафика кластера, особенно если используется общее хранилище.

PVE кластер может состоять из двух и более серверов.

Кластер не создается автоматически на только что установленном узле PVE. В настоящее время создание кластера может быть выполнено либо в консоли (вход через ssh), либо в веб-интерфейсе.

Важно [Черновик]

PVE при создании кластера включает парольную аутентификацию для root в sshd. В целях повышения безопасности, после включения всех серверов в кластер, рекомендуется отключить парольную аутентификацию для root в sshd:

# control sshd-permit-root-login without_password
# systemctl restart sshd

При добавлении в кластер нового сервера, можно временно включить парольную аутентификацию:

# control sshd-permit-root-login enabled
# systemctl restart sshd

А после того, как сервер будет добавлен, снова отключить.

Кластеры используют ряд определённых портов для различных функций. Важно обеспечить доступность этих портов и отсутствие их блокировки межсетевыми экранами.

⁠

Таблица 38.1. Используемые порты [Черновик]

Порт

Функция

TCP 8006

Веб-интерфейс PVE

TCP 5900-5999

Доступ к консоли VNC

TCP 3128

Доступ к консоли SPICE

TCP 22

SSH доступ

UDP 5404, 5405

Широковещательный CMAN для применения настроек кластера

⁠38.1. Настройка узлов кластера [Черновик]

PVE должен быть установлен на всех узлах. Следует убедиться, что каждый узел установлен с окончательным именем хоста и IP-конфигурацией. Изменение имени хоста и IP-адреса невозможно после создания кластера.

Необходимо обеспечить взаимно однозначное прямое и обратное преобразование имен для всех узлов кластера. Крайне желательно использовать DNS, в крайнем случае, можно обойтись соответствующими записями в локальных файлах /etc/hosts:

# echo "192.168.0.186 pve01.test.alt pve01" >> /etc/hosts
# echo "192.168.0.90 pve02.test.alt pve02" >> /etc/hosts
# echo "192.168.0.70 pve03.test.alt pve03" >> /etc/hosts

Примечание [Черновик]

В PVE это можно сделать в панели управления: выбрать узел, перейти в Система → Хосты, добавить все узлы, которые будут включены в состав кластера:

Примечание [Черновик]

Имя машины не должно присутствовать в файле /etc/hosts разрешающимся в 127.0.0.1.

⁠38.2. Создание кластера в веб-интерфейсе [Черновик]

Для создания кластера необходимо выполнить следующие действия:

В панели управления любого узла кластера выбрать Центр обработки данных → Кластер и нажать кнопку Создать кластер:

В открывшемся окне, задать название кластера, выбрать IP-адрес интерфейса, на котором узел кластера будет работать, и нажать кнопку Создать:

При успешном создании кластера будет выведена соответствующая информация:

Для добавления узла в кластер необходимо выполнить следующие действия:

В панели управления узла, на котором был создан кластер, выбрать Центр обработки данных → Кластер и нажать кнопку Данные присоединения:

В открывшемся окне, нажав кнопку Копировать данные, скопировать данные присоединения:

Перейти в панель управления узла, который следует присоединить к кластеру. Выбрать Центр обработки данных → Кластер и нажать кнопку Присоединить к кластеру:

В поле Данные вставить данные присоединения, поля Адрес сервера и Отпечаток при этом будут заполнены автоматически. В поле Пароль ввести пароль пользователя root первого узла и нажать кнопку Join <имя_кластера> (Присоединение):

Через несколько минут, после завершения репликации всех настроек, узел будет подключен к кластеру:

Сразу после инициализации кластера в пределах каждого из узлов доступно одно локальное хранилище данных:

⁠38.3. Создание кластера в консоли [Черновик]

Команда, создания кластера:

# pvecm create <cluster_name>

На «головном» узле кластера необходимо выполнить команду инициализации конкретного кластера PVE, в данном случае — «pve-cluster»:

# systemctl start pve-cluster
# pvecm create pve-cluster

Проверка:

# pvecm status
Cluster information
-------------------
Name:             pve-cluster
Config Version:   1
Transport:        knet
Secure auth:      on

Quorum information
------------------
Date:             Mon Apr  1 10:32:25 2024
Quorum provider:  corosync_votequorum
Nodes:            1
Node ID:          0x00000001
Ring ID:          1.5
Quorate:          Yes

Votequorum information
----------------------
Expected votes:   1
Highest expected: 1
Total votes:      1
Quorum:           1
Flags:            Quorate

Membership information
----------------------
Nodeid      Votes Name
0x00000001      1 192.168.0.186 (local)

Команда создания кластера создает файл настройки /etc/pve/corosync.conf. По мере добавления узлов в кластер файл настройки будет автоматически пополняться информацией об узлах.

Команда, для добавления узла в кластер:

# pvecm add <existing_node_in_cluster>

где existing_node_in_cluster — адрес уже добавленного узла (рекомендуется указывать самый первый).

Для добавления узлов в кластер, необходимо на «подчинённых» узлах выполнить команду:

# pvecm add pve01

где pve01 — имя или IP-адрес «головного» узла.

При добавлении узла в кластер, потребуется ввести пароль администратора главного узла кластера:

# pvecm add pve01
Please enter superuser (root) password for 'pve01': ***
Establishing API connection with host 'pve01'

Login succeeded.
Request addition of this node
Join request OK, finishing setup locally
stopping pve-cluster service
backup old database to '/var/lib/pve-cluster/backup/config-1625747072.sql.gz'
waiting for quorum...OK
(re)generate node files
generate new node certificate
merge authorized SSH keys and known hosts
generated new node certificate, restart pveproxy and pvedaemon services
successfully added node 'pve03' to cluster.

После добавления узлов в кластер, файл настройки кластера в /etc/pve/corosync.conf должен содержать информацию об узлах кластера.

На всех узлах кластера должны быть запущены и добавлены в список служб, запускаемых при старте узла, службы:

# systemctl start pve-cluster pveproxy pvedaemon pvestatd pve-firewall pvefw-logger pve-ha-crm pve-ha-lrm spiceproxy lxc lxcfs lxc-net lxc-monitord qmeventd pvescheduler pve-lxc-syscalld
# systemctl enable pve-cluster pveproxy pvedaemon pvestatd pve-firewall corosync pvefw-logger pve-guests pve-ha-crm pve-ha-lrm spiceproxy lxc lxcfs lxc-net lxc-monitord qmeventd pvescheduler pve-lxc-syscalld

⁠38.4. Удаление узла из кластера [Черновик]

Перед удалением узла из кластера необходимо переместить все ВМ с этого узла, а также убедиться, что нет никаких локальных данных или резервных копий, которые необходимо сохранить.

Для удаления узла из кластера необходимо выполнить следующие шаги:

Войти в узел кластера не подлежащий удалению.

Ввести команду pvecm nodes, чтобы определить идентификатор узла, который следует удалить:

# pvecm nodes

Membership information
----------------------
    Nodeid      Votes Name
         1          1 pve01 (local)
         2          1 pve02
         3          1 pve03

Выключить подлежащий удалению узел (в данном случае pve2).

Удалить узел из кластера, выполнив команду:

# pvecm delnode pve02

Проверить, что узел удален (команда отобразит список узлов кластера без удаленного узла):

# pvecm nodes
Membership information
----------------------
    Nodeid      Votes Name
         1          1 pve01 (local)
         3          1 pve03

Если необходимо вернуть удаленный узел обратно в кластер, следует выполнить следующие действия:

переустановить PVE на этом узле (это гарантирует, что все секретные ключи кластера/ssh и любые данные конфигурации будут уничтожены);

присоединиться к кластеру.

⁠38.5. Кворум [Черновик]

Для обеспечения согласованного состояния среди всех узлов кластера PVE использует метод на основе кворума. Кворум — это минимальное количество голосов, которые должны быть доступны для работы кластера.

Проверить наличие кворума можно, выполнив команду:

# pvecm status
…
Votequorum information
----------------------
Expected votes:   5
Highest expected: 5
Total votes:      5
Quorum:           3
Flags:            Quorate
…

В выводе команды видно, что в кластере пять узлов (Expected votes), из них для кворума необходимо не менее трёх (Quorum), сейчас все пять узлов активны (Total votes), кворум соблюден (Flags: Quorate).

Если количество голосов окажется меньше, чем требуется для кворума, кластер переключится в режим только для чтения (read-only): гостевые системы продолжат работать, но любые операции с узлами или гостевыми системами станут невозможными.

В PVE по умолчанию каждому узлу назначается один голос.

⁠38.6. Поддержка внешнего арбитра corosync [Черновик]

Добавив в кластер PVE внешний арбитр, можно добиться того, что кластер сможет выдержать большее количество отказов узлов без нарушения работы кластера.

Для работы арбитра задействованы две службы:

Corosync Quroum (QDevice) — служба, которая работает на каждом узле кластера PVE. Она предоставляет настроенное количество голосов подсистеме кворума на основе решения внешнего управляющего арбитра. Основное назначение этой службы — позволить кластеру выдержать большее количество отказов узлов, чем это позволяют стандартные правила кворума. Арбитр видит все узлы и может выбрать только один набор узлов, чтобы отдать свой голос (это будет сделано только в том случае, если указанный набор узлов при получении голоса арбитра сможет иметь кворум).

Внешний арбитр, который работает на независимом сервере. Единственное требование к арбитру — наличие сетевого доступа к кластеру.

Примечание [Черновик]

В настоящее время Qdevices для кластеров с нечетным числом узлов не поддерживается. Это связано с разницей в количестве голосов, которые QDevice предоставляет для кластера.

Кластеры с чётным числом узлов получают один дополнительный голос, что только увеличивает доступность, поскольку сбой самого QDevice не влияет на работоспособность кластера.

Для кластера с нечётным числом узлов QDevice предоставляет (N-1) голосов, где N — количество узлов кластера. Этот алгоритм допускает сбой всех узлов, кроме одного и самого QDevice. При этом есть два недостатка:

если произойдет сбой арбитра, ни один другой узел не может выйти из строя, или кластер немедленно потеряет кворум. Например, в кластере с 15 узлами 7 могут выйти из строя, прежде чем кластер станет неработоспособным. Но если в этом кластере настроен QDevice и он сам выйдет из строя, ни один узел из 15 не может выйти из строя. В этом случае QDevice действует почти как единая точка отказа;

возможность выхода из строя всех узлов, кроме одного, плюс QDevice, может привести к массовому восстановлению служб высокой доступности (HA), что может привести к перегрузке единственного оставшегося узла. Кроме того, сервер Ceph прекратит предоставлять услуги, если в сети останется только ((N-1)/2) узлов или меньше.

Важно [Черновик]

При настройке QDevice PVE копирует ключи кластера на внешний сервер. Для добавления QDevice можно временно включить парольную аутентификацию для root в sshd на внешнем сервере:

# control sshd-permit-root-login enabled
# systemctl restart sshd

А после того, как QDevice будет добавлен, отключить:

# control sshd-permit-root-login without_password
# systemctl restart sshd

Для настройки работы арбитра необходимо выполнить следующие действия:

На внешнем сервере:

установить пакет corosync-qnetd (из репозитория):

# apt-get install corosync-qnetd

запустить и добавить в автозагрузку службу corosync-qnetd:

# systemctl enable --now corosync-qnetd

На всех узлах PVE установить пакет corosync-qdevice (из репозитория):

# apt-get install corosync-qdevice

На одном из узлов PVE настроить QDevice, выполнив команду:

# pvecm qdevice setup 192.168.0.88

где 192.168.0.88 — IP-адрес арбитра (внешнего сервера).

SSH-ключи из кластера будут автоматически скопированы в QDevice.

На любом узле PVE проверить статус кластера:

# pvecm status
…
Votequorum information
----------------------
Expected votes:   5
Highest expected: 5
Total votes:      5
Quorum:           3
Flags:            Quorate Qdevice

Membership information
----------------------
    Nodeid      Votes    Qdevice Name
0x00000001          1    A,V,NMW 192.168.0.186 (local)
0x00000002          1    A,V,NMW 192.168.0.90
0x00000003          1    A,V,NMW 192.168.0.70
0x00000004          1    A,V,NMW 192.168.0.91
0x00000000          1            Qdevice

Для добавления нового узла или удаления существующего из кластера с настроенным QDevice, сначала необходимо удалить QDevice. После можно добавлять или удалять узлы в обычном режиме.

Команда удаления QDevice:

# pvecm qdevice remove

⁠38.7. Кластерная файловая система PVE (pmxcfs) [Черновик]

Кластерная файловая система PVE (pmxcfs) — это файловая система на основе базы данных для хранения файлов конфигурации виртуальных окружений, реплицируемая в режиме реального времени на все узлы кластера с помощью corosync. Эта файловая система используется для хранения всех конфигурационных файлов связанных c PVE. Хотя файловая система хранит все данные в базе данных на диске, копия данных находится в оперативной памяти, что накладывает ограничение на максимальный размер данных, который в настоящее время составляет 30 МБ.

Преимущества файловой системы pmxcfs:

мгновенная репликация и обновление конфигурации на все узлы в кластере;

исключается вероятность дублирования идентификаторов виртуальных машин;

в случае развала кворума в кластере, файловая система становится доступной только для чтения.

Все файлы и каталоги принадлежат пользователю root и имеют группу www-data. Только root имеет права на запись, но пользователи из группы www-data могут читать большинство файлов. Файлы в каталогах /etc/pve/priv/ и /etc/pve/nodes/${NAME}/priv/ доступны только root.

Файловая система смонтирована в /etc/pve/.

⁠Глава 39. Системы хранения PVE [Черновик]

Образы ВМ могут храниться в одном или нескольких локальных хранилищах или в общем (совместно используемом) хранилище, например, NFS или iSCSI (NAS, SAN). Ограничений нет, можно настроить столько хранилищ, сколько необходимо.

В кластерной среде PVE наличие общего хранилища не является обязательным, однако оно делает управление хранением более простой задачей. Преимущества общего хранилища:

миграция ВМ в реальном масштабе времени;

плавное расширение пространства хранения с множеством узлов;

централизованное резервное копирование;

многоуровневое кэширование данных;

централизованное управление хранением.

⁠39.1. Типы хранилищ в PVE [Черновик]

Существует два основных типа хранилищ:

файловые хранилища — хранят данные в виде файлов. Технологии хранения на уровне файлов обеспечивают доступ к полнофункциональной файловой системе (POSIX). В целом они более гибкие, чем любое хранилище на уровне блоков, и позволяют хранить контент любого типа;

блочное хранилище — позволяет хранить большие необработанные образы. Обычно в таких хранилищах невозможно хранить другие файлы (ISO-образы, резервные копии, и т.д.). Большинство современных реализаций хранилищ на уровне блоков поддерживают моментальные снимки и клонирование. RADOS и GlusterFS являются распределенными системами, реплицирующими данные хранилища на разные узлы.

Хранилищами данных удобно управлять через веб-интерфейс. В качестве бэкенда хранилищ PVE может использовать:

сетевые файловые системы, в том числе распределенные: NFS, CEPH, GlusterFS;

локальные системы управления дисковыми томами: LVM, ZFS;

удаленные (iSCSI) и локальные дисковые тома;

локальные дисковые каталоги.

⁠

Таблица 39.1. Доступные типы хранилищ [Черновик]

Хранилище

PVE тип

Уровень

Общее (shared)

Снимки (snapshots)

ZFS (локальный)

zfspool

файл

нет

да

Каталог

dir

файл

нет

нет (возможны в формате qcow2)

BTRFS

btrfs

файл

нет

да

NFS

nfs

файл

да

нет (возможны в формате qcow2)

CIFS

cifs

файл

да

нет (возможны в формате qcow2)

GlusterFS

glusterfs

файл

да

нет (возможны в формате qcow2)

CephFS

cephfs

файл

да

да

LVM

lvm

блок

нет*

нет

LVM-Thin

lvmthin

блок

нет

да

iSCSI/kernel

iscsi

блок

да

нет

iSCSI/libiscsi

iscsidirect

блок

да

нет

Ceph RBD

rbd

блок

да

да

ZFS over iSCSI

zfs

блок

да

да

Proxmox Backup Server

pbs

файл/блок

да

-

Примечание [Черновик]

Можно использовать LVM поверх хранилища на базе iSCSI или FC, получив таким образом общее хранилище LVM.

⁠39.2. Конфигурация хранилища [Черновик]

Вся связанная с PVE информация о хранилищах хранится в файле /etc/pve/storage.cfg. Поскольку этот файл находится в /etc/pve/, он автоматически распространяется на все узлы кластера. Таким образом, все узлы имеют одинаковую конфигурацию хранилища.

Совместное использование конфигурации хранилища имеет смысл для общего хранилища, поскольку одно и то же «общее» хранилище доступно для всех узлов. Но также полезно для локальных типов хранения. В этом случае такое локальное хранилище доступно на всех узлах, но оно физически отличается и может иметь совершенно разное содержимое.

Каждое хранилище имеет <тип> и уникально идентифицируется своим <STORAGE_ID>. Конфигурация хранилища выглядит следующим образом:

<type>: <STORAGE_ID>
        <property> <value>
        <property> <value>
        ...

Строка <type>: <STORAGE_ID> определяет хранилище, затем следует список свойств.

Пример файла /etc/pve/storage.cfg:

# cat /etc/pve/storage.cfg
dir: local
        path /var/lib/vz
        content images,rootdir,iso,snippets,vztmpl
        maxfiles 0
nfs: nfs-storage
        export /export/storage
        path /mnt/nfs-vol
        server 192.168.0.105
        content images,iso,backup,vztmpl
        options vers=3,nolock,tcp

В данном случае файл содержит описание специального хранилища local, которое ссылается на каталог /var/lib/vz, и описание NFS-хранилища nfs-storage.

⁠

Таблица 39.2. Параметры хранилищ [Черновик]

Свойство

Описание

nodes

Список узлов кластера, где хранилище можно использовать/доступно. Можно использовать это свойство, чтобы ограничить доступ к хранилищу.

content

Хранилище может поддерживать несколько типов содержимого. Это свойство указывает, для чего используется это хранилище.

Доступные опции:

images — образы виртуальных дисков;

rootdir — данные контейнеров;

vztmpl — шаблоны контейнеров;

backup — резервные копии (vzdump);

iso — ISO образы;

snippets — файлы сниппетов

shared

Указать, что это единое хранилище с одинаковым содержимым на всех узлах (или на всех перечисленных в опции nodes). Данное свойство не делает содержимое локального хранилища автоматически доступным для других узлов, он просто помечает как таковое уже общее хранилище!

disable

Отключить хранилище

maxfiles

Устарело, следует использовать свойство prune-backups. Максимальное количество файлов резервных копий на ВМ

prune-backups

Варианты хранения резервных копий

format

Формат образа по умолчанию (raw|qcow2|vmdk)

preallocation

Режим предварительного выделения (off|metadata|falloc|full) для образов raw и qcow2 в файловых хранилищах. По умолчанию используется значение metadata (равносильно значению off для образов raw). При использовании сетевых хранилищ в сочетании с большими образами qcow2, использование значения off может помочь избежать таймаутов.

Примечание [Черновик]

Не рекомендуется использовать один и тот же пул хранения в разных PVE-кластерах. Для некоторых операций требуется монопольный доступ к хранилищу, поэтому требуется правильная блокировка. Блокировка реализована внутри кластера, но не работает между разными кластерами.

⁠39.3. Идентификатор тома [Черновик]

Для обращения к данным хранилищ используется специальная нотация. Том идентифицируется по <STORAGE_ID>, за которым через двоеточие следует имя тома, зависящее от типа хранилища. Примеры <VOLUME_ID>:

local:iso/slinux-10.2-x86_64.iso
local:101/vm-101-disk-0.qcow2
local:backup/vzdump-qemu-100-2023_08_22-21_12_33.vma.zst
nfs-storage:vztmpl/alt-p10-rootfs-systemd-x86_64.tar.xz

Чтобы получить путь к файловой системе для <VOLUME_ID> используется команда:

# pvesm path <VOLUME_ID>

Например:

# pvesm path local:iso/slinux-10.2-x86_64.iso
/var/lib/vz/template/iso/slinux-10.2-x86_64.iso
# pvesm path nfs-storage:vztmpl/alt-p10-rootfs-systemd-x86_64.tar.xz
/mnt/pve/nfs-storage/template/cache/alt-p10-rootfs-systemd-x86_64.tar.xz

Для томов типа image существует отношение владения. Каждый такой том принадлежит ВМ или контейнеру. Например, том local:101/vm-101-disk-0.qcow2 принадлежит ВМ 101. При удалении ВМ или контейнера, система также удаляет все связанные тома, принадлежащие этой ВМ или контейнеру.

⁠39.4. Работа с хранилищами в PVE [Черновик]

⁠39.4.1. Использование командной строки [Черновик]

Утилита pvesm (PVE Storage Manager), позволяет выполнять общие задачи управления хранилищами.

Команды добавления (подключения) хранилища:

# pvesm add <TYPE> <STORAGE_ID> <OPTIONS>
# pvesm add dir <STORAGE_ID> --path <PATH>
# pvesm add nfs <STORAGE_ID> --path <PATH> --server <SERVER> --export <EXPORT>
# pvesm add lvm <STORAGE_ID> --vgname <VGNAME>
# pvesm add iscsi <STORAGE_ID> --portal <HOST[:PORT]> --target <TARGET>

Отключить хранилище:

# pvesm set <STORAGE_ID> --disable 1

Включить хранилище:

# pvesm set <STORAGE_ID> --disable 0

Для того чтобы изменить/установить опции хранилища, можно выполнить команды:

# pvesm set <STORAGE_ID> <OPTIONS>
# pvesm set <STORAGE_ID> --shared 1
# pvesm set local --format qcow2
# pvesm set <STORAGE_ID> --content iso

Удалить хранилище (при этом никакие данные не удаляются, удаляется только конфигурация хранилища):

# pvesm remove <STORAGE_ID>

Команда выделения тома:

# pvesm alloc <STORAGE_ID> <VMID> <name> <size> [--format <raw|qcow2>]

Выделить том 4 ГБ в локальном хранилище (имя будет сгенерировано):

# pvesm alloc local <VMID> '' 4G

Освободить место (уничтожает все данные тома):

# pvesm free <VOLUME_ID>

Вывести список хранилищ:

# pvesm status

Вывести список содержимого хранилища:

# pvesm list <STORAGE_ID> [--vmid <VMID>]

Вывести список ISO-образов:

# pvesm list <STORAGE_ID> --iso

⁠39.4.2. Добавление хранилища в веб-интерфейсе PVE [Черновик]

Хранилища, которые могут быть добавлены в веб-интерфейсе PVE:

Локальные хранилища:

Каталог — хранение на существующей файловой системе;

LVM — локальные устройства, такие как, FC, DRBD и т.д.;

ZFS;

BTRFS;

Сетевые хранилища:

LVM — сетевая поддержка с iSCSI target;

NFS;

CIFS;

GlusterFS;

iSCSI;

CephFS;

RBD;

ZFS over iSCSI.

При создании каждому хранилищу данных присваивается роль или набор ролей. Например, хранение контейнеров, образов виртуальных дисков, ISO-файлов и так далее. Список возможных ролей зависит от бэкенда хранилища. Например, для NFS или каталога локальной файловой системы доступны любые роли или наборы ролей, а хранилища на базе RBD можно использовать только для хранения образов дисков и контейнеров:

Примечание [Черновик]

Можно добавить локальные хранилища (ZFS, LVM и LVM-Thin), расположенные на других узлах кластера. Для этого в мастере добавления хранилища следует выбрать узел для сканирования:

⁠39.4.3. Каталог [Черновик]

PVE может использовать локальные каталоги или локально смонтированные общие ресурсы для организации хранилища. Каталог — это файловое хранилище, поэтому в нем можно хранить данные любого типа, например, образы виртуальных дисков, контейнеры, шаблоны, ISO-образы или файлы резервных копий. Для хранения данных разного типа, используется предопределенная структура каталогов. Эта структура используется на всех файловых хранилищах.

⁠

Таблица 39.3. Структура каталогов [Черновик]

Тип данных

Подкаталог

Образы дисков ВМ

images/<VMID>/

ISO-образы

template/iso/

Шаблоны контейнеров

template/cache/

Резервные копии

dump/

Snippets

snippets/

Примечание [Черновик]

Дополнительные хранилища можно подключить в /etc/fstab, а затем определить хранилище каталогов для этой точки монтирования. Таким образом, можно использовать любую файловую систему (ФС), поддерживаемую Linux.

Примечание [Черновик]

Большинство ФС «из коробки» не поддерживают моментальные снимки. Чтобы обойти эту проблему, этот бэкэнд может использовать возможности внутренних снимков qcow2.

Для создания нового хранилища типа Каталог необходимо выбрать Центр обработки данных → Хранилище, нажать кнопку Добавить и в выпадающем меню выбрать пункт Каталог.

Диалог создания хранилища local-iso типа Каталог для хранения ISO-образов и шаблонов контейнеров, которое будет смонтировано в каталог /mnt/iso:

Данное хранилище поддерживает все общие свойства хранилищ и дополнительно свойства:

path — указание каталога (это должен быть абсолютный путь к файловой системе);

content-dirs (опционально) — позволяет изменить макет по умолчанию. Состоит из списка идентификаторов, разделенных запятыми, в формате:

vtype=path

где vtype — один из разрешенных типов контента для хранилища, а path — путь относительно точки монтирования хранилища.

Пример файла конфигурации (/etc/pve/storage.cfg):

dir: backup
    path /mnt/backup
    content backup
    prune-backups keep-last=7
    shared 0
    content-dirs backup=custom/backup

Данная конфигурация определяет пул хранения резервных копий. Этот пул может использоваться для последних 7 резервных копий на виртуальную машину. Реальный путь к файлам резервных копий — /mnt/backup/custom/backup.

Примечание [Черновик]

Флаг shared (Общий доступ) можно установить только для кластерных ФС (например, ocfs2).

Хранилище Каталог использует следующую схему именования образов ВМ:

VM-<VMID>-<NAME>.<FORMAT>

где:

<VMID> — идентификатор ВМ;

<NAME> — произвольное имя (ascii) без пробелов. По умолчанию используется disk-[N], где [N] заменяется целым числом;

<FORMAT> — определяет формат образа (raw|qcow2|vmdk).

Пример:

# ls /var/lib/vz/images/101
vm-101-disk-0.qcow2  vm-101-disk-1.qcow2

При создании шаблона ВМ все образы дисков ВМ переименовываются, чтобы указать, что они теперь доступны только для чтения и могут использоваться в качестве базового образа для клонов:

base-<VMID>-<NAME>.<FORMAT>

⁠39.4.4. NFS [Черновик]

Хранилище NFS аналогично хранению каталогов и файлов на диске, с дополнительным преимуществом совместного хранения и миграции в реальном времени. Свойства хранилища NFS во многом совпадают с хранилищем типа Каталог. Структура каталогов и соглашение об именах файлов также одинаковы. Основным преимуществом является то, что можно напрямую настроить свойства сервера NFS, и общий ресурс будет монтироваться автоматически (без необходимости изменения /etc/fstab).

Данное хранилище поддерживает все общие свойства хранилищ кроме флага shared, который всегда установлен. Кроме того, для настройки NFS используются следующие свойства:

server — IP-адрес сервера или DNS-имя. Предпочтительнее использовать IP-адрес вместо DNS-имени (чтобы избежать задержек при поиске DNS);

export — совместный ресурс с сервера NFS (список можно просмотреть, выполнив команду pvesm scan nfs <server>);

path — локальная точка монтирования (по умолчанию /mnt/pve/<STORAGE_ID>/);

content-dirs (опционально) — позволяет изменить макет по умолчанию. Состоит из списка идентификаторов, разделенных запятыми, в формате:

vtype=path

где vtype — один из разрешенных типов контента для хранилища, а path — путь относительно точки монтирования хранилища;

options — параметры монтирования NFS (см. man nfs).

Пример файла конфигурации (/etc/pve/storage.cfg):

nfs: nfs-storage
    export /export/storage
    path /mnt/pve/nfs-storage
    server 192.168.0.105
    content images,backup,vztmpl,iso
    options vers=3,nolock,tcp

Примечание [Черновик]

По истечении времени ожидания запрос NFS по умолчанию повторяется бесконечно. Это может привести к неожиданным зависаниям на стороне клиента. Для содержимого, доступного только для чтения, следует рассмотреть возможность использования NFS-опции soft, в этом случае будет выполняться только три запроса.

Примечание [Черновик]

Для возможности монтирования NFS-хранилища должен быть запущен nfs-client:

# systemctl enable --now nfs-client.target

Присоединение хранилища NFS с именем nfs-storage с удаленного сервера 192.168.0.105:

После ввода IP-адреса удаленного сервера, доступные ресурсы будут автоматически просканированы и будут отображены в выпадающем списке Export. В данном примере обнаруженная в блоке диалога точка монтирования — /export/storage.

Пример добавления хранилища NFS в командной строке с помощью утилиты pvesm:

# pvesm add nfs nfs-storage --path /mnt/nfs-vol --server 192.168.0.105 --options vers=3,nolock,tcp --export /export/storage --content images,iso,vztmpl,backup

Получить список совместных ресурсов с сервера NFS:

# pvesm nfsscan <server>

⁠39.4.5. BTRFS [Черновик]

Свойства хранилища BTRFS во многом совпадают с хранилищем типа Каталог. Основное отличие состоит в том, с этим типом хранилища диски в формате raw будут помещены в subvolume, для возможности создания снимков (снапшотов) и поддержки автономной миграции хранилища с сохранением снимков.

Примечание [Черновик]

BTRFS учитывает флаг O_DIRECT при открытии файлов, что означает, что ВМ не должны использовать режим кеширования none, иначе возникнут ошибки контрольной суммы.

Данное хранилище настраивается аналогично хранилищу типа Каталог.

Примечание [Черновик]

При добавлении в качестве хранилища BTRFS каталога, который сам по себе не является точкой монтирования, настоятельно рекомендуется указать фактическую точку монтирования с помощью параметра is_mountpoint.

Пример файла конфигурации (/etc/pve/storage.cfg):

btrfs: btrfs-storage
    path /mnt/data/btrfs-storage
    content rootdir,images
    is_mountpoint /mnt/data
    nodes pve02
    prune-backups keep-all=1

В данном примере файловая система BTRFS смонтирована в /mnt/data, а в качестве пула хранения данных добавляется её подкаталог btrfs-storage/.

Диалог создания хранилища brtfs-storage типа BTRFS для хранения образов дисков и контейнеров, которое будет смонтировано в каталог /mnt/data:

Пример добавления хранилища BTRFS в командной строке с помощью утилиты pvesm:

# pvesm add btrfs btrfs-storage --path /mnt/data/btrfs-storage --is_mountpoint /mnt/data/ --content images,rootdir

⁠39.4.5.1. Администрирование Btrfs [Черновик]

В этом разделе приведены некоторые примеры работы с ФС Btrfs.

Пример создания ФС Btrfs на диске /dev/sdd:

# mkfs.btrfs -m single -d single -L My-Storage /dev/sdd

Параметры -d и -m используются для установки профиля для метаданных и данных соответственно. С помощью необязательного параметра -L можно установить метку.

Можно создать RAID1 на двух разделах /dev/sdb1 и/dev/sdc1:

# mkfs.btrfs -m raid1 -d raid1 -L My-Storage /dev/sdb1 /dev/sdc1

Новую ФС можно смонтировать вручную, например:

# mkdir /mnt/data
# mount /dev/sdd /mnt/data

Для автоматического монтирования Btrfs раздела, следует добавить этот раздел в /etc/fstab. Рекомендуется использовать значение UUID (выведенное командой mkfs.btrf), например:

UUID=5a556184-43b2-4212-bc21-eee3798c8322 /mnt/data btrfs defaults 0 0

Выполнить проверку монтирования:

# mount -a

Результатом выполнения команды должен быть пустой вывод без ошибок.

Примечание [Черновик]

UUID можно также получить, выполнив команду:

# blkid
/dev/sdd: LABEL="My-Storage" UUID="5a556184-43b2-4212-bc21-eee3798c8322" BLOCK_SIZE="4096" TYPE="btrfs"

Создание подтома (файловая система Btrfs должна быть примонтирована):

# btrfs subvolume create /mnt/data/btrfs-storage

Для создания подтома файловая система Btrfs должна быть примонтирована.

Удаление подтома:

# btrfs subvolume delete /mnt/data/btrfs-storage

Создание снимка (снимок — это подтом, который имеет общие данные и метаданные с другим подтомом):

# btrfs subvolume snapshot -r /mnt/data/btrfs-storage /mnt/data/new

Будет создан доступный только для чтения «клон» подтома /mnt/data/btrfs-storage. Чтобы из снимка, доступного только для чтения, создать его версию, доступную для записи, следует просто создать его снимок без опции -r.

Просмотреть список текущих подтомов:

# btrfs subvolume list /mnt/data
ID 256 gen 17 top level 5 path btrfs-storage
ID 257 gen 14 top level 5 path new

Отображение занятого/свободного места:

# btrfs filesystem usage /mnt/data

или:

$ btrfs filesystem df /mnt/data

⁠39.4.6. CIFS [Черновик]

Хранилище SMB/CIFS расширяет хранилище типа Каталог, поэтому ручная настройка монтирования CIFS не требуется.

Примечание [Черновик]

Для возможности просмотра общих ресурсов на каждом узле кластера необходимо установить пакет samba-client.

Данное хранилище поддерживает все общие свойства хранилищ кроме флага shared, который всегда установлен. Кроме того, для настройки CIFS используются следующие свойства:

server — IP-адрес сервера или DNS-имя. Предпочтительнее использовать IP-адрес вместо DNS-имени (чтобы избежать задержек при поиске DNS);

share — совместный ресурс с сервера CIFS (список можно просмотреть, выполнив команду pvesm scan cifs <server>);

username — имя пользователя для хранилища CIFS (опционально, по умолчанию «guest»);

password — пароль пользователя (опционально). Пароль будет сохранен в файле, доступном только для чтения root-пользователю (/etc/pve/priv/<STORAGE_ID>.cred);

domain — устанавливает домен пользователя (рабочую группу) для этого хранилища (опционально);

smbversion — версия протокола SMB (опционально, по умолчанию 3). Версия 1 не поддерживается;

path — локальная точка монтирования (по умолчанию /mnt/pve/<STORAGE_ID>/);

content-dirs (опционально) — позволяет изменить макет по умолчанию. Состоит из списка идентификаторов, разделенных запятыми, в формате:

vtype=path

где vtype — один из разрешенных типов контента для хранилища, а path — путь относительно точки монтирования хранилища;

options — дополнительные параметры монтирования CIFS (см. man mount.cifs). Некоторые параметры устанавливаются автоматически, и их не следует задавать в этом параметре. PVE всегда устанавливает опцию soft;

subdir — подкаталог общего ресурса, который необходимо смонтировать (опционально, по умолчанию используется корневой каталог общего ресурса).

Пример файла конфигурации (/etc/pve/storage.cfg):

cifs: newCIFS
    path /mnt/pve/newCIFS
    server 192.168.0.105
    share smb_data
    smbversion 2.1

Получить список совместных ресурсов с сервера CIFS можно, выполнив команду:

# pvesm cifsscan <server> [--username <username>] [--password]

Команда добавления общего ресурса в качестве хранилища:

# pvesm add cifs <storagename> --server <server> --share <share> [--username <username>] [--password]

Подключение хранилища SMB/CIFS с именем newCIFS с удаленного сервера 192.168.0.105:

После ввода IP-адреса удаленного сервера, доступные ресурсы будут автоматически просканированы и будут отображены в выпадающем списке Share.

Примечание [Черновик]

При создании CIFS хранилища в веб-интерфейсе, PVE предполагает, что удаленный сервер поддерживает CIFS v3. В веб-интерфейсе нет возможности указать версию CIFS, поэтому в случае, если удалённый сервер поддерживает версии CIFS отличные от v3, создать хранилище можно в командной строке, например:

# pvesm add cifs newCIFS --server 192.168.0.105 --share smb_data --smbversion 2.1

⁠39.4.7. GlusterFS [Черновик]

GlusterFS — это масштабируемая сетевая файловая система. Система использует модульную конструкцию, работает на аппаратном оборудовании и может обеспечить высокодоступное корпоративное хранилище при низких затратах. Такая система способна масштабироваться до нескольких петабайт и может обрабатывать тысячи клиентов.

Примечание [Черновик]

После сбоя узла GlusterFS выполняет полную синхронизацию, чтобы убедиться в согласованности данных. Для больших файлов это может занять очень много времени, поэтому это хранилище не подходит для хранения больших образов ВМ.

Данное хранилище поддерживает все общие свойства хранилищ, и дополнительно используются следующие свойства:

server — IP-адрес или DNS-имя сервера GlusterFS;

server2 — IP-адрес или DNS-имя резервного сервера GlusterFS;

volume — том GlusterFS;

transport — транспорт GlusterFS: tcp, unix или rdma.

Пример файла конфигурации (/etc/pve/storage.cfg):

glusterfs: gluster-01
    server 192.168.0.105
    server2 192.168.0.110
    volume glustervol
    content images,iso

Подключение хранилища GlusterFS с именем gluster-01 с удаленного сервера 192.168.0.105:

⁠39.4.8. Локальный ZFS [Черновик]

Примечание [Черновик]

Для работы с локальным ZFS хранилищем должен быть установлен модуль ядра kernel-modules-zfs-std-def. Включить модуль:

# modprobe zfs

Чтобы не вводить эту команду после перезагрузки, следует раскомментировать строку:

#zfs

в файле /etc/modules-load.d/zfs.conf.

Локальный ZFS позволяет получить доступ к локальным пулам ZFS (или файловым системам ZFS внутри таких пулов).

Данное хранилище поддерживает общие свойства (content, nodes, disable) хранилищ, кроме того, для настройки ZFS используются следующие свойства:

pool — пул/файловая система ZFS;

blocksize — размер блока;

sparse — использовать тонкое выделение ресурсов;

mountpoint — точка монтирования пула/файловой системы ZFS. Изменение этого параметра не влияет на свойство точки монтирования набора данных, видимого zfs. По умолчанию /<pool>.

Пул ZFS поддерживает следующие типы RAID:

RAID-0 (Single Disk) — размер такого пула — сумма емкостей всех дисков. RAID0 не добавляет избыточности, поэтому отказ одного диска делает том не пригодным для использования (минимально требуется один диск);

пул RAID-1 (Mirror) — данные зеркалируются на все диски (минимально требуется два диска);

пул RAID-10 — сочетание RAID0 и RAID1 (минимально требуется четыре диска);

пул RAIDZ-1 — вариация RAID-5, одинарная четность (минимально требуется три диска);

пул RAIDZ-2 — вариация на RAID-5, двойной паритет (минимально требуется четыре диска);

пул RAIDZ-3 — разновидность RAID-5, тройная четность (минимально требуется пять дисков).

Пример файла конфигурации (/etc/pve/storage.cfg):

zfspool: vmdata
    pool vmdata
    content images,rootdir
    mountpoint /vmdata
    nodes pve03

Возможные типы содержимого: rootdir (данные контейнера), images (образ виртуального диска в формате raw или subvol).

Используется следующая схема именования образов дисков ВМ:

vm-<VMID>-<NAME> — образ ВМ;

base-<VMID>-<NAME> — шаблон образа ВМ (только для чтения);

subvol-<VMID>-<NAME> — файловая система ZFS для контейнеров.

Примечание [Черновик]

Если в ВМ созданной в ZFS хранилище будет создан диск с LVM разделами, то гипервизор не позволит удалить этот диск. Пример ошибки:

cannot destroy 'data/vm-101-disk-0': dataset is busy

Чтобы избежать этой ситуации следует исключить ZFS-диски из области сканирования LVM, добавив в конфигурацию LVM (файл /etc/lvm/lvm.conf) в секцию devices{} строки:

# Do not scan ZFS zvols (to avoid problems on ZFS zvols snapshots)
filter = [ "r|^/dev/zd*|" ]
global_filter = [ "r|^/dev/zd*|" ]

⁠39.4.8.1. Создание локального хранилища ZFS в веб-интерфейсе [Черновик]

Для создания локального хранилища ZFS в веб-интерфейсе, следует выбрать узел, на котором будет создано хранилище, в разделе Диски выбрать пункт ZFS и нажать кнопку Создать: ZFS:

В открывшемся окне следует задать параметры ZFS хранилища: имя хранилища, выбрать диски, уровень RAID и нажать кнопку Создать:

Статус пула можно просмотреть выбрав его в списке и нажав кнопку Подробно:

Для того чтобы внести изменения в настройки ZFS хранилища, следует выбрать Центр обработки данных → Хранилище, затем нужное хранилище и нажать кнопку Редактировать:

В открывшемся окне можно изменить тип содержимого контейнера, включить/отключить хранилище, включить дисковое резервирование:

⁠39.4.8.2. Администрирование ZFS [Черновик]

Основными командами для управления ZFS являются zfs и zpool.

Для создания нового пула необходим как минимум один пустой диск.

Создание нового пула RAID-0 (минимум 1 диск):

# zpool create -f -o ashift=12 <pool> <device1> <device2>

Создание нового пула RAID-1 (минимум 2 диска):

# zpool create -f -o ashift=12 <pool> mirror <device1> <device2>

Создание нового пула RAID-10 (минимум 4 диска):

# zpool create -f -o ashift=12 <pool> mirror <device1>
<device2> mirror <device3> <device4>

Создание нового пула RAIDZ-1 (минимум 3 диска):

# zpool create -f -o ashift=12 <pool> raidz1 <device1> <device2> <device3>

Создание нового пула RAIDZ-2 (минимум 4 диска):

# zpool create -f -o ashift=12 <pool> raidz2 <device1>
<device2> <device3> <device4>

Смена неисправного устройства:

# zpool replace -f <pool> <old device> <new device>

Включить сжатие:

# zfs set compression=on <pool>

Получить список доступных ZFS файловых систем:

# pvesm zfsscan

Пример создания RAID1(mirror) с помощью zfs:

# zpool create -f vmdata mirror sdb sdc

Просмотреть созданные в системе пулы:

# zpool list
NAME     SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
vmdata  17,5G   492K  17,5G        -         -     0%     0%  1.00x    ONLINE  -

Просмотреть статус пула:

# zpool status
  pool: vmdata
 state: ONLINE
config:

    NAME        STATE     READ WRITE CKSUM
    vmdata      ONLINE       0     0     0
      mirror-0  ONLINE       0     0     0
        sdb     ONLINE       0     0     0
        sdc     ONLINE       0     0     0

errors: No known data errors

⁠39.4.9. LVM [Черновик]

LVM (Logical Volume Management) — это система управления дисковым пространством. Позволяет логически объединить несколько дисковых пространств (физические тома) в одно, и уже из этого пространства (дисковой группы или группы томов — VG), можно выделять разделы (логические тома — LV), доступные для работы.

Использование LVM групп обеспечивает лучшую управляемость. Логические тома можно легко создавать/удалять/перемещать между физическими устройствами хранения. Если база хранения для группы LVM доступна на всех PVE узлах (например, ISCSI LUN) или репликах (например, DRBD), то все узлы имеют доступ к образам ВМ, и возможна live-миграция.

Данное хранилище поддерживает общие свойства (content, nodes, disable) хранилищ, кроме того, для настройки LVM используются следующие свойства:

vgname — имя группы томов LVM (должно указывать на существующую группу томов);

base — основное хранилище. Этот том автоматически активируется перед доступом к хранилищу. Это особенно полезно, когда группа томов LVM находится на удаленном сервере iSCSI;

saferemove — обнуление данных при удалении LV (гарантирует, что при удалении тома все данные будут удалены);

saferemove_throughput — очистка пропускной способности (значение параметра cstream -t).

Пример файла конфигурации (/etc/pve/storage.cfg):

lvm: vg
    vgname vg
    content rootdir,images
    nodes pve03
    shared 0

Возможные типы содержимого: rootdir (данные контейнера), images (образ виртуального диска в формате raw).

⁠39.4.9.1. Создание локального LVM хранилища в веб-интерфейсе [Черновик]

Примечание [Черновик]

Для создания локального LVM хранилища в веб-интерфейсе необходимо чтобы в системе имелся хотя бы один пустой жесткий диск.

Для создания локального LVM хранилища в веб-интерфейсе, следует выбрать узел, на котором будет создано хранилище, в разделе Диски выбрать пункт LVM и нажать кнопку Создать: Volume Group:

В открывшемся окне следует выбрать диск, задать имя группы томов, отметить пункт Добавить хранилище (если этот пункт не отмечен будет создана только группа томов) и нажать кнопку Создать:

Для того чтобы внести изменения в настройки LVM хранилища, следует выбрать Центр обработки данных → Хранилище, затем нужное хранилище и нажать кнопку Редактировать. В открывшемся окне можно изменить тип содержимого контейнера, включить/отключить хранилище:

Одним из преимуществ хранилища LVM является то, что его можно использовать поверх общего хранилища, например, iSCSI LUN. Сам бэкэнд реализует правильную блокировку на уровне кластера.

⁠39.4.9.2. Создание хранилища LVM в командной строке [Черновик]

Пример создания LVM хранилища на пустом диске /dev/sdd:

Создать физический том (PV):

# pvcreate /dev/sdd
  Physical volume "/dev/sdd" successfully created.

Создать группу томов (VG) с именем vg:

# vgcreate vg /dev/sdd
  Volume group "vg" successfully created

Показать информацию о физических томах:

# pvs
  PV         VG        Fmt  Attr PSize   PFree
  /dev/sdd   vg        lvm2 a--  <18,00g <3,00g

Показать информацию о группах томов:

# vgs
  VG        #PV #LV #SN Attr   VSize   VFree
  vg          1   2   0 wz--n- <18,00g <3,00g

Получить список доступных PVE групп томов:

# pvesm lvmscan
vg

Создать LVM хранилище с именем myspace:

# pvesm add lvm myspace --vgname vg --nodes pve03

⁠39.4.10. LVM-Thin [Черновик]

LVM-Thin (thin provision) — это возможность использовать какое-либо внешнее блочное устройство в режиме только для чтения как основу для создания новых логических томов LVM. Такие разделы при создании уже будут выглядеть так, будто они заполнены данными исходного блочного устройства. Операции с томами изменяются налету таким образом, что чтение данных выполняется с исходного блочного устройства (или с тома, если данные уже отличаются), а запись — на том.

Такая возможность может быть полезна, например, при создании множества однотипных ВМ или для решения других аналогичных задач, т.е. задач, где нужно получить несколько изменяемых копий одних и тех же исходных данных.

Данное хранилище поддерживает все общие свойства хранилищ, кроме того, для настройки LVM-Thin используются следующие свойства:

vgname — имя группы томов LVM (должно указывать на существующую группу томов);

thinpool — название тонкого пула LVM.

Пример файла конфигурации (/etc/pve/storage.cfg):

lvmthin: vmstore
    thinpool vmstore
    vgname vmstore
    content rootdir,images
    nodes pve03

Возможные типы содержимого: rootdir (данные контейнера), images (образ виртуального диска в формате raw).

LVM-Thin является блочным хранилищем, но полностью поддерживает моментальные снимки и клоны. Новые тома автоматически инициализируются с нуля.

Тонкие пулы LVM не могут совместно использоваться несколькими узлами, поэтому их можно использовать только в качестве локального хранилища.

⁠39.4.10.1. Создание локального LVM-Thin хранилища в веб-интерфейсе [Черновик]

Примечание [Черновик]

Для создания локального LVM-Thin хранилища в веб-интерфейсе необходимо чтобы в системе имелся хотя бы один пустой жесткий диск.

Для создания локального LVM-Thin хранилища в веб-интерфейсе, следует выбрать узел, на котором будет создано хранилище, в разделе Диски выбрать пункт LVM-Thin и нажать кнопку Создать: Thinpool:

В открывшемся окне следует выбрать диск, задать имя группы томов, отметить пункт Добавить хранилище (если этот пункт не отмечен будет создана только группа томов) и нажать кнопку Создать:

Для того чтобы внести изменения в настройки LVM-Thin хранилища, следует выбрать Центр обработки данных → Хранилище, затем нужное хранилище и нажать кнопку Редактировать. В открывшемся окне можно изменить тип содержимого контейнера, включить/отключить хранилище:

⁠39.4.10.2. Создание хранилища LVM-Thin в командной строке [Черновик]

Для создания и управления пулами LVM-Thin можно использовать инструменты командной строки.

Пул LVM-Thin должен быть создан поверх группы томов.

Команда создания нового тонкого пула LVM (размер 80 ГБ) с именем vmstore (предполагается, что группа томов LVM с именем vg уже существует):

# lvcreate -L 80G -T -n vmstore vg

Получить список доступных LVM-Thin пулов в группе томов vg:

# pvesm lvmthinscan vg
vmstore

Команда создания LVM-Thin хранилища с именем vmstore на узле pve03:

# pvesm add lvmthin vmstore --thinpool vmstore --vgname vg --nodes pve03

⁠39.4.11. iSCSI [Черновик]

iSCSI (Internet Small Computer System Interface) — широко применяемая технология, используемая для подключения к серверам хранения.

Данное хранилище поддерживает все общие свойства хранилищ, и дополнительно используются следующие свойства:

portal — IP-адрес или DNS-имя сервера iSCSI;

target — iSCSI target.

Пример файла конфигурации (/etc/pve/storage.cfg):

iscsi: test1-iSCSI
    portal 192.168.0.105
    target iqn.2021-7.local.omv:test
    content images

Возможные типы содержимого: images (образ виртуального диска в формате raw).

iSCSI является типом хранилища блочного уровня и не предоставляет интерфейса управления. Поэтому обычно лучше экспортировать один большой LUN и установить LVM поверх этого LUN.

Примечание [Черновик]

Если планируется использовать LVM поверх iSCSI, имеет смысл установить:

content none

. В этом случае нельзя будет создавать ВМ с использованием iSCSI LUN напрямую.

Примечание [Черновик]

Для работы с устройством, подключенным по интерфейсу iSCSI, на всех узлах необходимо выполнить команду (должен быть установлен пакет open-iscsi):

# systemctl enable --now iscsid

Добавление адресата iSCSI с именем test1-iSCSI, который настроен на удаленном узле 192.168.0.105:

Параметр Использовать LUN напрямую — разрешение/запрет прямого применения LUN (параметр должен быть установлен на запрет, разрешение может привести к потере данных).

Посмотреть доступные для подключения iSCSI target-ы:

# pvesm scan iscsi <HOST[:PORT]>

⁠39.4.12. iSCSI/libiscsi [Черновик]

Это хранилище обеспечивает в основном ту же функциональность, что и iSCSI, но использует библиотеку пользовательского уровня. Так как при этом не задействованы драйверы ядра, то это можно рассматривать как оптимизацию производительности. Но поверх такого iSCSI LUN нельзя использовать LVM (управлять распределением пространства необходимо на стороне сервера хранения).

Примечание [Черновик]

Для использования этого хранилища должен быть установлен пакет libiscsi.

Данное хранилище поддерживает все свойства хранилища iscsi.

Пример файла конфигурации (/etc/pve/storage.cfg):

iscsidirect: test1-iSCSi
    portal 192.168.0.191
    target dc1.test.alt:server.target

Возможные типы содержимого: images (образ виртуального диска в формате raw).

⁠39.4.13. Ceph RBD [Черновик]

Хранилище RBD (Rados Block Device) предоставляется распределенной системой хранения Ceph. По своей архитектуре Ceph является распределенной системой хранения. Хранилище RBD может содержать только форматы образов .raw.

Данное хранилище поддерживает все общие свойства хранилищ, и дополнительно используются следующие свойства:

monhost — список IP-адресов демона монитора (только если Ceph не работает на кластере PVE);

pool — название пула Ceph (rbd);

username — идентификатор пользователя Ceph (только если Ceph не работает на кластере PVE);

krbd (опционально) — обеспечивает доступ к блочным устройствам rados через модуль ядра krbd.

Примечание [Черновик]

Контейнеры будут использовать krbd независимо от значения параметра krbd.

Пример файла конфигурации (/etc/pve/storage.cfg):

rbd: new
    content images
    krbd 0
    monhost 192.168.0.105
    pool rbd
    username admin

Возможные типы содержимого: rootdir (данные контейнера), images (образ виртуального диска в формате raw).

Добавление хранилища RBD:

Если используется аутентификация cephx (включена по умолчанию), необходимо предоставить связку ключей из внешнего кластера Ceph.

При настройке хранилища в командной строке, предварительно следует сделать доступным файл, содержащий связку ключей. Один из способов — скопировать файл из внешнего кластера Ceph непосредственно на один из узлов PVE. Например, скопировать файл в каталог /root узла:

# scp <external cephserver>:/etc/ceph/ceph.client.admin.keyring /root/rbd.keyring

Команда настройки внешнего хранилища RBD:

# pvesm add rbd <name> --monhost "10.1.1.20 10.1.1.21 10.1.1.22" --content images --keyring /root/rbd.keyring

При настройке внешнего хранилища RBD в графическом интерфейсе, связку ключей можно указать в поле Keyring.

Связка ключей будет храниться в файле /etc/pve/priv/ceph/<STORAGE_ID>.keyring.

⁠39.4.14. CephFS [Черновик]

CephFS реализует POSIX-совместимую файловую систему, использующую кластер хранения Ceph для хранения своих данных. Поскольку CephFS основывается на Ceph, он разделяет большинство свойств, включая избыточность, масштабируемость, самовосстановление и высокую доступность.

Данное хранилище поддерживает все общие свойства хранилищ, и дополнительно используются следующие свойства:

monhost — список IP-адресов демона монитора (только если Ceph не работает на кластере PVE);

path — локальная точка монтирования (по умолчанию используется /mnt/pve/<STORAGE_ID>/);

username — идентификатор пользователя (только если Ceph не работает на кластере PVE);

subdir — подкаталог CephFS для монтирования (по умолчанию /);

fuse — доступ к CephFS через FUSE (по умолчанию 0).

Пример файла конфигурации (/etc/pve/storage.cfg):

cephfs: cephfs-external
    content backup
    monhost 192.168.0.105
    path /mnt/pve/cephfs-external
    username admin

Возможные типы содержимого: vztmpl (шаблон контейнера), iso (ISO-образ), backup (резервная копия), snippets (сниппеты).

Добавление хранилища CephFS:

Примечание [Черновик]

Получить список доступных cephfs, для указания в поле Имя ФС, можно с помощью команды:

# ceph fs ls

Если используется аутентификация cephx (включена по умолчанию), необходимо указать ключ из внешнего кластера Ceph.

При настройке хранилища в командной строке, предварительно сделать файл с ключом доступным. Один из способов — скопировать файл из внешнего кластера Ceph непосредственно на один из узлов PVE. Например, скопировать файл в каталог /root узла:

# scp <external cephserver>:/etc/ceph/cephfs.secret /root/cephfs.secret

Команда настройки внешнего хранилища CephFS:

# pvesm add cephfs <name> --monhost "10.1.1.20 10.1.1.21 10.1.1.22" --content backup --keyring /root/cephfs.secret

При настройке внешнего хранилища CephFS в графическом интерфейсе, ключ можно указать в поле Секретный ключ.

Ключ будет храниться в файле /etc/pve/priv/ceph/<STORAGE_ID>.secret.

Ключ можно получить из кластера Ceph (как администратор Ceph), выполнив команду:

# ceph auth get-key client.userid > cephfs.secret

⁠39.4.15. Proxmox Backup Server [Черновик]

Proxmox Backup Server — позволяет напрямую интегрировать сервер резервного копирования Proxmox в PVE.

Данное хранилище поддерживает только резервные копии, они могут быть на уровне блоков (для ВМ) или на уровне файлов (для контейнеров).

Серверная часть поддерживает все общие свойства хранилищ, кроме флага «общее» («shared»), который всегда установлен. Кроме того, для Proxmox Backup Server доступны следующие специальные свойства:

server — IP-адрес или DNS-имя сервера резервного копирования;

username — имя пользователя на сервере резервного копирования (например, root@pam, backup_u@pbs);

password — пароль пользователя. Значение будет сохранено в файле /etc/pve/priv/storage/<STORAGE-ID>.pw, доступном только суперпользователю;

datastore — идентификатор хранилища на сервере резервного копирования;

fingerprint — отпечаток TLS-сертификата API Proxmox Backup Server. Требуется, если сервер резервного копирования использует самоподписанный сертификат. Отпечаток можно получить в веб-интерфейсе сервера резервного копирования или с помощью команды proxmox-backup-manager cert info;

encryption-key — ключ для шифрования резервной копии. В настоящее время поддерживаются только те файлы, которые не защищены паролем (без функции получения ключа (kdf)) Ключ будет сохранен в файле /etc/pve/priv/storage/<STORAGE-ID>.enc, доступном только суперпользователю. Опицонально;

master-pubkey — открытый ключ RSA, используемый для шифрования (encryption-key) в рамках задачи резервного копирования. Зашифрованная копия будет добавлена к резервной копии и сохранена на сервере резервного копирования для целей восстановления. Опицонально, требуется encryption-key.

Пример файла конфигурации (/etc/pve/storage.cfg):

pbs: pbs_backup
    datastore store2
    server 192.168.0.123
    content backup
    fingerprint 42:5d:29:20:…:d1:be:bc:c0:c0:a9:9b:b1:a8:1b
    prune-backups keep-all=1
    username root@pam

⁠39.4.15.1. Подключение хранилища [Черновик]

Подключение хранилища Proxmox Backup Server с именем pbs_backup с удаленного сервера 192.168.0.123:

Добавление хранилища Proxmox Backup Server в командной строке:

# pvesm add pbs pbs_backup --server 192.168.0.123 --datastore store2 --username root@pam --fingerprint 42:5d:29:20:…:d1:be:bc:c0:c0:a9:9b:b1:a8:1b --password

⁠39.4.15.2. Шифрование [Черновик]

На стороне клиента можно настроить шифрование с помощью AES-256 в режиме GCM. Шифрование можно настроить либо в командной строке с помощью опции encryption-key, либо через веб-интерфейс:

Необходимо сохранить ключ шифрования:

Шифрование настроено:

Ключ будет сохранен в файле /etc/pve/priv/storage/<STORAGE-ID>.enc, который доступен только пользователю root.

Примечание [Черновик]

Для работы с ключами в командной строке используется команда proxmox-backup-client key. Например, сгенерировать ключ:

# proxmox-backup-client key create --kdf none <path>

Сгенерировать мастер-ключ:

# proxmox-backup-client key create-master-key

Важно [Черновик]

Без ключа шифрования резервные копии будут недоступны. Следует хранить ключи в надежном месте, отдельном от содержимого резервной копии.

Рекомендуется хранить ключ в безопасносном, но при этом легкодоступном месте, чтобы можно было быстро восстановить его после сбоев. Лучшее место для хранения ключа шифрования — менеджер паролей. В качестве резервной копии также следует сохранить ключ на USB-накопитель. Таким образом, ключ будет отсоединен от системы, но его по-прежнему легко можно будет восстановить в случае возникновения чрезвычайной ситуации.

Кроме того, можно использовать пару мастер-ключей RSA для целей восстановления ключей: для этого необходимо настроить всех клиентов, выполняющих зашифрованное резервное копирование, на использование одного открытого мастер-ключа, и все последующие зашифрованные резервные копии будут содержать зашифрованную RSA копию использованного ключа шифрования AES. Соответствующий закрытый мастер-ключ позволяет восстановить ключ AES и расшифровать резервную копию, даже если клиентская система больше не доступна.

Важно [Черновик]

К паре мастер-ключей применяются те же правила хранения, что и к обычным ключам шифрования. Без копии закрытого ключа восстановление невозможно!

Примечание [Черновик]

Не следует использовать шифрование, если от него нет никакой пользы, например, если сервер запущен локально в доверенной сети. Восстановить данные из незашифрованных резервных копий всегда проще.

⁠39.4.16. FC/iSCSI SAN [Черновик]

Данная конфигурация предполагает, что узлы кластера имеют доступ к устройствам хранения (LUN), экспортированным сервером сети хранения данных (SAN) с использованием протоко-ла iSCSI или Fibre Channel (FC).

Соединение узла PVE к хранилищу называется путем. Если в подсистеме хранения данных существует несколько путей к устройству хранения данных (LUN), это называется многопутевым подключением (multipath). Необходимо использовать как минимум два выделенных сетевых адаптера для iSCSI/FC, использующих отдельные сети (и коммутаторы для защиты от сбоев коммутатора).

Основная цель многопутевого подключения (multipath) — обеспечить резервный доступ к устройству хранения данных. Еще одним преимуществом многопутевого доступа является увеличение пропускной способности за счет балансировки нагрузки. Типичным примером использования нескольких путей является добавление избыточности и получение максимальной производительности от устройства FC/iSCSI SAN.

Примечание [Черновик]

В данном разделе приведена общая информация. Для получения информации о настройках конкретной СХД следует обратиться к документации производителя хранилища.

⁠39.4.16.1. Подключение СХД [Черновик]

⁠39.4.16.1.1. Особенности подключения СХД по FC [Черновик]

Алгоритм подключения:

Подготовить СХД (создать LUNы).

На сервере установить FC HBA, драйверы к ним.

Настроить сетевое подключение.

Подключить СХД к серверу.

Предоставить серверу доступ к СХД по WWPN.

Примечание [Черновик]

Для того чтобы узнать глобальные имена портов (WWPN), можно воспользоваться утилитой systool из пакета sysfsutils.

Пакет sysfsutils необходимо установить из репозитория:

# apt-get install sysfsutils

Чтобы найти WWPN, следует ввести следующую команду:

# systool -c fc_host -A port_name
Class = "fc_host"
Class Device = "host1"
port_name = "0x10000090fa59a61a"
Device = "host1"
Class Device = "host16"
port_name = "0x10000090fa59a61b"
Device = "host16"

Просмотреть список подключенных устройств можно, например, выполнив команду:

# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 59G 0 disk
sdb 8:16 0 931,3G 0 disk
└─mpatha 253:0 0 931,3G 0 mpath
sdc 8:32 0 931,3G 0 disk
└─mpatha 253:0 0 931,3G 0 mpath
sdd 8:48 0 931,3G 0 disk
└─mpatha 253:0 0 931,3G 0 mpath
sde 8:64 0 931,3G 0 disk
└─mpatha 253:0 0 931,3G 0 mpath

В данном примере один LUN на 1000GB виден по четырем путям.

⁠39.4.16.1.2. Особенности подключения СХД по ISCSI [Черновик]

Все необходимые соединения iSCSI должны запускаться во время загрузки узла. Сделать это можно, установив для параметра node.startup значение automatic. Значение по умолчанию для параметра node.session.timeo.replacement_timeout составляет 120 секунд. Рекомендуется использовать значение — 15 секунд.

Эти параметры можно указать в файле в /etc/iscsi/iscsid.conf (по умолчанию). Если iSCSI target уже подключен, то необходимо изменить настройки по умолчанию для конкретной цели в файле /etc/iscsi/nodes/<TARGET>/<PORTAL>/default.

На всех узлах PVE необходимо:

Установить пакет open-iscsi, запустить и добавить в автозагрузку сервис iscsid:

# apt-get install open-iscsi
# systemctl enable --now iscsid

Указать следующие параметры в файле /etc/iscsi/iscsid.conf:

node.startup = automatic
node.session.timeo.replacement_timeout = 15

Присоединить iSCSI хранилище к кластеру:

# iscsiadm -m discovery -t sendtargets -p <iscsi-target-1-ip>
# iscsiadm -m discovery -t sendtargets -p <iscsi-target-2-ip>
# iscsiadm -m node --login

Настроить автоматическое подключение iSCSI-target-ов. Для этого необходимо поменять следующие параметры:

в файле /etc/iscsi/iscsid.conf:

node.startup = automatic

в файлах /var/lib/iscsi/send_targets/<TargetServer>,<Port>/st_config:

discovery.sendtargets.use_discoveryd = Yes

После перезагрузки должны появиться подключенные устройства:

# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 59G 0 disk
sdb 8:16 0 931,3G 0 disk
└─mpatha 253:0 0 931,3G 0 mpath
sdc 8:32 0 931,3G 0 disk
└─mpatha 253:0 0 931,3G 0 mpath
sdd 8:48 0 931,3G 0 disk
└─mpatha 253:0 0 931,3G 0 mpath
sde 8:64 0 931,3G 0 disk
└─mpatha 253:0 0 931,3G 0 mpath

В данном примере один LUN на 1000GB виден по четырем путям.

Примечание [Черновик]

Примеры использования команды iscsiadm:

отключить хранилище (отключить все цели):

# iscsiadm -m node --logout

отключить только определенную цель:

# iscsiadm -m node --targetname "iscsi-target-1.test.alt:server.target1" --logout

переопросить устройства на ISCSI:

# iscsiadm -m node -R

посмотреть все текущие подключения iSCSI:

# iscsiadm -m session

⁠39.4.16.2. Настройка Multipath [Черновик]

Многопутевой ввод-вывод (Multipath I/O) — технология подключения узлов СХД с использованием нескольких маршрутов. В случае отказа одного из контроллеров, ОС будет использовать другой для доступа к устройству. Это повышает отказоустойчивость системы и позволяет распределять нагрузку.

Multipath устройства объединяются в одно устройство с помощью специализированного ПО в новое устройство. Multipath обеспечивает выбор пути и переключение на новый маршрут при отказе текущего. Кроме того Multipath позволяет увеличить пропускную способность за счет балансировки нагрузки.

На всех узлах должен быть установлен пакет для multipath:

# apt-get install multipath-tools

И запущена служба multipathd:

# systemctl enable --now multipathd && sleep 5; systemctl status multipathd

⁠39.4.16.2.1. Конфигурация multipath [Черновик]

Примечание [Черновик]

Команда multipath используется для обнаружения и объединения нескольких путей к устройствам.

Некоторые параметры команды multipath:

-l — отобразить текущую multipath-топологию, полученную из sysfs и устройства сопоставления устройств;

-ll — отобразить текущую multipath-топологию, собранную из sysfs, устройства сопоставления устройств и всех других доступных компонентов системы;

-f device — удалить указанное multipath-устройство;

-F — удалить все неиспользуемые multipath-устройства;

-w device — удалить WWID указанного устройства из файла wwids;

-W — сбросить файл wwids, чтобы включить только текущие многопутевые устройства;

-r — принудительная перезагрузка multipath-устройства.

После подключения, устройство хранения данных должно автоматически определиться как multipath-устройство:

# multipath -ll
mpatha (3600c0ff00014f56ee9f3cf6301000000) dm-0 HP,P2000 G3 FC
size=931G features='1 queue_if_no_path' hwhandler='1 alua' wp=rw
|-+- policy='service-time 0' prio=50 status=active
| |- 1:0:0:1 sdb 8:16 active ready running
| `- 16:0:1:1 sde 8:64 active ready running
`-+- policy='service-time 0' prio=10 status=enabled
|- 1:0:1:1 sdc 8:32 active ready running
`- 16:0:0:1 sdd 8:48 active ready running

Вывод этой команды разделить на три части:

Информация о multipath-устройстве:

mpatha (3600c0ff00014f56ee9f3cf6301000000): алиас

dm-0: имя устройства dm

HP,P2000 G3 FC: поставщик, продукт

size=931G: размер

features='1 queue_if_no_path': функции

hwhandler='01 alua': аппаратный обработчик

wp=rw: права на запись

Информация о группе путей:

policy='service-time 0': политика планирования

prio=50: приоритет группы путей

status=active: статус группы путей

Информация о пути:

7:0:1:1: хост:канал:идентификатор:Lun

sde: диск

8:80: номера major:minor

active: статус dm

ready: статус пути

running: online статус

Для получения дополнительной информации об используемых устройствах можно выполнить команду:

# multipath -v3

Настройки multipath содержатся в файле /etc/multipath.conf:

defaults {
    find_multipaths         yes
    user_friendly_names     yes
}

Если для параметра user_friendly_names установлено значение no, то для имени multipath-устройства задается значение World Wide Identifier (WWID). Имя устройства будет /dev/mapper/WWID и /dev/dm-X:

# ls /dev/mapper/
3600c0ff00014f56ee9f3cf6301000000

# lsblk
NAME                                        MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINTS
sda                                           8:0    0    59G  0 disk
sdb                                           8:16   0 931,3G  0 disk
└─3600c0ff00014f56ee9f3cf6301000000         253:0    0 931,3G  0 mpath
sdc                                           8:32   0 931,3G  0 disk
└─3600c0ff00014f56ee9f3cf6301000000         253:0    0 931,3G  0 mpath
sdd                                           8:48   0 931,3G  0 disk
└─3600c0ff00014f56ee9f3cf6301000000         253:0    0 931,3G  0 mpath
sde                                           8:64   0 931,3G  0 disk
└─3600c0ff00014f56ee9f3cf6301000000         253:0    0 931,3G  0 mpath

Если для параметра user_friendly_names установлено значение yes, то для имени multipath-устройства задаётся алиас (псевдоним), в форме mpathХ. Имя устройства будет /dev/mapper/mpathХ и /dev/dm-X:

# ls /dev/mapper/
mpatha

# lsblk
NAME             MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINTS
sda                8:0    0    59G  0 disk
sdb                8:16   0 931,3G  0 disk
└─mpatha         253:0    0 931,3G  0 mpath
sdc                8:32   0 931,3G  0 disk
└─mpatha         253:0    0 931,3G  0 mpath
sdd                8:48   0 931,3G  0 disk
└─mpatha         253:0    0 931,3G  0 mpath
sde                8:64   0 931,3G  0 disk
└─mpatha         253:0    0 931,3G  0 mpath

Однако не гарантируется, что имя устройства будет одинаковым на всех узлах, использующих это multipath-устройство.

ОС при загрузке определяет пути к устройствам в изменяющейся среде выполнения (например, при новой загрузке в среде выполнения ОС появились новые устройства хранения или исчезли старые, и т.п.) по отношению к предыдущей загрузке или по отношению к заданной ранее конфигурации. Это может приводить к противоречиям при именовании устройств. Для того чтобы избежать такого поведения, рекомендуется:

Сделать явное исключение для устройства (раздела) хранения (например, для 3600c0ff00014f56ee9f3cf6301000000, которое в настоящее время определяется как /dev/mapper/mpatha). Для этого в файл /etc/multipath.conf добавить секции:

blacklist {
        wwid .*
}

blacklist_exceptions {
        wwid "3600c0ff00014f56ee9f3cf6301000000"
}

Данная настройка предписывается внести в черный список любые найденные устройства хранения данных, за исключением нужного.

Создать еще одну секцию:

multipaths {
  multipath {
        wwid "3600c0ff00014f56ee9f3cf6301000000"
        alias mpatha
  }
}

В этом случае устройство всегда будет доступно только по имени /dev/mapper/mpatha. Вместо mpatha можно вписать любое желаемое имя устройства.

Примечание [Черновик]

Получить WWID конкретного устройства можно, выполнив команду:

# /lib/udev/scsi_id -g -u -d /dev/sdb
3600c0ff00014f56ee9f3cf6301000000

Для устройств в одном multipath WWID будут совпадать.

В файл /etc/multipath.conf может также потребоваться внести рекомендованные производителем СХД параметры.

После внесения изменений в файл /etc/multipath.conf необходимо перезапустить службу multipathd для активации настроек:

# systemctl restart multipathd.service

Примечание [Черновик]

Проверить файл /etc/multipath.conf на наличие ошибок можно, выполнив команду:

# multipath -t

⁠39.4.16.3. Multipath в веб-интерфейсе PVE [Черновик]

Диски, подключенные по mulipath, можно увидеть в веб-интерфейсе PVE:

Поверх хранилища на базе iSCSI или FC можно использовать LVM или хранилище файлового типа (если нужны снапшоты).

⁠39.4.16.4. Файловые системы на multipath [Черновик]

На multipath-устройстве можно создать файловую систему (ФС) и подключить его как хранилище типа «Каталог» в PVE. Можно использовать любую ФС, но при использовании, например, ext4 или xfs, хранилище нельзя будет использовать как общее. Для возможности совместного использования хранилища необходимо использовать кластерную ФС.

Ниже показано создание кластерной ФС ocfs2 на multipath-устройстве и подключение этого устройства в PVE.

⁠39.4.16.4.1. Кластерная ФС ocfs2 [Черновик]

На всех узлах кластера необходимо установить пакет ocfs2-tools:

# apt-get install ocfs2-tools

Примечание [Черновик]

Основной конфигурационный файл для OCFS2 — /etc/ocfs2/cluster.conf. Этот файл должен быть одинаков на всех узлах кластера, при изменении в одном месте его нужно скопировать на остальные узлы. При добавлении нового узла в кластер, описание этого узла должно добавлено быть на всех остальных узлах до монтирования раздела ocfs2 с нового узла.

Создание кластерной конфигурации возможно с помощью команд или с помощью редактирования файла конфигурации /etc/ocfs2/cluster.conf.

Пример создания кластера из трёх узлов:

В командной строке:

Создать кластер с именем mycluster:

# o2cb_ctl -C -n mycluster -t cluster -a name=mycluster

Добавить узелы, выполнив команду для каждого:

# o2cb_ctl -C -n <имя_узла> -t node -a number=0 -a ip_address=<IP_узла> -a ip_port=7777 -a cluster=mycluster

Редактирование конфигурационного файла /etc/ocfs2/cluster.conf:

cluster:
node_count = 3
heartbeat_mode = local
name = mycluster

node:
ip_port = 7777
ip_address = <IP_узла-01>
number = 0
name = <имя_узла-01>
cluster = mycluster

node:
ip_port = 7777
ip_address = <IP_узла-02>
number = 1
name = <имя_узла-02>
cluster = mycluster

node:
ip_port = 7777
ip_address = <IP_узла-03>
number = 2
name = <имя_узла-03>
cluster = mycluster

Примечание [Черновик]

Имя узла кластера должно быть таким, как оно указано в файле /etc/hostname.

Для включения автоматической загрузки сервиса OCFS2 можно использовать скрипт /etc/init.d/o2cb:

# /etc/init.d/o2cb configure

Для ручного запуска кластера нужно выполнить:

# /etc/init.d/o2cb load
checking debugfs...
Loading filesystem "ocfs2_dlmfs": OK
Creating directory '/dlm': OK
Mounting ocfs2_dlmfs filesystem at /dlm: OK
# /etc/init.d/o2cb online mycluster
checking debugfs...
Setting cluster stack "o2cb": OK
Registering O2CB cluster "mycluster": OK
Setting O2CB cluster timeouts : OK

Далее на одном из узлов необходимо создать раздел OCFS2, для этого следует выполнить следующие действия:

создать физический раздел /dev/mapper/mpatha-part1 на диске /dev/mapper/mpatha:

# fdisk /dev/mapper/mpatha

отформатировать созданный раздел, выполнив команду:

# mkfs.ocfs2 -b 4096 -C 4k -L DBF1 -N 3 /dev/mapper/mpatha-part1
mkfs.ocfs2 1.8.7
Cluster stack: classic o2cb
Label: DBF1
…
mkfs.ocfs2 successful

⁠

Таблица 39.4. Параметры команды mkfs.ocfs2 [Черновик]

Параметр

Описание

-L метка_тома

Метка тома, позволяющая его однозначно идентифицировать при подключении на разных узлах. Для изменения метки тома можно использовать утилиту tunefs.ocfs2

-C размер_кластера

Размер кластера — это наименьшая единица пространства, выделенная файлу для хранения данных. Возможные значения: 4, 8, 16, 32, 64, 128, 256, 512 и 1024 КБ. Размер кластера невозможно изменить после форматирования тома

-N количество_узлов_кластера

Максимальное количество узлов, которые могут одновременно монтировать том. Для изменения количества узлов можно использовать утилиту tunefs.ocfs2

-b размер_блока

Наименьшая единица пространства, адресуемая ФС. Возможные значения: 512 байт (не рекомендуется), 1 КБ, 2 КБ или 4 КБ (рекомендуется для большинства томов). Размер блока невозможно изменить после форматирования тома

Примечание [Черновик]

Для создания нового раздела может потребоваться предварительно удалить существующие данные раздела на устройстве /dev/mpathX (следует использовать с осторожностью!):

# dd if=/dev/zero of=/dev/mapper/mpathX bs=512 count=1 conv=notrunc

⁠39.4.16.4.2. OCFS2 в PVE [Черновик]

На каждом узле PVE необходимо смонтировать раздел (например, в /mnt/ocfs2):

# mkdir /mnt/ocfs2
# mount /dev/mapper/mpatha-part1 /mnt/ocfs2

Для автоматического монтирования раздела следует добавить в файл /etc/fstab строку (каталог /mnt/ocfs2 должен существовать):

/dev/mapper/mpatha-part1 /mnt/ocfs2 ocfs2 _netdev,defaults 0 0

Выполнить проверку монтирования:

# mount -a

Результатом выполнения команды должен быть пустой вывод без ошибок.

Примечание [Черновик]

Опция _netdev позволяет монтировать данный раздел только после успешного старта сетевой подсистемы.

Примечание [Черновик]

Так как имя является символической ссылкой, в некоторых случаях (например, при смене порядка опроса устройств на шине ISCSI) она может меняться (указывая на иное устройство). Поэтому если для устройства хранения не используется алиас, рекомендуется производить автоматическое монтирование этого устройства (раздела) в файле /etc/fstab по его уникальному идентификатору, а не по имени /dev/mapper/mpatha:

UUID=<uuid> /<каталог> ocfs2 _netdev,defaults 0 0

Например, определить UUID uuid разделов:

# blkid
/dev/mapper/mpatha-part1: LABEL="DBF1" UUID="df49216a-a835-47c6-b7c1-6962e9b7dcb6" BLOCK_SIZE="4096" TYPE="ocfs2" PARTUUID="15f9cd13-01"

Добавить монтирование этого UUID в /etc/fstab:

UUID=df49216a-a835-47c6-b7c1-6962e9b7dcb6       /mnt/ocfs2     ocfs2 _netdev,defaults 0 0

Созданный раздел можно добавить как хранилище в командной строке:

# pvesm add dir mpath --path /mnt/ocfs2 --shared 1

или в веб-интерфейсе PVE (Центр обработки данных → Хранилище, нажать кнопку Добавить → Каталог):

⁠39.4.16.5. LVM/LVM-Thin хранилища на multipath [Черновик]

Примечание [Черновик]

multipath-устройство не отображается в веб-интерфейсе PVE LVM/LVM-Thin, поэтому потребуется использовать CLI.

Примечание [Черновик]

LVM при запуске сканирует все устройства на предмет поиска конфигурации LVM, и если настроен multipath-доступ, он найдет конфигурацию LVM как на (виртуальных) multipath-устройствах, так и на базовых (физических) дисках. Поэтому рекомендуется создать фильтр LVM для фильтрации физических дисков и разрешить LVM сканировать только multipath-устройства.

Сделать это можно, добавив фильтр в раздел device в файле /etc/lvm/lvm.conf, например:

filter = [ "a|/dev/mapper/|", "a|/dev/sda.*|", "r|.*|" ]

В данном примере принимаются только multipath-устройства и /dev/sda.*, все остальные устройства отклоняются:

a|/dev/mapper/| — принять устройства /dev/mapper;

a|/dev/sda.*| — принять устройство /dev/sda;

r|.*| — отклонить все остальные устройства.

Пример создания LVM на multipath:

Вывести список разделов /dev/mapper/mpatha:

# fdisk -l /dev/mapper/mpatha
Disk /dev/mapper/mpatha: 931.32 GiB, 999999995904 bytes, 1953124992 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 1048576 bytes
Disklabel type: dos
Disk identifier: 0x2221951e

Device Boot Start End Sectors Size Id Type
/dev/mapper/mpatha-part1 2048 1953124991 1953122944 931.3G 83 Linux

Создать физический том (PV) на /dev/mapper/mpatha-part1:

# pvcreate /dev/mapper/mpatha-part1
Physical volume "/dev/mapper/mpatha-part1" successfully created.

Создать группу томов (VG) с именем VG1:

# vgcreate VG1 /dev/mapper/mpatha-part1
Volume group "VG1" successfully created

Вывести информацию о физических томах:

# pvs
PV                       VG  Fmt  Attr PSize   PFree
/dev/mapper/mpatha-part1 VG1 lvm2 a--  931.32g 931.32g

⁠39.4.16.5.1. LVM-хранилище [Черновик]

Получить список доступных PVE групп томов:

# pvesm lvmscan
VG1

Список доступных PVE групп томов можно также увидеть в веб-интерфейсе:

Пример создания LVM хранилища с именем mpath-lvm:

# pvesm add lvm mpath-lvm --vgname VG1 --content images,rootdir

Пример создания LVM хранилища в веб-интерфейсе (Центр обработки данных → Хранилище, нажать кнопку Добавить → LVM):

⁠39.4.16.5.2. LVM-Thin хранилище [Черновик]

Создать тонкий пул LVM на multipath:

Вывести информацию о физических томах:

# pvs
  PV                       VG  Fmt  Attr PSize   PFree
  /dev/mapper/mpatha-part1 VG1 lvm2 a--  931.32g 931.32g

Вывести информацию о группах томов:

# vgs
  VG  #PV #LV #SN Attr   VSize   VFree
  VG1   1   0   0 wz--n- 931.32g 931.32g

Создать тонкий пул LVM (размер 100 ГБ) с именем vmstore:

# lvcreate -L 100G -T -n vmstore VG1
Logical volume "vmstore" created.

Получить список доступных PVE LVM-thin пулов в группе томов VG1:

# pvesm lvmthinscan VG1
vmstore

Список доступных PVE LVM-thin пулов можно также увидеть в веб-интерфейсе:

Пример создания LVM-Thin хранилища с именем mpath-lvmthin:

# pvesm add lvmthin mpath-lvmthin --thinpool vmstore --vgname VG1 --nodes pve01

Пример создания LVM-Thin хранилища в веб-интерфейсе (Центр обработки данных → Хранилище, нажать кнопку Добавить → LVM-Thin):

⁠39.4.16.6. Изменение размера multipath-устройства [Черновик]

Для изменения размера multipath-устройства необходимо:

Изменить размер физического устройства;

Определить пути к номеру логического устройства (LUN):

# multipath -l
mpatha (3600c0ff00014f56ee9f3cf6301000000) dm-0 HP,P2000 G3 FC
size=465G features='1 queue_if_no_path' hwhandler='1 alua' wp=rw
|-+- policy='service-time 0' prio=0 status=active
| |- 1:0:1:1  sdc 8:32 active undef running
| `- 16:0:1:1 sde 8:64 active undef running
`-+- policy='service-time 0' prio=0 status=enabled
|- 1:0:0:1  sdb 8:16 active undef running
`- 16:0:0:1 sdd 8:48 active undef running

Изменить размер путей, выполнив команду:

# echo 1 > /sys/block/<path_device>/device/rescan

Данную команду необходимо выполнить для каждого диска, входящего в multipath-устройство:

# echo 1 > /sys/block/sdb/device/rescan
# echo 1 > /sys/block/sdc/device/rescan
# echo 1 > /sys/block/sdd/device/rescan
# echo 1 > /sys/block/sde/device/rescan

Убедиться, что ядро увидело новый размер, выполнив команду:

# dmesg -wHT

Изменить размер multipath-устройства:

# multipathd -k"resize map 3600c0ff00014f56ee9f3cf6301000000"

где 3600c0ff00014f56ee9f3cf6301000000 — WWID multipath-устройства;

Изменить размер блочного устройства (если используется LVM):

# pvresize /dev/mapper/mpatha

Изменить размер файловой системы (если разделы LVM или DOS не используются):

# resize2fs /dev/mapper/mpatha

Примечание [Черновик]

Данную процедуру следует выполнить на каждом узле, к которому присоединён этот LUN.

⁠Глава 40. Сетевая подсистема [Черновик]

PVE использует сетевой стек Linux, что обеспечивает большую гибкость в настройке сети на узлах PVE. Настройку сети можно выполнить либо через графический интерфейс (Хост → Система → Сеть), либо вручную, редактируя файлы в каталоге /etc/net/ifaces.

Примечание [Черновик]

Интерфейс vmbr0 необходим для подключения гостевых систем к базовой физической сети. Это мост Linux, который можно рассматривать как виртуальный коммутатор, к которому подключены гостевые системы и физические интерфейсы.

Виды сетевых соединений в PVE:

Linux Bridge — способ соединения двух сегментов Ethernet на канальном уровне;

Linux Bond — реализация агрегации нескольких сетевых интерфейсов в единый логический bonded интерфейс на базе ядра Linux;

Linux VLAN — реализация VLAN на базе ядра Linux.

OVS Bridge — реализация моста на базе Open vSwitch. Мосты Open vSwitch могут содержать необработанные устройства Ethernet, а также виртуальные интерфейсы OVSBonds или OVSIntPorts. Эти мосты могут нести несколько vlan и быть разбиты на «внутренние порты» для использования в качестве интерфейсов vlan на хосте. Все интерфейсы, входящие в мост, должны быть перечислены в ovs_ports;

OVS Bond — реализация агрегации сетевых интерфейсов на базе Open vSwitch. Отличается от реализованной в ядре Linux режимами балансировки нагрузки;

OVS VLAN — реализация VLAN на базе Open vSwitch.

Мосты, VLAN и агрегированные интерфейсы Open vSwitch и Linux не должны смешиваться. Например, не нужно добавлять Linux Bond к OVSBridge или наоборот.

⁠40.1. Применение изменений сетевых настроек [Черновик]

Все изменения конфигурации сети, сделанные в веб-интерфейсе PVE, сначала записываются во временный файл, что позволяет сделать несколько связанных изменений одновременно. Это также позволяет убедиться, что изменения сделаны верно, так как неправильная конфигурация сети может сделать узел недоступным.

Для применения изменений сетевых настроек, сделанных в веб-интерфейсе PVE, следует нажать кнопку Применить конфигурацию. В результате изменения будут применены в реальном времени.

Ещё один способ применить новую сетевую конфигурацию — перезагрузить узел.

⁠40.2. Имена сетевых устройств [Черновик]

В PVE используются следующие соглашения об именах устройств:

устройства Ethernet: en*, имена сетевых интерфейсов systemd;

мосты: vmbr[N], где 0 ≤ N ≤ 4094 (vmbr0 — vmbr4094);

сетевые объединения: bond[N], где 0 ≤ N (bond0, bond1, …);

VLAN: можно просто добавить номер VLAN к имени устройства, отделив точкой (eno1.50, bond1.30).

Systemd использует префикс en для сетевых устройств Ethernet. Следующие символы зависят от драйвера устройства и того факта, какая схема подходит первой:

o<index>[n<phys_port_name>|d<dev_port>] — встроенные устройства;

s<slot>[f<function>][n<phys_port_name>|d<dev_port>] — устройства по идентификатору горячего подключения;

[P<domain>]p<bus>s<slot>[f<function>][n<phys_port_name>|d<dev_port>] — устройства по идентификатору шины;

x<MAC> — устройство по MAC-адресу.

Наиболее распространенные шаблоны:

eno1 — первая сетевая карта;

enp0s3 — сетевая карта в слоте 3 шины pcibus 0.

⁠40.3. Конфигурация сети с использованием моста [Черновик]

Мосты похожи на физические сетевые коммутаторы, реализованные в программном обеспечении. Все виртуальные системы могут использовать один мост, также можно создать несколько мостов для отдельных сетевых доменов. На каждом хосте можно создать до 4094 мостов.

По умолчанию после установки на каждом узле PVE есть единственный мост (vmbr0), который подключается к первой плате Ethernet:

При этом ВМ ведут себя так, как если бы они были напрямую подключены к физической сети. Каждая ВМ видна в сети со своим MAC-адресом.

⁠40.3.1. Внутренняя сеть для ВМ [Черновик]

Если необходимо несколько ВМ объединить в локальную сеть без доступа во внешний мир, можно создать новый мост.

⁠40.3.1.1. Настройка в веб-интерфейсе PVE [Черновик]

Для того чтобы создать мост, в разделе Сеть необходимо нажать кнопку Создать и в выпадающем меню выбрать пункт Linux Bridge или OVS Bridge:

В открывшемся окне в поле Имя следует указать имя моста и нажать кнопку Создать:

Создание моста Open vSwitch отличается возможностью указания дополнительных параметров Open vSwitch (поле Параметры OVS):

Примечание [Черновик]

Адрес интерфейса можно не указывать, настроенные на подключение к интерфейсу ВМ будут использовать его как обычный коммутатор. Если же указать IPv4 и/или IPv6-адрес, то он будет доступен извне на интерфейсах, перечисленных в поле Порты сетевого моста.

Для применения изменений следует нажать кнопку Применить конфигурацию.

Теперь мост vmbr1 можно назначать ВМ:

⁠40.3.1.2. Настройка в командной строке [Черновик]

Для настройки Linux bridge с именем vmbr1, следует выполнить следующие команды:

# mkdir /etc/net/ifaces/vmbr1
# cat <<EOF > /etc/net/ifaces/vmbr1/options
BOOTPROTO=static
CONFIG_IPV4=yes
HOST=
ONBOOT=yes
TYPE=bri
EOF

Примечание [Черновик]

Если в мост будут входить интерфейсы, которые до этого имели IP-адрес, то этот адрес должен быть удалён. Интерфейсы, которые будут входить в мост, должны быть указаны в опции HOST.

Пример настройки моста vmbr1 на интерфейсе enp0s8:

# mkdir /etc/net/ifaces/vmbr1
# cp /etc/net/ifaces/enp0s8/* /etc/net/ifaces/vmbr1/
# rm -f /etc/net/ifaces/enp0s8/{i,r}*
# cat <<EOF > /etc/net/ifaces/vmbr1/options
BOOTPROTO=static
CONFIG_WIRELESS=no
CONFIG_IPV4=yes
HOST='enp0s8'
ONBOOT=yes
TYPE=bri
EOF

IP-адрес для интерфейса vmbr1 будет взят из /etc/net/ifaces/enp0s8/ipv4address.

Для настройки OVS bridge с именем vmbr1, следует выполнить следующие команды:

# mkdir /etc/net/ifaces/vmbr1
# cat <<EOF > /etc/net/ifaces/vmbr1/options
BOOTPROTO=static
CONFIG_IPV4=yes
ONBOOT=yes
TYPE=ovsbr
EOF

Пример настройки моста vmbr1 на интерфейсе enp0s8:

# mkdir /etc/net/ifaces/vmbr1
# cp /etc/net/ifaces/enp0s8/* /etc/net/ifaces/vmbr1/
# rm -f /etc/net/ifaces/enp0s8/{i,r}*
# cat <<EOF > /etc/net/ifaces/vmbr1/options
BOOTPROTO=static
CONFIG_IPV4=yes
ONBOOT=yes
HOST='enp0s8'
TYPE=ovsbr
EOF

Для применения изменений необходимо перезапустить службу network:

# systemctl restart network

или перезагрузить узел:

# reboot

⁠40.4. Объединение/агрегация интерфейсов [Черновик]

Объединение/агрегация интерфейсов (bonding) — это объединение двух и более сетевых интерфейсов в один логический интерфейс для достижения отказоустойчивости или увеличения пропускной способности. Поведение такого логического интерфейса зависит от выбранного режима работы.

Если на узлах PVE есть несколько портов Ethernet, можно распределить точки отказа, подключив сетевые кабели к разным коммутаторам, и в случае проблем с сетью агрегированное соединение переключится с одного кабеля на другой. Агрегация интерфейсов может сократить задержки выполнения миграции в реальном времени и повысить скорость репликации данных между узлами кластера PVE.

Кластерную сеть (Corosync) рекомендуется настраивать с несколькими сетями. Corosync не нуждается в агрегации для резервирования сети, поскольку может сам переключаться между сетями.

⁠40.4.1. Параметры Linux Bond [Черновик]

В следующей таблице приведены режимы агрегации Linux Bond.

⁠

Таблица 40.1. Режимы агрегации Linux Bond [Черновик]

Режим

Название

Описание

Отказоустойчивость

Балансировка нагрузки

balance-rr или mode=0

Round-robin

Режим циклического выбора активного интерфейса для трафика. Пакеты последовательно передаются и принимаются через каждый интерфейс один за другим. Данный режим не требует применения специальных коммутаторов.

Да

Да

active-backup или mode=1

Active Backup

В этом режиме активен только один интерфейс, остальные находятся в режиме горячей замены. Если активный интерфейс выходит из строя, его заменяет резервный. MAC-адрес интерфейса виден извне только на одном сетевом адаптере, что предотвращает путаницу в сетевом коммутаторе. Это самый простой режим, работает с любым оборудованием, не требует применения специальных коммутаторов.

Да

Нет

balance-xor или mode=2

XOR

Один и тот же интерфейс работает с определённым получателем. Передача пакетов распределяется между интерфейсами на основе формулы ((MAC-адрес источника) XOR (MAC-адрес получателя)) % число интерфейсов. Режим не требует применения специальных коммутаторов. Этот режим обеспечивает балансировку нагрузки и отказоустойчивость.

Да

Да

broadcast или mode=3

Широковещательный

Трафик идёт через все интерфейсы одновременно.

Да

Нет

LACP (802.3ad) или mode=4

Агрегирование каналов по стандарту IEEE 802.3ad

В группу объединяются одинаковые по скорости и режиму интерфейсы. Все физические интерфейсы используются одновременно в соответствии со спецификацией IEEE 802.3ad. Для реализации этого режима необходима поддержка на уровне драйверов сетевых карт и коммутатор, поддерживающий стандарт IEEE 802.3ad (коммутатор требует отдельной настройки).

Да

Да

balance-tlb или mode=5

Адаптивная балансировка нагрузки при передаче

Исходящий трафик распределяется в соответствии с текущей нагрузкой (с учетом скорости) на интерфейсах (для данного режима необходима его поддержка в драйверах сетевых карт). Входящие пакеты принимаются только активным сетевым интерфейсом.

Да

Да (исходящий трафик)

balance-alb или mode=6

Адаптивная балансировка нагрузки

Включает в себя балансировку исходящего трафика, плюс балансировку на приём (rlb) для IPv4 трафика и не требует применения специальных коммутаторов (балансировка на приём достигается на уровне протокола ARP, перехватом ARP ответов локальной системы и перезаписью физического адреса на адрес одного из сетевых интерфейсов, в зависимости от загрузки).

Да

Да

В таблице ниже приведены алгоритмы выбора каналов (распределения пакетов между физическими каналами, входящими в многоканальное соединение) для режимов balance-alb, balance-tlb, balance-xor, 802.3ad (значение параметра xmit-hash-policy).

⁠

Таблица 40.2. Режимы выбора каналов при организации балансировки нагрузки [Черновик]

Режим

Описание

layer2

Канал для отправки пакета однозначно определяется комбинацией MAC-адреса источника и MAC-адреса назначения. Весь трафик между определённой парой узлов всегда идёт по определённому каналу. Алгоритм совместим с IEEE 802.3ad. Этот режим используется по умолчанию.

layer2+3

Канал для отправки пакета определяется по совокупности MAC- и IP-адресов источника и назначения. Трафик между определённой парой IP-хостов всегда идёт по определённому каналу (обеспечивается более равномерная балансировка трафика, особенно в случае, когда большая его часть передаётся через промежуточные маршрутизаторы). Для протоколов 3 уровня, отличных от IP, данный алгоритм равносилен layer2. Алгоритм совместим с IEEE 802.3ad.

layer3+4

Канал для отправки пакета определяется по совокупности IP-адресов и номеров портов источника и назначения (трафик определённого узла может распределяться между несколькими каналами, но пакеты одного и того же TCP/UDP-соединения всегда передаются по одному и тому же каналу). Для фрагментированных пакетов TCP и UDP, а также для всех прочих протоколов 4 уровня, учитываются только IP-адреса. Для протоколов 3 уровня, отличных от IP, данный алгоритм равносилен layer2. Алгоритм не полностью совместим с IEEE 802.3ad.

Для создания агрегированного bond-интерфейса средствами etcnet необходимо создать каталог для интерфейса (например, bond0) с файлами options, ipv4address. В файле options следует указать тип интерфейса (TYPE) bond, в переменной HOST перечислить родительские интерфейсы, которые будут входить в агрегированный интерфейс, в переменной BONDMODE указать режим (по умолчанию 0), а опции для модуля ядра bonding — в BONDOPTIONS.

Примечание [Черновик]

Агрегированный bond-интерфейс можно создать в веб-интерфейсе ЦУС, подробнее см. Объединение сетевых интерфейсов.

⁠40.4.2. Параметры OVS Bond [Черновик]

⁠

Таблица 40.3. Параметры OVS Bond [Черновик]

Параметр

Описание

bond_mode=active-backup

В этом режиме активен только один интерфейс, остальные находятся в режиме горячей замены. Если активный интерфейс выходит из строя, его заменяет резервный. MAC-адрес интерфейса виден извне только на одном сетевом адаптере, что предотвращает путаницу в сетевом коммутаторе. Это самый простой режим, работает с любым оборудованием, не требует применения специальных коммутаторов.

bond_mode=balance-slb

Режим простой балансировки на основе MAC и VLAN. В этом режиме нагрузка трафика на интерфейсы постоянно измеряется, и если один из интерфейсов сильно загружен, часть трафика перемещается на менее загруженные интерфейсы. Параметр bond-rebalance-interval определяет, как часто OVS должен выполнять измерение нагрузки трафика (по умолчанию 10 секунд). Этот режим не требует какой-либо специальной настройки на коммутаторах.

bond_mode=balance-tcp

Этот режим выполняет балансировку нагрузки, принимая во внимание данные уровней 2-4 (например, MAC-адрес, IP -адрес и порт TCP). На коммутаторе должен быть настроен LACP. Этот режим похож на режим mode=4 Linux Bond. Всегда, когда это возможно, рекомендуется использовать этот режим

lacp=[active|passive|off]

Управляет поведением протокола управления агрегацией каналов (LACP). На коммутаторе должен быть настроен протокол LACP. Если коммутатор не поддерживает LACP, необходимо использовать bond_mode=balance-slb или bond_mode=active-backup.

other-config:lacp-fallback-ab=true

Устанавливает поведение LACP для переключения на bond_mode=active-backup в качестве запасного варианта

other_config:lacp-time=[fast|slow]

Определяет, с каким интервалом управляющие пакеты LACPDU отправляются по каналу LACP: каждую секунду (fast) или каждые 30 секунд (slow). По умолчанию slow

other_config:bond-detect-mode=[miimon|carrier]

Режим определения состояния канала. По умолчанию carrier

other_config:bond-miimon-interval=100

Устанавливает периодичность MII мониторинга в миллисекундах

other_config:bond_updelay=1000

Задает время задержки в миллисекундах, перед тем как поднять линк при обнаружении восстановления канала

other_config:bond-rebalance-interval=10000

Устанавливает периодичность выполнения измерения нагрузки трафика в миллисекундах (по умолчанию 10 секунд).

⁠40.4.3. Агрегированный bond-интерфейс с фиксированным IP-адресом [Черновик]

Конфигурация bond с фиксированным IP-адресом может использоваться как распределенная/общая сеть хранения. Преимущество будет заключаться в том, что вы получите больше скорости, а сеть будет отказоустойчивой:

⁠40.4.3.1. Настройка в веб-интерфейсе [Черновик]

Для настройки Linux Bond необходимо выполнить следующие действия:

Перейти в раздел Сеть, нажать кнопку Создать и в выпадающем меню выбрать пункт Linux Bond:

В открывшемся окне указать имя агрегированного соединения, в выпадающем списке Режим выбрать режим агрегации (в примере balance-rr), в поле Устройства указать сетевые интерфейсы, которые будут входить в объединение, в поле IPv4/CIDR ввести IP-адрес объединения и нажать кнопку Создать:

Примечание [Черновик]

В зависимости от выбранного режима агрегации будут доступны разные поля.

Для применения изменений нажать кнопку Применить конфигурацию.

Получившаяся конфигурация:

⁠40.4.3.2. Настройка в командной строке [Черновик]

Для создания такой конфигурации, необходимо выполнить следующие действия:

Создать Linux Bond bond0 на интерфейсах eno1 и eno2, выполнив следующие команды:

# mkdir /etc/net/ifaces/bond0
# rm -f /etc/net/ifaces/eno1/{i,r}*
# rm -f /etc/net/ifaces/eno2/{i,r}*
# cat <<EOF > /etc/net/ifaces/bond0/options
BOOTPROTO=static
CONFIG_WIRELESS=no
CONFIG_IPV4=yes
HOST='eno1 eno2'
ONBOOT=yes
TYPE=bond
BONDOPTIONS='miimon=100'
BONDMODE=0
EOF

где:

BONDMODE=1 — режим агрегации Round-robin;

HOST='eno1 eno2' — интерфейсы, которые будут входить в объединение;

miimon=100 — определяет, как часто производится мониторинг MII (Media Independent Interface).

В файле /etc/net/ifaces/bond0/ipv4address, указать IP-адрес для интерфейса bond0:

# echo "192.168.200.20/24" > /etc/net/ifaces/bond0/ipv4address

Перезапустить службу network, чтобы изменения вступили в силу:

# systemctl restart network

⁠40.4.4. Агрегированный bond-интерфейс в качестве порта моста [Черновик]

Чтобы сделать гостевую сеть отказоустойчивой можно использовать bond напрямую в качестве порта моста:

⁠40.4.4.1. Настройка в веб-интерфейсе [Черновик]

Для настройки Linux Bond необходимо выполнить следующие действия:

Перейти в раздел Сеть, выбрать существующий мост vmbr0 и нажать кнопку Редактировать:

В открывшемся окне удалить содержимое поля Порты сетевого моста и нажать кнопку ОК:

Нажать кнопку Создать и в выпадающем меню выбрать пункт Linux Bond.

В открывшемся окне в выпадающем списке Режим выбрать режим агрегации (в примере LACP), в поле Устройства указать сетевые интерфейсы, которые будут входить в объединение, в выпадающем списке Политика хэширования выбрать политику хэширования и нажать кнопку Создать:

Примечание [Черновик]

В зависимости от выбранного режима агрегации будут доступны разные поля.

Выбрать мост vmbr0 и нажать кнопку Редактировать.

В открывшемся окне в поле Порты сетевого моста вписать значение bond0 и нажать кнопку ОК:

Для применения изменений нажать кнопку Применить конфигурацию.

Получившаяся конфигурация:

Для настройки OVS Bond необходимо выполнить следующие действия:

Перейти в раздел Сеть, выбрать существующий мост vmbr0 и нажать кнопку Редактировать:

В открывшемся окне удалить содержимое поля Порты сетевого моста и нажать кнопку ОК:

Нажать кнопку Создать и в выпадающем меню выбрать пункт OVS Bond.

В открывшемся окне указать имя агрегированного интерфейса, в выпадающем списке Режим выбрать режим агрегации, в поле Устройства указать сетевые интерфейсы, которые будут входить в объединение, в выпадающем списке OVS Bridge выбрать мост, в который должен добавиться созданный интерфейс и нажать кнопку Создать:

Для применения изменений нажать кнопку Применить конфигурацию.

Получившаяся конфигурация:

⁠40.4.4.2. Настройка в командной строке [Черновик]

Исходное состояние: мост vmbr0 на интерфейсе enp0s3. Необходимо создать агрегированный интерфейс bond0 (enp0s3 и enp0s8) и включить его в мост vmbr0.

Для создания Linux Bond, необходимо выполнить следующие действия:

Создать агрегированный интерфейс bond0 на интерфейсах enp0s3 и enp0s8, выполнив следующие команды:

# mkdir /etc/net/ifaces/bond0
# cat <<EOF > /etc/net/ifaces/bond0/options
BOOTPROTO=static
CONFIG_WIRELESS=no
CONFIG_IPV4=yes
HOST='enp0s3 enp0s8'
ONBOOT=yes
TYPE=bond
BONDOPTIONS='xmit-hash-policy=layer2+3 lacp_rate=1 miimon=100'
BONDMODE=4
EOF

где:

BONDMODE=4 — режим агрегации LACP (802.3ad);

HOST='enp0s3 enp0s8' — интерфейсы, которые будут входить в объединение;

xmit-hash-policy=layer2+3 — определяет режим выбора каналов;

lacp_rate=1 — определяет, что управляющие пакеты LACPDU отправляются по каналу LACP каждую секунду;

miimon=100 — определяет, как часто производится мониторинг MII (Media Independent Interface).

В настройках Ethernet-моста vmbr0 (файл /etc/net/ifaces/vmbr0/options) в опции HOST указать интерфейс bond0:

BOOTPROTO=static
BRIDGE_OPTIONS="stp_state 0"
CONFIG_IPV4=yes
HOST='bond0'
ONBOOT=yes
TYPE=bri

Перезапустить службу network, чтобы изменения вступили в силу:

# systemctl restart network

Для создания OVS Bond, необходимо выполнить следующие действия:

Начальная конфигурации:

# ovs-vsctl show
6b1add02-fb20-48e6-b925-260bf92fa889
    Bridge vmbr0
        Port enp0s3
            Interface enp0s3
        Port vmbr0
            Interface vmbr0
                type: internal
    ovs_version: "2.17.6"

Привести настройки сетевого интерфейса enp0s3 (файл /etc/net/ifaces/enp0s3/options) к виду:

TYPE=eth
CONFIG_WIRELESS=no
BOOTPROTO=static
CONFIG_IPV4=yes

Создать агрегированный интерфейс bond0 на интерфейсах enp0s3 и enp0s8, выполнив следующие команды:

# mkdir /etc/net/ifaces/bond0
# cat <<EOF > /etc/net/ifaces/bond0/options
BOOTPROTO=static
BRIDGE=vmbr0
CONFIG_IPV4=yes
HOST='enp0s3 enp0s8'
OVS_OPTIONS='other_config:bond-miimon-interval=100 bond_mode=balance-slb'
TYPE=ovsbond
EOF

где:

bond_mode=balance-slb — режим агрегации;

HOST='enp0s3 enp0s8' — интерфейсы, которые будут входить в объединение;

BRIDGE=vmbr0 — мост, в который должен добавиться созданный интерфейс;

other_config:bond-miimon-interval=100 — определяет, как часто производится мониторинг MII (Media Independent Interface).

В опции HOST настроек моста vmbr0 (файл /etc/net/ifaces/vmbr0/options) указать bond0:

BOOTPROTO=static
CONFIG_IPV4=yes
HOST=bond0
ONBOOT=yes
TYPE=ovsbr

Перезапустить службу network, чтобы изменения вступили в силу:

# systemctl restart network

Проверка конфигурации:

# ovs-vsctl show
6b1add02-fb20-48e6-b925-260bf92fa889
    Bridge vmbr0
        Port bond0
            Interface enp0s3
            Interface enp0s8
        Port vmbr0
            Interface vmbr0
                type: internal
    ovs_version: "2.17.6"

⁠40.5. Настройка VLAN [Черновик]

Виртуальные сети (VLAN) являются сетевым стандартом на основе 802.1q для создания логических разделов на одном и том же сетевом интерфейсе для изоляции обмена множества сетей.

Примечание [Черновик]

На стороне физического коммутатора порт должен быть настроен как trunk, от него должен приходить тэгированный трафик 802.1q.

Если на коммутаторе сделана агрегация портов (Portchannel или Etherchannel), то параметр Trunk выставляется на это новом интерфейсе.

⁠40.5.1. Мост с поддержкой VLAN [Черновик]

Если используется Linux Bridge, то для возможности использования тегов VLAN в настройках ВМ необходимо включить поддержку VLAN для моста (Linux Bridge). Для этого в веб-интерфейсе в настройках моста следует установить отметку в поле Поддержка виртуальной ЛС:

Если используется OVS Bridge, то никаких дополнительных настроек не требуется.

Тег VLAN можно указать в настройках сетевого интерфейса при создании ВМ, либо отредактировав параметры сетевого устройства:

⁠40.5.2. Мост на VLAN [Черновик]

Можно создать конфигурацию VLAN <интерфейс>.<vlan tag> (например, enp0s8.100), этот VLAN включить в мост Linux Bridge и указывать этот мост в настройках сетевого интерфейса ВМ.

Для создания такой конфигурации, необходимо выполнить следующие действия:

Настроить VLAN с ID 100 на интерфейсе enp0s8, выполнив следующие команды:

# mkdir /etc/net/ifaces/enp0s8.100
# cat <<EOF > /etc/net/ifaces/enp0s8.100/options
BOOTPROTO=static
CONFIG_WIRELESS=no
CONFIG_IPV4=yes
HOST=enp0s8
ONBOOT=yes
TYPE=vlan
VID=100
EOF

В опции HOST нужно указать тот интерфейс, на котором будет настроен VLAN.

Настроить Ethernet-мост vmbr1, выполнив следующие команды:

# mkdir /etc/net/ifaces/vmbr1
# cat <<EOF > /etc/net/ifaces/vmbr1/options
BOOTPROTO=static
CONFIG_WIRELESS=no
CONFIG_IPV4=yes
HOST='enp0s8.100'
ONBOOT=yes
TYPE=bri
EOF

В опции HOST нужно указать VLAN-интерфейс.

В файле /etc/net/ifaces/vmbr1/ipv4address, если это необходимо, можно указать IP-адрес для интерфейса моста:

# echo "192.168.10.3/24" > /etc/net/ifaces/vmbr1/ipv4address

Перезапустить службу network, чтобы изменения вступили в силу:

# systemctl restart network

Получившаяся конфигурация в веб-интерфейсе PVE:

Теперь в настройках сетевого интерфейса ВМ можно указать сетевой мост vmbr1 (трафик через этот интерфейс будет помечен тегом 100):

⁠Глава 41. Управление ISO-образами и шаблонами LXC [Черновик]

Для загрузки ISO-образов и шаблонов LXC в хранилище PVE следует выполнить следующие шаги:

Выбрать хранилище.

Перейти на вкладку ISO-образы для загрузки ISO-образов (на вкладку Шаблоны контейнеров для загрузки шаблонов LXC):

Для загрузки образа (шаблона) с локального компьютера следует нажать кнопку Отправить. В открывшемся окне необходимо нажать кнопку Выбрать файл, выбрать файл с ISO-образом и нажать кнопку Отправить:

Примечание [Черновик]

Здесь же можно выбрать алгоритм и указать контрольную сумму. В этом случае после загрузки образа будет проверена его контрольная сумма.

Для загрузки образа (шаблона) с сервера следует нажать кнопку Загрузить по URL-адресу. В открывшемся окне необходимо указать ссылку на образ (шаблон) в поле URL-адрес, нажать кнопку Запрос URL-адреса, для того чтобы получить метаинформацию о файле. Нажать кнопку Загрузка для старта загрузки файла в хранилище:

Для удаления ISO-образа или шаблона LXC следует выбрать файл из списка в хранилище и нажать кнопку Удалить.

PVE предоставляет базовые шаблоны для некоторых дистрибутивов Linux. Эти шаблоны можно загрузить в веб-интерфейсе или в командной строке.

Загрузка базового шаблона в веб-интерфейсе:

Запустить обновление списка доступных шаблонов (например, на вкладке Оболочка):

# pveam update

Выбрать хранилище.

Перейти на вкладку Шаблоны контейнеров и нажать кнопку Шаблоны:

В открывшемся окне выбрать шаблон и нажать кнопку Загрузка:

Загрузка базового шаблона в консоли:

Запустить обновление списка доступных шаблонов:

# pveam update
update successful

Просмотреть список доступных шаблонов:

# pveam available
mail            proxmox-mailgateway-7.3-standard_7.3-1_amd64.tar.zst
mail            proxmox-mailgateway-8.0-standard_8.0-1_amd64.tar.zst
system          almalinux-8-default_20210928_amd64.tar.xz
system          almalinux-9-default_20221108_amd64.tar.xz
system          alpine-3.16-default_20220622_amd64.tar.xz
…

Загрузить шаблон в хранилище local:

# pveam download local almalinux-9-default_20221108_amd64.tar.xz

Просмотреть список загруженных шаблонов в хранилище local:

# pveam list local
NAME                                                         SIZE
local:vztmpl/almalinux-9-default_20221108_amd64.tar.xz       97.87MB

Если используются только локальные хранилища, то ISO-образы и шаблоны LXC необходимо загрузить на все узлы в кластере. Если есть общее хранилище, то можно хранить все образы в одном месте, таким образом, сохраняя пространство локальных хранилищ.

⁠

Таблица 41.1. Каталоги локального хранилища [Черновик]

Каталог

Тип шаблона

/var/lib/vz/template/iso/

ISO-образы

/var/lib/vz/template/cache/

Шаблоны контейнеров LXC

⁠

Таблица 41.2. Каталоги общих хранилищ [Черновик]

Каталог

Тип шаблона

/mnt/pve/<storage_name>/template/iso/

ISO-образы

/mnt/pve/<storage_name>/template/cache/

Шаблоны контейнеров LXC

⁠Глава 42. Виртуальные машины на базе KVM [Черновик]

Виртуальные машины являются строительными блоками виртуальной среды.

⁠42.1. Создание виртуальной машины на базе KVM [Черновик]

Прежде чем создать в интерфейсе PVE виртуальную машину (ВМ), необходимо определиться со следующими моментами:

откуда будет загружен инсталлятор гостевой ОС;

на каком физическом узле будет выполняться процесс гипервизора kvm;

в каком хранилище данных будут располагаться образы дисков ВМ.

Все остальные параметры ВМ относятся к конфигурации виртуального компьютера и могут быть определены по ходу процесса создания ВМ (PVE пытается выбрать разумные значения по умолчанию для ВМ).

Чтобы установить ОС на ВМ, расположенную на этом узле, нужно обеспечить возможность загрузки инсталлятора на этой ВМ. Для этого необходимо загрузить ISO-образ инсталлятора в хранилище данных выбранного физического узла или общее хранилище. Это можно сделать в веб-интерфейсе (см. Управление ISO-образами и шаблонами LXC).

Для создания ВМ необходимо нажать кнопку Создать ВМ, расположенную в правом верхнем углу веб-интерфейса PVE:

Процесс создания ВМ оформлен в виде «мастера», привычного для пользователей систем управления ВМ.

На вкладке Общее необходимо указать:

Узел — физический сервер, на котором будет работать ВМ;

VM ID — идентификатор ВМ в численном выражении. Одно и то же значение идентификатора не может использоваться более чем для одной машины. По умолчанию поле идентификатора ВМ заполняется автоматически инкрементально: первая созданная ВМ по умолчанию будет иметь VM ID со значением 100, следующая 101 и так далее;

Имя — текстовая строка названия ВМ;

Пул ресурсов — логическая группа ВМ. Чтобы иметь возможность выбора, пул должен быть предварительно создан.

Примечание [Черновик]

Настроить диапазон, из которого выбираются новые VM ID при создании ВМ или контейнера можно, выбрав на вкладке Центр обработки данных → Параметры пункт Следующий свободный диапазон ID виртуальных машин:

Установка нижнего значения (Нижний предел) равным верхнему (Верхний предел) полностью отключает автоподстановку VM ID.

На вкладке ОС необходимо указать источник установки ОС и тип ОС:

В качестве источника установки ОС можно указать:

Использовать файл с образом CD/DVD — использовать уже загруженный в хранилище ISO-образ:

Использовать физический привод CD/DVD — использовать физический диск хоста PVE;

Не использовать носители — не использовать ISO-образ или физический носитель.

Выбор типа гостевой ОС при создании ВМ позволяет PVE оптимизировать некоторые параметры низкого уровня.

На следующем этапе (вкладка Система) можно выбрать видеокарту, контроллер SCSI, указать нужно ли использовать Агент QEMU:

Примечание [Черновик]

Подробнее о выборе видеокарты см. Настройки дисплея.

PVE позволяет загружать ВМ с разными прошивками (SeaBIOS и OVMF). Прошивку OVMF следует выбирать, если планируется использовать канал PCIe. При выборе прошивки OVMF (UEFI) для сохранения порядка загрузки, должен быть добавлен диск EFI (см. BIOS и UEFI):

Тип машины ВМ определяет аппаратную компоновку виртуальной материнской платы ВМ. Доступно два варианта набора микросхем: Intel 440FX (по умолчанию) и Q35 (предоставляет виртуальную шину PCIe).

Вкладка Диски содержит следующие настройки:

Шина/Устройство — тип устройства виртуального диска. Допустимые значения: IDE, SATA, VirtIO Block и SCSI (по умолчанию). Можно также указать идентификатор устройства;

Хранилище — выбор хранилища для размещения виртуального диска (выбор хранилища определяет возможный формат образа диска);

Размер диска (GiB) — размер виртуального диска в гигабайтах;

Формат — выбирается формат образа виртуального диска. Доступные значения: Несжатый образ диска (raw), Формат образа QEMU (qcow2) и Формат образа Vmware (vmdk). Формат образа RAW является полностью выделяемым (thick-provisioned), т.е. выделяется сразу весь объем образа. QEMU и VMDK поддерживают динамичное выделение пространства (thin-provisioned), т.е. объем растет по мере сохранения данных на виртуальный диск;

Кэш — выбор метода кэширования ВМ. По умолчанию выбирается работа без кэширования. Доступные значения: Direct sync, Write through, Write back и Writeback (не безопасно) и Нет кэша;

Отклонить — если эта опция активирована и если гостевая ОС поддерживает TRIM, то это позволит очищать неиспользуемое пространство образа виртуального диска и соответственно сжимать образ диска.

В мастере создания ВМ можно добавить несколько дисков (кнопка Добавить):

Максимально можно добавить: 31 диск SCSI, 16 — VirtIO, 6 — SATA, 4 — IDE.

В разделе Пропускная способность можно задать максимальную скорость чтения/записи с диска (в мегабайтах в секунду или в операциях в секунду):

Примечание [Черновик]

SCSI и VirtIO дискам может быть добавлен атрибут read-only (отметка Только для чтения):

На следующем этапе настраивается процессор (CPU):

Сокеты — число сокетов ЦПУ для ВМ;

Ядра — число ядер для ВМ;

Тип — тип процессора.

Максимальное количество виртуальных процессоров в ВМ — 512.

На вкладке Память необходимо указать объем оперативной памяти выделяемой ВМ:

Максимальное количество памяти, выделяемое ВМ — 2ТБ.

Вкладка Сеть содержит следующие настройки:

Нет сетевого устройства — выбор данного параметра пропускает шаг настройки сетевой среды;

Сетевой мост — установка сетевого интерфейса в режиме моста. Это предпочтительный параметр для сетевой среды ВМ. В этом режиме возможно создание множества мостов с виртуальными сетями для создания изолированных сетей в одной и той же платформе, поскольку ВМ не имеют прямого доступа к реальной локальной сетевой среде;

Тег виртуальной ЛС — применяется для установки идентификатора VLAN для данного виртуального интерфейса;

Сетевой экран — разрешает использование для ВМ встроенных межсетевых экранов;

Модель — тип драйвера сетевого устройства. Для максимальной сетевой производительности ВМ следует выбрать пункт VirtIO (паравиртуализированно);

Адрес MAC — по умолчанию PVE автоматически создает уникальный MAC-адрес для сетевого интерфейса. Если есть такая необходимость, можно ввести пользовательский MAC-адрес вручную.

Последняя вкладка Подтверждение отобразит все введенные или выбранные значения для ВМ:

Для создания ВМ следует нажать кнопку Готово. Если необходимо внести изменения в параметры ВМ, можно перейти по вкладкам назад. Если отметить пункт Запуск после создания ВМ будет запущена сразу после создания.

⁠42.2. Запуск и остановка ВМ [Черновик]

⁠42.2.1. Изменение состояния ВМ в веб-интерфейсе [Черновик]

Запустить ВМ можно, выбрав в контекстном меню ВМ пункт Запуск:

либо нажав на кнопку Запуск:

Запустить ВМ также можно, нажав кнопку Start Now в консоли гостевой машины:

Запущенная ВМ будет обозначена зеленой стрелкой на значке ВМ.

Для запущенной ВМ доступны следующие действия:

Приостановить — перевод ВМ в спящий режим;

Гибернация — перевод ВМ в ждущий режим;

Отключить — выключение ВМ;

Остановка — остановка ВМ, путем прерывания её работы;

Перезагрузить — перезагрузка ВМ.

⁠42.2.2. Автоматический запуск ВМ [Черновик]

Для того чтобы ВМ запускалась автоматически при загрузке хост-системы, необходимо отметить опцию Запуск при загрузке на вкладке Параметры требуемой ВМ в веб-интерфейсе или установить её с помощью команды:

# qm set <vmid> -onboot 1

Иногда необходимо точно настроить порядок загрузки ВМ, например, если одна из ВМ обеспечивает межсетевой экран или DHCP для других гостевых систем. Для настройки порядка запуска ВМ можно использовать следующие параметры (опция Порядок запуска и отключения на вкладке Параметры требуемой ВМ):

Порядок запуска и отключения — определяет приоритет порядка запуска. Для того чтобы ВМ запускалась первой, необходимо установить этот параметр в значение 1. Для выключения используется обратный порядок: ВМ, с порядком запуска 1, будет выключаться последней. Если несколько хостов имеют одинаковый порядок, определенный на хосте, они будут дополнительно упорядочены в порядке возрастания VMID;

Задержка запуска — определяет интервал (в секундах) между запуском этой ВМ и последующими запусками ВМ;

Задержка выключения — определяет время в секундах, в течение которого PVE должен ожидать, пока ВМ не перейдет в автономный режим после команды выключения. Значение по умолчанию — 180, т.е. PVE выдаст запрос на завершение работы и подождет 180 секунд, пока машина перейдет в автономный режим. Если после истечения тайм-аута машина все еще находится в сети, она будет принудительно остановлена.

Примечание [Черновик]

Виртуальные машины, управляемые стеком HA, не поддерживают опции запуска при загрузке и порядок загрузки. Запуск и остановку таких ВМ обеспечивает диспетчер HA.

ВМ без установленного параметра Порядок запуска и отключения всегда будут запускаться после тех, для которых этот параметр установлен . Кроме того, этот параметр может применяться только для ВМ, работающих на одном хосте, а не в масштабе кластера.

⁠42.2.3. Массовый запуск и остановка ВМ [Черновик]

Для массового запуска или остановки ВМ, необходимо в контекстном меню узла выбрать Массовый запуск или Массовое отключение соответственно:

В окрывшемся окне необходимо отметить нужные ВМ и нажать кнопку Запуск/Отключить. Для массового отключения ВМ можно также переопределить параметры Время ожидания и Принудительная остановка:

⁠42.3. Управление ВМ с помощью qm [Черновик]

Если веб-интерфейс PVE недоступен, можно управлять ВМ в командной строке (используя сеанс SSH, из консоли noVNC, или зарегистрировавшись на физическом хосте).

qm — это инструмент для управления ВМ Qemu/KVM в PVE. Утилиту qm можно использовать для создания/удаления ВМ, для управления работой ВМ (запуск/остановка/приостановка/возобновление), для установки параметров в соответствующем конфигурационном файле, а также для создания виртуальных дисков.

qm <КОМАНДА> [АРГУМЕНТЫ] [ОПЦИИ]

Чтобы просмотреть доступные для управления ВМ команды можно выполнить следующую команду:

# qm help

В таблице Команды qm приведены описания команд qm.

⁠

Таблица 42.1. Команды qm [Черновик]

Команда

Описание

qm agent

Пвсевдоним для qm guest cmd

qm block <vmid>

Заблокировать ВМ.

vmid — идентификатор ВМ.

qm cleanup <vmid> <clean-shutdown> <guest-requested>

Очищает ресурсы, такие как сенсорные устройства, vgpu и т.д. Вызывается после выключения, сбоя ВМ и т. д.

vmid — идентификатор ВМ (100 — 999999999);

clean-shutdown — указывает, корректно ли была завершена работа qemu;

guest-requested — указывает, было ли завершение работы запрошено гостем или через qmp.

qm clone <vmid> <newid> [ОПЦИИ]

Создать копию ВМ/шаблона.

vmid — идентификатор ВМ (100 — 999999999);

newid — VMID для клона (100 — 999999999);

--bwlimit <целое число> — переопределить ограничение пропускной способности ввода-вывода (в КиБ/с) (0–N);

--description <строка> — описание новой ВМ;

--format <qcow2 | raw | vmdk> — целевой формат хранения файлов (действительно только для полного клона);

--full <логическое значение> — создать полную копию всех дисков (используется по умолчанию при клонировании ВМ). Для шаблонов ВМ по умолчанию пытается создать связанный клон;

--name <строка> — имя новой ВМ;

--pool <строка> — пул, в который будет добавлена ВМ;

--snapname <строка> — имя снимка;

--storage <строка> — целевое хранилище для полного клона;

--target <строка> — целевой узел (доступно в случае, если исходная ВМ находится в общем хранилище).

qm cloudinit dump <vmid> <type>

Получить автоматически сгенерированную конфигурацию cloud-init.

vmid — идентификатор ВМ;

type — тип конфигурации (meta | network | user).

qm cloudinit pending <vmid>

Получить конфигурацию cloud-init с текущими и ожидающими значениями.

vmid — идентификатор ВМ.

qm cloudinit update <vmid>

Восстановить и изменить диск конфигурации cloud-init.

vmid — идентификатор ВМ.

qm config <vmid> <ОПЦИИ>

Вывести конфигурацию ВМ с применёнными ожидающими изменениями конфигурации. Для вывода текущей конфигурации следует указать параметр current.

vmid — идентификатор ВМ;

--current <логическое значение> — вывести текущие значения вместо ожидающих (по умолчанию 0);

--snapshot <строка> — вывести значения конфигурации из данного снимка.

qm create <vmid> <ОПЦИИ>

Создать или восстановить ВМ.

Некоторые опции:

vmid — идентификатор ВМ;

--acpi <логическое значение> — включить/отключить ACPI (по умолчанию 1);

--affinity <строка> — список ядер хоста, используемых для выполнения гостевых процессов, например: 0,5,8-11;

--agent [enabled=]<1|0> [,freeze-fs-on-backup=<1|0>] [,fstrim_cloned_disks=<1|0>] [,type=<virtio|isa>] — включить/отключить связь с гостевым агентом QEMU;

--arch <aarch64 | x86_64> — архитектура виртуального процессора;

--archive <строка> — создать ВМ из архива. Указывается либо путь к файлу .tar или .vma, либо идентификатор тома резервной копии хранилища PVE;

--args <строка> — передача произвольных аргументов в KVM;

--audio0 device=<ich9-intel-hda|intel-hda|AC97>[,driver=<spice|none>] — настройка аудиоустройства;

--balloon <целое число> — объём целевой оперативной памяти для ВМ в МиБ (0 отключает Balloon Driver);

--bios <ovmf | seabios> — реализация BIOS (по умолчанию seabios);

--boot [order=<устройство[;устройство...]>] — порядок загрузки ВМ;

--bwlimit <целое число> — переопределить ограничение пропускной способности ввода-вывода (в КиБ/с);

--cdrom <volume> — псевдоним опции ide2;

--cicustom [meta=<volume>] [,network=<volume>] [,user=<volume>] [,vendor=<volume>] — cloud-init: указать пользовательские файлы для замены автоматически созданных;

--cipassword <пароль> — cloud-init: пароль для пользователя. Рекомендуется использовать ключи SSH вместо пароля;

--citype <configdrive2 | nocloud | opennebula> — формат конфигурации cloud-init;

--ciupgrade <логическое значение> — cloud-init: выполнить автоматическое обновление пакета после первой загрузки (по умолчанию 1);

--ciuser <строка> — cloud-init: имя пользователя для изменения пароля и ключей SSH вместо настроенного пользователя по умолчанию;

--cores <целое число> — количество ядер на сокет (по умолчанию 1);

--cpu <тип> — эмулируемый тип процессора;

--cpulimit <целое число (0–128)> — ограничение использования процессора (по умолчанию 0);

--cpuunits <целое число (1–262144)> — вес ЦП для ВМ будет ограничен значением [1, 10000] в cgroup v2 (по умолчанию cgroup v1: 1024, cgroup v2: 100);

--description <строка> — описание ВМ;

--efidisk0 [file=]<volume> [,efitype=<2m|4m>] [,format=<enum>] [,import-from=<source volume>] [,pre-enrolled-keys=<1|0>] [,size=<DiskSize>] — диск для хранения переменных EFI;

--force <логическое значение> — разрешить перезапись существующей ВМ (требуется опция --archive);

--freeze <логическое значение> — заморозить процессор при запуске;

--hookscript <строка> — описание ВМ;

--ipconfig[n] [gw=<GatewayIPv4>] [,gw6=<GatewayIPv6>] [,ip=<IPv4Format/CIDR>] [,ip6=<IPv6Format/CIDR>] — cloud-init: указать IP-адрес и шлюз для соответствующего интерфейса;

--kvm <логическое значение> — включить/отключить аппаратную виртуализацию KVM (по умолчанию 1);

--live-restore <логическое значение> — запустить ВМ из резервной копии и восстановить её в фоновом режиме (только PBS). Требуется опция --archive;

--localtime <логическое значение> — установите часы реального времени (RTC) на местное время;

--lock <backup | clone | create | migrate | rollback | snapshot | snapshot-delete | suspended | suspending> — заблокировать/разблокировать ВМ;

--machine <тип> — тип машины QEMU;

--memory [current=]<целое число> — свойства памяти;

--migrate_downtime <число> — максимально допустимое время простоя (в секундах) для миграции (по умолчанию 0,1);

--migrate_speed <целое число> — максимальная скорость (в МБ/с) для миграции (по умолчанию 0 — не ограничивать скорость);

--name <строка> — имя ВМ;

--nameserver <строка> — cloud-init: устанавливает IP-адрес DNS-сервера для контейнера;

--net <сеть> — сетевые устройства;

--numa <логическое значение> — включить/отключить NUMA (по умолчанию 0);

--numa[n] <топология> — топология NUMA;

--onboot <логическое значение> — запускать ВМ во время загрузки системы (по умолчанию 0);

--ostype <l24 | l26 | other | solaris | w2k | w2k3 | w2k8 | win10 | win11 | win7 | win8 | wvista | wxp> — гостевая ОС;

--pool <строка> — добавить ВМ в указанный пул;

--protection <логическое значение> — установить флаг защиты ВМ (по умолчанию 0). Флаг защиты отключит возможность удаления ВМ и удаления дисковых операций;

--reboot <логическое значение> — разрешить перезагрузку (по умолчанию 1). Если установлено значение 0, ВМ завершит работу при перезагрузке;

--rng0 [source=] </dev/urandom|/dev/random|/dev/hwrng> [,max_bytes=<целое число>] [,period=<целое число>] — настройть генератор случайных чисел на основе VirtIO;

--sata[n] <описание> — использовать в качестве жёсткого диска SATA или компакт-диск (n от 0 до 5). Чтобы выделить новый том используется синтаксис STORAGE_ID:SIZE_IN_GiB. Для импорта из существующего тома используется STORAGE_ID:0 и параметр import-from;

--scsi[n] <описание> — использовать в качестве жёсткого диска SCSI или компакт-диск (n от 0 до 30). Чтобы выделить новый том используется синтаксис STORAGE_ID:SIZE_IN_GiB. Для импорта из существующего тома используется STORAGE_ID:0 и параметр import-from;

--scsihw <lsi | lsi53c810 | megasas | pvscsi | virtio-scsi-pci | virtio-scsi-single> — модель контроллера SCSI (по умолчанию lsi);

searchdomain <строка> — cloud-init: устанавить домены поиска DNS для контейнера;

serial[n] (/dev/.+|socket) — последовательное устройство внутри ВМ (n от 0 до 3);

--shares <целое число (0–50000)> — объем разделяемой памяти (по умолчанию 1000);

--sockets <целое число> — количество сокетов процессора (по умолчанию 1);

--spice_enhancements [foldersharing=<1|0>] [,videostreaming=<off|all|filter>] — настройки для SPICE;

--sshkeys <путь к файлу> — cloud-init: настройка общедоступных ключей SSH (по одному ключу в строке, формат OpenSSH).;

--start <логическое значение> — запустить ВМ после создания (по умолчанию 0);

--startup `[[порядок=]\d+] [,up=\d+] [,down=\d+] ` — поведение при запуске и выключении. Порядок — неотрицательное число, определяющее общий порядок запуска. Выключение выполняется в обратном порядке. up/down — задержка включения/выключения в секундах;

--storage <строка> — хранилище;

--tablet <логическое значение> — включить/отключить USB-планшет (по умолчанию 1);

--tags <строка> — теги ВМ;

--template <логическое значение> — включить/отключить шаблон (по умолчанию 0);

--tpmstate0 <диск> — настроить диск для хранения состояния TPM. Формат фиксированный — raw;

--unique <логическое значение> — назначить уникальный случайный адрес Ethernet;

--usb[n] [[host=]<HOSTUSBDEVICE|spice>] [,mapping=<mapping-id>] [,usb3=<1|0>] — настройка USB-устройства (n — от 0 до 4, для версии машины >= 7.1 и ostype l26 или windows > 7, n может достигать 14);

--vcpus <целое число> — количество виртуальных процессоров с горячим подключением;

--vga [[type=]<enum>] [,clipboard=<vnc>] [,memory=<целое число>] — настройка VGA;

virtio[n] <описание> — использовать жёсткий диск VIRTIO (n от 0 до 15);

vmgenid <UUID> — установить идентификатор поколения ВМ (по умолчанию 1 — генерировать автоматически);

--vmstatestorage <строка>  — хранилище по умолчанию для томов/файлов состояния ВМ;

--watchdog [[model=]<i6300esb|ib700>] [,action=<enum>]  — создать сторожевое устройство виртуального оборудования.

qm delsnapshot <vmid> <snapname> <ОПЦИИ>

Удалить снимок ВМ.

vmid — идентификатор ВМ;

snapshot — имя снимка;

--force <логическое значение> — удалить из файла конфигурации, даже если удаление снимков диска не удалось.

qm destroy <vmid> [ОПЦИИ]

Уничтожить ВМ и все её тома (будут удалены все разрешения, специфичные для ВМ).

vmid — идентификатор ВМ;

--destroy-unreferenced-disks <логическое значение> — дополнительно уничтожить все диски, не указанные в конфигурации, но с совпадающим VMID из всех включенных хранилищ (по умолчанию 0);

--purge <логическое значение> — удалить VMID из конфигураций резервного копирования и высокой доступности;

--skiplock <логическое значение> — игнорировать блокировки (может использовать только root).

qm disk import <vmid> <source> <storage> [ОПЦИИ]

Импортировать образ внешнего диска в неиспользуемый диск ВМ. Формат образа должен поддерживаться qemu-img.

vmid — идентификатор ВМ;

source — путь к образу диска;

storage — идентификатор целевого хранилища;

--format <qcow2 | raw | vmdk> — целевой формат.

qm disk move <vmid> <disk> <storage> [ОПЦИИ]

Переместить том в другое хранилище или в другую ВМ.

vmid — идентификатор ВМ;

disk — диск, который необходимо переместить (например, scsi1);

storage — целевое хранилище;

--bwlimit <целое число> — переопределить ограничение пропускной способности ввода-вывода (в КиБ/с);

--delete <логическое значение> — удалить исходный диск после успешного копирования. По умолчанию исходный диск сохраняется как неиспользуемый (по умолчанию 0);

--digest <строка> — запретить изменения, если текущий файл конфигурации имеет другой SHA1 дайджест (можно использовать для предотвращения одновременных изменений);

--format <qcow2 | raw | vmdk> — целевой формат;

--target-digest <строка> — запретить изменения, если текущий файл конфигурации целевой ВМ имеет другой SHA1 дайджест (можно использовать для обнаружения одновременных модификаций);

--target-disk <efidisk0 | ide0 | ide1| …| virtio9 > — ключ конфигурации, в который будет перемещен диск на целевой ВМ (например, ide0 или scsi1). По умолчанию используется ключ исходного диска;

--target-vmid <целое число> — идентификатор целевой ВМ.

qm disk rescan [ОПЦИИ]

Пересканировать все хранилища и обновить размеры дисков и неиспользуемые образы дисков.

--dryrun <логическое значение> — не записывать изменения в конфигурацию ВМ (по умолчанию 0);

--vmid <целое число> — идентификатор ВМ.

qm disk resize <vmid> <disk> <size> [ОПЦИИ]

Увеличить размер диска.

vmid — идентификатор ВМ;

disk — диск, размер которого необходимо увеличить (например, scsi1);

size — новый размер. Со знаком «+» значение прибавляется к фактическому размеру тома, а без него значение принимается как абсолютное. Уменьшение размера диска не поддерживается;

--digest <строка> — запретить изменения, если текущий файл конфигурации имеет другой SHA1 дайджест (можно использовать для предотвращения одновременных изменений);

--skiplock <логическое значение> — игнорировать блокировки (может использовать только root).

qm disk unlink <vmid> --idlist <строка> [ОПЦИИ]

Отсоединить/удалить образы дисков.

vmid — идентификатор ВМ;

--idlist <строка> — список идентификаторов дисков, которые необходимо удалить;

--force <логическое значение> — принудительное физическое удаление (иначе диск будет удалён из файла конфигурации и будет создана дополнительная запись конфигурации с именем unused[n], которая содержит идентификатор тома).

qm guest cmd <vmid> <команда>

Выполнить команды гостевого агента QEMU.

vmid — идентификатор ВМ;

команда — команда QGA (fsfreeze-freeze | fsfreeze-status | fsfreeze-thaw | fstrim | get-fsinfo | get-host-name | get-memory-block-info | get-memory-blocks | get-osinfo | get-time | get-timezone | get-users | get-vcpus | info | network-get-interfaces | ping | shutdown | suspend-disk | suspend-hybrid | suspend-ram).

qm guest exec <vmid> [<extra-args>] [ОПЦИИ]

Выполнить данную команду через гостевой агент.

vmid — идентификатор ВМ;

extra-args — дополнительные аргументы в виде массива;

--pass-stdin <логическое значение> — если установлено, читать STDIN до EOF и пересылать гостевому агенту через входные данные (по умолчанию 0). Допускается максимум 1 МБ;

--synchronous <логическое значение> — если установлено значение 0, возвращает pid немедленно, не дожидаясь завершения команды или тайм-аута (по умолчанию 1);

--timeout <целое число> — максимальное время синхронного ожидания завершения команды. Если достигнуто, возвращается pid. Для отключения следует установить значение 0 (по умолчанию 30).

qm guest exec-status <vmid> <pid>

Получить статус данного pid, запущенного гостевым агентом.

vmid — идентификатор ВМ;

pid — PID для запроса.

qm guest passwd <vmid> <username> [ОПЦИИ]

Установить пароль для данного пользователя.

vmid — идентификатор ВМ;

username — пользователь, для которого устанавливается пароль;

crypted <логическое значение> — если пароль уже был передан через crypt(), следует установить значение 1 (по умолчанию 0).

qm help [extra-args] [ОПЦИИ]

Показать справку по указанной команде.

extra-args — показать справку по конкретной команде;

--verbose <логическое значение> — подробный формат вывода.

qm importdisk

Псевдоним для qm disk import.

qm importovf <vmid> <manifest> <storage> [ОПЦИИ]

Создать новую ВМ, используя параметры, считанные из манифеста OVF.

vmid — идентификатор ВМ;

manifest — путь до файла ovf;

storage — идентификатор целевого хранилища;

--format <qcow2 | raw | vmdk> — целевой формат.

qm list [ОПЦИИ]

Вывести список ВМ узла.

--full <логическое значение> — определить полный статус активных ВМ.

qm listsnapshot <vmid>

Вывести список снимков ВМ.

vmid — идентификатор ВМ;

qm migrate <vmid> <target> [ОПЦИИ]

Перенос ВМ. Создаёт новую задачу миграции.

vmid — идентификатор ВМ;

target — целевой узел;

--bwlimit <целое число> — переопределить ограничение пропускной способности ввода-вывода (в КиБ/с);

--force <логическое значение> — разрешить миграцию ВМ, использующих локальные устройства (может использовать только root);

--migration_network <строка> — CIDR (под)сети, которая используется для миграции;

--migration_type <insecure | secure> — трафик миграции по умолчанию шифруется с использованием SSH-туннеля. В безопасных сетях эту функцию можно отключить для повышения производительности;

--online <логическое значение> — использовать онлайн-/живую миграцию, если ВМ запущена (игнорируется, если ВМ остановлена);

--targetstorage <строка> — сопоставление исходных и целевых хранилищ. Предоставление только одного идентификатора хранилища сопоставляет все исходные хранилища с этим хранилищем. Если указать специальное значение 1, каждое исходное хранилище будет сопоставлено самому себе;

--online <логическое значение> — включить живую миграцию хранилища для локального диска.

qm monitor <vmid>

Войти в интерфейс монитора QEMU.

vmid — идентификатор ВМ.

qm move-disk

Псевдоним для qm disk move.

qm move_disk

Псевдоним для qm disk move.

qm nbdstop <vmid>

Остановить встроенный сервер NBD.

vmid — идентификатор ВМ.

qm pending <vmid>

Получить конфигурацию ВМ с текущими и ожидающими значениями.

vmid — идентификатор ВМ.

qm reboot <vmid> [ОПЦИИ]

Перезагрузить ВМ. Применяет ожидающие изменения.

vmid — идентификатор ВМ;

--timeout <целое число> — максимальное время ожидания для выключения.

qm remote-migrate <vmid> [<target-vmid>] <target-endpoint> --target-bridge <строка> --target-storage <строка> [ОПЦИИ]

Перенос ВМ в удалённый кластер. Создаёт новую задачу миграции. ЭКСПЕРИМЕНТАЛЬНАЯ функция!

vmid — идентификатор ВМ;

target-vmid — идентификатор целевой ВМ;

target-endpoint — удалённая целевая конечная точка apitoken=<API токен PVE, включая секретное значение> ,host=<имя или IP удалённого узла> [,fingerprint=<отпечаток сертификата удаленного хоста, если ему не доверяет системное хранилище>] [,port=<целое число>];

--bwlimit <целое число> — переопределить ограничение пропускной способности ввода-вывода (в КиБ/с);

--delete <логическое значение> — удалить исходную ВМ и связанные с ней данные после успешной миграции (по умолчанию 0). По умолчанию исходная ВМ остается в исходном кластере в остановленном состоянии;

--online <логическое значение> — использовать онлайн-/живую миграцию, если ВМ запущена (игнорируется, если ВМ остановлена);

--target-bridge <строка> — сопоставление исходных и целевых мостов. Предоставление только одного идентификатора моста сопоставляет все исходные мосты с этим мостом. Предоставление специального значения 1 сопоставит каждый исходный мост с самим собой;

--target-storage <строка> — сопоставление исходных и целевых хранилищ. Предоставление только одного идентификатора хранилища сопоставляет все исходные хранилища с этим хранилищем. Если указать специальное значение 1, каждое исходное хранилище будет сопоставлено самому себе;

--online <логическое значение> — включить живую миграцию хранилища для локального диска.

qm rescan

Псевдоним для qm disk rescan.

qm reset <vmid> [ОПЦИИ]

Сбросить ВМ.

vmid — идентификатор ВМ;

--skiplock <логическое значение> — игнорировать блокировки (может использовать только root).

qm resize

Псевдоним для qm disk resize.

qm resume <vmid> [ОПЦИИ]

Возобновить работу ВМ.

vmid — идентификатор ВМ;

--skiplock <логическое значение> — игнорировать блокировки (может использовать только root).

qm rollback <vmid> <snapname> [ОПЦИИ]

Откат состояния ВМ до указанного снимка.

vmid — идентификатор ВМ;

snapname — имя снимка;

--start <логическое значение> — запустить ВМ после отката (по умолчанию 0). ВМ будут запускаться автоматически, если снимок включает ОЗУ.

qm sendkey <vmid> <ключ> [ОПЦИИ]

Послать нажатия клавиш на ВМ.

vmid — идентификатор ВМ;

ключ — ключ (в кодировке qemu monitor, например, ctrl-shift);

--skiplock <логическое значение> — игнорировать блокировки (может использовать только root).

qm set <vmid> [ОПЦИИ]

Установить параметры ВМ.

Некоторые опции:

vmid — идентификатор ВМ;

--acpi <логическое значение> — включить/отключить ACPI (по умолчанию 1);

--affinity <строка> — список ядер хоста, используемых для выполнения гостевых процессов, например: 0,5,8-11;

--agent [enabled=]<1|0> [,freeze-fs-on-backup=<1|0>] [,fstrim_cloned_disks=<1|0>] [,type=<virtio|isa>] — включить/отключить связь с гостевым агентом QEMU;

--arch <aarch64 | x86_64> — архитектура виртуального процессора;

--args <строка> — передача произвольных аргументов в KVM;

--audio0 device=<ich9-intel-hda|intel-hda|AC97>[,driver=<spice|none>] — настройка аудиоустройства;

--balloon <целое число> — объём целевой оперативной памяти для ВМ в МиБ (0 отключает Balloon Driver);

--bios <ovmf | seabios> — реализация BIOS (по умолчанию seabios);

--boot [order=<устройство[;устройство...]>] — порядок загрузки ВМ;

--cdrom <volume> — псевдоним опции ide2;

--cicustom [meta=<volume>] [,network=<volume>] [,user=<volume>] [,vendor=<volume>] — cloud-init: указать пользовательские файлы для замены автоматически созданных;

--cipassword <пароль> — cloud-init: пароль для пользователя. Рекомендуется использовать ключи SSH вместо пароля;

--citype <configdrive2 | nocloud | opennebula> — формат конфигурации cloud-init;

--ciupgrade <логическое значение> — cloud-init: выполнить автоматическое обновление пакета после первой загрузки (по умолчанию 1);

--ciuser <строка> — cloud-init: имя пользователя для изменения пароля и ключей SSH вместо настроенного пользователя по умолчанию;

--cores <целое число> — количество ядер на сокет (по умолчанию 1);

--cpu <тип> — эмулируемый тип процессора;

--cpulimit <целое число (0–128)> — ограничение использования процессора (по умолчанию 0);

--cpuunits <целое число (1–262144)> — вес ЦП для ВМ будет ограничен значением [1, 10000] в cgroup v2 (по умолчанию cgroup v1: 1024, cgroup v2: 100);

--delete <строка> — список настроек, которые необходимо удалить;

--description <строка> — описание ВМ;

--digest <строка> — запретить изменения, если текущий файл конфигурации имеет другой дайджест SHA1 (можно использовать для предотвращения одновременных изменений);

--efidisk0 [file=]<volume> [,efitype=<2m|4m>] [,format=<enum>] [,import-from=<source volume>] [,pre-enrolled-keys=<1|0>] [,size=<DiskSize>] — диск для хранения переменных EFI;

--force <логическое значение> — разрешить перезапись существующей ВМ (требуется опция --archive);

--freeze <логическое значение> — заморозить процессор при запуске;

--hookscript <строка> — описание ВМ;

--hostpci[n] [описание] — сопоставить PCI-устройства хоста с гостевыми устройствами;

--ide[n] [описание] — использовать в качестве жёсткого диска IDE или компакт-диск (n от 0 до 3). Чтобы выделить новый том используется синтаксис STORAGE_ID:SIZE_IN_GiB. Для импорта из существующего тома используется STORAGE_ID:0 и параметр import-from;

--ipconfig[n] [gw=<GatewayIPv4>] [,gw6=<GatewayIPv6>] [,ip=<IPv4Format/CIDR>] [,ip6=<IPv6Format/CIDR>] — cloud-init: указать IP-адрес и шлюз для соответствующего интерфейса;

--kvm <логическое значение> — включить/отключить аппаратную виртуализацию KVM (по умолчанию 1);

--localtime <логическое значение> — установите часы реального времени (RTC) на местное время;

--lock <backup | clone | create | migrate | rollback | snapshot | snapshot-delete | suspended | suspending> — заблокировать/разблокировать ВМ;

--machine <тип> — тип машины QEMU;

--memory [current=]<целое число> — свойства памяти;

--migrate_downtime <число> — максимально допустимое время простоя (в секундах) для миграции (по умолчанию 0,1);

--migrate_speed <целое число> — максимальная скорость (в МБ/с) для миграции (по умолчанию 0 — не ограничивать скорость);

--name <строка> — имя ВМ;

--nameserver <строка> — cloud-init: устанавливает IP-адрес DNS-сервера для контейнера;

--net <сеть> — сетевые устройства;

--numa <логическое значение> — включить/отключить NUMA (по умолчанию 0);

--numa[n] <топология> — топология NUMA;

--onboot <логическое значение> — запускать ВМ во время загрузки системы (по умолчанию 0);

--ostype <l24 | l26 | other | solaris | w2k | w2k3 | w2k8 | win10 | win11 | win7 | win8 | wvista | wxp> — гостевая ОС;

--protection <логическое значение> — установить флаг защиты ВМ (по умолчанию 0). Флаг защиты отключит возможность удаления ВМ и удаления дисковых операций;

--reboot <логическое значение> — разрешить перезагрузку (по умолчанию 1). Если установлено значение 0, ВМ завершит работу при перезагрузке;

--revert <строка> — отменить ожидающее изменение;

--rng0 [source=] </dev/urandom|/dev/random|/dev/hwrng> [,max_bytes=<целое число>] [,period=<целое число>] — настройть генератор случайных чисел на основе VirtIO;

--sata[n] <описание> — использовать в качестве жёсткого диска SATA или компакт-диск (n от 0 до 5). Чтобы выделить новый том используется синтаксис STORAGE_ID:SIZE_IN_GiB. Для импорта из существующего тома используется STORAGE_ID:0 и параметр import-from;

--scsi[n] <описание> — использовать в качестве жёсткого диска SCSI или компакт-диск (n от 0 до 30). Чтобы выделить новый том используется синтаксис STORAGE_ID:SIZE_IN_GiB. Для импорта из существующего тома используется STORAGE_ID:0 и параметр import-from;

--scsihw <lsi | lsi53c810 | megasas | pvscsi | virtio-scsi-pci | virtio-scsi-single> — модель контроллера SCSI (по умолчанию lsi);

searchdomain <строка> — cloud-init: устанавить домены поиска DNS для контейнера;

serial[n] (/dev/.+|socket) — последовательное устройство внутри ВМ (n от 0 до 3);

--shares <целое число (0–50000)> — объем разделяемой памяти (по умолчанию 1000);

--skiplock <логическое значение> — игнорировать блокировки (только root может использовать эту опцию);

--sockets <целое число> — количество сокетов процессора (по умолчанию 1);

--spice_enhancements [foldersharing=<1|0>] [,videostreaming=<off|all|filter>] — настройки для SPICE;

--sshkeys <путь к файлу> — cloud-init: настройка общедоступных ключей SSH (по одному ключу в строке, формат OpenSSH).;

--startup `[[порядок=]\d+] [,up=\d+] [,down=\d+] ` — поведение при запуске и выключении. Порядок — неотрицательное число, определяющее общий порядок запуска. Выключение выполняется в обратном порядке. up/down — задержка включения/выключения в секундах;

--tablet <логическое значение> — включить/отключить USB-планшет (по умолчанию 1);

--tags <строка> — теги ВМ;

--template <логическое значение> — включить/отключить шаблон (по умолчанию 0);

--tpmstate0 <диск> — настроить диск для хранения состояния TPM. Формат фиксированный — raw;

--usb[n] [[host=]<HOSTUSBDEVICE|spice>] [,mapping=<mapping-id>] [,usb3=<1|0>] — настройка USB-устройства (n — от 0 до 4, для версии машины >= 7.1 и ostype l26 или windows > 7, n может достигать 14);

--vcpus <целое число> — количество виртуальных процессоров с горячим подключением;

--vga [[type=]<enum>] [,clipboard=<vnc>] [,memory=<целое число>] — настройка VGA;

--virtio[n] <описание> — использовать жёсткий диск VIRTIO (n от 0 до 15);

--vmgenid <UUID> — установить идентификатор поколения ВМ (по умолчанию 1 — генерировать автоматически);

--vmstatestorage <строка>  — хранилище по умолчанию для томов/файлов состояния ВМ;

--watchdog [[model=]<i6300esb|ib700>] [,action=<enum>]  — создать сторожевое устройство виртуального оборудования.

qm showcmd <vmid> [ОПЦИИ]

Показать командную строку, которая используется для запуска ВМ (информация для отладки).

vmid — идентификатор ВМ;

--pretty <логическое значение> — поместить каждый параметр на новой строке;

--snapshot <строка> — получить значения конфигурации из данного снимка.

qm shutdown <vmid> [ОПЦИИ]

Выключение ВМ (эмуляция нажатия кнопки питания). Гостевой ОС будет отправлено событие ACPI.

vmid — идентификатор ВМ;

--forceStop <логическое значение> — убедиться, что ВМ остановлена (по умолчанию 0);

--keepActive <логическое значение> — не деактивировать тома хранения (по умолчанию 0);

--skiplock <логическое значение> — игнорировать блокировки (может использовать только root);

--timeout <целое число> — максимальный таймаут в секундах.

qm snapshot <vmid> <snapname> [ОПЦИИ]

Сделать снимок ВМ.

vmid — идентификатор ВМ;

snapname — имя снимка;

--description <строка> — описание или комментарий;

--vmstate <логическое значение> — сохранить vmstate.

qm start <vmid> [ОПЦИИ]

Запустить ВМ.

vmid — идентификатор ВМ;

--force-cpu <строка> — переопределить cpu QEMU заданной строкой;

--machine <тип> — указывает тип компьютера QEMU (например, pc+pve0);

--migratedfrom <строка> — имя узла кластера;

--migration_network <строка> — CIDR (под)сети, которая используется для миграции;

--migration_type <insecure | secure> — трафик миграции по умолчанию шифруется с использованием SSH-туннеля. В безопасных сетях эту функцию можно отключить для повышения производительности;

--keepActive <логическое значение> — не деактивировать тома хранения (по умолчанию 0);

--skiplock <логическое значение> — игнорировать блокировки (может использовать только root);

--stateuri <строка> — некоторые команды сохраняют/восстанавливают состояние из этого места;

--targetstorage <строка> — сопоставление исходных и целевых хранилищ. Предоставление только одного идентификатора хранилища сопоставляет все исходные хранилища с этим хранилищем. Если указать специальное значение 1, каждое исходное хранилище будет сопоставлено самому себе;

--timeout <целое число> — максимальный таймаут в секундах (по умолчанию max(30, память ВМ в ГБ)).

qm status <vmid> [ОПЦИИ]

Показать статус ВМ.

vmid — идентификатор ВМ;

--verbose <логическое значение> — подробный вывод.

qm stop <vmid> [ОПЦИИ]

Останов ВМ (эмуляция выдергивания вилки). Процесс qemu немедленно завершается.

vmid — идентификатор ВМ;

--keepActive <логическое значение> — не деактивировать тома хранения (по умолчанию 0);

--migratedfrom <строка> — имя узла кластера;

--skiplock <логическое значение> — игнорировать блокировки (может использовать только root);

--timeout <целое число> — максимальный таймаут в секундах.

qm suspend <vmid> [ОПЦИИ]

Приостановить ВМ.

vmid — идентификатор ВМ;

--skiplock <логическое значение> — игнорировать блокировки (может использовать только root);

--statestorage <строка>хранилище состояния ВМ (должна быть указана опция --todisk);

--todisk <логическое значение> — приостанавливает работу ВМ на диск. Будет возобновлено при следующем запуске ВМ (по умолчанию 0).

qm template <vmid> [ОПЦИИ]

Создать шаблон.

vmid — идентификатор ВМ;

--disk <диск> — если в базовый образ нужно преобразовать только один диск (например, sata1).

qm terminal <vmid> [ОПЦИИ]

Открыть терминал с помощью последовательного устройства (на ВМ должно быть настроено последовательное устройство, например, Serial0: Socket).

vmid — идентификатор ВМ;

--escape <строка> — escape-символ (по умолчанию ^O);

--iface <serial0 | serial1 | serial2 | serial3> — последовательное устройство (по умолчанию используется первое подходящее устройство).

qm unlink

Псевдоним для qm disk unlink.

qm unlock <vmid>

Разблокировать ВМ.

vmid — идентификатор ВМ.

qm vncproxy <vmid>

Проксировать VNC-трафик ВМ на стандартный ввод/вывод.

vmid — идентификатор ВМ.

qm wait <vmid> [ОПЦИИ]

Подождать, пока ВМ не будет остановлена.

vmid — идентификатор ВМ;

--timeout <целое число> — максимальный таймаут в секундах (по умолчанию — не ограничено).

Примеры использования утилиты qm:

создать ВМ, используя ISO-файл, загруженный в локальное хранилище, с диском IDE 21 ГБ, в хранилище local-lvm:

# qm create 300 -ide0 local-lvm:21 -net0 e1000 -cdrom local:iso/alt-server-10.2-x86_64.iso

запуск ВМ с VM ID 109:

# qm start 109

отправить запрос на отключение, и дождаться остановки ВМ:

# qm shutdown 109 && qm wait 109

отправить сочетание клавиш CTRL+SHIFT на ВМ:

# qm sendkey 109 ctrl-shift

войти в интерфейс монитора QEMU и вывести список доступных команд:

# qm monitor 109
qm> help

⁠42.4. Доступ к ВМ [Черновик]

По умолчанию PVE предоставляет доступ к ВМ через noVNC и/или SPICE. Рекомендуется использовать их, когда это возможно.

Использование протокола SPICE позволяет задействовать множество возможностей, в том числе, проброс USB, смарт-карт, принтеров, звука, получить более тесную интеграцию с окном гостевой системы (бесшовную работу мыши, клавиатуры, динамическое переключение разрешения экрана, общий с гостевой системой буфер обмена для операций копирования/вставки). Для возможности использования SPICE:

на хосте, с которого происходит подключение, должен быть установлен клиент SPICE (например, пакет virt-viewer):

для параметра Экран ВМ должно быть установленно значение VirtIO, SPICE (qxl) (см. Настройки дисплея).

При подключении к ВМ с использованием noVNC, консоль открывается во вкладке браузера (не нужно устанавливать клиентское ПО).

Для доступа к ВМ следует выбрать её в веб-интерфейсе, нажать кнопку Консоль и в выпадающем меню выбрать нужную консоль:

Консоль noVNC также можно запустить, выбрав вкладку Консоль для ВМ:

Если нужен независимый от браузера доступ, можно также использовать внешний клиент VNC. Для этого в файл конфигурации ВМ /etc/pve/qemu-server/<VMID>.conf необходимо добавить строку с указанием номера дисплея VNC (в примере — 55):

args: -vnc 0.0.0.0:55

Или, чтобы включить защиту паролем:

args: -vnc 0.0.0.0:55,password=on

Если была включена защита паролем, необходимо установить пароль (после запуска ВМ). Пароль можно установить на вкладке Монитор, выполнив команду:

set_password vnc newvnc -d vnc2

В данном примере, при подключении будет запрашиваться пароль: newvnc. Максимальная длина пароля VNC: 8 символов. После перезапуска ВМ указанную выше команду необходимо повторить, чтобы снова установить пароль.

Примечание [Черновик]

Номер дисплея VNC можно выбрать произвольно, но каждый номер должен встречаться только один раз. Служба VNC прослушивает порт 5900+номер_дисплея. Соединения noVNC используют номер дисплея 0 и последующие, поэтому во избежание конфликтов рекомендуется использовать более высокие номера.

Для подключения клиента VNC следует указать IP-адрес хоста с ВМ и порт (в приведенном выше примере — 5955).

⁠42.5. Внесение изменений в ВМ [Черновик]

Вносить изменения в конфигурацию ВМ можно и после ее создания. Для того чтобы внести изменения в конфигурацию ВМ, необходимо выбрать ВМ и перейти на вкладку Оборудование. На этой вкладке следует выбрать ресурс и нажать кнопку Редактировать:

Примечание [Черновик]

В случаях, когда изменение не может быть выполнено в горячем режиме, оно будет зарегистрировано как ожидающее изменение (выделяется цветом). Такие изменения будут применены только после перезагрузки ВМ.

⁠42.5.1. Управление образами виртуальных дисков [Черновик]

Образ виртуального диска является файлом или группой файлов, в которых ВМ хранит свои данные.

qemu-img — утилита для манипулирования с образами дисков машин QEMU. qemu-img позволяет выполнять операции по созданию образов различных форматов, конвертировать файлы-образы между этими форматами, получать информацию об образах и объединять снимки ВМ для тех форматов, которые это поддерживают. (подробнее см. раздел «Утилита qemu-img»).

Примеры, использования утилиты qemu-img:

преобразование (конвертация) vmdk-образа виртуального накопителя VMware под названием test в формат qcow2:

# qemu-img convert -f vmdk test.vmdk -O qcow2 test.qcow2

создание образа test в формате RAW, размером 40 ГБ:

# qemu-img create -f raw test.raw 40G

изменение размера виртуального диска:

# qemu-img resize -f raw test.raw 80G

Просмотр информации об образе:

# qemu-img info test.raw

Для управления образами виртуальных дисков в веб-интерфейсе PVE необходимо выбрать ВМ и перейти на вкладку Оборудование. После выбора образа диска станут доступными кнопки: Добавить, Отключить, Редактировать, Переместить хранилище, Переназначить владельца, Изменить размер:

⁠42.5.1.1. Добавление виртуального диска в ВМ [Черновик]

Для добавления образа виртуального диска к ВМ необходимо:

Перейти на вкладку Оборудование;

Нажать кнопку Добавить и выбрать в выпадающем списке пункт Жесткий диск:

Указать параметры жесткого диска и нажать кнопку Добавить:

⁠42.5.1.2. Удаление образа виртуального диска [Черновик]

Для удаления образа виртуального диска к ВМ необходимо:

Перейти на вкладку Оборудование;

Выбрать образ диска ВМ;

Нажать кнопку Отключить;

В окне подтверждения нажать кнопку Да для подтверждения действия. При этом виртуальный диск будет отсоединен от ВМ, но не удален полностью. Он будет присутствовать в списке оборудования ВМ как Неиспользуемый диск:

Чтобы удалить образ диска окончательно, следует выбрать неиспользуемый диск и нажать кнопку Удалить.

Если образ диска был отключен от ВМ по ошибке, можно повторно подключить его к ВМ, выполнив следующие действия:

Выбрать неиспользуемый диск;

Нажать кнопку Редактировать;

В открывшемся диалоговом окне изменить, если это необходимо, параметры Шина/Устройство:

Нажать кнопку Добавить для повторного подключения образа диска.

⁠42.5.1.3. Изменение размера диска [Черновик]

Функция изменения размера поддерживает только увеличение размера файла образа виртуального диска.

При изменении размера образа виртуального диска изменяется только размер файла образа виртуального диска. После изменения размера файла, разделы жесткого диска должны быть изменены внутри самой ВМ.

Для изменения размера виртуального диска необходимо:

Перейти на вкладку Оборудование;

Выбрать образ диска ВМ;

Нажать кнопку Действие над диском → Изменить размер;

В открывшемся диалоговом окне в поле Увеличение размера (GiB) ввести значение, на которое необходимо увеличить размер диска. Например, если размер существующего диска составляет 20 ГБ для изменения размера диска до 30 ГБ следует ввести число 10:

Нажать кнопку Изменить размер диска.

Команда изменения размера виртуального диска:

# qm resize <vm_id> <virtual_disk> [+]<size>

Примечание [Черновик]

Если указать размер диска со знаком «+», то данное значение добавится к реальному размеру тома, без знака «+» указывается абсолютное значение. Уменьшение размера диска не поддерживается. Например, изменить размер виртуального диска до 80 ГБ:

# qm resize 100 scsi1 80G

⁠42.5.1.4. Перемещение диска в другое хранилище [Черновик]

Образы виртуального диска могут перемещаться с одного хранилища на другое в пределах одного кластера.

Для перемещения образа диска необходимо:

Перейти на вкладку Оборудование;

Выбрать образ диска, который необходимо переместить;

Нажать кнопку Действие над диском → Переместить хранилище;

В открывшемся диалоговом окне в выпадающем меню Целевое хранилище выбрать хранилище-получатель, место, куда будет перемещен образ виртуального диска:

В выпадающем меню Формат выбрать формат образ диска. Этот параметр полезен для преобразования образа диска из одного формата в другой;

Отметить, если это необходимо, пункт Удалить источник для удаления образа диска из исходного хранилища после его перемещения в новое хранилище;

Нажать кнопку Переместить диск.

Команда перемещения образа диска в другое хранилище:

# qm move-disk <vm_id> <virtual_disk> <storage>

⁠42.5.1.5. Переназначение диска другой ВМ [Черновик]

При переназначении образа диска другой ВМ, диск будет удалён из исходной ВМ и подключен к целевой ВМ.

Для переназначения образа диска другой ВМ необходимо:

Перейти на вкладку Оборудование;

Выбрать образ диска, который необходимо переназначить;

Нажать кнопку Действие над диском → Переназначить владельца;

В открывшемся диалоговом окне в выпадающем меню Целевой гость выбрать целевую ВМ, место, куда будет перемещен образ виртуального диска:

Выбрать нужные параметры в выпадающем меню Шина/Устройство;

Нажать кнопку Переназначить диск.

Команда переназначения образа диска другой ВМ:

# qm move-disk <vm_id> <virtual_disk> --target-vmid <vm_id>--target-disk <virtual_disk>

Пример удаления образа диска scsi0 из ВМ 107 и подключение его как scsi1 к ВМ 10007:

# qm move-disk 107 scsi0 --target-vmid 10007--target-disk scsi1

⁠42.5.2. Настройки дисплея [Черновик]

QEMU может виртуализировать разные типы видеокарт, например:

std (Стандартный VGA) — эмулирует карту с расширениями Bochs VBE;

vmware (Совместимый с VMware) — адаптер, совместимый с VMWare SVGA-II;

qxl (SPICE) — паравиртуализированная видеокарта QXL. Выбор этого параметра включает SPICE (протокол удаленного просмотра) для ВМ;

virtio-gl (VirtIO-GPU) — стандартный драйвер графического процессора virtio;

virtio-gl (VirGL GPU) — виртуальный 3D-графический процессор для использования внутри ВМ, который может переносить рабочие нагрузки на графический процессор хоста.

Примечание [Черновик]

Для типов дисплеев VirtIO и VirGL по умолчанию включена поддержка SPICE.

Примечание [Черновик]

Для подключения к SPICE-серверу может использоваться любой SPICE-клиент (например, установить пакет virt-viewer на хосте, с которого происходит подключение).

Можно изменить объем памяти, выделяемый виртуальному графическому процессору (поле Память (MiB)). Это может обеспечить более высокое разрешение внутри ВМ, особенно при использовании SPICE/QXL.

Поскольку память резервируется устройством дисплея, выбор режима нескольких мониторов для SPICE (например, qxl2 для двух мониторов) имеет некоторые последствия:

ВМ с ОС Windows требуется устройство для каждого монитора. Поэтому PVE предоставляет ВМ дополнительное устройство для каждого монитора. Каждое устройство получает указанный объем памяти;

ВМ с ОС Linux включают больше виртуальных мониторов, но при выборе режима нескольких мониторов, объём памяти, предоставленный устройству, умножается на количество мониторов.

Выбор serialX (Терминал) в качестве типа дисплея, отключает выход VGA и перенаправляет веб-консоль на выбранный последовательный порт. В этом случае настроенный параметр памяти дисплея игнорируется.

⁠42.5.3. Дополнительные функции SPICE [Черновик]

Дополнительно в PVE можно включить две дополнительные функции SPICE:

общий доступ к папкам — доступ к локальной папке из ВМ;

потоковое видео — области быстрого обновления кодируются в видеопоток.

Включение дополнительных функций SPICE:

в веб-интерфейсе (пункт Улучшения SPICE в разделе Параметры ВМ):

в командной строке:

# qm set VMID -spice_enhancements foldersharing=1,videostreaming=all

Примечание [Черновик]

Чтобы использовать дополнительные функции SPICE, для параметра Экран ВМ должно быть установленно значение VirtIO, SPICE (qxl) (см. Настройки дисплея).

⁠42.5.3.1. Общий доступ к папкам [Черновик]

Для возможности получения доступа к локальной папке, внутри ВМ должен быть установлен пакет spice-webdavd. В этом случае общая папка будет доступна через локальный сервер WebDAV по адресу http://localhost:9843.

Примечание [Черновик]

Чтобы открыть общий доступ к папке, следует в меню remote-viewer выбрать пункт Настройки (Preferences), в открывшемся окне установить отметку Общая папка и выбрать папку для перенаправления:

Если в ВМ общая папка не отображается, следует проверить, что служба WebDAV (spice-webdavd) запущена. Может также потребоваться перезапустить сеанс SPICE.

Примечание [Черновик]

Для возможности доступа к общей папке из файлового менеджера, а не из браузера, внутри ВМ должен быть установлен пакет davfs2.

Для доступа к общей папке из файлового менеджера:

Dolphin — выбрать пункт «Сеть»→«Сетевые службы»→«Сетевой каталог WebDav»→«Spice client folder»;

Thunar — в адресной строке ввести адрес с указанием протокола dav или davs (dav://localhost:9843/).

⁠42.5.3.2. Потоковое видео [Черновик]

Доступны две опции:

all — все области быстрого обновления кодируются в видеопоток;

filter — для принятия решения о том, следует ли использовать потоковое видео, используются дополнительные фильтры.

⁠42.5.4. Проброс USB [Черновик]

Для проброса USB-устройства в ВМ необходимо:

Перейти на вкладку Оборудование (Hardware);

Нажать кнопку Добавить и выбрать в выпадающем списке пункт Устройство USB:

Откроется окно добавления устройства, в котором можно выбрать режим проброса:

Порт Spice — сквозная передача SPICE USB (позволяет пробросить USB-устройство с клиента SPICE):

Использовать устройство USB по номеру — проброс в ВМ конкретного USB-устройства:

USB-устройство можно выбрать в выпадающем списке Выберите устройство или указать вручную, указав <ID-производителя>:<ID-устройства> (можно получить из вывода команды lsusb).

Использовать порт USB — проброс конкретного порта (в ВМ будет проброшено любое устройство, вставленное в этот порт):

USB-порт можно выбрать в выпадающем списке Выберите порт или указать вручную, указав <Номер_шины>:<Путь_к_порту> (можно получить из вывода команды lsusb -t).

Нажать кнопку Добавить.

Остановить и запустить ВМ (перезагрузки недостаточно).

Примечание [Черновик]

Список подключенных к ВМ и хосту USB-устройств можно получить, введя на вкладке Монитор соответственно команды info usb или info usbhost:

Если USB-устройство присутствует в конфигурации ВМ (и для него указаны Использовать устройство USB по номеру или Использовать порт USB) при запуске ВМ, но отсутствует на хосте, ВМ будет загружена без проблем. Как только устройство/порт станет доступным на хосте, оно будет проброшено в ВМ.

Предупреждение [Черновик]

Использование проброса типа Использовать устройство USB по номеру или Использовать порт USB не позволит переместить ВМ на другой хост, поскольку оборудование доступно только на хосте, на котором в данный момент находится ВМ.

⁠42.5.5. BIOS и UEFI [Черновик]

По умолчанию, в качестве прошивки, используется SeaBIOS, который эмулирует BIOS x86. Можно также выбрать OVMF, который эмулирует UEFI.

При использовании OVMF, необходимо учитывать несколько моментов:

Для сохранения порядка загрузки, должен быть добавлен диск EFI. Этот диск будет включен в резервные копии и моментальные снимки, и может быть только один.

При использовании OVMF с виртуальным дисплеем (без проброса видеокарты в ВМ) необходимо установить разрешение клиента в меню OVMF (которое можно вызвать нажатием кнопки ESC во время загрузки) или выбрать SPICE в качестве типа дисплея.

Пример изменения прошивки ВМ на UEFI:

Поменять тип прошивки на UEFI:

Добавить в конфигурацию ВМ диск EFI:

Команда создания диска EFI:

# qm set <vm_id> -efdisk0 <storage>:1,format=<format>,efitype=4m,pre-enrolled-keys=1

где:

<storage> — хранилище, в котором будет размещён диск;

<format> — формат, поддерживаемый хранилищем;

efitype — указывает, какую версию микропрограммы OVMF следует использовать. Для новых ВМ необходимо указывать 4м (это значение по умолчанию в графическом интерфейсе);

pre-enroll-keys — указывает, должен ли efdisk поставляться с предварительно загруженными ключами безопасной загрузки для конкретного дистрибутива и Microsoft Standard Secure Boot. Включает безопасную загрузку по умолчанию.

⁠42.5.6. Доверенный платформенный модуль (TPM) [Черновик]

TPM (англ. Trusted Platform Module) — спецификация, описывающая криптопроцессор, в котором хранятся криптографические ключи для защиты информации, а также обобщённое наименование реализаций указанной спецификации, например, в виде «чипа TPM» или «устройства безопасности TPM» (Dell).

Доверенный платформенный модуль можно добавить на этапе создания ВМ (вкладка Система) или для, уже созданной, ВМ.

Добавление TPM в веб-интерфейсе (Добавить → Состояние доверенного платформенного модуля):

Команда добавления TRM:

# qm set <vm_id> -tpmstate0 <storage>:1,version=<version>

где:

<storage> — хранилище, в которое будет помещён модуль;

<version> — версия (1.2 или 2.0).

⁠42.5.7. Проброс PCI(e) [Черновик]

Проброс PCI(e) — это механизм, позволяющий ВМ управлять устройством PCI(e) хоста.

Примечание [Черновик]

Если устройство передано на ВМ, его нельзя будет использовать на хосте или в любой другой ВМ.

Поскольку проброс PCI(e) — это функция, требующая аппаратной поддержки, необходимо убедиться, что ваше оборудование (ЦП и материнская плата) поддерживает IOMMU (I/O Memory Management Unit).

Если оборудование поддерживает проброс, необходимо выполнить следующую настройку:

Включить поддержку IOMMU в BIOS/UEFI.

Для процессоров Intel — передать ядру параметр intel_iommu=on (для процессоров AMD он должен быть включен автоматически).

Убедиться, что следующие модули загружены (этого можно добиться, добавив их в файл /etc/modules):

vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd

Перезагрузить систему, чтобы изменения вступили в силу, и убедиться, что проброс действительно включен:

# dmesg | grep -e DMAR -e IOMMU -e AMD-Vi

Наиболее часто используемый вариант проброса PCI(e) — это проброс всей карты PCI(e), например, GPU или сетевой карты. В этом случае хост не должен использовать карту. Этого можно добиться двумя методами:

передать идентификаторы устройств в параметры модулей vfio-pci, добавив, например, в файл /etc/modprobe.d/vfio.conf строку:

options vfio-pci ids=1234:5678,4321:8765

где 1234:5678 и 4321:8765 — идентификаторы поставщика и устройства.

Посмотреть идентификаторы поставщика и устройства можно в выводе команды:

# lspci -nn

занести на хосте драйвер в черный список, для этого добавить в файл /etc/modprobe.d/blacklist.conf:

blacklist DRIVERNAME

Для применения изменений необходимо перезагрузить систему.

Добавления устройства PCI ВМ:

в веб-интерфейсе (Добавить → Устройство PCI в разделе Оборудование):

в веб-интерфейсе можно назначить ВМ до 16 устройств PCI(e).

В командной строке:

# qm set VMID -hostpci0 00:02.0

Если устройство имеет несколько функций (например, «00:02.0» и «00:02.1»), можно передать их с помощью сокращенного синтаксиса «00:02». Это эквивалентно установке отметки Все функции в веб-интерфейсе.

Идентификаторы поставщика и устройства PCI могут быть переопределены для сквозной записи конфигурации, и они необязательно должны соответствовать фактическим идентификаторам физического устройства. Доступные параметры: vendor-id, device-id, sub-vendor-id и sub-device-id. Можно установить любой или все из них, чтобы переопределить идентификаторы устройства по умолчанию:

# qm set VMID -hostpci0 02:00,device-id=0x10f6,sub-vendor-id=0x0000

⁠42.6. Файлы конфигурации ВМ [Черновик]

Файлы конфигурации ВМ хранятся в файловой системе кластера PVE (/etc/pve/qemu-server/<VMID>.conf). Как и другие файлы, находящиеся в /etc/pve/, они автоматически реплицируются на все другие узлы кластера.

Примечание [Черновик]

VMID < 100 зарезервированы для внутренних целей. VMID должны быть уникальными для всего кластера.

Пример файла конфигурации:

boot: order=scsi0;scsi7;net0
cores: 1
memory: 2048
name: newVM
net0: virtio=3E:E9:24:FF:85:D9,bridge=vmbr0,firewall=1
numa: 0
ostype: l26
sata2: local-iso:iso/slinux-10.1-x86_64.iso,media=cdrom,size=4586146K
scsi0: local:100/vm-100-disk-0.qcow2,size=42G
scsihw: virtio-scsi-pci
smbios1: uuid=ee9db068-5427-4934-bf7a-5895c377b5af
sockets: 1
usb0: host=1-1.2
vmgenid: dfec8e3b-d391-40cb-8983-b4938461b79a

Файлы конфигурации ВМ используют простой формат: разделенные двоеточиями пары ключ/значение (пустые строки игнорируются, строки, начинающиеся с символа #, рассматриваются как комментарии и также игнорируются):

OPTION: value

Для применения изменений, которые напрямую вносились в файл конфигурации, необходимо перезапустить ВМ. По этой причине рекомендуется использовать команду qm для генерации и изменения этих файлов, либо выполнять такие действия в веб-интерфейсе.

При создании снимка ВМ, конфигурация ВМ во время снимка, сохраняется в этом же файле конфигурации в отдельном разделе. Например, после создания снимка «snapshot» файл конфигурации будет выглядеть следующим образом:

bootdisk: scsi0
…
parent: snapshot
…
vmgenid: dfec8e3b-d391-40cb-8983-b4938461b79a

[snapshot]
boot: order=scsi0;sata2;net0
cores: 1
memory: 2048
meta: creation-qemu=7.1.0,ctime=1671708251
name: NewVM
net0: virtio=3E:E9:24:FF:85:D9,bridge=vmbr0,firewall=1
numa: 0
ostype: l26
runningcpu: kvm64,enforce,+kvm_pv_eoi,+kvm_pv_unhalt,+lahf_lm,+sep
runningmachine: pc-i440fx-7.1+pve0
sata2: local-iso:iso/slinux-10.1-x86_64.iso,media=cdrom,size=4586146K
scsi0: local:100/vm-100-disk-0.qcow2,size=42G
scsihw: virtio-scsi-pci
smbios1: uuid=ee9db068-5427-4934-bf7a-5895c377b5af
snaptime: 1671724448
sockets: 1
usb0: host=1-1.2
vmgenid: dfec8e3b-d391-40cb-8983-b4938461b79a
vmstate: local:100/vm-100-state-first.raw

Свойство parent при этом используется для хранения родительских/дочерних отношений между снимками, а snaptime — это отметка времени создания снимка (эпоха Unix).

⁠Глава 43. Создание и настройка контейнера LXC [Черновик]

⁠43.1. Создание контейнера в графическом интерфейсе [Черновик]

Перед созданием контейнера можно загрузить шаблоны LXC в хранилище. Это удобно делать в веб-интерфейсе (см. Управление ISO-образами и шаблонами LXC).

Для создания контейнера необходимо нажать кнопку Создать контейнер, расположенную в правом верхнем углу веб-интерфейса PVE:

Будет запущен диалог Создать: Контейнер LXC, который предоставляет графический интерфейс для настройки контейнера.

На первой вкладке Общее необходимо указать:

Узел — узел назначения для данного контейнера;

CT ID — идентификатор контейнера в численном выражении;

Имя хоста — алфавитно-цифровая строка названия контейнера;

Непривилегированный контейнер — определяет, как будут запускаться процессы контейнера (если процессам внутри контейнера не нужны полномочия администратора, то необходимо снять отметку с этого пункта);

Вложенность — определяет, возможность запуска контейнер в контейнере;

Пул ресурсов — логическая группа контейнеров. Чтобы иметь возможность выбора, пул должен быть предварительно создан;

Пароль — пароль для данного контейнера;

Открытый SSH ключ — ssh ключ.

На вкладке Шаблон следует выбрать:

Хранилище — хранилище в котором хранятся шаблоны LXC

Шаблон — шаблон контейнера.

На вкладке Диски определяется хранилище, где будут храниться диски контейнера. Здесь также можно определить размер виртуальных дисков (не следует выбирать размер диска менее 4 ГБ):

На вкладке Процессор определяется количество ядер процессора, которые будут выделены контейнеру:

На вкладке Память настраиваются:

Память (MiB) — выделяемая память в мегабайтах;

Подкачка (MiB) — выделяемое пространство подкачки в мегабайтах.

Вкладка Сеть включает следующие настройки:

Имя — определяет, как будет именоваться виртуальный сетевой интерфейс внутри контейнера (по умолчанию eth0);

MAC-адрес — можно задать определенный MAC-адрес, необходимый для приложения в данном контейнере (по умолчанию, все MAC-адреса для виртуальных сетевых интерфейсов назначаются автоматически);

Сетевой мост — выбор виртуального моста, к которому будет подключаться данный интерфейс (по умолчанию vmbr0);

Тег виртуальной ЛС — применяется для установки идентификатора VLAN для данного виртуального интерфейса;

Сетевой экран — поддержка межсетевого экрана (если пункт отмечен, применяются правила хоста);

IPv4/IPv6 — можно настроить и IPv4, и IPv6 для виртуального сетевого интерфейса. IP-адреса можно устанавливать вручную или разрешить получать от DHCP-сервера для автоматического назначения IP. IP-адрес должен вводиться в нотации CIDR (например, 192.168.0.30/24).

Вкладка DNS содержит настройки:

Домен DNS — имя домена (по умолчанию используются параметры хост системы);

Серверы DNS — IP-адреса серверов DNS (по умолчанию используются параметры хост системы).

Во вкладке Подтверждение отображаются все введенные или выбранные значения для данного контейнера:

Для создания контейнера следует нажать кнопку Готово. Если необходимо внести изменения в параметры контейнера, можно перейти по вкладкам назад.

Если отметить пункт Запуск после создания контейнер будет запущен сразу после создания.

После нажатия кнопки Готово во вкладке Подтверждение, диалог настройки закрывается и в браузере открывается новое окно, которое предлагает возможность наблюдать за построением PVE контейнера LXC из шаблона:

⁠43.2. Создание контейнера из шаблона в командной строке [Черновик]

Контейнер может быть создан из шаблона в командной строке хоста PVE.

Следующий bash-сценарий иллюстрирует применение команды pct для создания контейнера:

#!/bin/bash
hostname="pve02"
vmid="104"
template_path="/var/lib/vz/template/cache"
storage="local"
description="alt-p10"
template="alt-p10-rootfs-systemd-x86_64.tar.xz"
ip="192.168.0.93/24"
nameserver="8.8.8.8"
ram="1024"
rootpw="password"
rootfs="4"
gateway="192.168.0.1"
bridge="vmbr0"
if="eth0"
#### Execute pct create using variable substitution ####
pct create $vmid \
  $template_path/$template \
  -description $description \
  -rootfs $rootfs \
  -hostname $hostname \
  -memory $ram \
  -nameserver $nameserver \
  -storage $storage \
  -password $rootpw \
  -net0 name=$if,ip=$ip,gw=$gateway,bridge=$bridge

⁠43.3. Изменение настроек контейнера [Черновик]

Изменения в настройки контейнера можно вносить и после его создания. При этом изменения сразу же вступают в действие, без необходимости перезагрузки контейнера.

Есть три способа, которыми можно регулировать выделяемые контейнеру ресурсы:

веб-интерфейс PVE;

командная строка;

изменение файла конфигурации.

⁠43.3.1. Изменение настроек в веб-интерфейсе [Черновик]

В большинстве случаев изменение настроек контейнера и добавление виртуальных устройств может быть выполнено в веб-интерфейсе.

Для изменения настроек контейнера можно использовать вкладки:

Ресурсы (оперативная память, подкачка, количество ядер ЦПУ, размер диска);

Сеть;

DNS;

Параметры.

Для редактирования ресурсов следует выполнить следующие действия:

В режиме просмотра по серверам выбрать контейнер;

Перейти на вкладку Ресурсы;

Выбрать элемент для изменения: Память, Подкачка или Ядра, и нажать кнопку Редактировать;

В открывшемся диалоговом окне ввести нужные значения и нажать кнопку OK.

Если необходимо изменить размер диска контейнера, например, увеличить до 18 ГБ вместо предварительно созданного 8 ГБ, нужно выбрать элемент Корневой диск, нажать кнопку Действие над томом → Изменить размер, в открывшемся диалоговом окне ввести значение увеличения размера диска и нажать кнопку Изменить размер диска:

Для перемещения образа диска в другое хранилище, нужно выбрать элемент Корневой диск, нажать кнопку Действие над томом → Переместить хранилище, в открывшемся окне в выпадающем меню Целевое хранилище выбрать хранилище-получатель, отметить, если это необходимо, пункт Удалить источник для удаления образа диска из исходного хранилища и нажать кнопку Переместить том:

Для изменения сетевых настроек контейнера необходимо:

В режиме просмотра по серверам выбрать контейнер;

Перейти на вкладку Сеть. На экране отобразятся все настроенные для контейнера виртуальные сетевые интерфейсы:

Выбрать интерфейс и нажать кнопку Редактировать;

После внесения изменений нажать кнопку OK:

На вкладке Параметры можно отредактировать разные настройки контейнера, например, Режим консоли:

tty — открывать соединение с одним из доступных tty-устройств (по умолчанию);

shell — вызывать оболочку внутри контейнера (без входа в систему);

/dev/console — подключаться к /dev/console.

Примечание [Черновик]

В случаях, когда изменение не может быть выполнено в горячем режиме, оно будет зарегистрировано как ожидающее изменение (отображается красным цветом). Такие изменения будут применены только после перезапуска контейнера.

⁠43.3.2. Настройка ресурсов в командной строке [Черновик]

Если веб-интерфейс PVE недоступен, можно управлять контейнером в командной строке (либо через сеанс SSH, либо из консоли noVNC, или зарегистрировавшись на физическом хосте).

pct — утилита управления контейнерами LXC в PVE. Чтобы просмотреть доступные для контейнеров команды PVE, можно выполнить следующую команду:

# pct help

Формат использования команды для изменения ресурсов контейнера:

# pct set <ct_id> [options]

Например, изменить IP-адрес контейнера #101:

# pct set 101 -net0 name=eth0,bridge=vmbr0,ip=192.168.0.17/24,gw=192.168.0.1

Изменить количество выделенной контейнеру памяти:

# pct set <ct_id> -memory <int_value>

Команда изменения размера диска контейнера:

# pct set <ct_id> -rootfs <volume>,size=<int_value for GB>

Например, изменить размер диска контейнера #101 до 10 ГБ:

# pct set 101 -rootfs local:101/vm-101-disk-0.raw,size=10G

Показать конфигурацию контейнера:

# pct config <ct_id>

Разблокировка заблокированного контейнера:

# pct unlock <ct_id>

Список контейнеров LXC данного узла:

# pct list
VMID       Status     Lock         Name
101        running                 newLXC
102        stopped                 pve01
103        stopped                 LXC2

Запуск и остановка контейнера LXC из командной строки:

# pct start <ct_id>
# pct stop <ct_id>

⁠43.3.3. Настройка ресурсов прямым изменением [Черновик]

В PVE файлы конфигурации контейнеров находятся в каталоге /etc/pve/lxc, а файлы конфигураций ВМ — в /etc/pve/qemu-server/.

У контейнеров LXC есть большое число параметров, которые не могут быть изменены в веб-интерфейсе или с помощью утилиты pct. Эти параметры могут быть настроены только путём внесения изменений в файл конфигурации с последующим перезапуском контейнера.

Пример файла конфигурации контейнера /etc/pve/lxc/101.conf:

arch: amd64
cmode: shell
console: 0
cores: 1
features: nesting=1
hostname: newLXC
memory: 512
net0: name=eth0,bridge=vmbr0,firewall=1,gw=192.168.0.1,hwaddr=C6:B0:3E:85:03:C9,ip=192.168.0.30/24,type=veth
ostype: altlinux
rootfs: local:101/vm-101-disk-0.raw,size=8G
swap: 512
tty: 3
unprivileged: 1

⁠43.4. Запуск и остановка контейнеров [Черновик]

⁠43.4.1. Изменение состояния контейнера в веб-интерфейсе [Черновик]

Для запуска контейнера следует выбрать его в левой панели; его иконка должна быть серого цвета, обозначая, что контейнер не запущен.

Запустить контейнер можно, выбрав в контекстном меню контейнера пункт Запуск:

либо нажав кнопку Запуск :

Запущенный контейнер будет обозначен зеленой стрелкой на значке контейнера.

Для запущенного контейнера доступны следующие действия:

Отключить — остановка контейнера;

Остановка — остановка контейнера, путем прерывания его работы;

Перезагрузить — перезапуск контейнера.

⁠43.4.2. Изменение состояния контейнера в командной строке [Черновик]

Состоянием контейнера можно управлять из командной строки PVE (либо через сеанс SSH, либо из консоли noVNC, или зарегистрировавшись на физическом хосте).

Для запуска контейнера с VM ID 102 необходимо ввести команду:

# pct start 102

Этот же контейнер может быть остановлен при помощи команды:

# pct stop 102

⁠43.5. Доступ к LXC контейнеру [Черновик]

Способы доступа к LXC контейнеру:

консоль: noVNC, SPICE или xterm.js;

SSH;

интерфейс командной строки PVE.

Можно получить доступ к контейнеру из веб-интерфейса при помощи консоли noVNC. Это почти визуализированный удаленный доступ к экземпляру.

Для доступа к запущенному контейнеру в консоли следует выбрать в веб-интерфейсе нужный контейнер, а затем нажать кнопку Консоль и в выпадающем меню выбрать нужную консоль:

Консоль также можно запустить, выбрав вкладку Консоль для контейнера:

Одной из функций LXC контейнера является возможность прямого доступа к оболочке контейнера через командную строку его узла хоста. Команда для доступа к оболочке контейнера LXC:

# pct enter <ct_id>

Данная команда предоставляет прямой доступ на ввод команд внутри указанного контейнера:

[root@pve01 ~]# pct enter 105
[root@newLXC ~]#

Таким образом был получен доступ к контейнеру LXС с именем newLXC на узле pve01. При этом для входа в контейнер не был запрошен пароль. Так как контейнер работает под пользователем root, можно выполнять внутри этого контейнера любые задачи. Завершив их, можно просто набрать exit.

Предупреждение [Черновик]

При возникновении ошибки:

Insecure $ENV{ENV} while running with...

необходимо закомментировать строку:

ENV=$HOME/.bashrc

в файле /root/.bashrc.

Команды можно выполнять внутри контейнера без реального входа в такой контейнер:

# pct exec <ct_id> -- <command>

Например, создать каталог внутри контейнера и проверить, что этот каталог был создан:

# pct exec 105 mkdir /home/demouser
# pct exec 105 ls /home
demouser

Для выполнения внутри контейнера команды с параметрами необходимо изменить команду pct, добавив -- после идентификатора контейнера:

# pct exec 105 -- df -H /
Файловая система Размер Использовано  Дост Использовано% Cмонтировано в
/dev/loop0         8,4G         516M  7,4G            7% /

⁠Глава 44. Миграция ВМ и контейнеров [Черновик]

В случае, когда PVE управляет не одним физическим узлом, а кластером физических узлов, должна обеспечиваться возможность миграции ВМ с одного физического узла на другой. Миграция представляет собой заморозку состояния ВМ на одном узле, перенос данных и конфигурации на другой узел, и разморозку состояния ВМ на новом месте. Возможные сценарии, при которых может возникнуть необходимость миграции:

отказ физического узла;

необходимость перезагрузки узла после применения обновлений или обслуживания технических средств;

перемещение ВМ с узла с низкой производительностью на высокопроизводительный узел.

Есть два механизма миграции:

онлайн-миграция (Live Migration);

офлайн-миграция.

Примечание [Черновик]

Миграция контейнеров без перезапуска в настоящее время не поддерживается.

При выполнении миграции запущенного контейнера, контейнер будет выключен, перемещен, а затем снова запущен на целевом узле. Поскольку контейнеры легковесные, то это обычно приводит к простою в несколько сотен миллисекунд.

Для возможности онлайн-миграции ВМ должны выполняться следующие условия:

у ВМ нет локальных ресурсов;

хосты находятся в одном кластере PVE;

между хостами имеется надежное сетевое соединение;

на целевом хосте установлены такие же или более высокие версии пакетов PVE.

Миграция в реальном времени обеспечивает минимальное время простоя ВМ, но, в то же время занимает больше времени. При миграции в реальном времени (без выключения питания) процесс должен скопировать все содержимое оперативной памяти ВМ на новый узел. Чем больше объем выделенной ВМ памяти, тем дольше будет происходить ее перенос.

Если образ виртуального диска ВМ хранится в локальном хранилище узла PVE миграция в реальном времени не возможна. В этом случае ВМ должна быть выключена перед миграцией. В процессе миграции ВМ, хранящейся локально, PVE скопирует виртуальный диск на узел получателя с применением rsync.

Запустить процесс миграции можно как в графическом интерфейсе PVE, так в интерфейсе командной строки.

⁠44.1. Миграция с применением графического интерфейса [Черновик]

Для миграции ВМ или контейнера необходимо выполнить следующие шаги:

Выбрать ВМ или контейнер для миграции и нажать кнопку Миграция:

В открывшемся диалоговом окне выбрать узел назначения, на который будет осуществляться миграция, и нажать кнопку Миграция.

Примечание [Черновик]

Режим миграции будет выбран автоматически, в зависимости от состояния ВМ/контейнера (запущен/остановлен).

Миграция контейнера с перезапуском:

Миграция ВМ Онлайн:

Миграция ВМ Офлайн (миграция диска из локального хранилища может занять много времени):

⁠44.2. Миграция с применением командной строки [Черновик]

Чтобы осуществить миграцию ВМ необходимо выполнить следующую команду:

# qm migrate <vmid> <target> [OPTIONS]

Для осуществления миграции ВМ в реальном времени следует использовать параметр --online.

Чтобы осуществить миграцию контейнера необходимо выполнить следующую команду:

# pct migrate <ctid> <target> [OPTIONS]

Поскольку миграция контейнеров в реальном времени не возможна, можно выполнить миграцию работающего контейнера с перезапуском, добавив параметр --restart. Например:

# pct migrate 101 pve02 --restart

⁠44.3. Миграция ВМ из внешнего гипервизора [Черновик]

Экспорт ВМ из внешнего гипервизора обычно заключается в переносе одного или нескольких образов дисков с файлом конфигурации, описывающим настройки ВМ (ОЗУ, количество ядер). Образы дисков могут быть в формате vmdk (VMware или VirtualBox), или qcow2 (KVM). Наиболее популярным форматом файла конфигурации для экспорта ВМ является стандарт OVF.

Примечание [Черновик]

Для ВМ Windows необходимо также установить паравиртуализированные драйверы Windows.

⁠44.3.1. Миграция KVM ВМ в PVE [Черновик]

В данном разделе рассмотрен процесс миграции ВМ из OpenNebula в PVE.

Выключить ВМ на хосте источнике. Найти путь до образа жесткого диска, который используется в ВМ (в данной команде 14 — id образа диска ВМ):

$ oneimage show 14
IMAGE 14 INFORMATION
ID             : 14
NAME           : ALT Linux p9
USER           : oneadmin
GROUP          : oneadmin
LOCK           : None
DATASTORE      : default
TYPE           : OS
REGISTER TIME  : 04/30 11:00:42
PERSISTENT     : Yes
SOURCE         : /var/lib/one//datastores/1/f811a893808a9d8f5bf1c029b3c7e905
FSTYPE         : save_as
SIZE           : 12G
STATE          : used
RUNNING_VMS    : 1

PERMISSIONS
OWNER          : um-
GROUP          : ---
OTHER          : ---

IMAGE TEMPLATE
DEV_PREFIX="vd"
DRIVER="qcow2"
SAVED_DISK_ID="0"
SAVED_IMAGE_ID="7"
SAVED_VM_ID="46"
SAVE_AS_HOT="YES"

где /var/lib/one//datastores/1/f811a893808a9d8f5bf1c029b3c7e905 — адрес образа жёсткого диска ВМ.

Скопировать данный образ на хост назначения с PVE.

Примечание [Черновик]

В OpenNebula любой диск ВМ можно экспортировать в новый образ (если ВМ находится в состояниях RUNNING, POWEROFF или SUSPENDED):

$ onevm disk-saveas <vmid> <diskid> <img_name>  [--type type --snapshot snapshot]

где --type <type> — тип нового образа (по умолчанию raw); --snapshot <snapshot_id> — снимок диска, который будет использован в качестве источника нового образа (по умолчанию текущее состояние диска).

Экспорт диска ВМ:

$ onevm disk-saveas 125 0 test.qcow2
Image ID: 44

Информация об образе диска ВМ:

$ oneimage show 44
MAGE 44 INFORMATION
ID             : 44
NAME           : test.qcow2
USER           : oneadmin
GROUP          : oneadmin
LOCK           : None
DATASTORE      : default
TYPE           : OS
REGISTER TIME  : 07/12 21:34:42
PERSISTENT     : No
SOURCE         : /var/lib/one//datastores/1/9d6336a88d6ab62ea1dce65d81e55881
FSTYPE         : save_as
SIZE           : 12G
STATE          : rdy
RUNNING_VMS    : 0

PERMISSIONS
OWNER          : um-
GROUP          : ---
OTHER          : ---

IMAGE TEMPLATE
DEV_PREFIX="vd"
DRIVER="qcow2"
SAVED_DISK_ID="0"
SAVED_IMAGE_ID="14"
SAVED_VM_ID="125"
SAVE_AS_HOT="YES"

VIRTUAL MACHINES

Информация о диске:

$ qemu-img info /var/lib/one//datastores/1/9d6336a88d6ab62ea1dce65d81e55881
image: /var/lib/one//datastores/1/9d6336a88d6ab62ea1dce65d81e55881
file format: qcow2
virtual size: 12 GiB (12884901888 bytes)
disk size: 3.52 GiB
cluster_size: 65536
Format specific information:
    compat: 1.1
    compression type: zlib
    lazy refcounts: false
    refcount bits: 16
    corrupt: false
    extended l2: false

На хосте назначения подключить образ диска к ВМ (рассмотрено подключение на основе Directory Storage), выполнив следующие действия:

Создать новую ВМ в веб-интерфейсе PVE или командой:

# qm create 120 --bootdisk scsi0 --net0 virtio,bridge=vmbr0 --scsihw virtio-scsi-pci

Чтобы использовать в PVE образ диска в формате qcow2 (полученный из другой системы KVM, либо преобразованный из другого формата), его необходимо импортировать. Команда импорта:

# qm importdisk <vmid> <source> <storage> [OPTIONS]

Импорт диска f811a893808a9d8f5bf1c029b3c7e905 в хранилище local, для ВМ с ID 120 (подразумевается, что образ импортируемого диска находится в каталоге, из которого происходит выполнение команды):

# qm importdisk 120 f811a893808a9d8f5bf1c029b3c7e905 local --format qcow2
importing disk 'f811a893808a9d8f5bf1c029b3c7e905' to VM 120 ...
…
Successfully imported disk as 'unused0:local:120/vm-120-disk-0.qcow2'

Привязать диск к ВМ.

В веб-интерфейсе PVE: перейти на вкладку Оборудование, созданной ВМ. В списке устройств будет показан неиспользуемый жесткий диск, выбрать его, выбрать режим SCSI и нажать кнопку Добавить:

В командной строке:

# qm set 120 --scsi0 local:120/vm-120-disk-0.qcow2
update VM 120: -scsi0 local:120/vm-120-disk-0.qcow2

Донастроить параметры процессора, памяти, сетевых интерфейсов, порядок загрузки. Включить ВМ.

⁠44.3.2. Миграция ВМ из VMware в PVE [Черновик]

В данном разделе рассмотрена миграция ВМ из VMware в PVE, на примере ВМ с Windows 7.

Подготовить ОС Windows. ОС Windows должна загружаться с дисков в режиме IDE.

Подготовить образ диска. Необходимо преобразовать образ диска в тип single growable virtual disk. Сделать это можно с помощью утилиты vmware-vdiskmanager (поставляется в комплекте с VMWare Workstation). Для преобразования образа перейти в папку с образами дисков и выполнить команду:

"C:\Program Files\VMware\VMware Server\vmware-vdiskmanager" -r win7.vmdk -t 0 win7-pve.vmdk

где win7.vmdk — файл с образом диска.

На хосте назначения подключить образ диска к ВМ одним из трёх указанных способов:

Подключение образа диска к ВМ на основе Directory Storage:

в веб-интерфейсе PVE создать ВМ KVM;

скопировать преобразованный образ win7-pve.vmdk в каталог с образами ВМ /var/lib/vz/images/VMID, где VMID — VMID, созданной виртуальной машины (можно воспользоваться WinSCP);

преобразовать файл win7-pve.vmdk в qemu формат:

# qemu-img convert -f vmdk win7-pve.vmdk -O qcow2 win7-pve.qcow2

добавить в конфигурационный файл ВМ (/etc/pve/nodes/pve02/qemu-server/VMID.conf) строку:

unused0: local:100/win7-pve.qcow2

где 100 — VMID, а local — хранилище в PVE.

перейти в веб-интерфейсе PVE на вкладку Оборудование, созданной ВМ. В списке устройств будет показан неиспользуемый жесткий диск, выбрать его, выбрать режим IDE и нажать кнопку Добавить:

Подключение образа диска к ВМ на основе LVM Storage:

в веб-интерфейсе PVE создать ВМ с диском большего размера, чем диск в образе vmdk. Посмотреть размер диска в образе можно командой:

# qemu-img info win7-pve.vmdk
image: win7-pve.vmdk
file format: vmdk
virtual size: 127G (136365211648 bytes)
disk size: 20.7 GiB
cluster_size: 65536
Format specific information:
    cid: 3274246794
    parent cid: 4294967295
    create type: streamOptimized
    extents:
        [0]:
            compressed: true
            virtual size: 136365211648
            filename: win7-pve.vmdk
            cluster size: 65536
            format:

В данном случае необходимо создать диск в режиме IDE размером не меньше 127GB.

скопировать преобразованный образ win7-pve.vmdk в каталог с образами ВМ /var/lib/vz/images/VMID, где VMID — VMID, созданной виртуальной машины (можно воспользоваться WinSCP);

перейти в консоль ноды кластера и посмотреть, как называется LVM диск созданной ВМ (диск должен быть в статусе ACTIVE):

# lvscan
  ACTIVE            '/dev/sharedsv/vm-101-disk-1' [130,00 GiB] inherit

сконвертировать образ vdmk в raw формат непосредственно на LVM-устройство:

# qemu-img convert -f vmdk win7-pve.vmdk -O raw /dev/sharedsv/vm-101-disk-1

Подключение образа диска к ВМ на основе CEPH Storage:

в веб-интерфейсе PVE создать ВМ с диском большего размера, чем диск в образе vmdk. Посмотреть размер диска в образе можно командой:

# qemu-img info win7-pve.vmdk

скопировать преобразованный образ win7-pve.vmdk в каталог с образами ВМ /var/lib/vz/images/VMID, где VMID — VMID, созданной ВМ;

перейти в консоль ноды кластера. Отобразить образ из пула CEPH в локальное блочное устройство:

# rbd map rbd01/vm-100-disk-1
/dev/rbd0

Примечание [Черновик]

Имя нужного пула можно посмотреть на вкладке Центр обработки данных → Хранилище → rbd-storage.

сконвертировать образ vdmk в raw формат непосредственно на отображенное устройство:

# qemu-img convert -f vmdk win7-pve.vmdk -O raw /dev/rbd0

Адаптация новой ВМ:

Проверить режим работы жесткого диска: для Windows — IDE, для Linux — SCSI.

Установить режим VIRTIO для жесткого диска (режим VIRTIO также доступен для Windows, но сразу загрузиться в этом режиме система не может):

загрузиться сначала в режиме IDE и выключить машину, добавить еще один диск в режиме VIRTIO и включить машину. Windows установит нужные драйвера;

выключить машину;

изменить режим основного диска с IDE на VIRTIO;

загрузить систему, которая должна применить VIRTIO драйвер и выдать сообщение, что драйвер от RedHat.

Включить ВМ. Первое включение займет какое-то время (будут загружены необходимые драйвера).

⁠44.3.3. Пример импорта Windows OVF [Черновик]

Скопировать файлы ovf и vmdk на хост PVE. Создать новую ВМ, используя имя ВМ, информацию о ЦП и памяти из файла конфигурации OVF, и импортировать диски в хранилище local-lvm:

# qm importovf 999 WinDev2212Eval.ovf local-lvm

Примечание [Черновик]

Сеть необходимо настроить вручную.

⁠Глава 45. Клонирование ВМ [Черновик]

Простой способ развернуть множество ВМ одного типа — создать клон существующей ВМ.

Существует два вида клонов:

Полный клон — результатом такой копии является независимая ВМ. Новая ВМ не имеет общих ресурсов с оригинальной ВМ. При таком клонировании можно выбрать целевое хранилище, поэтому его можно использовать для переноса ВМ в совершенно другое хранилище. При создании клона можно изменить формат образа диска, если драйвер хранилища поддерживает несколько форматов.

Связанный клон — такой клон является перезаписываемой копией, исходное содержимое которой совпадает с исходными данными. Создание связанного клона происходит практически мгновенно и изначально не требует дополнительного места. Клоны называются связанными, потому что новый образ диска ссылается на оригинал. Немодифицированные блоки данных считываются из исходного образа, а изменения записываются (и затем считываются) из нового местоположения (исходный образ при этом должен работать в режиме только для чтения). С помощью PVE можно преобразовать любую ВМ в шаблон. Такие шаблоны впоследствии могут быть использованы для эффективного создания связанных клонов. При создании связанных клонов невозможно изменить целевое хранилище.

Примечание [Черновик]

При создании полного клона необходимо прочитать и скопировать все данные образа ВМ. Это обычно намного медленнее, чем создание связанного клона.

Весь функционал клонирования доступен в веб-интерфейсе PVE.

Для клонирования ВМ необходимо выполнить следующие шаги:

Создать ВМ с необходимыми настройками (все создаваемые из такой ВМ клоны будут иметь идентичные настройки) или воспользоваться уже существующей ВМ;

В контекстном меню ВМ выбрать пункт Клонировать:

Откроется диалоговое окно, со следующими полями:

Целевой узел — узел получатель клонируемой ВМ (для создания новой ВМ на другом узле необходимо чтобы ВМ находилась в общем хранилище и это хранилище должно быть доступно на целевом узле);

VM ID — идентификатор ВМ;

Имя — название новой ВМ;

Пул ресурсов — пул, к которому будет относиться ВМ;

Режим — метод клонирования (если клонирование происходит из шаблона ВМ). Доступны значения: Полное клонирование и Связанная копия;

Снимок — снимок из которого будет создаваться клон (если снимки существуют);

Целевое хранилище — хранилище для клонируемых виртуальных дисков;

Формат — формат образа виртуального диска.

Для запуска процесса клонирования необходимо нажать кнопку Клонировать.

Некоторые типы хранилищ позволяют копировать определенный снимок ВМ, который по умолчанию соответствует текущим данным ВМ. Клон ВМ никогда не содержит дополнительных снимков оригинальной ВМ.

ВМ можно преобразовать в шаблон. Такие шаблоны доступны только для чтения, и их можно использовать для создания связанных клонов.

Для преобразования ВМ в шаблон необходимо в контекстном меню ВМ выбрать пункт Сохранить как шаблон и в ответ на запрос на подтверждения, нажать кнопку Да.

Примечание [Черновик]

Запустить шаблоны невозможно, так как это приведет к изменению образов дисков. Если необходимо изменить шаблон, следует создать связанный клон и изменить его.

⁠Глава 46. Резервное копирование (Backup) [Черновик]

PVE предоставляет полностью интегрированное решение, использующее возможности всех хранилищ и всех типов гостевых систем.

Резервные копии PVE представляют собой полные резервные копии — они содержат конфигурацию ВМ/CT и все данные. Резервное копирование может быть запущено через графический интерфейс или с помощью утилиты командной строки vzdump.

⁠46.1. Алгоритмы резервного копирования [Черновик]

Инструментарий для создания резервных копий PVE поддерживает следующие механизмы сжатия:

Сжатие LZO — алгоритм сжатия данных без потерь (реализуется в PVE утилитой lzop). Особенностью этого алгоритма является скоростная распаковка. Следовательно, любая резервная копия, созданная с помощью этого алгоритма, может при необходимости быть развернута за минимальное время.

Сжатие GZIP — при использовании этого алгоритма резервная копия будет «на лету» сжиматься утилитой GNU Zip, использующей мощный алгоритм Deflate. Упор делается на максимальное сжатие данных, что позволяет сократить место на диске, занимаемое резервными копиями. Главным отличием от LZO является то, что процедуры компрессии/декомпрессии занимают достаточно большое количество времени.

Сжатие Zstandard (zstd) — алгоритм сжатия данных без потерь. В настоящее время Zstandard является самым быстрым из этих трех алгоритмов. Многопоточность — еще одно преимущество zstd перед lzo и gzip.

⁠46.2. Режимы резервного копирования [Черновик]

Режимы резервного копирования для ВМ:

режим остановки (Stop) — обеспечивает самую высокую согласованность резервного копирования, но требует полного выключения ВМ. В этом режиме ВМ отправляется команда на штатное выключение, после остановки выполняется резервное копирование и затем отдается команда на включение ВМ. Количество ошибок при таком подходе минимально и чаще всего сводится к нулю;

режим ожидания (Suspend) — ВМ временно «замораживает» свое состояние, до окончания процесса резервного копирования. Содержимое оперативной памяти не стирается, что позволяет продолжить работу ровно с той точки, на которой работа была приостановлена. Сервер простаивает во время копирования информации, но при этом нет необходимости выключения/включения ВМ, что достаточно критично для некоторых сервисов;

режим снимка (Snapshot) — обеспечивает мимнимальное время простоя ВМ (использование этого механизма не прерывает работу ВМ), но имеет два очень серьезных недостатка — могут возникать проблемы из-за блокировок файлов операционной системой и самая низкая скорость создания. Резервные копии, созданные этим методом, надо всегда проверять в тестовой среде.

Примечание [Черновик]

Live резервное копирование PVE обеспечивает семантику, подобную моментальным снимкам, для любого типа хранилища (не требуется, чтобы базовое хранилище поддерживало снимки). Так как резервное копирование выполняется с помощью фонового процесса QEMU, остановленная ВМ на короткое время будет отображаться как работающая пока QEMU читает диски ВМ. Однако сама ВМ не загружается, читаются только ее диски.

Режимы резервного копирования для контейнеров:

режим остановки (Stop) — остановка контейнера на время резервного копирования. Это может привести к длительному простою;

режим приостановки (Suspend) — этот режим использует rsync для копирования данных контейнера во временную папку (опция --tmpdir). Затем контейнер приостанавливается и rsync копирует измененные файлы. После этого контейнер возобновляет свою работу. Это приводит к минимальному времени простоя, но требует дополнительное пространство для хранения копии контейнера. Когда контейнер находится в локальной файловой системе и хранилищем резервной копии является сервер NFS, необходимо установить --tmpdir также и на локальную файловую систему, так как это приведет к повышению производительности. Использование локального tmpdir также необходимо, если требуется сделать резервную копию локального контейнера с использованием списков контроля доступа (ACL) в режиме ожидания, если хранилище резервных копий — сервер NFS;

режим снимка (Snapshot) — этот режим использует возможности мгновенных снимков основного хранилища. Сначала, контейнер будет приостановлен для обеспечения согласованности данных, будет сделан временный снимок томов контейнера, а содержимое снимка будет заархивировано в tar-файле, далее временный снимок удаляется. Для возможности использования этого режима необходимо, чтобы тома резервных копий находились в хранилищах, поддерживающих моментальные снимки.

⁠46.3. Хранилище резервных копий [Черновик]

Перед тем, как настроить резервное копирование, необходимо определить хранилище резервных копий. Хранилище резервных копий должно быть хранилищем уровня файлов, так как резервные копии хранятся в виде обычных файлов. В большинстве случаев можно использовать сервер NFS для хранения резервных копий.

Если хранилище будет использоваться только для резервных копий, следует выставить соответствующие настройки:

На вкладке Хранение резервной копии можно указать параметры хранения резервных копий:

Доступны следующие варианты хранения резервных копий (в скобках указаны параметры опции prune-backups команды vzdump):

Хранить все резервные копии (keep-all=<1|0>) — хранить все резервные копии (если отмечен этот пункт, другие параметры не могут быть установлены);

Хранить последние резервные копии (keep-last=<N>) — хранить <N> последних резервных копий;

Хранить ежечасные резервные копии (keep-hourly=<N>) — хранить резервные копии за последние <N> часов (если за один час создается более одной резервной копии, сохраняется только последняя);

Хранить ежедневные резервные копии (keep-daily=<N>) — хранить резервные копии за последние <N> дней (если за один день создается более одной резервной копии, сохраняется только самая последняя);

Хранить еженедельные (keep-weekly=<N>) — хранить резервные копии за последние <N> недель (если за одну неделю создается более одной резервной копии, сохраняется только самая последняя);

Хранить ежемесячные резервные копии (keep-monthly=<N>) — хранить резервные копии за последние <N> месяцев (если за один месяц создается более одной резервной копии, сохраняется только самая последняя);

Хранить ежегодные резервные копии (keep-yearly=<N>) — хранить резервные копии за последние <N> лет (если за один год создается более одной резервной копии, сохраняется только самая последняя);

Макс. кол-во защищённых (параметр хранилища: max-protected-backups) — количество защищённых резервных копий на гостевую систему, которое разрешено в хранилище. Для указания неограниченного количества используется значение -1. Значение по умолчанию: неограниченно для пользователей с привилегией Datastore.Allocate и 5 для других пользователей.

Варианты хранения обрабатываются в указанном выше порядке. Каждый вариант распространяется только на резервное копирование в определенный период времени.

Пример указания параметров хранения резервных копий при создании задания:

# vzdump 777 --prune-backups keep-last=3,keep-daily=13,keep-yearly=9

Несмотря на то что можно передавать параметры хранения резервных копий непосредственно при создании задания, рекомендуется настроить эти параметры на уровне хранилища.

⁠46.4. Резервное копирование по расписанию [Черновик]

Задания для резервного копирования можно запланировать так, чтобы они выполнялись автоматически в определенные дни и часы для конкретных узлов и гостевых систем. Конфигурирование заданий для создания резервных копий выполняется на уровне центра обработки данных в веб-интерфейсе, при этом будет создана запись cron в /etc/cron.d/vzdump.

⁠46.5. Формат расписания [Черновик]

Для настройки расписания используются события календаря системного времени (см. man 7 systemd.time).

Используется следующий формат:

[WEEKDAY] [[YEARS-]MONTHS-DAYS] [HOURS:MINUTES[:SECONDS]]

WEEKDAY — дни недели, указанные в трёх буквенном варианте на английском: mon,tue,wed,thu,fri,sat и sun. Можно использовать несколько дней в виде списка, разделённого запятыми. Можно задать диапазон дней, указав день начала и окончания, разделённые двумя точками («..»), например, mon..fri. Форматы можно смешивать. Если опущено, подразумевается «*».

Формат времени — время указывается в виде списка интервалов часов и минут. Часы и минуты разделяются знаком «:». И часы, и минуты могут быть списком и диапазонами значений в том же формате, что и дни недели. Можно не указывать часы, если они не нужны. В этом случае подразумевается «*». Допустимый диапазон значений: 0–23 для часов и 0–59 для минут.

⁠

Таблица 46.1. Специальные значения [Черновик]

Расписание

Значение

Синтаксис

minutely

Каждую минуту

*-*-* *:*:00

hourly

Каждый час

*-*-* *:00:00

daily

Раз в день

*-*-* 00:00:00

weekly

Раз в неделю

mon *-*-* 00:00:00

monthly

Раз в месяц

*-*-01 00:00:00

yearly или annually

Раз в год

*-01-01 00:00:00

quarterly

Раз в квартал

*-01,04,07,10-01 00:00:00

semiannually или semi-annually

Раз в полгода

*-01,07-01 00:00:00

⁠

Таблица 46.2. Примеры [Черновик]

Расписание

Эквивалент

Значение

mon,tue,wed,thu,fri

mon..fri

Каждый будний день в 00:00

sat,sun

sat..sun

В субботу и воскресенье в 00:00

mon,wed,fri

-

В понедельник, среду и пятницу в 00:00

12:05

12:05

Каждый день в 12:05

*/5

0/5

Каждые пять минут

mon..wed 30/10

mon,tue,wed 30/10

В понедельник, среду и пятницу в 30, 40 и 50 минут каждого часа

mon..fri 8..17,22:0/15

-

Каждые 15 минут с 8 часов до 18 и с 22 до 23 в будний день

fri 12..13:5/20

fri 12,13:5/20

В пятницу в 12:05, 12:25, 12:45, 13:05, 13:25 и 13:45

12,14,16,18,20,22:5

12/2:5

Каждые два часа каждый день с 12:05 до 22:05

*

*/1

Ежеминутно (минимальный интервал)

*-05

-

Пятого числа каждого месяца

Sat *-1..7 15:00

-

Первую субботу каждого месяца в 15:00

2023-10-22

-

22 октября 2023 года в 00:00

Проверить правильность задания расписания, можно в окне Имитатор расписания заданий (Центр обработки данных → Резервная копия кнопка Имитатор расписания): указать расписание в поле Расписание, задать число итераций (поле Итерации) и нажать кнопку Моделировать:

⁠46.6. Настройка резервного копирования в графическом интерфейсе [Черновик]

Для того чтобы создать расписание резервного копирования, необходимо перейти во вкладку Центр обработки данных → Резервная копия и нажать кнопку Добавить:

При создании задания на резервирование, необходимо указать:

Узел — можно создавать график из одного места по разным узлам (серверам);

Хранилище — точка смонтированного накопителя, куда будет проходить копирование;

Расписание — здесь можно указать расписание резервного копирования. Можно выбрать период из списка или указать вручную:

Режим выбора — возможные значения: Учитывать выбранные ВМ, Все, Исключить выбранные ВМ, На основе пула;

Отправить письмо — адрес, на который будут приходить отчёты о выполнении резервного копирования;

Адрес эл.почты — принимает два значения: Уведомлять всегда — сообщение будет приходить при любом результате резервного копирования, Только при ошибках — сообщение будет приходить только в случае неудачной попытки резервного копирования;

Сжатие — метод сжатия, принимает четыре значения: ZSTD (быстро и хорошо) (по умолчанию), LZO (быстро), GZIP (хорошо) и нет;

Режим — режим ВМ, в котором будет выполняться резервное копирование. Может принимать три значения: Снимок, Приостановить, Остановка:

Далее в списке необходимо выбрать ВМ/контейнеры, для которых создаётся задание резервного копирования. Для сокращения списка выбора можно использовать фильтры (фильтры доступны для полей ID, Статус, Имя, Тип):

На вкладке Хранение можно настроить параметры хранения резервных копий:

На вкладке Шаблон примечания можно настроить примечание, которое будет добавляться к резервным копиям. Строка примечания может содержать переменные, заключенные в две фигурные скобки. В настоящее время поддерживаются следующие переменные:

{{cluster}} — имя кластера;

{{guestname}} — имя ВМ/контейнера;

{{node}} — имя узла, для которого создается резервная копия;

{{vmid}} — VMID ВМ/контейнера.

После указания необходимых параметров и нажатия кнопки Создать, задание для резервного копирования появляется в списке (запись о задании создаётся в файле /etc/pve/jobs.cfg):

Данное задание будет запускаться в назначенное время. Время следующего запуска задания отображается в столбце Следующий запуск. Cуществует также возможность запустить задание по требованию — кнопка Запустить сейчас.

Для того чтобы разово создать резервную копию конкретной ВМ, достаточно открыть ВМ, выбрать в ней раздел Резервная копия и нажать кнопку Создать резервную копию сейчас:

Далее следует указать параметры резервного копирования:

После создания резервной копии рекомендуется сразу убедиться, что из нее можно восстановить ВМ. Для этого необходимо открыть хранилище с резервной копией:

И начать процесс восстановления (при восстановлении можно указать новое имя и переопределить некоторые параметры для ВМ):

Если восстанавливать из резервной копии в интерфейсе ВМ, то будет предложена только замена существующей ВМ:

Резервную копию можно пометить как защищённую, чтобы предотвратить ее удаление:

Предупреждение [Черновик]

Попытка удалить защищенную резервную копию через пользовательский интерфейс, интерфейс командной строки или API PVE не удастся. Но так как это обеспечивается PVE, а не файловой системой, ручное удаление самого файла резервной копии по-прежнему возможно для любого, у кого есть доступ на запись к хранилищу резервных копий.

⁠46.7. Резервное копирование из командной строки [Черновик]

⁠46.7.1. Файлы резервных копий [Черновик]

Все создаваемые резервные копии будут сохраняться в подкаталоге dump. Имя файла резервной копии будет иметь вид:

vzdump-qemu-номер_машины-дата-время.vma.zst при использовании метода ZST;

vzdump-qemu-номер_машины-дата-время.vma.gz при использовании метода GZIP;

vzdump-qemu-номер_машины-дата-время.vma.lzo при использовании метода LZO.

⁠46.7.2. Восстановление [Черновик]

Восстановить данные из резервных копий можно в веб-интерфейсе PVE или с помощью следующих утилит:

pct restore — утилита восстановления контейнера;

qmrestore — утилита восстановления ВМ.

⁠46.7.3. Ограничение пропускной способности [Черновик]

Для восстановления одной или нескольких больших резервных копий может потребоваться много ресурсов, особенно пропускной способности хранилища как для чтения из резервного хранилища, так и для записи в целевое хранилище. Это может негативно повлиять на работу других ВМ, так как доступ к хранилищу может быть перегружен.

Чтобы избежать этого, можно установить ограничение полосы пропускания для задания резервного копирования. В PVE есть два вида ограничений для восстановления и архивирования:

per-restore limit — максимальный объем полосы пропускания для чтения из архива резервной копии;

per-storage write limit — максимальный объем полосы пропускания, используемый для записи в конкретное хранилище.

Ограничение чтения косвенно влияет на ограничение записи. Меньшее ограничение на задание перезапишет большее ограничение на хранилище. Увеличение лимита на задание приведёт к перезаписи лимита на хранилище, только если для данного хранилища есть разрешения «Data.Allocate».

Примечание [Черновик]

Чтобы отключить все ограничения для конкретного задания можно использовать значение 0 для параметра bwlimit. Это может быть полезно, если требуется как можно быстрее восстановить ВМ.

Установить ограничение пропускной способности по умолчанию для хранилища, можно с помощью команды:

# pvesm set STORAGEID --bwlimit restore=KIBs

⁠46.7.4. Файл конфигурация vzdump.conf [Черновик]

Глобальные настройки создания резервных копий хранятся в файле конфигурации /etc/vzdump.conf. Каждая строка файла имеет следующий формат (пустые строки в файле игнорируются, строки, начинающиеся с символа #, рассматриваются как комментарии и также игнорируются):

OPTION: value

⁠

Таблица 46.3. Параметры файла конфигурации [Черновик]

Опция

Описание

bwlimit: integer (0 — N) (default=0)

Ограничение пропускной способности ввода/вывода (Кб/с)

compress: (0|1|gzip|lzo|zstd) (default=0)

Сжатие файла резервной копии

dumpdir: string

Записать результирующие файлы в указанный каталог

exclude-path: string

Исключить определенные файлы/каталоги

ionice: integer (0 — 8) (default=7)

Установить CFQ приоритет ionice

lockwait: integer (0 — N) (default=180)

Максимальное время ожидания для глобальной блокировки (в минутах)

mailnotification: (always|failure) (default=always)

Указание, когда следует отправлять отчет по электронной почте

mailto: string

Разделенный запятыми список адресов электронной почты, на которые будут приходить уведомления

maxfiles: integer (1 — N) (default=1)

Максимальное количество файлов резервных копий ВМ

mode: (snapshot|stop|suspend) (default=snapshot)

Режим резервного копирования

pigz: integer (default=0)

Использует pigz вместо gzip при N>0. N=1 использует половину ядер (uses half of cores), при N>1 N — количество потоков

prune-backups

Использовать эти параметры хранения вместо параметров из конфигурации хранилища

remove: boolean (default=1)

Удалить старые резервные копии, если их больше, чем установлено опцией maxfiles

script: string

Использовать указанный скрипт

stdexcludes: boolean (default=1)

Исключить временные файлы и файлы журналов

stopwait: integer (0 — N) (default=10)

Максимальное время ожидания до остановки ВМ (минуты)

storage: string

Хранить полученный файл в этом хранилище

tmpdir: string

Хранить временные файлы в указанном каталоге

zstd: integer (default = 1)

Количество потоков zstd. N = 0 использовать половину доступных ядер, N > 0 использовать N как количество потоков

Пример файла vzdump.conf:

tmpdir: /mnt/fast_local_disk
storage: my_backup_storage
mode: snapshot
bwlimit: 10000

⁠46.7.5. Файлы, не включаемые в резервную копию [Черновик]

Примечание [Черновик]

Эта опция доступна только при создании резервных копий контейнеров.

Команда vzdump по умолчанию пропускает следующие файлы (отключается с помощью опции --stdexcludes 0):

/tmp/?*
/var/tmp/?*
/var/run/?*pid

Кроме того, можно вручную указать какие файлы исключать (дополнительно), например:

# vzdump 777 --exclude-path /tmp/ --exclude-path '/var/foo*'

Если путь не начинается с символа «/», то он не будет привязан к корню контейнера и будет соотвествовать любому подкаталогу. Например:

# vzdump 777 --exclude-path bar

исключает любые файлы и каталони с именами /bar, /var/bar, /var/foo/bar и т.д.

Файлы конфигурации ВМ и контейнеров также хранятся внутри архива резервных копий (в /etc/vzdump/) и будут корректно восстановлены.

⁠46.7.6. Примеры [Черновик]

Создать простую резервную копию ВМ 103 — без снимков, только архив гостевой части и конфигурационного файла в каталог резервного копирования по умолчанию (обычно /var/lib/vz/dump/):

# vzdump 103

Использовать rsync и режим приостановки для создания снимка (минимальное время простоя):

# vzdump 103 --mode suspend

Сделать резервную копию всей гостевой системы и отправить отчет пользователям root и admin:

# vzdump --all --mode suspend --mailto root --mailto admin

Использовать режим мгновенного снимка (нет времени простоя) и каталог для хранения резервных копий /mnt/backup:

# vzdump 103 --dumpdir /mnt/backup --mode snapshot

Резервное копирование более чем одной ВМ (выборочно):

# vzdump 101 102 103 --mailto root

Резервное копирование всех ВМ, исключая 101 и 102:

# vzdump --mode suspend --exclude 101,102

Восстановить контейнер в новый контейнер 600:

# pct restore 600 /mnt/backup/vzdump-lxc-104.tar

Восстановить QemuServer VM в VM 601:

# qmrestore /mnt/backup/vzdump-qemu-105.vma 601

Клонировать существующий контейнер 101 в новый контейнер 300 с 4 ГБ корневой файловой системы:

# vzdump 101 --stdout | pct restore --rootfs 4 300 -

⁠46.8. Снимки (snapshot) [Черновик]

Снимки ВМ — это файловые снимки состояния, данных диска и конфигурации ВМ в определенный момент времени. Можно создать несколько снимков ВМ даже во время ее работы. Затем можно возвратить ее в любое из предыдущих состояний, применив моментальный снимок к ВМ.

Чтобы создать снимок состояния системы необходимо в меню ВМ выбрать пункт Снимки и нажать кнопку Сделать снимок:

В открывшемся окне следует ввести название снимка и нажать кнопку Сделать снимок:

Для того чтобы восстановить ВМ из снимка, необходимо в меню ВМ выбрать пункт Снимки, выбрать снимок и нажать кнопку Откатить:

При создании снимков, qm сохраняет конфигурацию ВМ во время снимка в отдельном разделе в файле конфигурации ВМ. Например, после создания снимка с именем first файл конфигурации будет выглядеть следующим образом:

boot: order=scsi0;sata2;net0
cores: 1
memory: 2048
meta: creation-qemu=7.1.0,ctime=1671708251
name: NewVM
net0: virtio=3E:E9:24:FF:85:D9,bridge=vmbr0,firewall=1
numa: 0
ostype: l26
parent: first
sata2: local-iso:iso/slinux-10.1-x86_64.iso,media=cdrom,size=4586146K
scsi0: local:100/vm-100-disk-0.qcow2,size=42G
scsihw: virtio-scsi-pci
smbios1: uuid=ee9db068-5427-4934-bf7a-5895c377b5af
sockets: 1
vmgenid: dfec8e3b-d391-40cb-8983-b4938461b79a

[first]
#clear system
boot: order=scsi0;sata2;net0
cores: 1
memory: 2048
meta: creation-qemu=7.1.0,ctime=1671708251
name: NewVM
net0: virtio=3E:E9:24:FF:85:D9,bridge=vmbr0,firewall=1
numa: 0
ostype: l26
runningcpu: kvm64,enforce,+kvm_pv_eoi,+kvm_pv_unhalt,+lahf_lm,+sep
runningmachine: pc-i440fx-7.1+pve0
sata2: local-iso:iso/slinux-10.1-x86_64.iso,media=cdrom,size=4586146K
scsi0: local:100/vm-100-disk-0.qcow2,size=42G
scsihw: virtio-scsi-pci
smbios1: uuid=ee9db068-5427-4934-bf7a-5895c377b5af
snaptime: 1671724448
sockets: 1
vmgenid: dfec8e3b-d391-40cb-8983-b4938461b79a
vmstate: local:100/vm-100-state-first.raw

Свойство parent используется для хранения родительских/дочерних отношений между снимками, snaptime — это отметка времени создания снимка (эпоха Unix).

⁠Глава 47. Встроенный мониторинг PVE [Черновик]

Все данные о потреблении ресурсов и производительности можно найти на вкладках Сводка узлов PVE и ВМ. Можно просматривать данные на основе почасового ежедневного, еженедельного или за год периодов.

Сводка узла pve01 со списком для выбора периода данных:

Просмотреть список всех узлов, ВМ и контейнеров в кластере можно, выбрав Центр обработки данных → Поиск. В этом списке отображается потребление ресурсов только в реальном масштабе времени.

К полям, отображаемым по умолчанию, можно добавить дополнительные поля и указать порядок сортировки дерева ресурсов:

Для мониторинга состояния локальных дисков используется пакет smartmontools. Он содержит набор инструментов для мониторинга и управления S.M.A.R.T. системой для локальных жестких дисков.

Получить статус диска можно, выполнив следующую команду:

# smartctl -a /dev/sdX

где /dev/sdX — это путь к одному из локальных дисков.

Включить поддержку SMART для диска, если она отключена:

# smartctl -s on /dev/sdX

Просмотреть S.M.A.R.T. статус диска в веб-интерфейсе можно, выбрав в разделе Диски нужный диск и нажав кнопку Показать данные S.M.A.R.T.:

По умолчанию, smartmontools daemon smartd активен и включен, и сканирует диски в /dev каждые 30 минут на наличие ошибок и предупреждений, а также отправляет сообщение электронной почты пользователю root в случае обнаружения проблемы (для пользователя root в PVE должен быть введен действительный адрес электронной почты).

Электронное сообщение будет содержать имя узла, где возникла проблема, а также параметры самого устройства, такие как серийный номер и идентификатор дискового устройства. Если та же самая ошибка продолжит возникать, узел будет отсылать электронное сообщение каждые 24 часа. Основываясь на содержащейся в электронном сообщении информации можно определить отказавшее устройство и заменить его в случае такой необходимости.

⁠Глава 48. Высокая доступность PVE [Черновик]

Высокая доступность PVE (High Availability, HA) позволяет кластеру перемещать или мигрировать ВМ с отказавшего узла на жизнеспособный узел без вмешательства пользователя.

Для функционирования HA в PVE необходимо чтобы все ВМ использовали общее хранилище. HA PVE обрабатывает только узлы PVE и ВМ в пределах кластера PVE. Такую функциональность HA не следует путать с избыточностью общих хранилищ, которую PVE может применять в своем развертывании HA. Общие хранилища сторонних производителей могут предоставлять свою собственную функциональность HA. Таким образом, и сам кластер PVE, и общее хранилище должны быть настроены для предоставления реальной среды с высокой доступностью.

В вычислительном узле PVE могут существовать свои уровни избыточности, например, применение RAID, дополнительные источники питания, объединение/агрегация сетей. HA в PVE не подменяет собой ни один из этих уровней, а просто способствует использованию функций избыточности ВМ для сохранения их в рабочем состоянии при отказе какого-либо узла.

⁠48.1. Как работает высокая доступность PVE [Черновик]

PVE предоставляет программный стек ha-manager, который может автоматически обнаруживать ошибки и выполнять автоматический переход на другой ресурс. Основной блок управления, управляемый ha-manager называется ресурсом. Ресурс (сервис) однозначно идентифицируется идентификатором сервиса (SID), который состоит из типа ресурса и идентификатора, специфичного для данного типа, например, vm: 100 (ресурс типа ВМ с идентификатором 100).

В случае, когда по какой-либо причине узел становится недоступным, HA PVE ожидает 60 секунд прежде чем выполнится ограждение (fencing) отказавшего узла. Ограждение предотвращает службы кластера от возврата в рабочее состояние в этом месте. Затем HA перемещает ВМ и контейнеры на следующий доступный узел в группе участников HA. Даже если узел с ВМ включен, но потерял связь с сетевой средой, HA PVE попытается переместить все ВМ с этого узла на другой узел.

При возврате отказавшего узла в рабочее состояние, HA не переместит ВМ на первоначальный узел. Это необходимо выполнять вручную. При этом ВМ может быть перемещена вручную только если HA запрещен для данной ВМ. Поэтому сначала следует выключить HA, а затем переместить на первоначальный узел и включить HA для данной ВМ вновь.

⁠48.2. Требования для настройки высокой доступности [Черновик]

Среда PVE для настройки HA должна отвечать следующим требованиям:

кластер, содержащий, как минимум, три узла (для получения надежного кворума);

общее хранилище для ВМ и контейнеров;

аппаратное резервирование;

использование надежных «серверных» компонентов;

аппаратный сторожевой таймер (если он недоступен, используется программный таймер ядра Linux);

дополнительные устройства ограждения (fencing).

Примечание [Черновик]

В случае построения виртуальной инфраструктуры на серверах HP необходимо запретить загрузку модуля ядра hpwdt. Для этого необходимо создать файл /etc/modprobe.d/nohpwdt.conf со следующим содержимым:

# Do not load the 'hpwdt' module on boot.
blacklist hpwdt

Для применения изменений следует перезагрузить систему.

⁠48.3. Настройка высокой доступности PVE [Черновик]

Все настройки HA PVE могут быть выполнены в веб-интерфейсе в разделе Центр обработки данных → HA:

⁠48.3.1. Создание группы высокой доступности [Черновик]

Наиболее характерным примером использования групп HA являются некие программные решения или инфраструктура ВМ, которые должны работать совместно (например, контроллер домена, файловый сервер). Назначенные в определенную группу ВМ могут перемещаться только между узлами участниками этой группы. Например, есть шесть узлов, три из которых обладают всей полнотой ресурсов достаточной для исполнения виртуального сервера базы данных, а другие три узла выполняют виртуальные рабочие столы или решения VDI. Можно создать две группы, чтобы виртуальные серверы баз данных перемещались только в пределах тех узлов, которые будут назначены для данной группы. Это гарантирует, что ВМ переместится на тот узел, который будет способен исполнять такие ВМ.

Для включения HA необходимо создать как минимум одну группу.

Для создания группы следует в подменю Группы нажать кнопку Создать.

Элементы, доступные в блоке диалога Группа HA:

ID — название HA группы;

Узел — назначение узлов в создаваемую группу (нужно выбрать, по крайней мере, один узел);

restricted — разрешение перемещения ВМ со стороны HA PVE только в рамках узлов участников данной группы HA. Если перемещать ВМ некуда, то эти ВМ будут автоматически остановлены;

nofailback — используется для предотвращения автоматического восстановления состояния ВМ/контейнера при восстановлении узла в кластере (не рекомендуется включать эту опцию).

Подменю Группы с созданной группой:

⁠48.3.2. Добавление ресурсов [Черновик]

Для включения HA для ВМ или контейнера следует нажать кнопку Добавить в разделе Ресурсы меню HA. В открывшемся диалоговом окне нужно выбрать ВМ/контейнер и группу HA:

В окне можно настроить следующие параметры:

Макс. перезапусков — количество попыток запуска ВМ/контейнера на новом узле после перемещения;

Макс. перемещений — количество попыток перемещения ВМ/контейнера на новый узел;

Статус запроса — доступны варианты: started — кластер менеджер будет пытаться поддерживать состояние машины в запущенном состоянии; stopped — при отказе узла перемещать ресурс, но не пытаться запустить; ignored — ресурс, который не надо перемещать при отказе узла; disabled — в этот статус переходят ВМ, которые находятся в состоянии «error».

Группа HA PVE и добавленные в нее ВМ и контейнеры, которыми будет управлять HA:

Раздел Статус отображает текущее состояние функциональности HA:

кворум кластера установлен;

главный узел pve01 группы HA активен и последний временной штамп жизнеспособности (heartbeat timestamp) проверен;

все узлы, участвующие в группе HA активны и последний временной штамп жизнеспособности (heartbeat timestamp) проверен.

Просмотреть состояние функциональности HA можно и в консоли:

# ha-manager status
quorum OK
master pve01 (active, Wed Aug 23 13:26:31 2023)
lrm pve01 (active, Wed Aug 23 13:26:31 2023)
lrm pve02 (active, Wed Aug 23 13:26:33 2023)
lrm pve03 (active, Wed Aug 23 13:26:26 2023)
service ct:105 (pve01, started)
service vm:100 (pve01, stopped)

⁠48.4. Тестирование настройки высокой доступности PVE [Черновик]

Для того чтобы убедиться, что HA действительно работает, можно отключить сетевое соединение для pve01 и понаблюдать за окном Статус на предмет изменений HA:

После того как соединение с узлом pve01 будет потеряно, он будет помечен как недоступный. По истечению 60 секунд, HA PVE предоставит следующий доступный в группе HA узел в качестве главного:

После того как HA PVE предоставит новый ведущий узел для данной группы HA, будет запущено ограждение для ресурсов ВМ/контейнера для подготовки к перемещению их на другой узел. В процессе ограждения, все связанные с данной ВМ службы ограждаются, что означает, что даже если отказавший узел вернется в строй на этом этапе, ВМ не будут иметь возможность восстановить свою нормальную работу. Затем ВМ/контейнер полностью останавливается. Так как узел сам по себе отключен, ВМ/контейнер не может выполнить миграцию в реальном режиме времени, поскольку состояние оперативной памяти исполняемой ВМ не может быть получено с отключенного узла.

После остановки, ВМ/контейнер перемещается на следующий свободный узел в группе HA и автоматически запускается.

В данном примере контейнер 105 перемещен на узел pve02 и запущен:

В случае возникновения любой ошибки, HA PVE выполнит несколько попыток восстановления в соответствии с политиками restart и relocate. Если все попытки окажутся неудачными, HA PVE поместит ресурсы в ошибочное состояние и не будет выполнять для них никаких задач.

⁠Глава 49. Пользователи и их права [Черновик]

PVE поддерживает несколько источников аутентификации, например, Linux PAM, интегрированный сервер аутентификации PVE, LDAP, Active Directory и OpenID Connect:

Используя основанное на ролях управление пользователями и разрешениями для всех объектов (ВМ, хранилищ, узлов и т. д.), можно определить многоуровневый доступ.

PVE хранит данные пользователей в файле /etc/pve/user.cfg:

# cat /etc/pve/user.cfg
user:root@pam:1:0::::::
user:test@pve:1:0::::::
user:testuser@pve:1:0::::Just a test::
user:user@pam:1:0::::::

group:admin:user@pam::
group:testgroup:test@pve::

Пользователя часто внутренне идентифицируют по его имени и области аутентификации в форме <user>@<realm>.

После установки PVE существует один пользователь root@pam, который соответствует суперпользователю ОС. Этого пользователя нельзя удалить, все системные письма будут отправляться на адрес электронной почты, назначенный этому пользователю. Суперпользователь имеет неограниченные права, поэтому рекомендуется добавить других пользователей с меньшими правами.

Каждый пользователь может быть членом нескольких групп.

⁠49.1. Области аутентификации [Черновик]

Доступны следующие области (методы) аутентификации:

Стандартная аутентификация Linux PAM — общесистемная аутентификация пользователей;

Сервер аутентификации PVE — пользователи полностью управляются PVE и могут менять свои пароли через графический интерфейс. Этот метод аутентификации удобен для небольших (или даже средних) установок, где пользователям не нужен доступ ни к чему, кроме PVE;

Сервер LDAP — позволяет использовать внешний LDAP-сервер для аутентификации пользователей (например, OpenLDAP);

Сервер Active Directory — позволяет аутентифицировать пользователей через AD. Поддерживает LDAP в качестве протокола аутентификации;

Сервер OpenID Connect — уровень идентификации поверх протокола OATH 2.0. Позволяет аутентифицировать пользователей на основе аутентификации, выполняемой внешним сервером авторизации.

Настройки области аутентификации хранятся в файле /etc/pve/domains.cfg.

⁠49.1.1. Стандартная аутентификация Linux PAM [Черновик]

При использовании аутентификации Linux PAM системный пользователь должен существовать (должен быть создан, например, с помощью команды adduser) на всех узлах, на которых пользователю разрешено войти в систему. Если пользователи PAM существуют в хост-системе PVE, соответствующие записи могут быть добавлены в PVE, чтобы эти пользователи могли входить в систему, используя свое системное имя и пароль.

Область Linux PAM создается по умолчанию и не может быть удалена. Администратор может включить двухфакторную аутентификацию для пользователей данной области (Требовать двухфакторную проверку подлинности) и установить её в качестве области по умолчанию для входа в систему (По умолчанию):

Для добавления нового пользователя необходимо в окне Центр обработки данных → Разрешения → Пользователи нажать кнопку Добавить.

Создание нового пользователя с использованием PAM аутентификации (системный пользователь user должен существовать, в качестве пароля будет использоваться пароль для входа в систему):

⁠49.1.2. Сервер аутентификации PVE [Черновик]

Область аутентификации PVE представляет собой хранилище паролей в стиле Unix (/etc/pve/priv/shadow.cfg). Пароль шифруется с использованием метода хеширования SHA-256.

Область создается по умолчанию. Администратор может включить двухфакторную аутентификацию для пользователей данной области (Требовать двухфакторную проверку подлинности) и установить её в качестве области по умолчанию для входа в систему (По умолчанию):

Создание нового пользователя с использованием PVE аутентификации:

Примеры использования командной строки для управления пользователями PVE:

создать пользователя:

# pveum useradd testuser@pve -comment "Just a test"

задать или изменить пароль:

# pveum passwd testuser@pve

отключить пользователя:

# pveum usermod testuser@pve -enable 0

создать новую группу:

# pveum groupadd testgroup

создать новую роль:

# pveum roleadd PVE_Power-only -privs "VM.PowerMgmt VM.Console"

⁠49.1.3. LDAP аутентификация [Черновик]

В данном разделе приведён пример настройки аутентификации LDAP для аутентификации на сервере FreeIPA. В примере используются следующие исходные данные:

ipa.example.test, 192.168.0.113 — сервер FreeIPA;

admin@example.test — учётная запись с правами чтения LDAP;

pve — группа, пользователи которой имеют право аутентифицироваться в PVE.

Для настройки LDAP аутентификации необходимо выполнить следующие шаги:

Создать область аутентификации LDAP. Для этого в разделе Центр обработки данных → Разрешения → Сферы нажать кнопку Добавить → Сервер LDAP:

На вкладке Общее указать следующие данные:

Сфера — идентификатор области;

Имя основного домена (base_dn) — каталог, в котором выполняется поиск пользователей (dc=example,dc=test);

Имя пользовательского атрибута (user_attr) — атрибут LDAP, содержащий имя пользователя, с которым пользователи будут входить в систему (uid);

По умолчанию — установить область в качестве области по умолчанию для входа в систему;

Сервер — IP-адрес или имя FreeIPA-сервера (ipa.example.test или 192.168.0.113);

Резервный сервер (опционально) — адрес резервного сервера на случай, если основной сервер недоступен;

Порт — порт, который прослушивает сервер LDAP (обычно 389 без ssl, 636 с ssl);

SSL — использовать ssl;

Требовать двухфакторную проверку подлинности — включить двухфакторную аутентификацию.

На вкладке Параметры синхронизации заполнить следующие поля (в скобках указаны значения, используемые в данном примере):

Пользователь (bind) — имя пользователя (uid=admin,cn=users,cn=accounts,dc=example,dc=test);

Пароль (bind) — пароль пользователя;

Атрибут электронной почты (опционально);

Аттр. имени группы — атрибут имени группы (cn);

Классы пользователей — класс пользователей LDAP (person);

Классы групп — класс групп LDAP (posixGroup);

Фильтр пользователей — фильтр пользователей (memberOf=cn=pve,cn=groups,cn=accounts,dc=example,dc=test);

Фильтр групп — фильтр групп ((|(cn=*pve*)(dc=ipa)(dc=example)(dc=test)));

Нажать кнопку Добавить.

Выбрать добавленную область и нажать кнопку Синхронизировать:

Указать, если необходимо, параметры синхронизации и нажать кнопку Синхронизировать:

В результате синхронизации пользователи и группы PVE будут синхронизированы с сервером FreeIPA LDAP. Сведения о пользователях и группах можно проверить на вкладках Пользователи и Группы.

Настроить разрешения для группы/пользователя на вкладке Разрешения.

Примечание [Черновик]

Команда синхронизации пользователей и групп:

# pveum realm sync example.test

Для автоматической синхронизации пользователей и групп можно добавить команду синхронизации в планировщик задач.

⁠49.1.4. AD аутентификация [Черновик]

В данном разделе приведён пример настройки аутентификации AD. В примере используются следующие исходные данные:

dc.test.alt, 192.168.0.122 — сервер AD;

administrator@test.alt — учётная запись администратора (для большей безопасности рекомендуется создать отдельную учетную запись с доступом только для чтения к объектам домена и не использовать учётную запись администратора);

office — группа, пользователи которой имеют право аутентифицироваться в PVE.

Для настройки AD аутентификации необходимо выполнить следующие шаги:

Создать область аутентификации AD (в разделе Центр обработки данных → Разрешения → Сферы нажать кнопку Добавить → Сервер Active Directory):

На вкладке Общее указать следующие данные:

Сфера — идентификатор области;

Домен — домен AD (test.alt);

По умолчанию — установить область в качестве области по умолчанию для входа в систему;

Сервер — IP-адрес или имя сервера AD (dc.test.alt или 192.168.0.122);

Резервный сервер (опционально) — адрес резервного сервера на случай, если основной сервер недоступен;

Порт — порт, который прослушивает сервер LDAP (обычно 389 без ssl, 636 с ssl);

SSL — использовать ssl;

Требовать двухфакторную проверку подлинности — включить двухфакторную аутентификацию.

На вкладке Параметры синхронизации заполнить следующие поля (в скобках указаны значения, используемые в данном примере):

Пользователь (bind) — имя пользователя (cn=Administrator,cn=Users,dc=test,dc=alt);

Пароль (bind) — пароль пользователя;

Атрибут электронной почты (опционально);

Аттр. имени группы — атрибут имени группы (cn);

Классы пользователей — класс пользователей AD;

Классы групп — класс групп AD;

Фильтр пользователей — фильтр пользователей ((&(objectclass=user)(samaccountname=*)(MemberOf=CN=office,ou=OU,dc=TEST,dc=ALT)));

Фильтр групп — фильтр групп ((|(cn=*office*)(dc=dc)(dc=test)(dc=alt)));

Нажать кнопку Добавить.

Выбрать добавленную область и нажать кнопку Синхронизировать.

Указать, если необходимо, параметры синхронизации и нажать кнопку Синхронизировать:

В результате синхронизации пользователи и группы PVE будут синхронизированы с сервером AD. Сведения о пользователях и группах можно проверить на вкладках Пользователи и Группы.

Настроить разрешения для группы/пользователя на вкладке Разрешения.

Примечание [Черновик]

Команда синхронизации пользователей и групп:

# pveum realm sync test.alt

Для автоматической синхронизации пользователей и групп можно добавить команду синхронизации в планировщик задач.

⁠49.2. Двухфакторная аутентификация [Черновик]

В PVE можно настроить двухфакторную аутентификацию двумя способами:

Требование двухфакторной аутентификации (ДФА) можно включить при настройке области аутентификации. Если в области аутентификации включена ДФА, это становится требованием, и только пользователи с настроенным ДФА смогут войти в систему. Новому пользователю необходимо сразу добавить ключи, так как возможности войти в систему, без предъявления второго фактора, нет.

Настроить принудительную двухфакторную аутентификацию можно при добавлении или редактировании области аутентификации:

Пользователи могут сами настроить двухфакторную аутентификацию, даже если она не требуется в области аутентификации (выбрав пункт TFA в выпадающем списке пользователя):

Настройка двухфакторной аутентификации пользователем:

При добавлении в области аутентификации доступны следующие методы двухфакторной аутентификации:

OATH/TOTP (основанная на времени OATH) — используется стандартный алгоритм HMAC-SHA1, в котором текущее время хэшируется с помощью настроенного пользователем ключа. Параметры временного шага и длины пароля настраиваются:

У пользователя может быть настроено несколько ключей (разделенных пробелами), и ключи могут быть указаны в Base32 (RFC3548) или в шестнадцатеричном представлении.

PVE предоставляет инструмент генерации ключей (oathkeygen), который печатает случайный ключ в нотации Base32. Этот ключ можно использовать непосредственно с различными инструментами OTP, такими как инструмент командной строки oathtool, или приложении FreeOTP и в других подобных приложениях.

Yubico (YubiKey OTP) — для аутентификации с помощью YubiKey необходимо настроить идентификатор API Yubico, ключ API и URL-адрес сервера проверки, а у пользователей должен быть доступен YubiKey. Чтобы получить идентификатор ключа от YubiKey, следует активировать YubiKey после подключения его через USB и скопировать первые 12 символов введенного пароля в поле ID ключа пользователя.

В дополнение к TOTP и Yubikey OTP пользователям доступны следующие методы двухфакторной аутентификации:

TOTP (одноразовый пароль на основе времени) — для создания этого кода используется алгоритм одноразового пароля с учетом времени входа в систему (код меняется каждые 30 секунд);

WebAuthn (веб-аутентификация) — реализуется с помощью различных устройств безопасности, таких как аппаратные ключи или доверенные платформенные модули (TPM). Для работы веб-аутентификации необходим сертификат HTTPS;

Ключи восстановления (одноразовые ключи восстановления) — список ключей, каждый из которых можно использовать только один раз. В каждый момент времени у пользователя может быть только один набор одноразовых ключей. Этот метод аутентификации идеально подходит для того, чтобы гарантировать, что пользователь получит доступ, даже если все остальные вторые факторы потеряны или повреждены.

Примечание [Черновик]

Пользователи могут использовать TOTP или WebAuthn в качестве второго фактора при входе в систему, только если область аутентификацию не применяет YubiKey OTP.

Примечание [Черновик]

Чтобы избежать ситуации, когда потеря электронного ключа навсегда блокирует доступ можно настроить несколько вторых факторов для одной учетной записи:

Настройка аутентификации TOTP:

добавление аутентификации TOTP на сервере:

использование TOTP при аутентификации пользователя:

Настройка аутентификации Recovery Key:

создание набора ключей:

использование Recovery Key при аутентификации пользователя:

⁠49.3. Управление доступом [Черновик]

Чтобы пользователь мог выполнить какое-либо действие (например, просмотр, изменение или удаление ВМ), ему необходимо иметь соответствующие разрешения.

PVE использует систему управления разрешениями на основе ролей и путей. Запись в таблице разрешений позволяет пользователю или группе играть определенную роль при доступе к объекту. Это означает, что такое правило доступа может быть представлено как тройка (путь, пользователь, роль) или (путь, группа, роль), причем роль содержит набор разрешенных действий, а путь представляет цель этих действий.

Роль — это список привилегий. В PVE предопределён ряд ролей:

Administrator — имеет все привилегии;

NoAccess — нет привилегий (используется для запрета доступа);

PVEAdmin — все привилегии, кроме прав на изменение настроек системы (Sys.PowerMgmt, Sys.Modify, Realm.Allocate);

PVEAuditor — доступ только для чтения;

PVEDatastoreAdmin — создание и выделение места для резервного копирования и шаблонов;

PVEDatastoreUser — выделение места для резервной копии и просмотр хранилища;

PVEPoolAdmin — выделение и просмотр пулов;

PVEPoolUser — просмотр пулов;

PVESDNAdmin — выделение и просмотр SDN;

PVESysAdmin — ACL пользователя, аудит, системная консоль и системные журналы;

PVETemplateUser — просмотр и клонирование шаблонов;

PVEUserAdmin — администрирование пользователей;

PVEVMAdmin — управление ВМ;

PVEVMUser — просмотр, резервное копирование, настройка CDROM, консоль ВМ, управление питанием ВМ.

Просмотреть список предопределенных ролей в веб-интерфейсе можно, выбрав Центр обработки данных → Разрешения → Роли:

Добавить новую роль можно как в веб-интерфейсе, так и в командной строке.

Привилегия — это право на выполнение определенного действия. Для упрощения управления списки привилегий сгруппированы в роли, которые затем можно использовать в таблице разрешений. Привилегии не могут быть напрямую назначены пользователям, не будучи частью роли.

Пул ресурсов — это набор ВМ, контейнеров и хранилищ. Пул ресурсов удобно использовать для обработки разрешений в случаях, когда определенные пользователи должны иметь контролируемый доступ к определенному набору ресурсов. Пулы ресурсов часто используются в тандеме с группами, чтобы члены группы имели разрешения на набор машин и хранилищ.

⁠

Таблица 49.1. Привилегии используемые в PVE [Черновик]

Привилегия

Описание

Привилегии узла/системы

Permissions.Modify

Изменение прав доступа

Sys.PowerMgmt

Управление питанием узла (запуск, остановка, сброс, выключение)

Sys.Console

Консольный доступ к узлу

Sys.Syslog

Просмотр Syslog

Sys.Audit

Просмотр состояния/конфигурации узла, конфигурации кластера Corosync и конфигурации HA

Sys.Modify

Создание/удаление/изменение параметров сети узла

Group.Allocate

Создание/удаление/изменение групп

Pool.Allocate

Создание/удаление/изменение пулов

Pool.Audit

Просмотр пула

Realm.Allocate

Создание/удаление/изменение областей аутентификации

Realm.AllocateUser

Назначение пользователю области аутентификации

User.Modify

Создание/удаление/изменение пользователя

Права, связанные с ВМ

VM.Allocate

Создание/удаление ВМ

VM.Migrate

Миграция ВМ на альтернативный сервер в кластере

VM.PowerMgmt

Управление питанием (запуск, остановка, сброс, выключение)

VM.Console

Консольный доступ к ВМ

VM.Monitor

Доступ к монитору виртуальной машины (kvm)

VM.Backup

Резервное копирование/восстановление ВМ

VM.Audit

Просмотр конфигурации ВМ

VM.Clone

Добавление/изменение/удаление дисков ВМ

VM.Config.Disk

Создание/удаление/изменение областей аутентификации

VM.Config.CDROM

Извлечь/изменить CDROM

VM.Config.CPU

Изменение настроек процессора

VM.Config.Memory

Изменение настроек памяти

VM.Config.Network

Добавление/изменение/удаление сетевых устройств

VM.Config.HWType

Изменение типа эмуляции

VM.Config.Options

Изменение любой другой конфигурации ВМ

VM.Config.Cloudinit

Изменение параметров Cloud-init

VM.Snapshot

Создание/удаление снимков ВМ

Права, связанные с хранилищем

Datastore.Allocate

Создание/удаление/изменение хранилища данных

Datastore.AllocateSpace

Выделить место в хранилище

Datastore.AllocateTemplate

Размещение/загрузка шаблонов контейнеров и ISO-образов

Datastore.Audit

Просмотр хранилища данных

Права доступа назначаются объектам, таким как ВМ, хранилища или пулы ресурсов. PVE использует файловую систему как путь к этим объектам. Эти пути образуют естественное дерево, и права доступа более высоких уровней (более короткий путь) необязательно распространяются вниз по этой иерархии. Примеры:

/nodes/<node> — доступ к серверам PVE;

/vms — все ВМ;

/vms/<vmid> — доступ к определенным ВМ;

/storage/<storeid> — доступ к хранилищам;

/access/groups — администрирование групп;

/access/realms/<realmid> — административный доступ.

Для назначения разрешений необходимо в окне Центр обработки данных → Разрешения нажать кнопку Добавить, в выпадающем меню выбрать Разрешения группы, если разрешения назначаются группе пользователей, или Разрешения пользователя, если разрешения назначаются пользователю:

Далее в открывшемся окне выбрать путь, группу и роль и нажать кнопку Добавить:

⁠Часть VI. Управление виртуализацией на основе libvirt [Черновик]

libvirt — это набор инструментов, предоставляющий единый API к множеству различных технологий виртуализации.

Кроме управления виртуальными машинами/контейнерами libvirt поддерживает управление виртуальными сетями и управление хранением образов.

Для управления из консоли разработан набор утилит virt-install, virt-clone, virsh и других. Для управления из графической оболочки можно воспользоваться virt-manager.

Любой виртуальный ресурс, необходимый для создания ВМ (compute, network, storage) представлен в виде объекта в libvirt. За процесс описания и создания этих объектов отвечает набор различных XML-файлов. Сама ВМ в терминологии libvirt называется доменом (domain). Это тоже объект внутри libvirt, который описывается отдельным XML-файлом.

При первоначальной установке и запуске libvirt по умолчанию создает мост (bridge) virbr0 и его минимальную конфигурацию. Этот мост не будет подключен ни к одному физическому интерфейсу, однако, может быть использован для связи ВМ внутри одного гипервизора.

⁠Глава 50. Установка сервера [Черновик]

В качестве сервера для развертывания libvirt удобно использовать дистрибутив Альт Виртуализация. Он уже содержит все необходимые компоненты.

Примечание [Черновик]

Компоненты libvirt будут установлены в систему, если при установке дистрибутива выбрать профиль Базовая виртуализация (см. главу Установка системы).

Примечание [Черновик]

На этапе Подготовка диска рекомендуется выбрать Generic Server KVM/Docker/LXD/Podman/CRI-O/PVE (large /var).

Если же развертывание libvirt происходит в уже установленной системе на базе Десятой платформы, достаточно на всех нодах (узлах) любым штатным способом установить пакет libvirt-kvm:

# apt-get update
# apt-get install libvirt-kvm

Добавить службу libvirtd в автозапуск и запустить её:

# systemctl enable --now libvirtd

Для непривилегированного доступа (не root) к управлению libvirt, пользователь должен быть включён в группу vmusers:

# gpasswd -a user vmusers

Сервер виртуализации использует следующие каталоги хостовой файловой системы:

/etc/libvirt/ — каталог с файлами конфигурации libvirt;

/var/lib/libvirt/ — рабочий каталог сервера виртуализации libvirt;

/var/log/libvirt — файлы журналов libvirt.

⁠Глава 51. Утилиты управления [Черновик]

Основные утилиты командной строки для управления ВМ:

qemu-img — управление образами дисков ВМ. Позволяет выполнять операции по созданию образов различных форматов, конвертировать файлы-образы между этими форматами, получать информацию об образах и объединять снимки ВМ для тех форматов, которые это поддерживают;

virsh — консольный интерфейс управления ВМ, виртуальными дисками и виртуальными сетями;

virt-clone — клонирование ВМ;

virt-install — создание ВМ с помощью опций командной строки;

virt-xml — редактирование XML-файлов описаний ВМ.

⁠51.1. Утилита Virsh [Черновик]

virsh — утилита для командной строки, предназначенная для управления ВМ и гипервизорами KVM.

virsh использует libvirt API и служит альтернативой графическому менеджеру виртуальных машин (virt-manager).

С помощью virsh можно сохранять состояние ВМ, переносить ВМ между гипервизорами и управлять виртуальными сетями.

Получить список доступных команд или параметров утилиты virsh, можно используя команду:

$ virsh help

⁠

Таблица 51.1. Утилита командной строки virsh. Команды управления виртуальными машинами [Черновик]

Команда

Описание

help

Краткая справка

list

Просмотр всех ВМ

dumpxml

Вывести файл конфигурации XML для заданной ВМ

create

Создать ВМ из файла конфигурации XML и ее запуск

start

Запустить неактивную ВМ

destroy

Принудительно остановить работу ВМ

define

Определяет файл конфигурации XML для заданной ВМ

domid

Просмотр идентификатора ВМ

domuuid

Просмотр UUID ВМ

dominfo

Просмотр сведений о ВМ

domname

Просмотр имени ВМ

domstate

Просмотр состояния ВМ

quit

Закрыть интерактивный терминал

reboot

Перезагрузить ВМ

restore

Восстановить сохраненную в файле ВМ

resume

Возобновить работу приостановленной ВМ

save

Сохранить состояние ВМ в файл

shutdown

Корректно завершить работу ВМ

suspend

Приостановить работу ВМ

undefine

Удалить все файлы ВМ

migrate

Перенести ВМ на другой узел

⁠

Таблица 51.2. Утилита командной строки virsh. Параметры управления ресурсами ВМ и гипервизора [Черновик]

Команда

Описание

setmem

Определяет размер выделенной ВМ памяти

setmaxmem

Ограничивает максимально доступный гипервизору объем памяти

setvcpus

Изменяет число предоставленных ВМ виртуальных процессоров

vcpuinfo

Просмотр информации о виртуальных процессорах

vcpupin

Настройка соответствий виртуальных процессоров

domblkstat

Просмотр статистики блочных устройств для работающей ВМ

domifstat

Просмотр статистики сетевых интерфейсов для работающей ВМ

attach-device

Подключить определенное в XML-файле устройство к ВМ

attach-disk

Подключить новое дисковое устройство к ВМ

attach-interface

Подключить новый сетевой интерфейс к ВМ

detach-device

Отключить устройство от ВМ (принимает те же определения XML, что и attach-device)

detach-disk

Отключить дисковое устройство от ВМ

detach-interface

Отключить сетевой интерфейс от ВМ

⁠51.2. Утилита virt-install [Черновик]

virt-install — это инструмент для создания ВМ, основанный на командной строке.

Примечание [Черновик]

Должен быть установлен пакет virt-install (из репозитория p10):

# apt-get install virt-install

Описание всех доступных опций утилиты virt-install можно получить, выполнив команду:

$ man virt-install

⁠

Таблица 51.3. Параметры команды virt-install [Черновик]

Команда

Описание

-n NAME, --name=NAME

Имя новой ВМ. Это имя должно быть уникально внутри одного гипервизора

--memory MEMORY

Определяет размер выделенной ВМ памяти (в МБ)

--vcpus VCPUS

Определяет количество виртуальных ЦПУ. Например:

--vcpus 5

--vcpus 5,maxvcpus=10,cpuset=1-4,6,8

--vcpus sockets=2,cores=4,threads=2

--cpu CPU

Модель ЦП и его характеристики. Например:

--cpu coreduo,+x2apic

--cpu host-passthrough

--cpu host

--metadata METADATA

Метаданные ВМ

Метод установки

--cdrom CDROM

Установочный CD-ROM. Может указывать на файл ISO-образа или на устройство чтения CD/DVD-дисков

-l LOCATION, --location LOCATION

Источник установки, например, https://host/path

--pxe

Выполнить загрузку из сети используя протокол PXE

--import

Пропустить установку ОС, и создать ВМ на основе существующего образа диска

--boot BOOT

Параметры загрузки ВМ. Например:

--boot hd,cdrom,menu=on

--boot init=/sbin/init (для контейнеров)

--os-type=DISTRO_TYPE

Оптимизирует настройки ВМ для заданного типа ОС

--os-variant=DISTRO_VARIANT

Дополнительная оптимизация ВМ для конкретного варианта ОС

--disk DISK

Настройка пространства хранения данных. Например:

--disk size=10 (новый образ на 10 ГБ в выбранном по умолчанию месте)

--disk /my/existing/disk,cache=none

--disk device=cdrom,bus=scsi

--disk=?

-w NETWORK, --network NETWORK

Конфигурация сетевого интерфейса ВМ. Например:

--network bridge=mybr0

--network network=my_libvirt_virtual_net

--network network=mynet,model=virtio,mac=00:11...

--network none

--graphics GRAPHICS

Настройки экрана ВМ. Например:

--graphics spice

--graphics vnc,port=5901,listen=0.0.0.0

--graphics none

--input INPUT

Конфигурация устройства ввода. Например:

--input tablet

--input keyboard,bus=usb

--hostdev HOSTDEV

Конфигурация физических USB/PCI и других устройств хоста для совместного использования ВМ

-filesystem FILESYSTEM

Передача каталога хоста гостевой системе. Например:

--filesystem /my/source/dir,/dir/in/guest

Параметры платформы виртуализации

-v, --hvm

Эта ВМ должна быть полностью виртуализированной

-p, --paravirt

Эта ВМ должна быть паравиртуализированной

--container

Тип ВМ — контейнер

--virt-type VIRT_TYPE

Тип гипервизора (kvm, qemu и т.п.)

--arch ARCH

Имитируемая архитектура процессора

--machine MACHINE

Имитируемый тип компьютера

Прочие параметры

--autostart

Запускать домен автоматически при запуске хоста

--transient

Создать временный домен

--noautoconsole

Не подключаться к гостевой консоли автоматически

-q, --quiet

Подавлять вывод (за исключением ошибок)

-d, --debug

Вывести отладочные данные

Далее подробно рассматриваются возможности создания ВМ при помощи утилиты командной строки virt-install.

Утилита virt-install поддерживает как графическую установку операционных систем при помощи VNC и Spice, так и текстовую установку через последовательный порт. Гостевая система может быть настроена на использование нескольких дисков, сетевых интерфейсов, аудиоустройств и физических USB и PCI-устройств.

Установочный носитель может располагаться как локально, так и удаленно, например, на NFS, HTTP или FTP-серверах. В последнем случае virt-install получает минимальный набор файлов для запуска установки и позволяет установщику получить отдельные файлы. Поддерживается также загрузка по сети (PXE) и создание виртуальной машины/контейнера без этапа установки ОС или загрузка по сети предустановленной системы.

Утилита virt-install поддерживает большое число опции, позволяющих создать полностью независимую ВМ, готовую к работе, что хорошо подходит для автоматизации установки ВМ.

⁠51.3. Утилита qemu-img [Черновик]

qemu-img — инструмент для манипулирования с образами дисков машин QEMU.

Использование:

qemu-img [standard options] command [command options]

Для манипуляции с образами используются следующие команды:

create — создание нового образа диска;

check — проверка образа диска на ошибки;

convert — конвертация существующего образа диска в другой формат;

info — получение информации о существующем образе диска;

snapshot — управляет снимками состояний (snapshot) существующих образов дисков;

commit — записывает произведенные изменения на существующий образ диска;

rebase — создает новый базовый образ на основании существующего.

qemu-img работает со следующими форматами:

raw — простой формат для дисковых образов, обладающий отличной переносимостью на большинство технологий виртуализации и эмуляции. Только непосредственно записанные секторы будут занимать место на диске. Действительный объем пространства, занимаемый образом, можно определить с помощью команд qemu-img info или ls -ls;

qcow2 — формат QEMU. Этот формат рекомендуется использовать для небольших образов (в частности, если файловая система не поддерживает фрагментацию), дополнительного шифрования AES, сжатия zlib и поддержки множества снимков ВМ;

qcow — старый формат QEMU. Используется только в целях обеспечения совместимости со старыми версиями;

cow — формат COW (Copy On Write). Используется только в целях обеспечения совместимости со старыми версиями;

vmdk — формат образов, совместимый с VMware 3 и 4;

cloop — формат CLOOP (Compressed Loop). Его единственное применение состоит в обеспечении повторного использования сжатых напрямую образов CD-ROM, например, Knoppix CD-ROM.

Команда получения сведений о дисковом образе:

# qemu-img info /var/lib/libvirt/images/alt-server.qcow2
mage: /var/lib/libvirt/images/alt-server.qcow2
file format: qcow2
virtual size: 20 GiB (21474836480 bytes)
disk size: 3.32 MiB
cluster_size: 65536
Format specific information:
    compat: 1.1
    compression type: zlib
    lazy refcounts: true
    refcount bits: 16
    corrupt: false
    extended l2: false

В результате будут показаны сведения о запрошенном образе, в том числе зарезервированный объем на диске, а также информация о снимках ВМ.

Команда создания образа для жесткого диска (динамически расширяемый):

# qemu-img create -f qcow2 /var/lib/libvirt/images/hdd.qcow2 20G

Команда конвертирования образ диска из формата raw в qcow2:

# qemu-img convert -f raw -O qcow2 disk_hd.img disk_hd.qcow2

⁠51.4. Менеджер виртуальных машин virt-manager [Черновик]

Менеджер виртуальных машин virt-manager предоставляет графический интерфейс для доступа к гипервизорам и ВМ в локальной и удаленных системах. С помощью virt-manager можно создавать ВМ. Кроме того, virt-manager выполняет управляющие функции:

выделение памяти;

выделение виртуальных процессоров;

мониторинг производительности;

сохранение и восстановление, приостановка и возобновление работы, запуск и завершение работы виртуальных машин;

доступ к текстовой и графической консоли;

автономная и живая миграция.

Для запуска менеджера виртуальных машин, в меню приложений необходимо выбрать Система → Менеджер виртуальных машин.

Примечание [Черновик]

На управляющей машине должен быть установлен пакет virt-manager.

В главном окне менеджера, при наличии подключения к гипервизору, будут показаны все запущенные ВМ:

Двойной щелчок на имени ВМ открывает её консоль.

⁠Глава 52. Подключение к гипервизору [Черновик]

⁠52.1. Управление доступом к libvirt через SSH [Черновик]

В дополнение к аутентификации SSH также необходимо определить управление доступом для службы libvirt в хост-системе.

Для настройки подключения к удаленному серверу виртуализации на узле, с которого будет производиться подключение, необходимо сгенерировать SSH-ключ и скопировать его публичную часть на сервер. Для этого с правами пользователя, от имени которого будет создаваться подключение, требуется выполнить в консоли следующие команды:

$ ssh-keygen -t ed25519
$ ssh-copy-id user@192.168.0.175

где 192.168.0.175 — IP-адрес сервера с libvirt.

В результате получаем возможность работы с домашними каталогами пользователя user на сервере с libvirt.

Для доступа к libvirt достаточно добавить пользователя user в группу vmusers на сервере, либо скопировать публичный ключ пользователю root и подключаться к серверу по ssh от имени root — root@server.

⁠52.2. Подключение к сессии гипервизора с помощью virsh [Черновик]

Команда подключения к гипервизору:

virsh -c URI

Если параметр URI не задан, то libvirt попытается определить наиболее подходящий гипервизор.

Параметр URI может принимать следующие значения:

qemu:///system — подключиться к службе которая управляет KVM/QEMU-доменами и запущена под root. Этот вариант используется по умолчанию для пользователей virt-manager;

qemu:///session — подключиться к службе которая управляет KVM/QEMU-доменами и запущена от имени непривилегированного пользователя;

lxc:/// — подключиться к гипервизору для создания LXC контейнеров (должен быть установлен пакет libvirt-lxc).

Пример создания локального подключения:

$ virsh -c qemu:///system list --all
 ID   Имя          Состояние
------------------------------
 -    alt-server   выключен

Примечание [Черновик]

Чтобы постоянно не вводить -c qemu:///system можно добавить:

export LIBVIRT_DEFAULT_URI=qemu:///system

Подключение к удаленному гипервизору QEMU через протокол SSH:

$ virsh -c qemu+ssh://user@192.168.0.175/system
Добро пожаловать в virsh — интерактивный терминал виртуализации.

Введите  «help» для получения справки по командам
         «quit», чтобы завершить работу и выйти.

virsh #

где:

user — имя пользователя на удаленном хосте, который входит в группу vmusers;

192.168.0.175 — IP-адрес или имя хоста виртуальных машин.

⁠52.3. Настройка соединения с удаленным гипервизором в virt-manager [Черновик]

На управляющей системе можно запустить virt-manager, выполнив следующую команду:

$ virt-manager -c qemu+ssh://user@192.168.0.175/system

где:

user — имя пользователя на удаленном хосте, который входит в группу vmusers;

192.168.0.175 — IP-адрес или имя хоста виртуальных машин.

virt-manager позволяет управлять несколькими удаленными хостами ВМ.

Подключение virt-manager к удаленным хостам также можно настроить и в графическом интерфейсе менеджера виртуальных машин. Для создания нового подключения необходимо в меню менеджера выбрать Файл → Добавить соединение….

В открывшемся окне следует выбрать сессию гипервизора, отметить пункт Подключиться к удаленному хосту с помощью SSH, ввести имя пользователя и адрес сервера и нажать кнопку Подключиться:

⁠Глава 53. Создание виртуальных машин [Черновик]

Наиболее важным этапом в процессе использования виртуализации является создание ВМ. Именно при создании ВМ задается используемый тип виртуализации, способы доступа к ВМ, подключение к локальной сети и другие характеристики виртуального оборудования.

Установка ВМ может быть запущена из командной строки с помощью программ virsh и virt-install или из пользовательского интерфейса программы virt-manager.

⁠53.1. Создание ВМ на основе файла конфигурации (утилита virsh) [Черновик]

ВМ могут быть созданы из файлов конфигурации. Для этого конфигурация ВМ должна быть описана в XML формате.

Команда создания ВМ из XML файла:

$ virsh create guest.xml
Domain 'altK' created from guest.xml

Для получения файла конфигурации можно сделать копию существующего XML-файла ранее созданной ВМ, или использовать опцию dumpxml:

virsh dumpxml <domain>

Эта команда выводит XML-файл конфигурации ВМ в стандартный вывод (stdout). Можно сохранить эти данные, отправив вывод в файл.

Пример передачи вывода в файл guest.xml:

$ virsh -c qemu:///system dumpxml alt-server > guest.xml

Можно отредактировать этот файл конфигурации, чтобы настроить дополнительные устройства или развернуть дополнительные ВМ.

Примечание [Черновик]

Подключение к ВМ по протоколу SPICE и VNC рассмотрено в разделе Подключение к виртуальному монитору ВМ

⁠53.2. Создание ВМ с помощью virt-install [Черновик]

Минимальные требуемые опции для создания ВМ: --name, --ram, хранилище (--disk, --filesystem или --nodisks) и опции установки.

Чтобы использовать команду virt-install, необходимо сначала загрузить ISO-образ той ОС, которая будет устанавливаться.

Команда создания ВМ:

# virt-install --connect qemu:///system
--name alt-server \
--os-type=linux \
--os-variant=alt10.0 \
--cdrom /var/lib/libvirt/boot/alt-server-10.2-x86_64.iso \
--graphics vnc\
--disk pool=default,size=20,bus=virtio,format=qcow2 \
--ram 2048 \
--vcpus=2 \
--network network=default \
--hvm \
--virt-type=kvm

где:

--name alt-server — название ВМ;

--os-type=linux — тип ОС;

--os-variant=alt10.0 — версия ОС;

--cdrom /var/lib/libvirt/boot/alt-server-10.2-x86_64.iso — путь к ISO-образу установочного диска ОС;

--graphics vnc — графическая консоль;

--disk pool=default,size=20,bus=virtio,format=qcow2 — хранилище. ВМ будет создана в пространстве хранения объемом 20 ГБ, которое автоматически выделяется из пула хранилищ default. Образ диска для этой виртуальной машины будет создан в формате qcow2;

--ram 2048 — объем оперативной памяти;

--vcpus=2 — количество процессоров;

--network network=default — виртуальная сеть default;

--hvm — полностью виртуализированная система;

--virt-type=kvm — использовать модуль ядра KVM, который задействует аппаратные возможности виртуализации процессора.

Последние две опции команды virt-install оптимизируют ВМ для использования в качестве полностью виртуализированной системы (--hvm) и указывают, что KVM является базовым гипервизором (--virt-type) для поддержки новой ВМ. Обе этих опции обеспечивают определенную оптимизацию в процессе создания и установки операционной системы; если эти опции не заданы в явном виде, то вышеуказанные значения применяются по умолчанию.

Список доступных вариантов ОС можно получить, выполнив команду:

$ osinfo-query os

Запуск Live CD в ВМ без дисков:

# virt-install \
 --hvm \
 --name demo \
 --ram 500 \
 --nodisks \
 --livecd \
 --graphics vnc \
 --cdrom /var/lib/libvirt/boot/altlive.iso

Запуск /usr/bin/httpd в контейнере (LXC), с ограничением памяти в 512 МБ и двумя ядрами хост-системы:

# virt-install \
 --connect lxc:/// \
 --name httpd_guest \
 --ram 512 \
 --vcpus 2 \
 --init /usr/bin/httpd

Создать ВМ, используя существующий том хранилища:

# virt-install \
 --name demo \
 --ram 512 \
 --disk /home/user/VMs/mydisk.img \
 --import

⁠53.3. Создание ВМ с помощью virt-manager [Черновик]

Новую ВМ можно создать, нажав кнопку Создать виртуальную машину в главном окне virt-manager, либо выбрав в меню Файл → Создать виртуальную машину.

На первом шаге создания ВМ необходимо выбрать метод установки ОС и нажать кнопку Вперёд:

В следующем окне для установки гостевой ОС требуется указать ISO-образ установочного диска ОС или CD/DVD-диск с дистрибутивом:

Данное окно будет выглядеть по-разному в зависимости от выбора, сделанного на предыдущем этапе. Здесь также можно указать версию устанавливаемой ОС.

На третьем шаге необходимо указать размер памяти и количество процессоров для ВМ:

Эти значения влияют на производительность хоста и ВМ.

На следующем этапе настраивается пространство хранения данных:

На последнем этапе можно задать название ВМ, выбрать сеть и нажать кнопку Готово:

В результате созданная ВМ будет запущена и после завершения исходной загрузки начнется стандартный процесс установки ОС:

Окружение локального рабочего стола способно перехватывать комбинации клавиш (например, Ctrl+Alt+F11) для предотвращения их отправки гостевой машине. Чтобы отправить такие последовательности, используется свойство «западания» клавиш virt-manager. Для перевода клавиши в нажатое состояние необходимо нажать клавишу модификатора (Ctrl или Alt) 3 раза. Клавиша будет считаться нажатой до тех пор пока не будет нажата любая клавиша, отличная от модификатора. Таким образом, чтобы передать гостевой системе комбинацию Ctrl+Alt+F11, необходимо последовательно нажать Ctrl+Ctrl+Ctrl+Alt+F11 или воспользоваться меню Отправить комбинацию клавиш.

⁠Глава 54. Запуск и управление функционированием ВМ [Черновик]

⁠54.1. Управление состоянием ВМ в командной строке [Черновик]

Команды управления состоянием ВМ:

start — запуск ВМ;

shutdown — завершение работы. Поведение выключаемой ВМ можно контролировать с помощью параметра on_shutdown (в файле конфигурации);

destroy — принудительная остановка. Использование virsh destroy может повредить гостевые файловые системы. Рекомендуется использовать опцию shutdown;

reboot — перезагрузка ВМ. Поведение перезагружаемой ВМ можно контролировать с помощью параметра on_reboot (в файле конфигурации);

suspend — приостановить ВМ. Когда ВМ находится в приостановленном состоянии, она потребляет системную оперативную память, но не ресурсы процессора;

resume — возобновить работу приостановленной ВМ;

save — сохранение текущего состояния ВМ. Эта команда останавливает ВМ, сохраняет данные в файл, что может занять некоторое время (зависит от объема ОЗУ ВМ);

restore — восстановление ВМ, ранее сохраненной с помощью команды virsh save. Сохраненная машина будет восстановлена из файла и перезапущена (это может занять некоторое время). Имя и идентификатор UUID ВМ останутся неизменными, но будет предоставлен новый идентификатор домена;

undefine — удалить ВМ (конфигурационный файл тоже удаляется);

autostart — добавить ВМ в автозагрузку;

autostart --disable — удалить из автозагрузки;

В результате выполнения следующих команд, ВМ alt-server будет остановлена и затем удалена:

# virsh destroy alt-server
# virsh undefine alt-server

⁠54.2. Управление состоянием ВМ в менеджере виртуальных машин [Черновик]

Для запуска ВМ в менеджере виртуальных машин virt-manager, необходимо выбрать ВМ из списка и нажать на кнопку Включить виртуальную машину:

Для управления запущенной ВМ используются соответствующие кнопки панели инструментов virt-manager:

Управлять состоянием ВМ можно, выбрав соответствующий пункт в контекстном меню ВМ:

⁠54.3. Подключение к виртуальному монитору ВМ [Черновик]

Доступ к рабочему столу ВМ может быть организован по протоколам VNC и SPICE.

К каждой из ВМ можно подключиться, используя один IP-адрес и разные порты. Порт доступа к ВМ может быть назначен вручную или автоматически. Удаленный доступ к ВМ можно защитить паролем.

⁠54.3.1. Использование протокола SPICE [Черновик]

Чтобы добавить поддержку SPICE в существующую ВМ, необходимо отредактировать её конфигурацию:

# virsh edit alt-server

Добавить графический элемент SPICE, например:

<graphics type='spice' port='5900' autoport='yes' listen='127.0.0.1'>
    <listen type='address' address='127.0.0.1'/>
</graphics>

Добавить видеоустройство QXL:

<video>
    <model type='qxl'/>
</video>

После остановки и перезапуска ВМ она должна быть доступна через SPICE. Проверка параметров подключения к ВМ:

# virsh domdisplay alt-server
spice://127.0.0.1:5900

В данном примере доступ к ВМ будет возможен только с локального адреса (127.0.0.1). Для удаленного подключения к ВМ SPICE-сервер должен обслуживать запросы с общедоступных сетевых интерфейсов. Для возможности подключения с других машин в конфигурации ВМ ,необходимо указать адрес 0.0.0.0:

<graphics type='spice' port='5900' autoport='yes' listen='0.0.0.0' passwd='mypasswd'>
    <listen type='address' address='0.0.0.0'/>
</graphics>

Изменение настроек доступа к рабочему столу в менеджере ВМ:

Для подключения к SPICE-серверу может использоваться встроенный в virt-manager просмотрщик или любой SPICE-клиент. Примеры подключений (на хосте, с которого происходит подключение, должен быть установлен пакет virt-viewer):

$ virt-viewer -c qemu+ssh://user@192.168.0.175/system -d alt-server

$ remote-viewer "spice://192.168.0.175:5900"

Примечание [Черновик]

При использовании любого SPICE-клиента подключение происходит к порту и адресу хоста KVM, а не к фактическому имени/адресу ВМ.

⁠54.3.2. Использование протокола VNC [Черновик]

Пример настройки доступа к рабочему столу ВМ по протоколу VNC, в файле конфигурации ВМ:

<graphics type='vnc' port='5900' autoport='no' listen='0.0.0.0' passwd='mypasswd'>
    <listen type='address' address='0.0.0.0'/>
</graphics>

Изменение настроек доступа к рабочему столу в менеджере ВМ:

Проверка параметров подключения к ВМ:

# virsh domdisplay alt-server
vnc://localhost:0

Для подключения к VNC-серверу может использоваться встроенный в virt-manager просмотрщик или любой VNC-клиент. Примеры подключений (на хосте, с которого происходит подключение, должны быть соответственно установлены пакеты virt-viewer или tigervnc):

$ virt-viewer -c qemu+ssh://user@192.168.0.175/system -d alt-server

$ vncviewer 192.168.0.175:5900

⁠Глава 55. Управление ВМ [Черновик]

⁠55.1. Редактирование файла конфигурации ВМ [Черновик]

ВМ могут редактироваться либо во время работы, либо в автономном режиме. Эту функциональность предоставляет команда virsh edit. Например, команда редактирования ВМ с именем alt-server:

# virsh edit alt-server

В результате выполнения этой команды откроется окно текстового редактора, заданного переменной оболочки $EDITOR.

⁠55.2. Получение информации о ВМ [Черновик]

Команда для получения информации о ВМ:

virsh dominfo <domain>

где [--domain] <строка> — имя, ID или UUID домена.

Пример вывода virsh dominfo:

# virsh dominfo alt-server
ID:             3
Имя:         alt-server
UUID:           ccb6bf9e-1f8d-448e-b5f7-fa274703500b
Тип ОС:    hvm
Состояние: работает
CPU:            2
Время CPU: 90,9s
Макс.память: 2097152 KiB
Занято памяти: 2097152 KiB
Постоянство: yes
Автозапуск: выкл.
Управляемое сохранение: no
Модель безопасности: none
DOI безопасности: 0

Получение информации об узле:

# virsh nodeinfo
Модель процессора: x86_64
CPU:                 8
Частота процессора: 2827 MHz
Сокеты:        1
Ядер на сокет: 4
Потоков на ядро: 2
Ячейки NUMA:   1
Объём памяти: 8007952 KiB

Просмотр списка ВМ:

virsh list

Опции команды virsh list:

--inactive — показать список неактивных доменов;

--all — показать все ВМ независимо от их состояния.

Пример вывода virsh list:

# virsh list --all
 ID   Имя          Состояние
--------------------------
 3    alt-server   работает

Столбец «Состояние» может содержать следующие значения:

работает (running) — работающие ВМ, то есть те машины, которые используют ресурсы процессора в момент выполнения команды;

blocked — заблокированные, неработающие машины. Такой статус может быть вызван ожиданием ввода/вывода или пребыванием машины в спящем режиме;

приостановлен (paused) — приостановленные домены. В это состояние они переходят, если администратор нажал кнопку паузы в окне менеджера ВМ или выполнил команду virsh suspend. В приостановленном состоянии ВМ продолжает потреблять ресурсы, но не может занимать больше процессорных ресурсов;

выключен (shutdown) — ВМ, завершающие свою работу. При получении ВМ сигнала завершения работы, она начнет завершать все процессы (некоторые операционные системы не отвечают на такие сигналы);

dying — сбойные домены и домены, которые не смогли корректно завершить свою работу;

crashed — сбойные домены, работа которых была прервана. В этом состоянии домены находятся, если не была настроена их перезагрузка в случае сбоя.

Получение информации о виртуальных процессорах:

virsh vcpuinfo <domain>

Пример вывода:

# virsh vcpuinfo alt-server
Виртуальный процессор:: 0
CPU:            6
Состояние: работает
Время CPU: 67,6s
Соответствие ЦП: yyyyyyyy

Виртуальный процессор:: 1
CPU:            7
Состояние: работает
Время CPU: 7,1s
Соответствие ЦП: yyyyyyyy

Команда сопоставления виртуальных процессоров физическим:

virsh vcpupin <domain> [--vcpu <число>] [--cpulist <строка>] [--config] [--live] [--current]

Здесь:

[--domain] <строка> — имя, ID или UUID домена;

--vcpu <число> — номер виртуального процессора;

--cpulist <строка> — номера физических процессоров. Если номера не указаны, команда вернет текущий список процессоров;

--config — с сохранением после перезагрузки;

--live — применить к работающему домену;

--current — применить к текущему домену.

Пример вывода:

 # virsh vcpupin alt-server
 Виртуальный процессор:   Соответствие ЦП
-------------------------------------------
 0                          0-7
 1                          0-7

Команда изменения числа процессоров для домена (заданное число не может превышать значение, определенное при создании ВМ):

virsh setvcpus <domain> <count> [--maximum] [--config] [--live] [--current] [--guest] [--hotpluggable]

где:

[--domain] <строка> — имя, ID или UUID домена;

[--count] <число> — число виртуальных процессоров;

--maximum — установить максимальное ограничение на количество виртуальных процессоров, которые могут быть подключены после следующей перезагрузки домена;

--guest — состояние процессоров ограничивается гостевым доменом.

Команда изменения выделенного ВМ объема памяти:

virsh setmem <domain> <size> [--config] [--live] [--current]

где:

[--domain] <строка> — имя, ID или UUID домена;

[--size] <число> — целое значение нового размера памяти (по умолчанию в КБ).

Объем памяти, определяемый заданным числом, должен быть указан в килобайтах. Объем не может превышать значение, определенное при создании ВМ, но в то же время не должен быть меньше 64 МБ. Изменение максимального объема памяти может оказать влияние на функциональность ВМ только в том случае, если указанный размер меньше исходного. В таком случае использование памяти будет ограничено.

Команда изменения максимально допустимого размера выделяемой памяти:

virsh setmaxmem <domain> <size> [--config] [--live] [--current]

где:

[--domain] <строка> — имя, ID или UUID домена;

[--size] <число> — целое значение максимально допустимого размера памяти (по умолчанию в КБ).

Примеры изменения размера оперативной памяти и количества виртуальных процессоров соответственно:

# virsh setmaxmem --size 624000 alt-server
# virsh setmem --size 52240 alt-server
# virsh setvcpus --config alt-server 3 --maximum

Команда для получения информации о блочных устройствах работающей ВМ:

virsh domblkstat <domain> [--device <строка>] [--human]

где:

[--domain] <строка> — имя, ID или UUID домена;

--device <строка> — блочное устройство;

--human — форматировать вывод.

Команда для получения информации о сетевых интерфейсах работающей ВМ:

virsh domifstat <domain> <interface>

где:

[--domain] <строка> — имя, ID или UUID домена;

[--interface] <строка> — устройство интерфейса, указанное по имени или MAC-адресу.

⁠55.3. Конфигурирование ВМ в менеджере виртуальных машин [Черновик]

С помощью менеджера виртуальных машин можно получить доступ к подробной информации о всех ВМ, для этого следует:

В главном окне менеджера выбрать ВМ.

Нажать кнопку Открыть:

В открывшемся окне нажать кнопку Показать виртуальное оборудование:

Появится окно просмотра сведений ВМ.

Для изменения требуемого параметра необходимо перейти на нужную вкладку, внести изменения и подтвердить операцию, нажав кнопку Применить:

⁠55.4. Мониторинг состояния [Черновик]

С помощью менеджера виртуальных машин можно изменить настройки контроля состояния ВМ.

Для этого в меню Правка следует выбрать пункт Настройки, в открывшемся окне на вкладке Статистика можно задать время обновления состояния ВМ в секундах:

На вкладке Консоль можно выбрать, как открывать консоль, и указать устройство ввода:

⁠Глава 56. Управление виртуальными сетевыми интерфейсами и сетями [Черновик]

Виртуальная сеть Libvirt использует концепцию виртуального сетевого коммутатора. Коммутатор виртуальной сети — это программная конструкция, которая работает на сервере физической машины. К коммутатору виртуальной сети подключаются ВМ. Сетевой трафик для ВМ направляется через этот коммутатор:

В конфигурации по умолчанию (виртуальная сеть default на основе NAT) гостевая ОС будет иметь доступ к сетевым службам, но не будет видна другим машинам в сети. Сетевым интерфейсом по умолчанию, представляющим виртуальный сетевой коммутатор, является virbr0:

$ ip addr show virbr0
9: virbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 52:54:00:6e:93:97 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever

По умолчанию гостевая ОС получит IP-адрес в адресном пространстве 192.168.122.0/24, а хостовая ОС будет доступна по адресу 192.168.122.1. Из гостевой ОС можно подключиться по SSH к хостовой ОС (по адресу 192.168.122.1) и использовать scp для копирования файлов туда и обратно.

IP-адереса могут быть назначены ВМ DHCP. Для этой цели виртуальному сетевому коммутатору можно назначить пул адресов.

Примечание [Черновик]

Виртуальную сеть можно ограничить определенным физическим интерфейсом, если в физической системе есть несколько сетевых интерфейсов (например, eth0, eth1 и eth2), Физический интерфейс может быть определён в параметре dev=<interface> или в virt-manager при создании новой виртуальной сети.

Возможные варианты настройки сети:

NAT — вариант по умолчанию. Внутренняя сеть, предоставляющая доступ к внешней сети с автоматическим применением NAT;

Маршрутизация (Routed) — аналогично режиму NAT внутренняя сеть, предоставляющая доступ к внешней сети, но без NAT. Предполагает дополнительные настройки таблиц маршрутизации во внешней сети;

Изолированный (Isolated) — в этом режиме ВМ, подключенные к виртуальному коммутатору, могут общаться между собой и с хостом. При этом их трафик не будет выходить за пределы хоста;

Сеть на основе моста (Bridge) — подключение типа мост. Позволяет реализовать множество различных конфигураций, в том числе и назначение IP из реальной сети;

Буфер SR-IOV (Single-root IOV) — перенаправление одной PCI сетевых карт хост-машины на ВМ. Технология SR-IOV повышает производительность сетевой виртуализации, избавляя гипервизор от обязанности организовывать совместное использование физического адаптера и перекладывая задачу реализации мультиплексирования на сам адаптер. В этом случае обеспечивается прямая пересылка ввода/вывода с ВМ непосредственно на адаптер.

Подробнее о настройках виртуальной сети в разных режимах см. раздел Режимы работы виртуальной сети.

⁠56.1. Управление виртуальными сетями в командной строке [Черновик]

Команды управления виртуальными сетями:

virsh net-autostart имя_сети — автоматический запуск заданной сети;

virsh net-autostart имя_сети --disable — отключить автозапуск заданной сети;

virsh net-create файл_XML — создание и запуск новой сети на основе существующего XML-файла;

virsh net-define файл_XML — создание нового сетевого устройства на основе существующего XML-файла (устройство не будет запущено);

virsh net-destroy имя_сети — удаление заданной сети;

virsh net-dumpxml имя_сети —просмотр информации о заданной виртуальной сети (в формате xml);

virsh net-info имя_сети — просмотр основной информации о заданной виртуальной сети;

virsh net-list — просмотр списка виртуальных сетей;

virsh net-name UUID_сети — преобразование заданного идентификатора в имя сети;

virsh net-start имя_неактивной_сети — запуск неактивной сети;

virsh net-uuid имя_сети — преобразование заданного имени в идентификатор UUID;

virsh net-update имя_сети — обновить существующую конфигурацию сети;

virsh net-undefine имя_неактивной_сети — удаление определения неактивной сети.

Примеры:

# virsh net-list --all
Имя       Состояние    Автозапуск   Постоянный
-------------------------------------------------
default   не активен   no           yes

# virsh net-start default
Сеть default запущена

# virsh net-autostart default
Добавлена метка автоматического запуска сети default

# virsh net-list
Имя       Состояние   Автозапуск   Постоянный
------------------------------------------------
default   активен     yes          yes

# virsh net-dumpxml default
<network connections='1'>
<name>default</name>
<uuid>8880a2ae-a71d-4be4-8006-30cf095f77a4</uuid>
<forward mode='nat'>
<nat>
    <port start='1024' end='65535'/>
</nat>
</forward>
<bridge name='virbr0' stp='on' delay='0'/>
<mac address='52:54:00:3e:12:c7'/>
<ip address='192.168.122.1' netmask='255.255.255.0'>
<dhcp>
    <range start='192.168.122.2' end='192.168.122.254'/>
</dhcp>
</ip>
</network>

# virsh net-info default
Имя:         default
UUID:           8880a2ae-a71d-4be4-8006-30cf095f77a4
Активен: yes
Постоянство: yes
Автозапуск: yes
Мост:       virbr0

Иногда бывает полезно выдавать клиенту один и тот же IP-адрес независимо от момента обращения. Пример добавления статического сопоставления MAC- и IP-адреса ВМ:

Получить MAC-адрес ВМ (alt-server — имя ВМ):

# virsh dumpxml alt-server | grep 'mac address'
    <mac address='52:54:00:ba:f2:76'/>

Отредактировать XML-конфигурацию сети (default — имя сети):

# virsh net-edit default

После строки:

<range start='192.168.122.2' end='192.168.122.254'/>

Вставить строки с MAC-адресами виртуальных адаптеров:

<host mac='52:54:00:ba:f2:76' name='alt-server' ip='192.168.122.50'/>

Сохранить изменения и перезапустить виртуальную сеть:

# virsh net-destroy default
# virsh net-start default

Изменения, внесённые с помощью команды virsh net-edit, не вступят в силу в силу до тех пор, пока сеть не будет перезапущена, что приведет к потере всеми ВМ сетевого подключения к хосту до тех пор, пока их сетевые интерфейсы повторно не подключаться.

Изменения в конфигурацию сети можно внести с помощью команды virsh net-update, которая требует немедленного применения изменений. Например, чтобы добавить запись статического хоста, можно использовать команду:

# virsh net-update default add ip-dhcp-host \
"<host mac='52:54:00:ba:f2:76' name='alt-server' ip='192.168.122.50' />" \
--live --config

⁠56.2. Управление виртуальными сетями в менеджере виртуальных машин [Черновик]

В менеджере виртуальных машин virt-manager существует возможность настройки виртуальных сетей для обеспечения сетевого взаимодействия ВМ как между собой, так и с хостовой ОС.

Для настройки виртуальной сети с помощью virt-manager необходимо:

В меню Правка выбрать пункт Свойства подключения:

В открывшемся окне перейти на вкладку Виртуальные сети:

Доступные виртуальные сети будут перечислены в левой части окна. Для доступа к настройкам сети необходимо выбрать сеть.

Для добавления новой виртуальной сети следует нажать кнопку Добавить сеть Добавить сеть , расположенную в нижнем левом углу диалогового окна Сведения о подключении.

В открывшемся окне следует ввести имя для новой сети и задать необходимые настройки: выбрать способ подключения виртуальной сети к физической, ввести пространство адресов IPv4 для виртуальной сети, указать диапазон DHCP, задав начальный и конечный адрес и нажать кнопку Готово:

⁠56.3. Режимы работы виртуальной сети [Черновик]

⁠56.3.1. Сеть на основе моста [Черновик]

Сеть на основе моста позволяет виртуальным интерфейсам подключаться к внешней сети через физический интерфейс, поэтому виртуальные интерфейсы выглядят как обычные хосты для остальной части сети.

Примечание [Черновик]

Сервер libvirt должен быть подключен к локальной сети через Ethernet. Если подключение осуществляется по беспроводной сети, следует использовать сеть с маршрутизацией или сеть на основе NAT.

Мост возможен только в том случае, если имеется достаточно IP-адресов, чтобы выделить один для каждой ВМ.

На сервере libvirt необходимо настроить Eternet-мост. Сделать это можно, например, воспользовавшись модулем ЦУС Сетевые мосты (см. раздел Сетевые мосты).

Созданный Eternet-мост можно указать при создании ВМ, например:

# virt-install --network bridge=vmbr0 ...

Для уже существующей ВМ можно указать Eternet-мост, отредактировав конфигурацию XML для ВМ. Для этого необходимо:

открыть конфигурацию XML ВМ в текстовом редакторе:

# virsh edit alt-server

найти раздел <interface>:

<interface type='network'>
    <mac address='52:54:00:85:11:34'/>
    <source network='default'/>
    <model type='virtio'/>
    <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
</interface>

если необходимо изменить существующий интерфейс, заменить type='network' на type='bridge' и <source network='default'/> на <source bridge='vmbr0'/> (vmbr0 — интерфейс моста):

<interface type='bridge'>
    <mac address='52:54:00:85:11:34'/>
    <source bridge="vmbr0"/>
    <model type='virtio'/>
    <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
</interface>

если необходимо добавить дополнительный интерфейс Ethernet, добавить новый раздел <interface> (libvirt сгенерирует случайный MAC-адрес для нового интерфейса, если <mac> опущен):

<interface type='bridge'>
    <source bridge="vmbr0"/>
</interface>

Чтобы указать Eternet-мост в менеджере виртуальных машин virt-manager, необходимо в окне настройки сетевого интерфейса ВМ в выпадающем списке Создать на базе выбрать пункт Устройство моста... и в поле Название устройства указать интерфейс моста:

⁠56.3.2. Маршрутизируемая сеть [Черновик]

Маршрутизируемую сеть следует использовать только тогда, когда использовать сеть на базе моста невозможно (либо из-за ограничений хостинг-провайдера, либо из-за того, что сервер libvirt подключен к локальной сети по беспроводной сети.) При настройке маршрутизируемой сети все ВМ находятся в одной подсети, маршрутизируемой через виртуальный коммутатор. Пакеты, предназначенные для этих адресов, статически маршрутизируются на сервер libvirt и пересылаются на ВМ (без использования NAT).

Маршрутизируемая сеть возможна только в том случае, если имеется достаточно IP-адресов, чтобы выделить один для каждой ВМ.

В первую очередь необходимо выбрать, какие IP-адреса сделать доступными для ВМ (в примере 192.168.30.0/24). Так как маршрутизатор локальной сети не знает, что выбранная подсеть расположена на сервере libvirt, необходимо настроить статический маршрут на маршрутизаторе локальной сети, например:

# ip -4 route add 192.168.30.0/24 via 192.168.0.175

Далее необходимо создать виртуальную сеть.

Настройка виртуальной сети в консоли:

Создать файл /tmp/routed_network.xml со следующим содержимым:

<network>
<name>routed_network</name>
<forward mode="route"/>
<ip address="192.168.30.0" netmask="255.255.255.0">
<dhcp>
<range start="192.168.30.128" end="192.168.30.254"/>
</dhcp>
</ip>
</network>

Определить новую сеть, используя файл /tmp/routed_network.xml:

# virsh net-define /tmp/routed_network.xml
Сеть routed_network определена на основе /tmp/routed_network.xml

# virsh net-autostart routed_network
Добавлена метка автоматического запуска сети routed_network

# virsh net-start routed_network
Сеть routed_network запущена

Настройка виртуальной сети в virt-manager:

Созданную виртальную сеть можно назначить ВМ.

Назначение маршрутизируемой сети в консоли:

Новая ВМ:

# virt-install --network network=routed_network ...

Существующая ВМ:

открыть конфигурацию XML ВМ в текстовом редакторе:

# virsh edit alt-server

найти раздел <interface>:

<interface type='network'>
<mac address='52:54:00:85:11:34'/>
<source network='default'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
</interface>

если необходимо изменить существующий интерфейс, заменить название сети на routed_network:

<interface type='network'>
<mac address='52:54:00:85:11:34'/>
<source network='routed_network'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
</interface>

если необходимо добавить дополнительный интерфейс Ethernet, добавить новый раздел <interface>, (libvirt сгенерирует случайный MAC-адрес для нового интерфейса, если <mac> опущен):

<interface type='network'>
<source bridge="routed_network"/>
</interface>

Назначение маршрутизируемой сети в virt-manager:

⁠56.3.3. Сеть на основе NAT [Черновик]

Сеть на основе NAT идеальна, когда требуется только доступ из ВМ к внешней сети. При этом сервер libvirt действует как маршрутизатор, и трафик ВМ исходит с IP-адреса сервера.

Виртуальная сеть default (доступна после установки libvirt) основана на NAT. Можно также создать собственную сеть на основе NAT.

Настройка виртуальной сети на основе NAT:

В консоли:

Создать файл /tmp/nat_network.xml со следующим содержимым:

<network>
<name>nat_network</name>
<forward mode="nat"/>
<ip address="192.168.20.1" netmask="255.255.255.0">
<dhcp>
    <range start="192.168.20.128" end="192.168.20.254"/>
</dhcp>
</ip>
</network>

Определить новую сеть, используя файл /tmp/nat_network.xml:

# virsh net-define /tmp/nat_network.xml
# virsh net-autostart nat_network
# virsh net-start nat_network

В virt-manager:

Настройка ВМ:

В консоли:

Новая ВМ:

# virt-install --network network=nat_network ...

Существующая ВМ:

открыть конфигурацию XML ВМ в текстовом редакторе:

# virsh edit alt-server

найти раздел <interface>:

<interface type='network'>
    <mac address='52:54:00:85:11:34'/>
    <source network='default'/>
    <model type='virtio'/>
    <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
</interface>

если необходимо изменить существующий интерфейс, заменить название сети на nat_network:

<interface type='network'>
    <mac address='52:54:00:85:11:34'/>
    <source network='nat_network'/>
    <model type='virtio'/>
    <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
</interface>

если необходимо добавить дополнительный интерфейс Ethernet, добавить новый раздел <interface> (libvirt сгенерирует случайный MAC-адрес для нового интерфейса, если <mac> опущен):

<interface type='network'>
    <source bridge="nat_network"/>
</interface>

В virt-manager:

⁠56.3.4. Изолированная сеть [Черновик]

При использовании изолированного режима ВМ, подключенные к виртуальному коммутатору, могут взаимодействовать друг с другом и с физической машиной хоста, но их трафик не будет проходить за пределы физической машины хоста, и они не могут получать трафик извне физической машины хоста.

Настройка изолированной сети:

В консоли:

Создать файл /tmp/isolated_network.xml со следующим содержимым:

<network>
<name>isolated_network</name>
<ip address="192.168.100.1" netmask="255.255.255.0">
<dhcp>
    <range start="192.168.100.128" end="192.168.100.254"/>
</dhcp>
</ip>
</network>

Определить новую сеть, используя файл /tmp/isolated_network.xml:

# virsh net-define /tmp/isolated_network.xml
# virsh net-autostart isolated_network
# virsh net-start isolated_network

В virt-manager:

Настройка ВМ:

В консоли:

Новая ВМ:

# virt-install --network network=isolated_network ...

Существующая ВМ:

открыть конфигурацию XML ВМ в текстовом редакторе:

# virsh edit alt-server

найти раздел <interface>:

<interface type='network'>
    <mac address='52:54:00:85:11:34'/>
    <source network='default'/>
    <model type='virtio'/>
    <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
</interface>

если необходимо изменить существующий интерфейс, заменить название сети на nat_network:

<interface type='network'>
    <mac address='52:54:00:85:11:34'/>
    <source network='isolated_network'/>
    <model type='virtio'/>
    <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
</interface>

если необходимо добавить дополнительный интерфейс Ethernet, добавить новый раздел <interface> (libvirt сгенерирует случайный MAC-адрес для нового интерфейса, если <mac> опущен):

<interface type='network'>
    <source bridge="isolated_network"/>
</interface>

В virt-manager:

⁠Глава 57. Управление хранилищами [Черновик]

API-интерфейс libvirt обеспечивает удобную абстракцию для размещения образов ВМ и файловых систем, которая носит название storage pools (пул хранилищ). Пул хранилищ — это локальный каталог, локальное устройство хранения данных (физический диск, логический том или хранилище на основе хост-адаптера шины SCSI [SCSI HBA]), файловая система NFS (network file system), либо сетевое хранилище блочного уровня, управляемое посредством libvirt и позволяющее создать и хранить один или более образов ВМ.

По умолчанию команды на базе libvirt используют в качестве исходного пула хранилищ для каталога файловой системы каталог /var/lib/libvirt/images на хосте виртуализации.

Образ диска — это снимок данных диска ВМ, сохраненный в том или ином формате. libvirt понимает несколько форматов образов. Так же возможна работа с образами CD/DVD дисков. Каждый образ хранится в том или ином хранилище.

Типы хранилищ, с которыми работает libvirt:

dir — каталог в файловой системе;

disk — физический диск;

fs — отформатированное блочное устройство;

gluster — файловая система Gluster;

isci — хранилище iSCSI;

logical — группа томов LVM;

mpath — регистратор многопутевых устройств;

netfs — экспорт каталога из сети;

rbd — блочное устройство RADOS/Ceph;

scsi — хост-адаптер SCSI;

sheepdog — файловая система Sheepdog;

zfs — пул ZFS.

⁠57.1. Управление хранилищами в командной строке [Черновик]

⁠

Таблица 57.1. Утилита командной строки virsh. Команды управления хранилищами [Черновик]

Команда

Описание

pool-define

Определить неактивный постоянный пул носителей на основе файла XML

pool-create

Создать пул из файла XML

pool-define-as

Определить пул на основе набора аргументов

pool-create-as

Создать пул на основе набора аргументов

pool-dumpxml

Вывести файл конфигурации XML для заданного пула

pool-list

Вывести список пулов

pool-build

Собрать пул

pool-start

Запустить ранее определённый неактивный пул

pool-autostart

Автозапуск пула

pool-destroy

Разрушить (остановить) пул

pool-delete

Удалить пул

pool-edit

Редактировать XML-конфигурацию пула носителей

pool-info

Просмотр информации о пуле носителей

pool-refresh

Обновить пул

pool-undefine

Удалить определение неактивного пула

Команда virsh pool-define-as создаст файл конфигурации для постоянного пула хранения. Позже этот пул можно запустить командой virsh pool-start, настроить его на автоматический запуск при загрузке хоста, остановить командой virsh pool-destroy.

Команда virsh pool-create-as создаст временный пул хранения (файл конфигурации не будет создан), который будет сразу запущен. Этот пул хранения будет удалён командой virsh pool-destory. Временный пул хранения нельзя запустить автоматически при загрузке. Преобразовать существующий временный пул в постоянный, можно создав файл XML-описания:

virsh pool-dumpxml имя_пула > имя_пула.xml && virsh pool-define имя_пула.xml

Пример создания пула хранения на основе NFS (netfs):

# virsh pool-create-as NFS-POOL netfs \
--source-host 192.168.0.105 \
--source-path /export/storage \
--target /var/lib/libvirt/images/NFS-POOL
Пул NFS-POOL создан

Первый аргумент (NFS-POOL) идентифицирует имя нового пула, второй аргумент идентифицирует тип создаваемого пула. Аргумент опции --source-host идентифицирует хост, который экспортирует каталог пула хранилищ посредством NFS. Аргумент опции --source-path определяет имя экспортируемого каталога на этом хосте. Аргумент опции --target идентифицирует локальную точку монтирования, которая будет использоваться для обращения к пулу хранилищ (этот каталог должен существовать).

Примечание [Черновик]

Для возможности монтирования NFS хранилища должен быть запущен nfs-client:

# systemctl enable --now nfs-client.target

После создания нового пула он будет указан в выводе команды virsh pool-list:

# virsh pool-list --all --details
Имя        Состояние   Автозапуск   Постоянный   Размер      Распределение   Доступно
-----------------------------------------------------------------------------------------
default    работает    yes          yes          225,60 GiB   190,71 GiB      34,89 GiB
NFS-POOL   работает    yes          yes          48,91 GiB    25,00 GiB       23,92 GiB

В выводе команды видно, что опция Автозапуск (Autostart) для пула хранилищ NFS-POOL имеет значение no (нет), т. е. после перезапуска системы этот пул не будет автоматически доступен для использования, и что опция Постоянный (Persistent) также имеет значение no, т. е. после перезапуска системы этот пул вообще не будет определен. Пул хранилищ является постоянным только в том случае, если он сопровождается XML-описанием пула хранилищ, которое находится в каталоге /etc/libvirt/storage. XML-файл описания пула имеет такое же имя, как у пула хранилищ, с которым он ассоциирован.

Чтобы создать файл XML-описания для сформированного в ручном режиме пула, следует воспользоваться командой virsh pool-dumpxml, указав в качестве ее заключительного аргумента имя пула, для которого нужно получить XML-описание. Эта команда осуществляет запись в стандартное устройство вывода, поэтому необходимо перенаправить ее выходную информацию в соответствующий файл.

Следующая команда создаст файл XML-описания для созданного ранее пула NFS-POOL и определит постоянный пул на основе этого файла:

# virsh pool-dumpxml NFS-POOL > NFS-POOL.xml && virsh pool-define NFS-POOL.xml
Пул NFS-POOL определён на основе NFS-POOL.xml

Чтобы задать для пула хранилищ опцию Автозапуск (Autostart), можно воспользоваться командой virsh pool-autostart:

# virsh pool-autostart NFS-POOL
Добавлена метка автоматического запуска пула NFS-POOL

Маркировка пула хранилищ как автозапускаемого говорит о том, что этот пул хранилищ будет доступен после любого перезапуска хоста виртуализации (каталог /etc/libvirt/storage/autostart будет содержать символьную ссылку на XML-описание этого пула хранилищ).

Пример создания постоянного локального пула:

# virsh pool-define-as boot --type dir --target /var/lib/libvirt/boot
Пул boot определён

# virsh pool-list --all
Имя        Состояние    Автозапуск
-------------------------------------
boot       не активен   no
default    активен      yes
NFS-POOL   активен      yes

# virsh pool-build boot
Пул boot собран

# virsh pool-start boot
Пул boot запущен

# virsh pool-autostart boot
Добавлена метка автоматического запуска пула boot

# virsh pool-list --all
Имя        Состояние    Автозапуск
-------------------------------------
boot       активен     yes
default    активен     yes
NFS-POOL   активен     yes

Пример создания пула хранения на основе iSCSI:

# virsh pool-create-as --name iscsi_virtimages --type iscsi \
    --source-host 192.168.0.146 \
    --source-dev iqn.2023-05.alt.test:iscsi.target1 \
    --target /dev/disk/by-path
Пул iscsi_virtimages создан

Аргумент опции --source-host определяет имя хоста соответствующего сервера iSCSI, который экспортирует данный iSCSI LUN. Аргумент опции --source-dev определяет название iSCSI LUN. Аргумент опции --target идентифицирует локальную точку монтирования, которая будет использоваться для обращения к пулу хранилищ.

Примечание [Черновик]

Для возможности работы с устройством, подключенном по интерфейсу iSCSI должна быть запущена служба iscsid (должен быть установлен пакет open-iscsi):

# systemctl enable --now iscsid

⁠57.2. Настройка хранилищ в менеджере виртуальных машин [Черновик]

Для настройки хранилищ с помощью virt-manager необходимо:

В меню Правка выбрать Свойства подключения:

В открывшемся окне перейти на вкладку Пространство данных:

Для добавления пула следует нажать кнопку Добавить пул Добавить пул , расположенную в нижнем левом углу диалогового окна Сведения о подключении.

В открывшемся окне следует выбрать тип пула:

Далее необходимо задать параметры пула:

⁠Глава 58. Миграция ВМ [Черновик]

Под миграцией понимается процесс переноса ВМ с одного узла на другой.

Живая миграция позволяет перенести работу ВМ с одного физического хоста на другой без остановки ее работы.

Для возможности миграции ВМ, ВМ должна быть создана с использованием общего пула хранилищ (NFS, ISCSI, GlusterFS, CEPH).

Примечание [Черновик]

Живая миграция возможна даже без общего хранилища данных (с опцией --copy-storage-all). Но это приведет к большому трафику при копировании образа ВМ между серверами виртуализации и к заметному простою сервиса. Что бы миграция была по-настоящему «живой» с незаметным простоем необходимо использовать общее хранилище.

⁠58.1. Миграция с помощью virsh [Черновик]

ВМ можно перенести на другой узел с помощью команды virsh. Для выполнения живой миграции нужно указать параметр --live. Команда переноса:

# virsh migrate --live VMName DestinationURL

где

VMName — имя перемещаемой ВМ;

DestinationURL — URL или имя хоста узла назначения. Узел назначения должен использовать тот же гипервизор и служба libvirt на нем должна быть запущена.

После ввода команды будет запрошен пароль администратора узла назначения.

Для выполнения живой миграции ВМ alt-server на узел 192.168.0.147 с помощью virsh, необходимо выполнить следующие действия:

Убедиться, что ВМ запущена:

# virsh list
 ID   Имя          Состояние
------------------------------
 7    alt-server   работает

Выполнить следующую команду, чтобы начать перенос ВМ на узел 192.168.0.195 (после ввода команды будет запрошен пароль пользователя root системы назначения):

# virsh migrate --live alt-server qemu+ssh://192.168.0.195/system

Процесс миграции может занять некоторое время в зависимости от нагрузки и размера ВМ. virsh будет сообщать только об ошибках. ВМ будет продолжать работу на исходном узле до завершения переноса;

Проверить результат переноса, выполнив на узле назначения команду:

# virsh list

⁠58.2. Миграция ВМ в менеджере виртуальных машин [Черновик]

Менеджер виртуальных машин virt-manager поддерживает возможность миграции ВМ между серверами виртуализации.

Для выполнения миграции, в virt-manager необходимо выполнить следующие действия:

Подключить второй сервер виртуализации (Файл → Добавить соединение…);

В контекстном меню ВМ (она должна быть запущена) выбрать пункт Миграция…:

В открывшемся окне выбрать конечный узел и нажать кнопку Миграция:

При этом конфигурационный файл перемещаемой машины не перемещается на новый узел, поэтому при выключении ВМ она вновь появится на старом хосте. В связи с этим, для совершения полной живой миграции, при которой конфигурация ВМ будет перемещена на новый узел, необходимо воспользоваться утилитой командной строки virsh:

# virsh migrate --live --persistent --undefinesource \
alt-server qemu+ssh://192.168.0.195/system

⁠Глава 59. Снимки ВМ [Черновик]

Примечание [Черновик]

Снимок (snapshot) текущего состояния машины можно создать только если виртуальный жесткий диск в формате *.qcow2.

⁠59.1. Управления снимками ВМ в консоли [Черновик]

Команда создания снимка (ОЗУ и диск) из файла XML:

# virsh snapshot-create <domain> [--xmlfile <строка>] [--disk-only] [--live]...

Команда создания снимка (ОЗУ и диск) напрямую из набора параметров:

# virsh snapshot-create-as <domain> [--name <строка>] [--disk-only] [--live]...

Пример создания снимка ВМ:

# virsh snapshot-create-as --domain alt-server --name alt-server-17mar2024
Снимок домена alt-server-17mar2024 создан

где

alt-server — имя ВМ;

alt-server-17mar2024 — название снимка.

После того, как снимок ВМ будет сделан, резервные копии файлов конфигураций будут находиться в каталоге /var/lib/libvirt/qemu/snapshot/.

Пример создания снимка диска ВМ:

# virsh snapshot-create-as --domain alt-server --name 03apr2024 -diskspec vda,file=/var/lib/libvirt/images/alt-server.qcow2 --disk-only --atomic
Снимок домена 03apr2024 создан

Просмотр существующих снимков для домена alt-server:

# virsh snapshot-list --domain alt-server
 Имя                    Время создания              Состояние
-------------------------------------------------------------------
 03apr2024              2024-04-03 18:14:39 +0200   disk-snapshot
 alt-server-17mar2024   2024-03-17 18:06:29 +0200   running

Восстановить ВМ из снимка:

# virsh snapshot-revert --domain alt-server --snapshotname 03apr2024 --running

Удалить снимок:

# virsh snapshot-delete --domain alt-server --snapshotname 03apr2024

⁠59.2. Управления снимками ВМ в менеджере виртуальных машин [Черновик]

Для управления снимками ВМ в менеджере виртуальных машин virt-manager необходимо выполнить следующие действия:

В главном окне менеджера выбрать ВМ.

Нажать кнопку Открыть.

В открывшемся окне нажать кнопку Управление снимками:

Появится окно управления снимками ВМ.

Для создания нового снимка следует нажать кнопку Создать новый снимок Управление снимками ВМ , расположенную в нижнем левом углу окна управления снимками ВМ. В открывшемся окне следует указать название снимка и нажать кнопку Готово:

Для того чтобы восстановить ВМ из снимка или удалить снимок, следует воспользоваться контекстным меню снимка:

⁠Глава 60. Регистрация событий libvirt [Черновик]

Настройка регистрации событий в libvirt, осуществляется в файле /etc/libvirt/libvirtd.conf. Логи сохраняются в каталоге /var/log/libvirt.

Функция журналирования в libvirt основана на трёх ключевых понятиях:

сообщения журнала;

фильтры;

формат ввода.

Сообщения журнала — это информация, полученная во время работы libvirt. Каждое сообщение включает в себя уровень приоритета (отладочное сообщение — 1, информационное — 2, предупреждение — 3, ошибка — 4). По умолчанию, log_level=1, т.е. журналируются все сообщения.

Фильтры — это набор шаблонов и для записи сообщений в журнал. Если категория сообщения совпадает с фильтром, приоритет сообщения сравнивается с приоритетом фильтра, если она ниже сообщение отбрасывается, иначе сообщение записывается в журнал. Если сообщение не соответствует ни одному фильтру, то применяется общий уровень. Это позволяет, например, захватить все отладочные сообщения для Qemu, а для остальных, только сообщения об ошибках.

Формат для фильтра:

x:name  (log message only)
x:+name (log message + stack trace)

где

name — строка, которая сравнивается с заданной категорией, например, remote, qemu, или util.json;

+ — записывать каждое сообщение с данным именем;

x — минимальный уровень ошибки (1, 2, 3, 4).

Пример фильтра:

log_filtrers="3:remote 4:event"

Как только сообщение прошло через фильтрацию набора выходных данных, формат вывода определяет, куда отправить сообщение. Формат вывода также может фильтровать на основе приоритета, например, он может быть полезен для вывода всех сообщений в файл отладки.

x:stderr — вывод в STDERR;

x:syslog:name — использовать системный журнал для вывода и использовать данное имя в качестве идентификатора;

x:file:file_path — вывод в файл, с соответствующим filepath;

x:journal — вывод в systemd журнал.

Пример:

log_outputs=”3:syslog:libvirtd 1:file:/tmp/libvirt.log”

Журналы работы виртуальных машин под KVM хранятся в /var/log/libvirt/qemu/. В этом каталоге libvirt хранит журнал для каждой ВМ. Например, для машины alt-server журнал будет находиться по адресу: /var/log/libvirt/qemu/alt-server.log.

⁠Глава 61. Управление доступом в виртуальной инфраструктуре [Черновик]

Права пользователя могут управляться с помощью правил polkit.

В каталоге /usr/share/polkit-1/actions/ имеются два файла с описанием возможных действий для работы с ВМ, предоставленные разработчиками libvirt:

файл org.libvirt.unix.policy описывает мониторинг ВМ и управление ими;

в файле org.libvirt.api.policy перечислены конкретные действия (остановка, перезапуск и т. д.), которые возможны, если предыдущая проверка пройдена.

Перечисление конкретных свойств с комментариями доступно в файле /usr/share/polkit-1/actions/org.libvirt.api.policy.

В libvirt названия объектов и разрешений отображаются в имена polkit действий, по схеме:

org.libvirt.api.$объект.$разрешение

Например, разрешение search-storage-vols на объекте storage_pool отображено к действию polkit:

org.libvirt.api.storage-pool.search-storage-vols

Чтобы определить правила авторизации, polkit должен однозначно определить объект. Libvirt предоставляет ряд атрибутов для определения объектов при выполнении проверки прав доступа. Набор атрибутов изменяется в зависимости от типа объекта.

Пример тонкой настройки. Необходимо разрешить пользователю test (должен быть в группе vmusers) действия только с ВМ alt-server. Для этого необходимо выполнить следующие действия:

Раскомментировать в файле /etc/libvirt/libvirtd.conf строку:

access_drivers = [ "polkit" ]

Перезапустить libvirt:

# systemctl restart libvirtd

Создать файл /etc/polkit-1/rules.d/100-libvirt-acl.rules (имя произвольно) следующего вида:

polkit.addRule(function(action, subject) {
  if (action.id == "org.libvirt.unix.manage" &&
      subject.user == "test") {
      return polkit.Result.YES;
  }
});

polkit.addRule(function(action, subject) {
// разрешить пользователю test действия с доменом "alt-server"
if (action.id.indexOf("org.libvirt.api.domain.") == 0  &&
   subject.user == "test")
    {
        if (action.lookup("domain_name") == 'alt-server')
        {
            return polkit.Result.YES;
        }
        else
        {
            return polkit.Result.NO;
        }
    }
else {
// разрешить пользователю test действия с
//подключениями, хранилищем и прочим
        if (action.id.indexOf("org.libvirt.api.") == 0 &&
        subject.user == "test")
        {
            polkit.log("org.libvirt.api.Yes");
            return polkit.Result.YES;
        }
        else
        {
            return polkit.Result.NO;
        }
    }
})

Перелогиниться.

Проверить видимость машины alt-server, выполнив команду (от пользователя test):

$ virsh --connect qemu:///system list --all
 ID   Имя          Состояние
------------------------------
 4    alt-server   работает

В результате выполненных действий пользователю test видна только машина alt-server видна.

 Права можно настраивать более тонко, например, разрешив пользователю test запускать ВМ, но запретить ему все остальные действия с ней, для этого надо разрешить действие org.libvirt.api.domain.start:

polkit.addRule(function(action, subject)
{
    // разрешить пользователю test только запускать ВМ в
    // домене "alt-server"
    if (action.id. == "org.libvirt.api.domain.start") &&
    subject.user == "test")
    {
        if (action.lookup("domain_name") == 'alt-server')
        {
           return polkit.Result.YES;
        }
        else
        {
            return polkit.Result.NO;
        }
    }
});

Предоставить право запускать ВМ, только пользователям группы wheel:

if (action.id == "org.libvirt.api.domain.start")
{
    if (subject.isInGroup("wheel"))
    {
        return polkit.Result.YES;
    }
    else
    {
        return polkit.Result.NO;
    }
};

Предоставить право останавливать ВМ, только пользователям группы wheel:

if (action.id == "org.libvirt.api.domain.stop")
{
    if (subject.isInGroup("wheel"))
    {
        return polkit.Result.YES;
    }
    else
    {
        return polkit.Result.NO;
    }
};

Можно также вести файл журнала, используя правила polkit. Например, делать запись в журнал при старте ВМ:

if (action.id.match("org.libvirt.api.domain.start"))
{
    polkit.log("action=" + action);
    polkit.log("subject=" + subject);
    return polkit.Result.YES;
}

Запись в журнал при останове ВМ:

if (action.id.match("org.libvirt.api.domain.stop"))
{
    polkit.log("action=" + action);
    polkit.log("subject=" + subject);
    return polkit.Result.YES;
}

⁠Часть VII. Kubernetes [Черновик]

Kubernetes — это система для автоматизации развёртывания, масштабирования и управления контейнеризированными приложениями. Поддерживает основные технологии контейнеризации (Docker, Rocket) и аппаратную виртуализацию.

Основные задачи Kubernetes:

развертывание контейнеров и все операции для запуска необходимой конфигурации (перезапуск остановившихся контейнеров, перемещение контейнеров для выделения ресурсов на новые контейнеры и т.д.);

масштабирование и запуск нескольких контейнеров одновременно на большом количестве хостов;

балансировка множества контейнеров в процессе запуска. Для этого Kubernetes использует API, задача которого заключается в логическом группировании контейнеров.

Утилиты для создания и управления кластером Kubernetes:

kubectl — создание и настройка объектов в кластере;

kubelet — запуск контейнеров на узлах;

kubeadm — настройка компонентов, составляющих кластер.

⁠Глава 62. Установка и настройка Kubernetes [Черновик]

Для создания управляющего или вычислительного узла, при установке дистрибутива (см. главу Установка системы) в группе Контейнеры следует соответственно отметить пункт Сервисы Kubernetes для управляющего хоста или Сервисы Kubernetes для вычислительного хоста:

Примечание [Черновик]

На этапе Подготовка диска рекомендуется выбрать Server KVM/Docker/LXD/Podman/CRI-O (large /var/lib/) и не создавать раздел Swap.

Примечание [Черновик]

В данном руководстве рассмотрен процесс разворачивания кластера с использованием CRI-O.

⁠62.1. Создание кластера Kubernetes [Черновик]

Для создания кластера необходимо несколько машин (nodes), одна из которых будет мастером. Системные требования:

2 ГБ или больше ОЗУ на машину;

2 ядра процессора или больше;

все машины должны быть доступны по сети друг для друга;

все машины должны успешно разрешать имена hostname друг друга (через DNS или hosts);

Swap должен быть выключен.

Примечание [Черновик]

Для отключения Swap нужно выполнить команду:

# swapoff -a

И удалить соответствующую строку в /etc/fstab.

⁠62.1.1. Инициализация кластера [Черновик]

Для инициализации кластера нужно запустить одну из двух следующих команд (на мастере):

для настройки сети с использованием Flannel:

# kubeadm init --pod-network-cidr=10.244.0.0/16

для настройки сети с использованием Calico:

# kubeadm init --pod-network-cidr=192.168.0.0/16

где:

--pod-network-cidr=10.244.0.0/16 — адрес внутренней (разворачиваемой Kubernetes) сети, рекомендуется оставить данное значение для правильной работы Flannel;

--pod-network-cidr=192.168.0.0/16 — адрес внутренней (разворачиваемой Kubernetes) сети, рекомендуется оставить данное значение для правильной работы Calico.

Если все сделано правильно, на экране отобразится команда, позволяющая присоединить остальные ноды кластера к мастеру:

…
Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

Alternatively, if you are the root user, you can run:

  export KUBECONFIG=/etc/kubernetes/admin.conf

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.0.103:6443 --token vr1hyp.anh6jecr9m1tskja \
	--discovery-token-ca-cert-hash  \
    sha256:8914081137bae4e13c741066a6b4394b68f62ab915735c4c4c92fc14b02fa5a3

Настроить kubernetes для работы от пользователя (на мастер-ноде):

Создать каталог ~/.kube (с правами пользователя):

$ mkdir ~/.kube

Скопировать конфигурацию (с правами администратора):

# cp /etc/kubernetes/admin.conf /home/<пользователь>/.kube/config

Изменить владельца конфигурационного файла (с правами администратора):

# chown <пользователь>: /home/<пользователь>/.kube/config

⁠62.1.2. Настройка сети [Черновик]

Развернуть сеть (Container Network Interface), запустив один из двух наборов команд (на мастер-ноде):

для Flannel:

$ kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml

для Calico:

$ kubectl apply -f https://projectcalico.docs.tigera.io/manifests/tigera-operator.yaml
$ kubectl apply -f https://projectcalico.docs.tigera.io/manifests/custom-resources.yaml

В выводе будут отображены имена всех созданных ресурсов.

Проверить, что всё работает:

$ kubectl get pods --namespace kube-system
NAME                            READY   STATUS    RESTARTS   AGE
coredns-5dd5756b68-4t4tb        1/1     Running   0          10m
coredns-5dd5756b68-5cqjz        1/1     Running   0          10m
etcd-kube01                     1/1     Running   0          10m
kube-apiserver-kube01           1/1     Running   0          10m
kube-controller-manager-kube01  1/1     Running   0          10m
kube-proxy-2ncd6                1/1     Running   0          10m
kube-scheduler-kube01           1/1     Running   0          10m

coredns должны находиться в состоянии Running. Количество kube-flannel и kube-proxy зависит от общего числа нод.

⁠62.1.3. Добавление узлов (нод) в кластер [Черновик]

Подключить остальные узлы (ноды) в кластер. Для этого на узле выполнить команду (с правами администратора):

# kubeadm join <ip адрес>:<порт> --token <токен>
 --discovery-token-ca-cert-hash sha256:<хэш> --ignore-preflight-errors=SystemVerification

Данная команда была выведена при выполнении команды kubeadm init на мастер-ноде.

В данном примере:

# kubeadm join 192.168.0.103:6443 --token vr1hyp.anh6jecr9m1tskja \
	--discovery-token-ca-cert-hash  \
    sha256:8914081137bae4e13c741066a6b4394b68f62ab915735c4c4c92fc14b02fa5a3

[preflight] Running pre-flight checks
[preflight] Reading configuration from the cluster...
[preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] Starting the kubelet
[kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap...

This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.

Run 'kubectl get nodes' on the control-plane to see this node join the cluster.

Примечание [Черновик]

Получить токен, если его нет, можно выполнив команду (на мастер-ноде):

$ kubeadm token list
TOKEN                     TTL         EXPIRES                USAGES
vr1hyp.anh6jecr9m1tskja   23h         2024-04-05T07:45:18Z   authentication,signing

По умолчанию срок действия токена — 24 часа. Если требуется добавить новый узел в кластер по окончанию этого периода, можно создать новый токен:

$ kubeadm token create

Если значение параметра --discovery-token-ca-cert-hash неизвестно, его можно получить, выполнив команду (на мастер-ноде):

$ openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | \
   openssl rsa -pubin -outform der 2>/dev/null | \
   openssl dgst -sha256 -hex | sed 's/^.* //'
8914081137bae4e13c741066a6b4394b68f62ab915735c4c4c92fc14b02fa5a3

Для ввода IPv6-адреса в параметр <control-plane-host>:<control-plane-port>, адрес должен быть заключен в квадратные скобки:

[fd00::101]:2073

Проверить наличие нод (на мастер-ноде):

$ kubectl get nodes
NAME       STATUS   ROLES                  AGE    VERSION
kube01     Ready    control-plane,master   42m     v1.28.8
kube02     Ready    <none>                 2m43s   v1.28.8
kube03     Ready    <none>                 24s     v1.28.8

или

$ kubectl get nodes -o wide

Информация о кластере:

$ kubectl cluster-info
Kubernetes control plane is running at https://192.168.0.103:6443
CoreDNS is running at https://192.168.0.103:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

Посмотреть подробную информацию о ноде:

$ kubectl describe node kube03

⁠62.2. Тестовый запуск nginx [Черновик]

Deployment — это объект Kubernetes, представляющий работающее приложение в кластере.

Создать Deployment с nginx:

$ kubectl apply -f https://k8s.io/examples/application/deployment.yaml
deployment.apps/nginx-deployment created

Создать сервис, с помощью которого можно получить доступ к приложению из внешней сети. Для этого создать файл nginx-service.yaml, со следующим содержимым:

apiVersion: v1
kind: Service
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  type: NodePort
  ports:
  - port: 80
    targetPort: 80
  selector:
    app: nginx

Запустить новый сервис:

$ kubectl apply -f nginx-service.yaml
service/nginx created

Просмотреть порт сервиса nginx:

$ kubectl get svc nginx
NAME    TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
nginx   NodePort   10.98.167.146   <none>        80:31868/TCP   17s

Проверить работу nginx, выполнив команду (сервер должен вернуть код 200):

$ curl -I <ip адрес>:<порт>

где <ip адрес> — это IP-адрес любой из нод (не мастер-ноды), а <порт> — это порт сервиса, полученный с помощью предыдущей команды. В данном кластере возможна команда:

$ curl -I 192.168.0.102:31868
HTTP/1.1 200 OK
Server: nginx/1.14.2

⁠Глава 63. Кластер высокой доступности Kubernetes [Черновик]

Kubernetes предлагает два основных способа реализации HA-кластера:

со стековой топологией (узлы etcd размещаются вместе с узлами плоскости управления);

с внешней etcd-топологией (etcd работает на узлах, отдельных от плоскости управления).

⁠63.1. Стековая (составная) топология etcd [Черновик]

Стековая (составная) топология etcd — это топология, в которой распределенный кластер хранения данных, предоставляемый etcd, размещается на вершине кластера, образованного узлами, управляемыми kubeadm, которые запускают компоненты плоскости управления.

Каждый узел плоскости управления запускает экземпляр kube-apiserver, kube-scheduler и kube-controller-manager. Kube-apiserver предоставляется рабочим узлам с помощью балансировщика нагрузки.

Каждый узел уровня управления создает локальный etcd, и этот etcd взаимодействует только с kube-apiserver этого узла. То же самое относится к локальным экземплярам kube-controller-manager и kube-scheduler.

Эту топологию проще настроить, чем кластер с внешними узлами etcd, и проще управлять репликацией. Но если один узел выходит из строя, будут потеряны и etcd, и экземпляр уровня управления, и избыточность нарушится. Этот риск можно снизить, добавив больше узлов плоскости управления. Поэтому для HA-кластера следует запустить как минимум три сгруппированных узла плоскости управления.

Это топология используется по умолчанию в kubeadm. Локальный etcd создается автоматически на узлах плоскости управления при использовании kubeadm init и kubeadm join --control-plane.

⁠63.2. Внешняя etcd-топология [Черновик]

Внешняя etcd-топология — это топология, в которой кластер распределенного хранения данных, предоставляемый etcd, является внешним по отношению к кластеру, сформированному узлами, на которых выполняются компоненты плоскости управления.

Каждый узел плоскости управления во внешней топологии etcd запускает экземпляр kube-apiserver, kube-scheduler и kube-controller-manager. И kube-apiserver предоставляется рабочим узлам с помощью балансировщика нагрузки. Однако etcd работают на отдельных хостах, и каждый хост etcd взаимодействует с kube-apiserver каждого узла плоскости управления.

Эта топология разделяет плоскость управления и элемент etcd. Таким образом обеспечивается настройка HA, при которой потеря экземпляра уровня управления или etcd оказывает меньшее влияние и не влияет на избыточность кластера в такой степени, как многослойная топология.

Для HA-кластера с этой топологией требуется как минимум три хоста для узлов плоскости управления и три хоста для узлов etcd.

⁠63.3. Создание HA-кластера с помощью kubeadm [Черновик]

Рекомендации:

три или более управляющих узла;

три или более вычислительных узла;

все узлы должны быть доступны по сети друг для друга;

на всех узлах должны быть установлены kubeadm, kubelet и среда выполнения контейнера;

каждый узел должен иметь доступ к реестру образов контейнера Kubernetes (k8s.gcr.io);

возможность доступа по ssh с одного узла ко всем узлам в системе.

Для создания HA-кластера etcd к вышеперечисленным требованиям дополнительно требуется три или более узла, которые станут членами кластера etcd.

Примечание [Черновик]

В данных примерах рассмотрена настройка сети с использованием Flannel.

⁠63.3.1. Стековая (составная) топология etcd [Черновик]

На первом управляющем узле необходимо выполнить следующие действия:

Инициализировать кластер, выполнив команду:

# kubeadm init --control-plane-endpoint 192.168.0.201:6443 --upload-certs --pod-network-cidr=10.244.0.0/16

где

--control-plane-endpoint — указывает адрес и порт балансировщика нагрузки;

--upload-certs — используется для загрузки в кластер сертификатов, которые должны быть общими для всех управляющих узлов;

--pod-network-cidr=10.244.0.0/16 — адрес внутренней (разворачиваемой Kubernetes) сети, рекомендуется оставить данное значение для правильной работы Flannel.

Если все сделано правильно, на экране отобразится команда, позволяющая присоединить остальные узлы кластера к управляющему узлу:

…
Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

Alternatively, if you are the root user, you can run:

  export KUBECONFIG=/etc/kubernetes/admin.conf

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

You can now join any number of the control-plane node running the following command on each as root:

  kubeadm join 192.168.0.201:6443 --token cvvui8.lz82ufip6cz89ar9 \
	--discovery-token-ca-cert-hash sha256:3ee0c550746a4a8e0abb6b59311f0fc301cdfeec00af8b26ed4598116c4d8184 \
	--control-plane --certificate-key e0cbf1dc4e282bf517e23887dace30b411cd739b1aab037b056f0c23e5b0a222

Please note that the certificate-key gives access to cluster sensitive data, keep it secret!
As a safeguard, uploaded-certs will be deleted in two hours; If necessary, you can use
"kubeadm init phase upload-certs --upload-certs" to reload certs afterward.

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.0.201:6443 --token cvvui8.lz82ufip6cz89ar9 \
	--discovery-token-ca-cert-hash sha256:3ee0c550746a4a8e0abb6b59311f0fc301cdfeec00af8b26ed4598116c4d8184

Настроить kubernetes для работы от пользователя:

создать каталог ~/.kube (с правами пользователя):

$ mkdir ~/.kube

скопировать конфигурацию (с правами администратора):

# cp /etc/kubernetes/admin.conf /home/<пользователь>/.kube/config

изменить владельца конфигурационного файла (с правами администратора):

# chown <пользователь>: /home/<пользователь>/.kube/config

Развернуть сеть (CNI):

$ kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml

Проверить, что всё работает:

$ kubectl get pod -n kube-system -w
NAME                               READY   STATUS              RESTARTS   AGE
coredns-78fcd69978-c5swn           0/1     ContainerCreating   0          11m
coredns-78fcd69978-zdbp8           0/1     ContainerCreating   0          11m
etcd-master01                      1/1     Running             0          11m
kube-apiserver-master01            1/1     Running             0          11m
kube-controller-manager-master01   1/1     Running             0          11m
kube-flannel-ds-qfzbw              1/1     Running             0          116s
kube-proxy-r6kj9                   1/1     Running             0          11m
kube-scheduler-master01            1/1     Running             0          11m

На остальных управляющих узлах выполнить команду подключения узла к кластеру (данная команда была выведена при выполнении команды kubeadm init на первом управляющем узле):

# kubeadm join 192.168.0.201:6443 --token cvvui8.lz82ufip6cz89ar9 \
--discovery-token-ca-cert-hash sha256:3ee0c550746a4a8e0abb6b59311f0fc301cdfeec00af8b26ed4598116c4d8184 \
--control-plane --certificate-key e0cbf1dc4e282bf517e23887dace30b411cd739b1aab037b056f0c23e5b0a222

Подключить вычислительные узлы к кластеру (данная команда была выведена при выполнении команды kubeadm init на первом управляющем узле):

# kubeadm join 192.168.0.201:6443 --token cvvui8.lz82ufip6cz89ar9 \
--discovery-token-ca-cert-hash sha256:3ee0c550746a4a8e0abb6b59311f0fc301cdfeec00af8b26ed4598116c4d8184

Проверить наличие нод (на управляющем узле):

$ kubectl get nodes
NAME       STATUS   ROLES                  AGE     VERSION
kube01     Ready    <none>                 23m     v1.28.8
kube02     Ready    <none>                 15m     v1.28.8
kube03     Ready    <none>                 2m30s   v1.28.8
master01   Ready    control-plane,master   82m     v1.28.8
master02   Ready    control-plane,master   66m     v1.28.8
master03   Ready    control-plane,master   39m     v1.28.8

⁠63.3.2. Настройка HA-кластера etcd с помощью kubeadm [Черновик]

Настройка HA-кластера с внешней etcd-топологией аналогична процедуре, используемой для стековой топологии etcd, за исключением того, что предварительно необходимо настроить etcd и передать информацию etcd в конфигурационный файл kubeadm.

В данном примере рассматривается процесс создания HA-кластера etcd состоящего из трех узлов. Узлы должны иметь возможность общаться друг с другом через порты 2379 и 2380.

Основная идея при таком способе настройки кластера, состоит в том, чтобы генерировать все сертификаты на одном узле и распространять только необходимые файлы на другие узлы.

Примечание [Черновик]

kubeadm содержит все необходимое криптографические механизмы для создания сертификатов, никаких других криптографических инструментов для данного примера не требуется.

Настройка etcd кластера:

Настроить kubelet в качестве диспетчера служб для etcd. Для этого на всех etcd узлах нужно добавить новый файл конфигурации systemd для модуля kubelet с более высоким приоритетом, чем предоставленный kubeadm файл модуля kubelet:

# cat << EOF > /etc/systemd/system/kubelet.service.d/20-etcd-service-manager.conf
[Service]
ExecStart=
# Replace "systemd" with the cgroup driver of your container runtime. The default value in the kubelet is "cgroupfs".
# Replace the value of "--container-runtime-endpoint" for a different container runtime if needed.
ExecStart=/usr/bin/kubelet --address=127.0.0.1 --pod-manifest-path=/etc/kubernetes/manifests --cgroup-driver=systemd --container-runtime=remote --container-runtime-endpoint=unix:///var/run/crio/crio.sock
Restart=always
EOF

# systemctl daemon-reload
# systemctl restart kubelet

Убедиться, что kubelet запущен:

# systemctl status kubelet

На первом узле etcd создать файлы конфигурации kubeadm для всех узлов etcd. Для этого создать и запустить скрипт:

#!/bin/sh
# HOST0, HOST1, и HOST2 - IP-адреса узлов
export HOST0=192.168.0.205
export HOST1=192.168.0.206
export HOST2=192.168.0.207

# NAME0, NAME1 и NAME2 - имена узлов
export NAME0="etc01"
export NAME1="etc02"
export NAME2="etc03"

# Создать временные каталоги
mkdir -p /tmp/${HOST0}/ /tmp/${HOST1}/ /tmp/${HOST2}/

HOSTS=(${HOST0} ${HOST1} ${HOST2})
NAMES=(${NAME0} ${NAME1} ${NAME2})

for i in "${!HOSTS[@]}"; do
HOST=${HOSTS[$i]}
NAME=${NAMES[$i]}
cat >> EOF < /tmp/${HOST}/kubeadmcfg.yaml
---
apiVersion: "kubeadm.k8s.io/v1beta3"
kind: InitConfiguration
nodeRegistration:
    name: ${NAME}
localAPIEndpoint:
    advertiseAddress: ${HOST}
---
apiVersion: "kubeadm.k8s.io/v1beta3"
kind: ClusterConfiguration
etcd:
    local:
        serverCertSANs:
        - "${HOST}"
        peerCertSANs:
        - "${HOST}"
        extraArgs:
            initial-cluster: ${NAMES[0]}=https://${HOSTS[0]}:2380,${NAMES[1]}=https://${HOSTS[1]}:2380,${NAMES[2]}=https://${HOSTS[2]}:2380
            initial-cluster-state: new
            name: ${NAME}
            listen-peer-urls: https://${HOST}:2380
            listen-client-urls: https://${HOST}:2379
            advertise-client-urls: https://${HOST}:2379
            initial-advertise-peer-urls: https://${HOST}:2380
EOF
done

Создать центр сертификации (CA).

Примечание [Черновик]

Если CA уже есть, необходимо скопировать сертификат (crt) и ключ CA в /etc/kubernetes/pki/etcd/ca.crt и /etc/kubernetes/pki/etcd/ca.key. После этого можно перейти к следующему шагу.

Если у вас еще нет CA, следует на узле, где были сгенерированы файлы конфигурации kubeadm, запустить команду:

# kubeadm init phase certs etcd-ca
[certs] Generating "etcd/ca" certificate and key

Эта команда создаст два файла: /etc/kubernetes/pki/etcd/ca.crt и /etc/kubernetes/pki/etcd/ca.key.

Сгенерировать сертификаты для всех etcd узлов. Для этого создать и запустить скрипт (на первом etcd узле):

#!/bin/sh
# HOST0, HOST1, и HOST2 - IP-адреса узлов
export HOST0=192.168.0.205
export HOST1=192.168.0.206
export HOST2=192.168.0.207
kubeadm init phase certs etcd-server --config=/tmp/${HOST2}/kubeadmcfg.yaml
kubeadm init phase certs etcd-peer --config=/tmp/${HOST2}/kubeadmcfg.yaml
kubeadm init phase certs etcd-healthcheck-client --config=/tmp/${HOST2}/kubeadmcfg.yaml
kubeadm init phase certs apiserver-etcd-client --config=/tmp/${HOST2}/kubeadmcfg.yaml
cp -R /etc/kubernetes/pki /tmp/${HOST2}/
# cleanup non-reusable certificates
find /etc/kubernetes/pki -not -name ca.crt -not -name ca.key -type f -delete

kubeadm init phase certs etcd-server --config=/tmp/${HOST1}/kubeadmcfg.yaml
kubeadm init phase certs etcd-peer --config=/tmp/${HOST1}/kubeadmcfg.yaml
kubeadm init phase certs etcd-healthcheck-client --config=/tmp/${HOST1}/kubeadmcfg.yaml
kubeadm init phase certs apiserver-etcd-client --config=/tmp/${HOST1}/kubeadmcfg.yaml
cp -R /etc/kubernetes/pki /tmp/${HOST1}/
find /etc/kubernetes/pki -not -name ca.crt -not -name ca.key -type f -delete

kubeadm init phase certs etcd-server --config=/tmp/${HOST0}/kubeadmcfg.yaml
kubeadm init phase certs etcd-peer --config=/tmp/${HOST0}/kubeadmcfg.yaml
kubeadm init phase certs etcd-healthcheck-client --config=/tmp/${HOST0}/kubeadmcfg.yaml
kubeadm init phase certs apiserver-etcd-client --config=/tmp/${HOST0}/kubeadmcfg.yaml
# No need to move the certs because they are for HOST0

# clean up certs that should not be copied off this host
find /tmp/${HOST2} -name ca.key -type f -delete
find /tmp/${HOST1} -name ca.key -type f -delete

Скопировать сертификаты и файлы конфигурации kubeadm на второй и третий узлы etcd:

HOST1=192.168.0.206
HOST2=192.168.0.207
USER=user
# scp -r /tmp/${HOST1}/* ${USER}@${HOST1}:
# ssh ${USER}@${HOST1}
$ su -
# chown -R root:root /home/user/pki
# mv /home/user/pki /etc/kubernetes/
# exit
$ exit
# scp -r /tmp/${HOST2}/* ${USER}@${HOST2}:
# ssh ${USER}@${HOST2}
$ su -
# chown -R root:root /home/user/pki
# mv /home/user/pki /etc/kubernetes/
# exit
$ exit

В итоге должны существовать следующие файлы:

на первом узле etcd (там, где были сгенерированы файлы конфигурации kubeadm и сертификаты):

/tmp/${HOST0}
└── kubeadmcfg.yaml
---
/etc/kubernetes/pki
├── apiserver-etcd-client.crt
├── apiserver-etcd-client.key
└── etcd
    ├── ca.crt
    ├── ca.key
    ├── healthcheck-client.crt
    ├── healthcheck-client.key
    ├── peer.crt
    ├── peer.key
    ├── server.crt
    └── server.key

на втором узле etcd:

$HOME
└── kubeadmcfg.yaml
---
/etc/kubernetes/pki
├── apiserver-etcd-client.crt
├── apiserver-etcd-client.key
└── etcd
    ├── ca.crt
    ├── healthcheck-client.crt
    ├── healthcheck-client.key
    ├── peer.crt
    ├── peer.key
    ├── server.crt
    └── server.key

на третьем узле etcd:

$HOME
└── kubeadmcfg.yaml
---
/etc/kubernetes/pki
├── apiserver-etcd-client.crt
├── apiserver-etcd-client.key
└── etcd
    ├── ca.crt
    ├── healthcheck-client.crt
    ├── healthcheck-client.key
    ├── peer.crt
    ├── peer.key
    ├── server.crt
    └── server.key

На каждом etcd узле запустить команду kubeadm, чтобы сгенерировать статический манифест для etcd:

на первом узле etcd (там, где были сгенерированы файлы конфигурации kubeadm и сертификаты):

# kubeadm init phase etcd local --config=/tmp/192.168.0.205/kubeadmcfg.yaml
[etcd] Creating static Pod manifest for local etcd in "/etc/kubernetes/manifests

на втором и третьем узлах etcd:

# kubeadm init phase etcd local --config=/home/user/kubeadmcfg.yaml
[etcd] Creating static Pod manifest for local etcd in "/etc/kubernetes/manifests"

Настроить первый управляющий узел кластера:

Скопировать сертификаты и ключ с первого узла etcd на первый управляющий узел:

export CONTROL_PLANE="user@192.168.0.201"
# scp /etc/kubernetes/pki/etcd/ca.crt "${CONTROL_PLANE}":
# scp /etc/kubernetes/pki/apiserver-etcd-client.crt "${CONTROL_PLANE}":
# scp /etc/kubernetes/pki/apiserver-etcd-client.key "${CONTROL_PLANE}":

Создать на первом управляющем узле файл kubeadm-config.yaml:

---
apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
kubernetesVersion: stable
networking:
  podSubnet: "10.244.0.0/16"
controlPlaneEndpoint: "192.168.0.201:6443" # IP-адрес, порт балансировщика нагрузки
etcd:
  external:
    endpoints:
      - https://192.168.0.205:2379 # IP-адрес ETCD01
      - https://192.168.0.206:2379 # IP-адрес ETCD02
      - https://192.168.0.207:2379 # IP-адрес ETCD03
    caFile: /etc/kubernetes/pki/etcd/ca.crt
    certFile: /etc/kubernetes/pki/apiserver-etcd-client.crt
    keyFile: /etc/kubernetes/pki/apiserver-etcd-client.key

Переместить ранее скопированные сертификаты и ключ в соответствующий каталог на первом управляющем узле:

# mkdir -p /etc/kubernetes/pki/etcd/
# cp /home/user/ca.crt /etc/kubernetes/pki/etcd/
# cp /home/user/apiserver-etcd-client.* /etc/kubernetes/pki/

Создать первый управляющий узел:

# kubeadm init --config kubeadm-config.yaml --upload-certs
…
Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

Alternatively, if you are the root user, you can run:

  export KUBECONFIG=/etc/kubernetes/admin.conf

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

You can now join any number of the control-plane node running the following command on each as root:

  kubeadm join 192.168.0.201:6443 --token 7onha1.afzqd41s8dzr1wj1 \
	--discovery-token-ca-cert-hash sha256:ec2be69db54b2ae13c175765ddd058801fd70054508c0e118020896a1d4c9ec3 \
	--control-plane --certificate-key eb1fabf70e994c061f749f13c0f26baef64764e813d5f0eaa7b09d5279a492c4

Please note that the certificate-key gives access to cluster sensitive data, keep it secret!
As a safeguard, uploaded-certs will be deleted in two hours; If necessary, you can use
"kubeadm init phase upload-certs --upload-certs" to reload certs afterward.

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.0.201:6443 --token 7onha1.afzqd41s8dzr1wj1 \
	--discovery-token-ca-cert-hash sha256:ec2be69db54b2ae13c175765ddd058801fd70054508c0e118020896a1d4c9ec3

Следует сохранить этот вывод, т.к. этот токен будет использоваться для присоединения к кластеру остальных управляющих и вычислительных узлов.

Настроить kubernetes для работы от пользователя:

создать каталог ~/.kube (с правами пользователя):

$ mkdir ~/.kube

скопировать конфигурацию (с правами администратора):

# cp /etc/kubernetes/admin.conf /home/<пользователь>/.kube/config

изменить владельца конфигурационного файла (с правами администратора):

# chown <пользователь>: /home/<пользователь>/.kube/config

Развернуть сеть (CNI):

$ kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml

Проверить, что всё работает:

$ kubectl get pod -n kube-system -w

На остальных управляющих узлах выполнить команду подключения узла к кластеру (данная команда была выведена при выполнении команды kubeadm init на первом управляющем узле):

# kubeadm join 192.168.0.201:6443 --token 7onha1.afzqd41s8dzr1wj1 \
	--discovery-token-ca-cert-hash sha256:ec2be69db54b2ae13c175765ddd058801fd70054508c0e118020896a1d4c9ec3 \
	--control-plane --certificate-key eb1fabf70e994c061f749f13c0f26baef64764e813d5f0eaa7b09d5279a492c4

Подключить вычислительные узлы к кластеру (данная команда была выведена при выполнении команды kubeadm init на первом управляющем узле):

# kubeadm join 192.168.0.201:6443 --token 7onha1.afzqd41s8dzr1wj1 \
	--discovery-token-ca-cert-hash sha256:ec2be69db54b2ae13c175765ddd058801fd70054508c0e118020896a1d4c9ec3

Проверить наличие нод (на управляющем узле):

$ kubectl get nodes

⁠Часть VIII. Настройка системы [Черновик]

⁠Глава 64. Центр управления системой [Черновик]

⁠64.1. Описание [Черновик]

Для управления настройками установленной системы вы можете воспользоваться Центром управления системой. Центр управления системой (ЦУС) представляет собой удобный интерфейс для выполнения наиболее востребованных административных задач: добавление и удаление пользователей, настройка сетевых подключений, просмотр информации о состоянии системы и т.п.

Центр управления системой состоит из нескольких независимых диалогов-модулей. Каждый модуль отвечает за настройку определённой функции или свойства системы.

⁠64.2. Применение центра управления системой [Черновик]

Вы можете использовать ЦУС для разных целей, например:

Настройки Даты и времени (datetime);

Управления выключением и перезагрузкой компьютера (ahttpd-power);

Управления Системными службами (services);

Просмотра Системных журналов (logs);

Конфигурирования Сетевых интерфейсов (net-eth);

Изменения пароля Администратора системы (root) (root);

Создания, удаления и редактирования учётных записей Пользователей (users);

Настройки ограничения Использования диска (квоты) (quota).

Вы всегда можете воспользоваться кнопкой Справка. Все модули ЦУС имеют справочную информацию.

⁠64.3. Использование веб-ориентированного центра управления системой [Черновик]

ЦУС имеет веб-ориентированный интерфейс, позволяющий управлять данным компьютером с любого другого компьютера сети.

Для запуска веб-ориентированного интерфейса должен быть запущен сервис ahttpd и alteratord:

# systemctl enable --now ahttpd
# systemctl enable --now alteratord

Работа с ЦУС может происходить из любого веб-браузера. Для начала работы необходимо перейти по адресу https://ip-адрес:8080/.

Если для сервера задан IP-адрес 192.168.0.122, то интерфейс управления будет доступен по адресу: https://192.168.0.122:8080/.

Примечание [Черновик]

IP-адрес сервера можно узнать, введя команду:

$ ip addr

IP-адрес будет указан после слова inet:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    link/ether 60:eb:69:6c:ef:47 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.122/24 brd 192.168.0.255 scope global enp0s3

Например, тут мы видим, что на интерфейсе enp0s3 задан IP-адрес 192.168.0.122.

При запуске центра управления системой необходимо ввести в соответствующие поля имя пользователя (root) и пароль пользователя:

После этого будут доступны все возможности ЦУС на той машине, к которой было произведено подключение через веб-интерфейс.

Веб-интерфейс ЦУС можно настроить (кнопка Настройка), выбрав один из режимов:

основной режим;

режим эксперта.

Выбор режима влияет на количество отображаемых модулей. В режиме эксперта отображаются все установленные модули, а в основном режиме только наиболее используемые.

Центр управления системой содержит справочную информацию по всем включённым в него модулям. Об использовании самого интерфейса системы управления можно прочитать, нажав на кнопку Справка на начальной странице центра управления системой.

Предупреждение [Черновик]

После работы с центром управления системой, в целях безопасности, не оставляйте открытым браузер. Обязательно выйдите, нажав на кнопку Выйти.

Примечание [Черновик]

Подробнее об использовании Центра управления системой можно узнать в главе Работа с центром управления системой.

⁠Часть IX. Работа с центром управления системой [Черновик]

Дальнейшие разделы описывают некоторые возможности использования Альт Виртуализация, настраиваемые в ЦУС.

Важно [Черновик]

Эта и последующие главы рекомендуются к прочтению опытным пользователям и системным администраторам.

⁠Глава 65. Конфигурирование сетевых интерфейсов [Черновик]

⁠65.1. Модуль Ethernet-интерфейсы [Черновик]

Конфигурирование сетевых интерфейсов осуществляется в модуле ЦУС Ethernet-интерфейсы (пакет alterator-net-eth):

В модуле Ethernet-интерфейсы можно заполнить следующие поля:

Имя компьютера — указать сетевое имя ПЭВМ в поле для ввода имени компьютера (это общий сетевой параметр, не привязанный к какому-либо конкретному интерфейсу). Имя компьютера, в отличие от традиционного имени хоста в Unix (hostname), не содержит названия сетевого домена;

Интерфейсы — выбрать доступный сетевой интерфейс, для которого будут выполняться настройки;

Версия протокола IP — указать в выпадающем списке версию используемого протокола IP (IPv4, IPv6) и убедиться, что пункт Включить, обеспечивающий поддержку работы протокола, отмечен;

Конфигурация — выбрать способ назначения IP-адресов (службы DHCP, Zeroconf, вручную);

IP-адреса — пул назначенных IP-адресов из поля IP, выбранные адреса можно удалить нажатием кнопки Удалить;

Добавить ↑ IP — ввести IP-адрес вручную и выбрать в выпадающем поле предпочтительную маску сети, затем нажать кнопку Добавить для переноса адреса в пул поля IP-адреса;

Шлюз по умолчанию — в поле для ввода необходимо ввести адрес шлюза, который будет использоваться сетью по умолчанию;

DNS-серверы — в поле для ввода необходимо ввести список предпочтительных DNS-серверов, которые будут получать информацию о доменах, выполнять маршрутизацию почты и управлять обслуживающими узлами для протоколов в домене;

Домены поиска — в поле для ввода необходимо ввести список предпочтительных доменов, по которым будет выполняться поиск. Если в поле Домены поиска перечислить наиболее часто используемые домены (например, domain), то можно пользоваться неполными именами машин (computer вместо computer.domain).

IP-адрес и Маска сети — обязательные параметры каждого узла IP-сети. Первый параметр – уникальный идентификатор машины, от второго напрямую зависит, к каким машинам локальной сети данная машина будет иметь доступ. Если требуется выход во внешнюю сеть, то необходимо указать параметр Шлюз по умолчанию.

В случае наличия DHCP-сервера можно все вышеперечисленные параметры получить автоматически – выбрав в списке Конфигурация пункт Использовать DHCP:

Если в компьютере имеется несколько сетевых карт, то возможна ситуация, когда при очередной загрузке ядро присвоит имена интерфейсов (enp0s3, enp0s8) в другом порядке. В результате интерфейсы получат не свои настройки. Чтобы этого не происходило, можно привязать интерфейс к имени по его аппаратному адресу (MAC) или по местоположению на системной шине.

Дополнительно для каждого интерфейса можно настроить сетевую подсистему, а также указать должен ли запускаться данный интерфейс при загрузке системы:

В списке Сетевая подсистема можно выбрать следующие режимы (если установлены соответствующие пакеты):

Etcnet

В этом режиме настройки берутся исключительно из файлов находящихся в каталоге настраиваемого интерфейса /etc/net/ifaces/<интерфейс>. Настройки сети могут изменяться либо в ЦУС в данном модуле, либо напрямую через редактирование файлов /etc/net/ifaces/<интерфейс>.

NetworkManager (etcnet)

В этом режиме NetworkManager сам инициирует сеть, используя в качестве параметров — настройки из файлов Etcnet. Настройки сети могут изменяться либо в ЦУС в данном модуле, либо напрямую через редактирование файлов /etc/net/ifaces/<интерфейс>.

NetworkManager (native)

В данном режиме управление настройками интерфейса передаётся NetworkManager и не зависит от файлов Etcnet. Файлы с настройками находятся в директории /etc/NetworkManager/system-connections. Этот режим особенно актуален для задач настройки сети на клиенте, когда IP-адрес необходимо получать динамически с помощью DHCP, а DNS-сервер указать явно. Через ЦУС так настроить невозможно, так как при включении DHCP отключаются настройки, которые можно задавать вручную.

systemd-networkd

В данном режиме режиме управление настройками интерфейса передаётся службе systemd-networkd. Настройки сети могут изменяться либо в ЦУС в данном модуле (только настройки физического интерфеса), либо напрямую через редактирование файлов /etc/systemd/network/<имя_файла>.network, /etc/systemd/network/<имя_файла>.netdev, /etc/systemd/network/<имя_файла>.link. Данный режим доступен, если установлен пакет systemd-networkd;

Не контролируется

В этом режиме интерфейс находится в состоянии DOWN (выключен).

⁠65.2. Объединение сетевых интерфейсов [Черновик]

Модуль Объединение интерфейсов (пакет alterator-net-bond) позволяет объединить несколько физических сетевых интерфейсов в один логический. Это позволяет достичь отказоустойчивости, увеличения скорости и балансировки нагрузки.

Для создания объединения интерфейсов необходимо выполнить следующие действия:

Нажать кнопку Создать объединение…:

Переместить сетевые интерфейсы, которые будут входить в объединение, из списка Доступные интерфейсы в список Используемые интерфейсы.

В списке Политика выбрать режим объединения:

Round-robin — режим циклического выбора активного интерфейса для исходящего трафика;

Активный-резервный — активен только один интерфейс, остальные находятся в режиме горячей замены;

XOR — один и тот же интерфейс работает с определённым получателем, передача пакетов распределяется между интерфейсами на основе формулы ((MAC-адрес источника) XOR (MAC-адрес получателя)) % число интерфейсов;

Широковещательная — трафик идёт через все интерфейсы одновременно;

Агрегирование каналов по стандарту IEEE 802.3ad — в группу объединяются одинаковые по скорости и режиму интерфейсы, все физические интерфейсы используются одновременно в соответствии со спецификацией IEEE 802.3ad. Для реализации этого режима необходима поддержка на уровне драйверов сетевых карт и коммутатор, поддерживающий стандарт IEEE 802.3ad (коммутатор требует отдельной настройки);

Адаптивная балансировка нагрузки передачи — исходящий трафик распределяется в соответствии с текущей нагрузкой (с учётом скорости) на интерфейсах (для данного режима необходима его поддержка в драйверах сетевых карт). Входящие пакеты принимаются только активным сетевым интерфейсом;

Адаптивная балансировка нагрузки — включает в себя балансировку исходящего трафика и балансировку на приём (rlb) для IPv4 трафика и не требует применения специальных коммутаторов. Балансировка на приём достигается на уровне протокола ARP путём перехвата ARP ответов локальной системы и перезаписи физического адреса на адрес одного из сетевых интерфейсов (в зависимости от загрузки).

Указать, если это необходимо, параметры объединения в поле Параметры объединения.

Нажать кнопку Назад:

В результате будет создан агрегированный интерфейс bond0. Для данного интерфейса можно задать IP-адрес и, если необходимо, дополнительные параметры:

Нажать кнопку Применить.

Информацию о получившемся агрегированном интерфейсе можно посмотреть в /proc/net/bonding/bond0.

Для удаления агрегированного интерфейса необходимо выбрать его в списке Интерфейсы и нажать кнопку Удалить объединение….

⁠65.3. Сетевые мосты [Черновик]

Модуль Сетевые мосты (пакет alterator-net-bridge) позволяет организовать виртуальный сетевой мост.

Предупреждение [Черновик]

Если интерфейсы, входящие в состав моста, являются единственными физически подключенными и настройка моста происходит с удалённого узла через эти интерфейсы, то требуется соблюдать осторожность, т.к. эти интерфейсы перестанут быть доступны.

Для создания Ethernet-моста необходимо выполнить следующие действия:

У интерфейсов, которые будут входить в мост, удалить IP-адреса и шлюз по умолчанию (если они были установлены).

Нажать кнопку Создать сетевой мост…:

В окне Сетевые мосты в поле Интерфейс-мост ввести имя моста.

В выпадающем списке Тип моста выбрать тип моста: Linux Bridge (по умолчанию) или Open vSwitch.

Переместить сетевые интерфейсы, которые будут входить в мост, из списка Доступные интерфейсы в список Члены.

Нажать кнопку Ок:

В результате будет создан сетевой интерфейс моста (в примере vmbr0). Для данного интерфейса можно задать IP-адрес и, если необходимо, дополнительные параметры:

Нажать кнопку Применить.

Для удаления интерфейса моста необходимо выбрать его в списке Интерфейсы и нажать кнопку Удалить сетевой мост….

⁠65.4. VLAN интерфейсы [Черновик]

Модуль VLAN интерфейсы (пакет alterator-net-vlan) предназначен для настройки 802.1Q VLAN.

Для создания интерфейсов VLAN необходимо выполнить следующие действия:

В списке Интерфейсы выбрать сетевой интерфейс и нажать кнопку Настройка VLAN…:

Ввести VLAN ID (число от 1 до 4095) в поле VID и нажать кнопку Добавить VLAN:

Примечание [Черновик]

Следует обратить внимание, что 4094 является верхней допустимой границей идентификатора VLAN, а 4095 используется технически в процессе отбрасывания трафика по неверным VLAN.

Для того чтобы вернуться к основным настройкам, нажать кнопку Назад.

В результате будут созданы виртуальные интерфейсы с именем, содержащим VLAN ID. Для данных интерфейсов можно задать IP-адрес и, если необходимо, дополнительные параметры:

Нажать кнопку Применить.

Для удаления интерфейса VLAN следует в списке Интерфейсы выбрать «родительский» сетевой интерфейс и нажать кнопку Настройка VLAN…. Затем в открывшемся окне выбрать VLAN интерфейс и нажать кнопку Delete:

⁠Глава 66. Доступ к службам сервера из сети Интернет [Черновик]

⁠66.1. Внешние сети [Черновик]

ОС предоставляет возможность организовать доступ к своим службам извне. Для обеспечения такой возможности необходимо разрешить входящие соединения на внешних интерфейсах. По умолчанию такие соединения блокируются.

Для разрешения внешних и внутренних входящих соединений предусмотрен раздел ЦУС Брандмауэр. В списке Разрешить входящие соединения на внешних интерфейсах модуля Внешние сети (пакет alterator-net-iptables) перечислены наиболее часто используемые службы, отметив которые, вы делаете их доступными для соединений на внешних сетевых интерфейсах. Если вы хотите предоставить доступ к службе, отсутствующей в списке, задайте используемые этой службой порты в соответствующих полях.

Можно выбрать один из трёх режимов работы:

Роутер. В этом режиме перенаправление пакетов между сетевыми интерфейсами происходит без трансляции сетевых адресов.

Шлюз (NAT). В этом режиме будет настроена трансляция сетевых адресов (NAT) при перенаправлении пакетов на внешние интерфейсы. Использование этого режима имеет смысл, если у вас настроен, по крайней мере, один внешний и один внутренний интерфейс.

Хост (Рабочая станция). В этом режиме можно для всех интерфейсов открыть или закрыть порт. Внешними автоматически выбираются все интерфейсы, кроме lo и специальных исключений (virbr*, docker*).

Примечание [Черновик]

В любом режиме включено только перенаправление пакетов с внутренних интерфейсов. Перенаправление пакетов с внешних интерфейсов всегда выключено.

Примечание [Черновик]

Все внутренние интерфейсы открыты для любых входящих соединений.

За дополнительной информацией по настройке обращайтесь к встроенной справке модуля ЦУС.

⁠66.2. Список блокируемых хостов [Черновик]

Модуль ЦУС Список блокируемых хостов (пакет alterator-net-iptables) предназначен для блокирования любого трафика с указанными узлами. Данный модуль позволяет блокировать любой сетевой трафик с указанных в списке узлов (входящий, исходящий и пересылаемый).

Блокирование трафика с указанных в списке узлов начинается после установки флажка Использовать чёрный список.

Для добавления блокируемого узла необходимо ввести IP-адрес в поле Добавить IP-адрес сети или хоста и нажать кнопку Добавить.

Для удаления узла из списка выберите его и нажмите кнопку Удалить.

⁠Глава 67. Обслуживание сервера [Черновик]

Для безотказной работы всего домена очень важно следить за корректной работой его центрального звена — сервера под управлением Альт Виртуализация. Регулярный мониторинг состояния сервера, своевременное резервное копирование, обновление установленного ПО являются важной частью комплекса работ по обслуживанию сервера.

⁠67.1. Мониторинг состояния системы [Черновик]

Для обеспечения бесперебойной работы сервера крайне важно производить постоянный мониторинг его состояния. Все события, происходящие с сервером, записываются в журналы, анализ которых помогает избежать сбоев в работе сервера и предоставляет возможность разобраться в причинах некорректной работы сервера.

Для просмотра журналов предназначен модуль ЦУС Системные журналы (пакет alterator-logs) из раздела Система). Интерфейс позволяет просмотреть различные типы журналов с возможностью перехода к более старым или более новым записям.

Различные журналы могут быть выбраны из списка Журналы.

Доступны следующие виды журналов:

Брандмауэр — отображаются события безопасности, связанные с работой межсетевого экрана ОС;

Системные сообщения (Journald) — отображаются события процессов ядра и пользовательской области. У каждого сообщения в этом журнале есть приоритет, который используется для пометки важности сообщений. Сообщения в зависимости от уровня приоритета подсвечиваются цветом.

Каждый журнал может содержать довольно большое количество сообщений. Уменьшить либо увеличить количество выводимых строк можно, выбрав нужное значение в списке Показывать.

⁠67.2. Системные службы [Черновик]

Для изменения состояния служб можно использовать модуль ЦУС Системные службы (пакет alterator-services) из раздела Система. Интерфейс позволяет изменять текущее состояние службы и, если необходимо, применить опцию запуска службы при загрузке системы.

После выбора названия службы из списка отображается описание данной службы, а также текущее состояние: Работает/Остановлена/Неизвестно.

⁠67.3. Обновление системы [Черновик]

После установки системы крайне важно следить за обновлениями ПО. Обновления для Альт Виртуализация могут содержать как исправления, связанные с безопасностью, так и новый функционал или просто улучшение и ускорение алгоритмов. В любом случае настоятельно рекомендуется регулярно обновлять систему для повышения надёжности работы сервера.

Для автоматизации процесса установки обновлений предусмотрен модуль ЦУС Обновление системы (пакет alterator-updates) из раздела Система. Здесь можно включить автоматическое обновление через Интернет с одного из предлагаемых серверов или задать собственные настройки.

Источник обновлений указывается явно (при выбранном режиме Обновлять систему автоматически из сети Интернет) или вычисляется автоматически (при выбранном режиме Обновление системы управляемое сервером и наличии в локальной сети настроенного сервера обновлений).

Процесс обновления системы будет запускаться автоматически согласно заданному расписанию.

⁠67.4. Консоль [Черновик]

Модуль Консоль (пакет alterator-console) предназначен для запуска произвольных команд.

Для запуска команды необходимо ввести команду в поле Команда и нажать кнопку Выполнить. В рабочем поле будет выведен результат выполнения команды. Команда будет выполнена в указанном рабочем каталоге (по умолчанию /root).

⁠67.5. Информация о системе [Черновик]

Модуль Информация о системе (пакет alterator-sysinfo) предназначен для отображения информации о системе:

версии загруженного ядра;

информации о процессорах;

использование памяти;

использование дискового пространства.

⁠67.6. Веб-интерфейс [Черновик]

Модуль Веб-интерфейс предназначен для управления настройками веб-сервера, обеспечивающего работоспособность ЦУС. В поле Порт указывается номер TCP-порта, на котором сервер принимает соединения (порт по умолчанию 8080), в поле Адрес указывается IP-адрес сетевого интерфейса, на котором будет доступен ЦУС, в списке Протоколирование можно выбрать степень подробности протоколирования.

⁠67.7. Локальные учётные записи [Черновик]

Модуль Локальные учётные записи (пакет alterator-users) из раздела Пользователи предназначен для администрирования системных пользователей.

Для создания новой учётной записи необходимо ввести имя новой учётной записи и нажать кнопку Создать, после чего имя отобразится в списке слева.

Для дополнительных настроек необходимо выделить добавленное имя, либо, если необходимо изменить существующую учётную запись, выбрать её из списка.

⁠67.8. Администратор системы [Черновик]

В модуле Администратор системы (пакет alterator-root) из раздела Пользователи можно изменить пароль суперпользователя (root), заданный при начальной настройке системы.

В данном модуле (только в веб-интерфейсе) можно добавить публичную часть ключа RSA или DSA для доступа к серверу по протоколу SSH.

⁠67.9. Дата и время [Черновик]

В модуле Дата и время (пакет alterator-datetime) из раздела Система можно изменить дату и время на сервере, сменить часовой пояс, а также настроить автоматическую синхронизацию часов на самом сервере по протоколу NTP и предоставление точного времени по этому протоколу для рабочих станций локальной сети.

Системное время зависит от следующих факторов:

часы в BIOS — часы, встроенные в компьютер. Они работают, даже если он выключен;

системное время — часы в ядре операционной системы. Во время работы системы все процессы пользуются именно этими часами;

часовые пояса — регионы Земли, в каждом из которых принято единое местное время.

При запуске системы происходит активация системных часов и их синхронизация с аппаратными, кроме того, в определённых случаях учитывается значение часового пояса. При завершении работы системы происходит обратный процесс.

Если настроена синхронизация времени с NTP-сервером, то сервер сможет сам работать как сервер точного времени. Для этого достаточно отметить соответствующий пункт Работать как NTP-сервер.

Примечание [Черновик]

Выбор источника сигналов времени (источника тактовой частоты) доступен в режиме эксперта.

⁠67.10. Ограничение использования диска [Черновик]

Модуль Использование диска (пакет alterator-quota) в разделе Пользователи позволяет ограничить использование дискового пространства пользователями, заведёнными на сервере в модуле Пользователи.

Модуль позволяет задать ограничения (квоты) для пользователя при использовании определённого раздела диска. Ограничить можно как суммарное количество килобайт, занятых файлами пользователя, так и количество этих файлов.

Для управления квотами файловая система должна быть подключена с параметрами usrquota, grpquota. Для этого следует выбрать нужный раздел в списке Файловая система и установить отметку в поле Включено:

Для того чтобы задать ограничения для пользователя, необходимо выбрать пользователя в списке Пользователь, установить ограничения и нажать кнопку Применить.

При задании ограничений различают жёсткие и мягкие ограничения:

Мягкое ограничение: нижняя граница ограничения, которая может быть временно превышена. Временное ограничение — одна неделя.

Жёсткое ограничение: использование диска, которое не может быть превышено ни при каких условиях.

Значение 0 при задании ограничений означает отсутствие ограничений.

⁠67.11. Выключение и перезагрузка компьютера [Черновик]

Иногда, в целях обслуживания или по организационным причинам необходимо корректно выключить или перезагрузить сервер. Для этого можно воспользоваться модулем ЦУС Выключение компьютера в разделе Система.

Модуль Выключение компьютера позволяет:

выключить компьютер;

перезагрузить компьютер;

приостановить работу компьютера;

погрузить компьютер в сон.

Возможна настройка ежедневного применения данных действий в заданное время.

Так как выключение и перезагрузка — критичные для функционирования компьютера операции, то по умолчанию настройка выставлена в значение Продолжить работу. Для выключения, перезагрузки или перехода в энергосберегающие режимы нужно отметить соответствующий пункт и нажать Применить.

Для ежедневного автоматического выключения компьютера, перезагрузки, а также перехода в энергосберегающие режимы необходимо отметить соответствующий пункт и задать желаемое время. Например, для выключения компьютера следует отметить пункт Выключать компьютер каждый день в, задать время выключения в поле ввода слева от этого флажка и нажать кнопку Применить.

Примечание [Черновик]

Для возможности настройки оповещений на e-mail, должен быть установлен пакет state-change-notify-postfix (из репозитория p10):

# apt-get install state-change-notify-postfix

Для настройки оповещений необходимо отметить пункт При изменении состояния системы отправлять электронное письмо по адресу, ввести e-mail адрес и нажать кнопку Применить:

По указанному адресу, при изменении состоянии системы будут приходить электронные письма. Например, при включении компьютера, содержание письма будет следующее:

Fri Mar 29 16:55:31 EET 2024: The host-15.test.alt is about to start.

При выключении:

Fri Mar 29 16:55:02 EET 2024: The host-15.test.alt is about to shutdown.

Кнопка Сбросить возвращает сделанный выбор к безопасному значению по умолчанию: Продолжить работу, перечитывает расписания и выставляет отметки для ежедневного автоматического действия в соответствии с прочитанным.

⁠Глава 68. Прочие возможности ЦУС [Черновик]

Возможности Альт Виртуализация не ограничиваются только теми, что были описаны выше. Вы всегда можете поискать другие модули, предоставляющие прочие возможности для настройки системы в веб-интерфейсе.

Установленные пакеты, которые относятся к ЦУС, можно посмотреть, выполнив команду:

rpm -qa | grep alterator*

Прочие пакеты для ЦУС можно найти, выполнив команду:

apt-cache search alterator*

Модули можно дополнительно загружать и удалять как обычные программы:

# apt-get install alterator-net-openvpn
# apt-get remove alterator-net-openvpn

⁠Глава 69. Права доступа к модулям [Черновик]

Администратор системы (root) имеет доступ ко всем модулям, установленным в системе, и может назначать права доступа для пользователей к определенным модулям.

Для разрешения доступа пользователю к конкретному модулю, администратору в веб-интерфейсе ЦУС необходимо выбрать нужный модуль и нажать ссылку Параметры доступа к модулю, расположенную в нижней части окна модуля:

В открывшемся окне, в списке Новый пользователь необходимо выбрать пользователя, который получит доступ к данному модулю, и нажать кнопку Добавить.

Для сохранения настроек необходимо перезапустить HTTP-сервер, для этого достаточно нажать кнопку Перезапустить HTTP-сервер.

Для удаления доступа пользователя к определенному модулю, администратору, в окне этого модуля необходимо нажать ссылку Параметры доступа к модулю, в открывшемся окне в списке пользователей которым разрешен доступ, должен выбрать пользователя, нажать кнопку Удалить и перезапустить HTTP-сервер.

Системный пользователь, пройдя процедуру аутентификации, может просматривать и вызывать модули, к которым он имеет доступ.

⁠Часть X.  Установка пакетов для опытных пользователей [Черновик]

⁠Введение [Черновик]

Примечание [Черновик]

В установочный комплект Альт Виртуализация включено наиболее употребительное программное обеспечение. Для установки дополнительных программных пакетов можно использовать репозиторий продукта (p10).

В современных системах на базе Linux существует огромное число общих ресурсов: разделяемых библиотек, содержащих стандартные функции, исполняемые файлы, сценарии и стандартные утилиты и т.д. Этими общими ресурсами пользуются сразу несколько программ. Удаление или изменение версии одного из составляющих систему компонентов может повлечь неработоспособность других, связанных с ним компонентов, или может привести к выводу из строя всей системы. В контексте системного администрирования проблемы такого рода называют нарушением целостности системы. Задача администратора — обеспечить наличие в системе согласованных версий всех необходимых программных компонентов (обеспечение целостности системы).

Для установки, удаления и обновления программ, а также поддержания целостности системы в Linux в первую очередь стали использоваться программы менеджеры пакетов (например, такие, как rpm). С точки зрения менеджера пакетов программное обеспечение представляет собой набор компонентов — программных пакетов. Пакеты содержат в себе набор исполняемых программ и вспомогательных файлов, необходимых для корректной работы программного обеспечения. Менеджеры пакетов облегчают установку программ: они позволяют проверить наличие необходимого для работы устанавливаемой программы компонента подходящей версии непосредственно в момент установки. Менеджеры пакетов производят необходимые процедуры для регистрации программы во всех операционных средах пользователя: сразу после установки программа становится доступна пользователю из командной строки и появляется, если это было предусмотрено, в меню приложений всех графических оболочек.

Часто компоненты, используемые различными программами, выделяют в отдельные пакеты и помечают, что для работы ПО, предоставляемого пакетом A, необходимо установить пакет B. В таком случае говорят, что пакет A зависит от пакета B или между пакетами A и B существует зависимость.

Отслеживание зависимостей между такими пакетами представляет собой важную задачу для любого дистрибутива. Некоторые компоненты пакетов могут быть взаимозаменяемыми, т.е. может обнаружиться несколько пакетов, предлагающих затребованный ресурс.

Ещё более сложной является задача контроля целостности и непротиворечивости установленного в системе ПО. Представим, что некие программы A и B требуют наличия в системе компонентов C версии 1.0. Обновление версии пакета A, требующее обновления компонентов C до новой версии (например, до версии 2.0, использующей новый интерфейс доступа), влечёт за собой обязательное обновление и программы B.

На практике менеджеры пакетов оказались неспособны эффективно устранить нарушения целостности системы и предотвратить все коллизии при установке или удалении программ. Особенно остро этот недостаток сказался на обновлении систем из централизованного репозитория, в котором пакеты непрерывно обновляются, дробятся на более мелкие и т.п. Именно этот недостаток стимулировал создание систем управления программными пакетами и поддержания целостности ОС.

Для автоматизации и контроля описанных выше процессов стала применяться Усовершенствованная система управления программными пакетами APT (от англ. Advanced Packaging Tool). Автоматизация и контроль достигаются путём создания одного или нескольких внешних репозиториев. В них хранятся доступные для установки пакеты программ.

В распоряжении APT находятся две базы данных: одна описывает установленные в системе пакеты, вторая — внешний репозиторий. APT отслеживает целостность установленной системы и, в случае обнаружения противоречий в зависимостях пакетов, разрешает конфликты, находит пути их корректного устранения, руководствуясь сведениями из внешних репозиториев.

Система APT состоит из нескольких утилит. Чаще всего используется утилита управления пакетами apt-get. Она автоматически определяет зависимости между пакетами и строго следит за её соблюдением при выполнении любой из следующих операций: установка, удаление или обновление пакетов.

⁠Глава 70. Источники программ (репозитории) [Черновик]

Отличие репозиториев, с которыми работает APT, от простого набора пакетов — наличие метаинформации. В ней содержится индекс находящихся в репозитории пакетов и сведения о них. Поэтому, чтобы получить всю информацию о репозитории, APT достаточно получить его индексы.

APT может пользоваться любым количеством репозиториев одновременно, формируя единую информационную базу обо всех содержащихся в них пакетах. При установке пакетов APT обращает внимание только на название пакета, его версию и зависимости. Для APT не имеет значения расположение пакета в том или ином репозитории.

Важно [Черновик]

Для одновременного подключения нескольких репозиториев необходимо отслеживать их совместимость друг с другом, т.е. их пакетная база должна отражать один определённый этап разработки. Совместное использование репозиториев, относящихся к разным дистрибутивам, или смешивание стабильного репозитория с нестабильной веткой разработки (Sisyphus) может привести к различным неожиданностям и трудностям при обновлении пакетов.

APT осуществляет взаимодействие с репозиториями при помощи различных протоколов доступа. Наиболее популярные — HTTP и FTP.

Для того чтобы APT мог использовать тот или иной репозиторий, информацию о нём необходимо поместить в файл /etc/apt/sources.list, либо в любой файл .list (например, mysources.list) в каталоге /etc/apt/sources.list.d/. Описания репозиториев заносятся в эти файлы в следующем виде:

rpm [подпись] метод:путь база название
rpm-src [подпись] метод:путь база название

Здесь:

rpm или rpm-src — тип репозитория (скомпилированные программы или исходные тексты);

[подпись] — необязательная строка-указатель на электронную подпись разработчиков. Наличие этого поля подразумевает, что каждый пакет из данного репозитория должен быть подписан соответствующей электронной подписью. Подписи описываются в файле /etc/apt/vendor.list;

метод — способ доступа к репозиторию: ftp, http, file, rsh, ssh, cdrom, copy;

путь — путь к репозиторию в терминах выбранного метода;

база — относительный путь к базе данных репозитория;

название — название репозитория.

Непосредственно после установки дистрибутива Альт Виртуализация в файлах /etc/apt/sources.list.d/*.list обычно указывается интернет-репозиторий, совместимый с установленным дистрибутивом.

После редактирования списка репозиториев в sources.list, необходимо обновить локальную базу данных APT о доступных пакетах. Это делается командой apt-get update.

Если в sources.list присутствует репозиторий, содержимое которого может изменяться (например, постоянно разрабатываемый репозиторий или репозиторий обновлений по безопасности), то прежде чем работать с APT, необходимо синхронизировать локальную базу данных с удалённым сервером командой apt-get update. Локальная база данных создаётся заново при каждом изменении в репозитории: добавлении, удалении или переименовании пакета.

При установке определённого пакета APT производит поиск самой новой версии этого пакета во всех известных ему репозиториях вне зависимости от способа доступа к ним. Так, если в репозитории, доступном в сети Интернет, обнаружена более новая в сравнении с компакт-диском версия программы, то APT начнёт загружать соответствующий пакет из сети Интернет. Поэтому, если подключение к сети Интернет отсутствует или ограничено низкой пропускной способностью канала или высокой стоимостью, то следует закомментировать строчки (добавить в начало строки символ #) в /etc/apt/sources.list, относящиеся к ресурсам в сети Интернет.

⁠70.1. Редактирование репозиториев [Черновик]

⁠70.1.1. Утилита apt-repo для работы с репозиториями [Черновик]

Для редактирования репозиториев можно воспользоваться скриптом apt-repo:

просмотреть список активных репозиториев:

apt-repo

добавить репозиторий в список активных репозиториев:

apt-repo add репозиторий

удалить или выключить репозиторий:

apt-repo rm репозиторий

обновить информацию о репозиториях:

apt-repo update

справка о команде apt-repo:

man apt-repo

или

apt-repo --help

Примечание [Черновик]

Для выполнения большинства команд необходимы права администратора.

Типичный пример использования: удалить все источники и добавить стандартный репозиторий P10 (архитектура выбирается автоматически):

# apt-repo rm all
# apt-repo add p10

Или то же самое одной командой:

# apt-repo set p10

⁠70.1.2. Добавление репозитория на сменном носителе [Черновик]

Для добавления в sources.list репозитория на сменном диске в APT предусмотрена специальная утилита — apt-cdrom.

Чтобы добавить запись о репозитории на сменном диске необходимо:

Создать каталог для монтирования. Точка монтирования указывается в параметре Acquire::CDROM::mount в файле конфигурации APT (/etc/apt/apt.conf), по умолчанию это /media/ALTLinux:

# mkdir /media/ALTLinux

Примонтировать носитель в указанную точку:

# mount /dev/носитель /media/ALTLinux

где /dev/носитель — соответствующее блочное устройство (например, /dev/dvd — для CD/DVD-диска).

Добавить носитель, выполнив команду:

# apt-cdrom -m add

После этого в sources.list появится запись о подключённом носителе:

rpm cdrom:[ALT Server-V 10.2.0 x86_64 build 2024-03-28]/ ALTLinux main

⁠70.1.3. Добавление репозиториев вручную [Черновик]

Для изменения списка репозиториев можно отредактировать в любом текстовом редакторе файлы из каталога /etc/apt/sources.list.d/.

Примечание [Черновик]

Для изменения этих файлов необходимы права администратора.

В файле alt.list может содержаться такая информация:

# ftp.altlinux.org (ALT Linux, Moscow)

# ALT Platform 10
#rpm [p10] ftp://ftp.altlinux.org/pub/distributions/ALTLinux p10/branch/x86_64 classic
#rpm [p10] ftp://ftp.altlinux.org/pub/distributions/ALTLinux p10/branch/x86_64-i586 classic
#rpm [p10] ftp://ftp.altlinux.org/pub/distributions/ALTLinux p10/branch/noarch classic

rpm [p10] http://ftp.altlinux.org/pub/distributions/ALTLinux p10/branch/x86_64 classic
rpm [p10] http://ftp.altlinux.org/pub/distributions/ALTLinux p10/branch/x86_64-i586 classic
rpm [p10] http://ftp.altlinux.org/pub/distributions/ALTLinux p10/branch/noarch classic

По сути, каждая строчка соответствует некому репозиторию. Не активные репозитории — строки, начинающиеся со знака #. Для добавления нового репозитория, достаточно дописать его в этот или другой файл.

После обновления списка репозиториев следует обновить информацию о них (выполнить команду apt-get update или apt-repo update).

⁠Глава 71. Поиск пакетов [Черновик]

Если точное название пакета неизвестно, то для его поиска можно воспользоваться утилитой apt-cache. Данная утилита позволяет искать пакет не только по имени, но и по его описанию.

Команда apt-cache search подстрока позволяет найти все пакеты, в именах или описании которых присутствует указанная подстрока. Например:

$ apt-cache search telegraf
ceph-mgr-telegraf - Telegraf module for Ceph Manager Daemon
telegraf - The plugin-driven server agent for collecting and reporting metrics

Для того чтобы подробнее узнать информацию о найденном пакете и получить его подробное описание, воспользуйтесь командой apt-cache show:

$ apt-cache show telegraf
Package: telegraf
Section: Development/Other
Installed Size: 154119764
Maintainer: Alexey Shabalin (ALT Team) <shaba@altlinux.org>
Version: 1.24.2-alt1:p10+326352.200.3.1@1691242931
Pre-Depends: /bin/sh, /usr/sbin/groupadd, /usr/sbin/useradd, /usr/sbin/usermod, /usr/sbin/post_service, /usr/sbin/preun_service, rpmlib(PayloadIsXz)
Depends: /bin/kill, /bin/sh, /etc/logrotate.d, /etc/rc.d/init.d, /etc/rc.d/init.d(SourceIfNotEmpty), /etc/rc.d/init.d(msg_reloading), /etc/rc.d/init.d(msg_usage), /etc/rc.d/init.d(start_daemon), /etc/rc.d/init.d(status), /etc/rc.d/init.d(stop_daemon), /etc/rc.d/init.d/functions
Provides: telegraf (= 1.24.2-alt1:p10+326352.200.3.1)
Architecture: x86_64
Size: 29082799
MD5Sum: d9daf730a225fb47b2901735aa01ed17
Filename: telegraf-1.24.2-alt1.x86_64.rpm
Description: The plugin-driven server agent for collecting and reporting metrics
 Telegraf is an agent written in Go for collecting, processing, aggregating, and writing metrics.

 Design goals are to have a minimal memory footprint with a plugin system so that developers
 in the community can easily add support for collecting metrics from well known services
 (like Hadoop, Postgres, or Redis) and third party APIs (like Mailchimp, AWS CloudWatch,
 or Google Analytics).

При поиске с помощью apt-cache можно использовать русскую подстроку. В этом случае будут найдены пакеты, имеющие описание на русском языке. К сожалению, описание на русском языке в настоящее время есть не у всех пакетов, но наиболее актуальные описания переведены.

⁠Глава 72. Установка или обновление пакета [Черновик]

Важно [Черновик]

Для установки пакетов требуются привилегии администратора.

Установка пакета с помощью APT выполняется командой apt-get install имя_пакета.

Важно [Черновик]

Перед установкой и обновлением пакетов необходимо выполнить команду обновления индексов пакетов:

# apt-get update

apt-get позволяет устанавливать в систему пакеты, требующие для работы наличие других, пока ещё не установленных пакетов. В этом случае он определяет, какие пакеты необходимо установить. apt-get устанавливает их, пользуясь всеми доступными репозиториями.

Установка пакета telegraf командой apt-get install telegraf приведёт к следующему диалогу с APT:

# apt-get install telegraf
Чтение списков пакетов... Завершено
Построение дерева зависимостей... Завершено
Следующие НОВЫЕ пакеты будут установлены:
  telegraf
0 будет обновлено, 1 новых установлено, 0 пакетов будет удалено и 0 не будет обновлено.
Необходимо получить 29,1MB архивов.
После распаковки потребуется дополнительно 154MB дискового пространства.
Получено: 1 http://ftp.altlinux.org p10/branch/x86_64/classic telegraf 1.24.2-alt1:p10+326352.200.3.1@1691242931 [29,1MB]
Получено 29,1MB за 2s (11,0MB/s).
Совершаем изменения...
Подготовка...                           ################################# [100%]
Обновление / установка...
1: telegraf-1.24.2-alt1                 ################################# [100%]
Завершено.

Команда apt-get install имя_пакета используется также и для обновления уже установленного пакета или группы пакетов. В этом случае apt-get дополнительно проверяет, есть ли обновлённая, в сравнении с установленной в системе, версия пакета в репозитории.

При помощи APT можно установить и отдельный rpm-пакет, не входящий в состав репозиториев (например, полученный из сети Интернет). Для этого достаточно выполнить команду

# apt-get install /путь/к/файлу.rpm

При этом APT проведёт стандартную процедуру проверки зависимостей и конфликтов с уже установленными пакетами.

Иногда в результате операций с пакетами без использования APT целостность системы нарушается, и apt-get отказывается выполнять операции установки, удаления или обновления. В этом случае необходимо повторить операцию, задав опцию -f, заставляющую apt-get исправить нарушенные зависимости, удалить или заменить конфликтующие пакеты. В этом случае необходимо внимательно следить за сообщениями, выводимыми apt-get. Любые действия в этом режиме обязательно требуют подтверждения со стороны пользователя.

⁠Глава 73. Удаление установленного пакета [Черновик]

Для удаления пакета используется команда apt-get remove имя_пакета. Для того чтобы не нарушать целостность системы, будут удалены и все пакеты, зависящие от удаляемого. В случае удаления пакета, который относится к базовым компонентам системы, apt-get потребует дополнительное подтверждение с целью предотвращения возможной случайной ошибки.

Важно [Черновик]

Для удаления пакетов требуются привилегии администратора.

При попытке с помощью apt-get удалить базовый компонент системы, вы увидите следующий запрос на подтверждение операции:

# apt-get remove filesystem
Чтение списков пакетов... Завершено
Построение дерева зависимостей... Завершено
Следующие пакеты будут УДАЛЕНЫ:
  ...
ВНИМАНИЕ: Будут удалены важные для работы системы пакеты
Обычно этого делать не следует. Вы должны точно понимать возможные последствия!
  ...
0 будет обновлено, 0 новых установлено, 2648 пакетов будет удалено и 0 не будет обновлено.
Необходимо получить 0B архивов.
После распаковки будет освобождено 8994MB дискового пространства.
Вы делаете нечто потенциально опасное!
Введите фразу 'Yes, do as I say!' чтобы продолжить.

Предупреждение [Черновик]

Каждую ситуацию, в которой APT выдаёт такой запрос, необходимо рассматривать отдельно. Вероятность того, что после выполнения этой команды система окажется неработоспособной, очень велика.

⁠Глава 74. Обновление системы [Черновик]

⁠74.1. Обновление всех установленных пакетов [Черновик]

Для обновления всех установленных пакетов необходимо выполнить команды:

# apt-get update && apt-get dist-upgrade

Первая команда (apt-get update) обновит индексы пакетов. Вторая команда (apt-get dist-upgrade) позволяет обновить только те установленные пакеты, для которых в репозиториях, перечисленных в /etc/apt/sources.list, имеются новые версии.

Примечание [Черновик]

Несмотря на то, что команда apt-get upgrade существует, использовать её следует осторожно, либо не использовать вовсе.

Она позволяет обновить только те установленные пакеты, для которых в репозиториях, перечисленных в /etc/apt/sources.list, имеются новые версии.

Никакие другие пакеты при этой операции из системы удалены не будут. Этот способ полезен при работе со стабильными пакетами приложений, относительно которых известно, что они при смене версии изменяются несущественно.

Иногда, однако, происходит изменение в наименовании пакетов или изменение их зависимостей. Такие ситуации не обрабатываются командой apt-get upgrade, в результате чего происходит нарушение целостности системы: появляются неудовлетворённые зависимости. Для разрешения этой проблемы существует режим обновления в масштабе дистрибутива — apt-get dist-upgrade.

В случае обновления всего дистрибутива APT проведёт сравнение системы с репозиторием и удалит устаревшие пакеты, установит новые версии присутствующих в системе пакетов, отследит ситуации с переименованиями пакетов или изменения зависимостей между старыми и новыми версиями программ. Всё, что потребуется поставить (или удалить) дополнительно к уже имеющемуся в системе, будет указано в отчёте apt-get, которым APT предварит само обновление.

Примечание [Черновик]

Команда apt-get dist-upgrade обновит систему, но ядро ОС не будет обновлено.

⁠74.2. Обновление ядра [Черновик]

Для обновления ядра ОС необходимо выполнить команду:

# update-kernel

Примечание [Черновик]

Если индексы сегодня еще не обновлялись перед выполнением команды update-kernel необходимо выполнить команду apt-get update.

Команда update-kernel обновляет и модули ядра, если в репозитории обновилось что-то из модулей без обновления ядра.

Новое ядро загрузится только после перезагрузки системы, которую рекомендуется выполнить немедленно.

Если с новым ядром что-то пойдёт не так, вы сможете вернуться к предыдущему варианту, выбрав его в начальном меню загрузчика.

После успешной загрузки на обновленном ядре можно удалить старое, выполнив команду:

# remove-old-kernels

⁠Часть XI. Основы администрирования Linux [Черновик]

⁠Глава 75. Общие принципы работы ОС [Черновик]

⁠75.1. Процессы и файлы [Черновик]

ОС Альт Виртуализация является многопользовательской интегрированной системой. Это значит, что она разработана в расчете на одновременную работу нескольких пользователей.

Пользователь может либо сам работать в системе, выполняя некоторую последовательность команд, либо от его имени могут выполняться прикладные процессы.

Пользователь взаимодействует с системой через командный интерпретатор. Командный интерпретатор представляет собой прикладную программу, которая принимает от пользователя команды или набор команд и транслирует их в системные вызовы к ядру системы. Интерпретатор позволяет пользователю просматривать файлы, передвигаться по дереву файловой системы, запускать прикладные процессы. Все командные интерпретаторы UNIX имеют развитый командный язык и позволяют писать достаточно сложные программы, упрощающие процесс администрирования системы и работы с ней.

⁠75.1.1. Процессы функционирования ОС [Черновик]

Все программы, которые выполняются в текущий момент времени, называются процессами. Процессы можно разделить на два основных класса: системные процессы и пользовательские процессы.

Системные процессы — программы, решающие внутренние задачи ОС, например, организацию виртуальной памяти на диске или предоставляющие пользователям те или иные сервисы (процессы-службы).

Пользовательские процессы — процессы, запускаемые пользователем из командного интерпретатора для решения задач пользователя или управления системными процессами. Linux изначально разрабатывался как многозадачная система. Он использует технологии, опробованные и отработанные другими реализациями UNIX, которые существовали ранее.

Фоновый режим работы процесса — режим, когда программа может работать без взаимодействия с пользователем. В случае необходимости интерактивной работы с пользователем (в общем случае) процесс будет «остановлен» ядром, и работа его продолжается только после переведения его в «нормальный» режим работы.

⁠75.1.2. Файловая система ОС [Черновик]

В ОС использована файловая система Linux, которая, в отличие от файловых систем DOS и Windows(™), является единым деревом. Корень этого дерева — каталог, называемый root (рут) и обозначаемый /.

Части дерева файловой системы могут физически располагаться в разных разделах разных дисков или вообще на других компьютерах — для пользователя это прозрачно. Процесс присоединения файловой системы раздела к дереву называется монтированием, удаление — размонтированием. Например, файловая система CD-ROM в дистрибутиве монтируется по умолчанию в каталог /media/cdrom (путь в дистрибутиве обозначается с использованием /, а не \, как в DOS/Windows).

Текущий каталог обозначается ./.

⁠75.1.3. Структура каталогов [Черновик]

Корневой каталог /:

/bin — командные оболочки (shell), основные утилиты;

/boot — содержит ядро системы;

/dev — псевдофайлы устройств, позволяющие работать с устройствами напрямую. Файлы в /dev создаются сервисом udev

/etc — общесистемные конфигурационные файлы для большинства программ в системе;

/etc/rc?.d, /etc/init.d, /etc/rc.boot, /etc/rc.d — каталоги, где расположены командные файлы, выполняемые при запуске системы или при смене её режима работы;

/etc/passwd — база данных пользователей, в которой содержится информация об имени пользователя, его настоящем имени, личном каталоге, его зашифрованный пароль и другие данные;

/etc/shadow — теневая база данных пользователей. При этом информация из файла /etc/passwd перемещается в /etc/shadow, который недоступен для чтения всем, кроме пользователя root. В случае использования альтернативной схемы управления теневыми паролями (TCB), все теневые пароли для каждого пользователя располагаются в каталоге /etc/tcb/имя пользователя/shadow;

/home — домашние каталоги пользователей;

/lib — содержит файлы динамических библиотек, необходимых для работы большей части приложений, и подгружаемые модули ядра;

/lost+found — восстановленные файлы;

/media — подключаемые носители (каталоги для монтирования файловых систем сменных устройств);

/mnt — точки временного монтирования;

/opt — вспомогательные пакеты;

/proc — виртуальная файловая система, хранящаяся в памяти компьютера при загруженной ОС. В данном каталоге расположены самые свежие сведения обо всех процессах, запущенных на компьютере.

/root — домашний каталог администратора системы;

/run — файлы состояния приложений;

/sbin — набор программ для административной работы с системой (системные утилиты);

/selinux — виртуальная файловая система SELinux;

/srv — виртуальные данные сервисных служб;

/sys — файловая система, содержащая информацию о текущем состоянии системы;

/tmp — временные файлы.

/usr — пользовательские двоичные файлы и данные, используемые только для чтения (программы и библиотеки);

/var — файлы для хранения изменяющихся данных (рабочие файлы программ, очереди, журналы).

Каталог /usr:

/usr/bin — дополнительные программы для всех учетных записей;

/usr/sbin — команды, используемые при администрировании системы и не предназначенные для размещения в файловой системе root;

/usr/local — место, где рекомендуется размещать файлы, установленные без использования пакетных менеджеров, внутренняя организация каталогов практически такая же, как и корневого каталога;

/usr/man — каталог, где хранятся файлы справочного руководства man;

/usr/share — каталог для размещения общедоступных файлов большей части приложений.

Каталог /var:

/var/log — место, где хранятся файлы аудита работы системы и приложений;

/var/spool — каталог для хранения файлов, находящихся в очереди на обработку для того или иного процесса (очереди печати, непрочитанные или не отправленные письма, задачи cron т.д.).

⁠75.1.4. Организация файловой структуры [Черновик]

Система домашних каталогов пользователей помогает организовывать безопасную работу пользователей в многопользовательской системе. Вне своего домашнего каталога пользователь обладает минимальными правами (обычно чтение и выполнение файлов) и не может нанести ущерб системе, например, удалив или изменив файл.

Кроме файлов, созданных пользователем, в его домашнем каталоге обычно содержатся персональные конфигурационные файлы некоторых программ.

Маршрут (путь) — это последовательность имён каталогов, представляющая собой путь в файловой системе к данному файлу, где каждое следующее имя отделяется от предыдущего наклонной чертой (слешем). Если название маршрута начинается со слеша, то путь в искомый файл начинается от корневого каталога всего дерева системы. В обратном случае, если название маршрута начинается непосредственно с имени файла, то путь к искомому файлу должен начаться от текущего каталога (рабочего каталога).

Имя файла может содержать любые символы за исключением косой черты (/). Однако следует избегать применения в именах файлов большинства знаков препинания и непечатаемых символов. При выборе имен файлов рекомендуется ограничиться следующими символами:

строчные и ПРОПИСНЫЕ буквы. Следует обратить внимание на то, что регистр всегда имеет значение;

символ подчеркивания (_);

точка (.).

Для удобства работы точку можно использовать для отделения имени файла от расширения файла. Данная возможность может быть необходима пользователям или некоторым программам, но не имеет значение для shell.

⁠75.1.5. Имена дисков и разделов [Черновик]

Все физические устройства вашего компьютера отображаются в каталог /dev файловой системы дистрибутива (об этом — ниже). Диски (в том числе IDE/SATA/SCSI/SAS жёсткие диски, USB-диски) имеют имена:

/dev/sda — первый диск;

/dev/sdb — второй диск;

и т.д.

Диски обозначаются /dev/sdX, где X — a, b, c, d, e, … в зависимости от порядкового номера диска на шине.

Раздел диска обозначается числом после его имени. Например, /dev/sdb4 — четвертый раздел второго диска.

⁠75.1.6. Разделы, необходимые для работы ОС [Черновик]

Для работы ОС на жестком диске (дисках) должны быть созданы, по крайней мере, два раздела: корневой (то есть тот, который будет содержать каталог /) и раздел подкачки (swap). Размер последнего, как правило, составляет от однократной до двукратной величины оперативной памяти компьютера. Если на диске много свободного места, то можно создать отдельные разделы для каталогов /usr, /home, /var.

⁠75.2. Работа с наиболее часто используемыми компонентами [Черновик]

⁠75.2.1. Виртуальная консоль [Черновик]

Система Альт Виртуализация предоставляет доступ к виртуальным консолям, с которых можно осуществлять одновременно несколько сеансов работы в системе (login session).

Только что установленная система Альт Виртуализация, возможно, предоставляет доступ только к первым шести виртуальным консолям, к которым можно обращаться, нажимая комбинации клавиш Alt+F1 — Alt+F6 (Ctrl+Alt+F1 — Ctrl+Alt+F6).

⁠75.2.2. Командные оболочки (интерпретаторы) [Черновик]

Для управления ОС используются командные интерпретаторы (shell).

Зайдя в систему, Вы увидите приглашение — строку, содержащую символ «$» (далее этот символ будет обозначать командную строку). Программа ожидает ваших команд. Роль командного интерпретатора — передавать ваши команды операционной системе. По своим функциям он соответствует command.com в DOS, но несравненно мощнее. При помощи командных интерпретаторов можно писать небольшие программы — сценарии (скрипты). В Linux доступны следующие командные оболочки:

bash — самая распространенная оболочка под linux. Она ведет историю команд и предоставляет возможность их редактирования;

pdksh — клон korn shell, хорошо известной оболочки в UNIX™ системах.

Проверить, какая оболочка используется в данный момент можно, выполнив команду:

$ echo $SHELL

Оболочкой по умолчанию является Bash (Bourne Again Shell) — самая распространённая оболочка под Linux, которая ведет историю команд и предоставляет возможность их редактирования. В дальнейшем описании работы с Альт Виртуализация будут использоваться примеры с использованием этой оболочки.

⁠75.2.3. Командная оболочка Bash [Черновик]

В Bash имеется несколько приемов для работы со строкой команд. Например, можно использовать следующие сочетания:

Ctrl+A — перейти на начало строки;

Ctrl+U — удалить текущую строку;

Ctrl+C — остановить текущую задачу.

Для ввода нескольких команд одной строкой можно использовать разделитель «;». По истории команд можно перемещаться с помощью клавиш ↑ («вверх») и ↓ («вниз»).

Чтобы найти конкретную команду в списке набранных, не пролистывая всю историю, можно нажать Ctrl+R и начать вводить символы ранее введенной команды.

Для просмотра истории команд можно воспользоваться командой history. Команды, присутствующие в истории, отображаются в списке пронумерованными. Чтобы запустить конкретную команду необходимо набрать:

!номер команды

Если ввести:

!!

запустится последняя из набранных команд.

В Bash имеется возможность самостоятельного завершения имен команд из общего списка команд, что облегчает работу при вводе команд, в случае, если имена программ и команд слишком длинны. При нажатии клавиши Tab Bash завершает имя команды, программы или каталога, если не существует нескольких альтернативных вариантов. Например, чтобы использовать программу декомпрессии gunzip, можно набрать следующую команду:

gu

Затем нажать клавишу Tab. Так как в данном случае существует несколько возможных вариантов завершения команды, то необходимо повторно нажать клавишу Tab, чтобы получить список имен, начинающихся с gu.

В предложенном примере можно получить следующий список:

$ gu
guile gunzip gupnp-binding-tool

Если набрать: n (gunzip — это единственное имя, третьей буквой которого является «n»), а затем нажать клавишу Tab, то оболочка самостоятельно дополнит имя. Чтобы запустить команду нужно нажать Enter.

Программы, вызываемые из командной строки, Bash ищет в каталогах, определяемых в системной переменной $PATH. По умолчанию в этот перечень каталогов не входит текущий каталог, обозначаемый ./ (точка слеш) (если только не выбран один из двух самых слабых уровней защиты). Поэтому, для запуска программы из текущего каталога, необходимо использовать команду (в примере запускается команда prog):

./prog

⁠75.2.4. Команда [Черновик]

Простейшая команда состоит из одного «слова», например, команда cal, выводящая календарь на текущий месяц.

$ cal
    Сентябрь 2023
Пн Вт Ср Чт Пт Сб Вс
             1  2  3
 4  5  6  7  8  9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30

⁠75.2.5. Команда и параметры [Черновик]

$ cal 1 2024
     Январь 2024
Пн Вт Ср Чт Пт Сб Вс
 1  2  3  4  5  6  7
 8  9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31

Команда cal 1 2024 состоит из двух частей — собственно команды cal и «остального». То, что следует за командой называется параметрами (или аргументами) и они вводятся для изменения поведения команды. В большинстве случаев, первое слово считается именем команды, а остальные — её параметрами.

⁠75.2.6. Команда и ключи [Черновик]

Для решения разных задач одни и те же действия необходимо выполнять по-разному. Например, для синхронизации работ в разных точках земного шара лучше использовать единое для всех время (по Гринвичу), а для организации собственного рабочего дня — местное время (с учётом сдвига по часовому поясу и разницы зимнего и летнего времени). И то, и другое время показывает команда date, только для работы по Гринвичу ей нужен дополнительный параметр -u (он же --universal).

$ date
Ср 27 сен 2023 18:58:50 EET
$ date -u
Ср 27 сен 2023 16:59:09 UTC

Такого рода параметры называются ключами или модификаторами выполнения. Ключ принадлежит данной конкретной команде и сам по себе смысла не имеет. Этим он отличается от других параметров (например, имён файлов, чисел), имеющих собственный смысл, не зависящий ни от какой команды. Каждая команда может распознавать некоторый набор ключей и соответственно изменять своё поведение. Один и тот же ключ может определять для разных команд совершенно разные значения.

Для формата ключей нет жёсткого стандарта, однако существуют договорённости:

Если ключ начинается на -, то это однобуквенный ключ. За -, как правило, следует один символ, чаще всего буква, обозначающая действие или свойство, которое этот ключ придаёт команде. Так проще отличать ключи от других параметров.

Если ключ начинается на --, то он называется полнословным ключом. Полнословный формат ключа начинается на два знака --, за которыми следует полное имя обозначаемого этим ключом содержания.

Некоторые ключи имеют и однобуквенный, и полнословный формат, а некоторые — только полнословный.

Информацию о ресурсах каждой команды можно получить, используя ключ --help. К примеру, получить подсказку о том, что делает команда rm, можно, набрав в терминале rm --help.

⁠75.2.7. Обзор основных команд системы [Черновик]

Все команды, приведенные ниже, могут быть запущены в режиме консоли. Для получения более подробной информации используйте команду man. Пример:

$ man ls

Примечание [Черновик]

Параметры команд обычно начинаются с символа «-», и обычно после одного символа «-» можно указать сразу несколько опций. Например, вместо команды ls -l -F можно ввести команду ls -lF

Учетные записи пользователей [Черновик]

Команда su

Команда su позволяет изменить «владельца» текущего сеанса (сессии) без необходимости завершать сеанс и открывать новый.

Синтаксис:

su [ОПЦИИ...] [ПОЛЬЗОВАТЕЛЬ]

Команду можно применять для замены текущего пользователя на любого другого, но чаще всего она используется для получения пользователем прав суперпользователя (root).

При вводе команды su - будет запрошен пароль суперпользователя (root), и, в случае ввода корректного пароля, пользователь получит права администратора. Чтобы вернуться к правам пользователя, необходимо ввести команду:

exit

Более подробную информацию о режиме суперпользователя вы можете прочитать в главе Режим суперпользователя.

Команда id

Команда id выводит информацию о пользователе и группах, в которых он состоит, для заданного пользователя или о текущем пользователе (если ничего не указано).

Синтаксис:

id [ОПЦИИ...] [ПОЛЬЗОВАТЕЛЬ]

Команда passwd

Команда passwd меняет (или устанавливает) пароль, связанный с входным_именем пользователя.

Обычный пользователь может менять только пароль, связанный с его собственным входным_именем.

Команда запрашивает у обычных пользователей старый пароль (если он был), а затем дважды запрашивает новый. Новый пароль должен соответствовать техническим требованиям к паролям, заданным администратором системы.

Основные операции с файлами и каталогами [Черновик]

Команда ls

Команда ls (list) печатает в стандартный вывод содержимое каталогов.

Синтаксис:

ls [ОПЦИИ...] [ФАЙЛ...]

Основные опции:

-a — просмотр всех файлов, включая скрытые;

-l — отображение более подробной информации;

-R — выводить рекурсивно информацию о подкаталогах.

Команда cd

Команда cd предназначена для смены каталога. Команда работает как с абсолютными, так и с относительными путями. Если каталог не указан, используется значение переменной окружения $HOME (домашний каталог пользователя). Если каталог задан полным маршрутным именем, он становится текущим. По отношению к новому каталогу нужно иметь право на выполнение, которое в данном случае трактуется как разрешение на поиск.

Синтаксис:

cd [-L|-P] [КАТАЛОГ]

Если в качестве аргумента задано «-», то это эквивалентно $OLDPWD. Если переход был осуществлен по переменной окружения $CDPATH или в качестве аргумента был задан «-» и смена каталога была успешной, то абсолютный путь нового рабочего каталога будет выведен на стандартный вывод.

Примеры:

находясь в домашнем каталоге перейти в его подкаталог docs/ (относительный путь):

cd docs/

сделать текущим каталог /usr/bin (абсолютный путь):

cd /usr/bin/

сделать текущим родительский каталог:

cd ..

вернуться в предыдущий каталог:

cd -

сделать текущим домашний каталог:

cd

Команда pwd

Команда pwd выводит абсолютный путь текущего (рабочего) каталога.

Синтаксис:

pwd [-L|-P]

Опции:

-P — не выводить символические ссылки;

-L — выводить символические ссылки.

Команда rm

Команда rm служит для удаления записей о файлах. Если заданное имя было последней ссылкой на файл, то файл уничтожается.

Предупреждение [Черновик]

Удалив файл, вы не сможете его восстановить!

Синтаксис:

rm [ОПЦИИ...] <ФАЙЛ>

Основные опции:

-f —  никогда не запрашивать подтверждения;

-i —  всегда запрашивать подтверждение;

-r, -R — рекурсивно удалять содержимое указанных каталогов.

Пример. Удалить все файлы html в каталоге ~/html:

rm -i ~/html/*.html

Команда mkdir

mkdir — команда для создания новых каталогов.

Синтаксис:

mkdir [-p] [-m права] <КАТАЛОГ...>

Команда rmdir

Команда rmdir удаляет каталоги из файловой системы. Каталог должен быть пуст перед удалением.

Синтаксис:

rmdir [ОПЦИИ...] <КАТАЛОГ...>

Основные опции:

-p — удалить каталог и его потомки.

Команда rmdir часто заменяется командой rm -rf, которая позволяет удалять каталоги, даже если они не пусты.

Команда cp

Команда cp предназначена для копирования файлов из одного в другие каталоги.

Синтаксис:

cp [-fip] [ИСХ_ФАЙЛ...] [ЦЕЛ_ФАЙЛ...]

cp [-fip] [ИСХ_ФАЙЛ...] [КАТАЛОГ]

cp [-R] [[-H] | [-L] | [-P]] [-fip] [ИСХ_ФАЙЛ...] [КАТАЛОГ]

Основные опции:

-p — сохранять по возможности времена изменения и доступа к файлу, владельца и группу, права доступа;

-i — запрашивать подтверждение перед копированием в существующие файлы;

-r, -R — рекурсивно копировать содержимое каталогов.

Команда mv

Команда mv предназначена для перемещения файлов.

Синтаксис:

mv [-fi] [ИСХ_ФАЙЛ...] [ЦЕЛ_ФАЙЛ...]

mv [-fi] [ИСХ_ФАЙЛ...] [КАТАЛОГ]

В первой синтаксической форме, характеризующейся тем, что последний операнд не является ни каталогом, ни символической ссылкой на каталог, mv перемещает исх_файл в цел_файл (происходит переименование файла).

Во второй синтаксической форме mv перемещает исходные файлы в указанный каталог под именами, совпадающими с краткими именами исходных файлов.

Основные опции:

-f — не запрашивать подтверждения перезаписи существующих файлов;

-i — запрашивать подтверждение перезаписи существующих файлов.

Команда cat

Команда cat последовательно выводит содержимое файлов.

Синтаксис:

cat [ОПЦИИ...] [ФАЙЛ...]

Основные опции:

-n, --number — нумеровать все строки при выводе;

-E, --show-ends — показывать $ в конце каждой строки.

Если файл не указан, читается стандартный ввод. Если в списке файлов присутствует имя «-», вместо этого файла читается стандартный ввод.

Команда head

Команда head выводит первые 10 строк каждого файла на стандартный вывод.

Синтаксис:

head [ОПЦИИ] [ФАЙЛ...]

Основные опции:

-n, --lines=[-]K — вывести первые К строк каждого файла, а не первые 10;

-q, --quiet — не печатать заголовки с именами файлов.

Команда less

Команда less позволяет постранично просматривать текст (для выхода необходимо нажать q).

Синтаксис:

less <ФАЙЛ>

Команда grep

Команда grep имеет много опций и предоставляет возможности поиска символьной строки в файле.

Синтаксис:

grep [шаблон_поиска] <ФАЙЛ>

Поиск файлов [Черновик]

Команда find

Команда find предназначена для поиска всех файлов, начиная с корневого каталога. Поиск может осуществляться по имени, типу или владельцу файла.

Синтаксис:

find [-H] [-L] [-P] [-Oуровень] [-D help|tree|search|stat|rates|opt|exec] [ПУТЬ…] [ВЫРАЖЕНИЕ]

Ключи для поиска:

-name — поиск по имени файла;

-type — поиск по типу f=файл, d=каталог, l=ссылка(lnk);

-user — поиск по владельцу (имя или UID).

Когда выполняется команда find, можно выполнять различные действия над найденными файлами. Основные действия:

-exec команда \; — выполнить команду. Запись команды должна заканчиваться экранированной точкой с запятой. Строка «{}» заменяется текущим маршрутным именем файла;

execdir команда \; — то же самое что и -exec, но команда вызывается из подкаталога, содержащего текущий файл;

-ok команда — эквивалентно -exec за исключением того, что перед выполнением команды запрашивается подтверждение (в виде сгенерированной командной строки со знаком вопроса в конце) и она выполняется только при ответе: «y»;

-print — вывод имени файла на экран.

Путем по умолчанию является текущий подкаталог. Выражение по умолчанию -print.

Примеры:

найти в текущем каталоге обычные файлы (не каталоги), имя которых начинается с символа «~»:

find . -type f -name "~*" -print

найти в текущем каталоге файлы, измененные позже, чем файл file.bak:

find . -newer file.bak -type f -print

удалить все файлы с именами a.out или *.o, доступ к которым не производился в течение недели:

find / \( -name a.out -o -name '*.o' \) \ -atime +7 -exec rm {} \;

удалить из текущего каталога и его подкаталогов все файлы нулевого размера, запрашивая подтверждение:

find . -size 0c -ok rm {} \;

Команда whereis

whereis сообщает путь к исполняемому файлу программы, ее исходным файлам (если есть) и соответствующим страницам справочного руководства.

Синтаксис:

whereis [ОПЦИИ...] <ФАЙЛ>

Опции:

-b — вывод информации только об исполняемых файлах;

-m — вывод информации только о страницах справочного руководства;

-s — вывод информации только об исходных файлах.

Мониторинг и управление процессами [Черновик]

Команда ps

Команда ps отображает список текущих процессов.

Синтаксис:

ps [ОПЦИИ...]

По умолчанию выводится информация о процессах с теми же действующим UID и управляющим терминалом, что и у подающего команду пользователя.

Основные опции:

-a — вывести информацию о процессах, ассоциированных с терминалами;

-f — вывести «полный» список;

-l — вывести «длинный» список;

-p список  — вывести информацию о процессах с перечисленными в списке PID;

-u список — вывести информацию о процессах с перечисленными идентификаторами или именами пользователей.

Команда kill

Команда kill позволяет прекратить исполнение процесса или передать ему сигнал.

Синтаксис:

kill [-s] [сигнал] [идентификатор] [...]

kill [-l] [статус_завершения]

kill [-номер_сигнала] [идентификатор] [...]

Идентификатор — PID ведущего процесса задания или номер задания, предварённый знаком «%».

Основные опции:

-l — вывести список поддерживаемых сигналов;

-s сигнал, -сигнал — послать сигнал с указанным именем.

Если обычная команда kill не дает желательного эффекта, необходимо использовать команду kill с параметром -9 (kill -9 PID_номер).

Команда df

Команда df показывает количество доступного дискового пространства в файловой системе, в которой содержится файл, переданный как аргумент. Если ни один файл не указан, показывается доступное место на всех смонтированных файловых системах. Размеры по умолчанию указаны в блоках по 1КБ.

Синтаксис:

df [ОПЦИИ] [ФАЙЛ...]

Основные опции:

--total — подсчитать общий объем в конце;

-h, --human-readable — печатать размеры в удобочитаемом формате (например, 1K, 234M, 2G).

Команда du

Команда du подсчитывает использование диска каждым файлом, для каталогов подсчет происходит рекурсивно.

Синтаксис:

du [ОПЦИИ] [ФАЙЛ...]

Основные опции:

-a, --all — выводить общую сумму для каждого заданного файла, а не только для каталогов;

-c, --total — подсчитать общий объем в конце. Может быть использовано для выяснения суммарного использования дискового пространства для всего списка заданных файлов;

-d, --max-depth=N — выводить объем для каталога (или файлов, если указано --all) только если она на N или менее уровней ниже аргументов командной строки;

-S, --separate-dirs — выдавать отдельно размер каждого каталога, не включая размеры подкаталогов;

-s, --summarize — отобразить только сумму для каждого аргумента.

Команда which

Команда which отображает полный путь к указанным командам или сценариям.

Синтаксис:

which [ОПЦИИ] <ФАЙЛ...>

Основные опции:

-a, --all — выводит все совпавшие исполняемые файлы по содержимому в переменной окружения $PATH, а не только первый из них;

-c, --total — подсчитать общий объем в конце. Может быть использовано для выяснения суммарного использования дискового пространства для всего списка заданных файлов;

-d, --max-depth=N — выводить объем для каталога (или файлов, если указано --all) только если она на N или менее уровней ниже аргументов командной строки;

-S, --separate-dirs — выдавать отдельно размер каждого каталога, не включая размеры подкаталогов;

--skip-dot — пропускает все каталоги из переменной окружения $PATH, которые начинаются с точки.

Использование многозадачности [Черновик]

Альт Виртуализация — это многозадачная система.

Для того чтобы запустить программу в фоновом режиме, необходимо набрать «&» после имени программы. После этого оболочка даст возможность запускать другие приложения.

Так как некоторые программы интерактивны — их запуск в фоновом режиме бессмысленен. Подобные программы просто остановятся, если их запустить в фоновом режиме.

Можно также запускать нескольких независимых сеансов. Для этого в консоли необходимо набрать Alt и одну из клавиш, находящихся в интервале от F1 до F6. На экране появится новое приглашение системы, и можно открыть новый сеанс. Этот метод также позволяет вам работать на другой консоли, если консоль, которую вы использовали до этого, не отвечает или вам необходимо остановить зависшую программу.

Команда bg

Команда bg позволяет перевести задание на задний план.

Синтаксис:

bg [ИДЕНТИФИКАТОР ...]

Идентификатор — PID ведущего процесса задания или номер задания, предварённый знаком «%».

Команда fg

Команда fg позволяет перевести задание на передний план.

Синтаксис:

fg [ИДЕНТИФИКАТОР ...]

Идентификатор — PID ведущего процесса задания или номер задания, предварённый знаком «%».

Сжатие и упаковка файлов [Черновик]

Команда tar

Сжатие и упаковка файлов выполняется с помощью команды tar, которая преобразует файл или группу файлов в архив без сжатия (tarfile).

Упаковка файлов в архив чаще всего выполняется следующей командой:

tar -cf [имя создаваемого файла архива] [упаковываемые файлы и/или каталоги]

Пример использования команды упаковки архива:

tar -cf moi_dokumenti.tar Docs project.tex

Распаковка содержимого архива в текущий каталог выполняется командой:

tar -xf [имя файла архива]

Для сжатия файлов используются специальные программы сжатия: gzip, bzip2 и 7z.

⁠75.3. Стыкование команд в системе Linux [Черновик]

⁠75.3.1. Стандартный ввод и стандартный вывод [Черновик]

Многие команды системы имеют так называемые стандартный ввод (standard input) и стандартный вывод (standard output), часто сокращаемые до stdin и stdout. Ввод и вывод здесь — это входная и выходная информация для данной команды. Программная оболочка делает так, что стандартным вводом является клавиатура, а стандартным выводом — экран монитора.

Пример с использованием команды cat. По умолчанию команда cat читает данные из всех файлов, которые указаны в командной строке, и посылает эту информацию непосредственно в стандартный вывод (stdout). Следовательно, команда:

cat history-final masters-thesis

выведет на экран сначала содержимое файла history-final, а затем — файла masters-thesis.

Если имя файла не указано, команда cat читает входные данные из stdin и возвращает их в stdout. Пример:

cat
Hello there.
Hello there.
Bye.
Bye.
Ctrl-D

Каждую строку, вводимую с клавиатуры, команда cat немедленно возвращает на экран. При вводе информации со стандартного ввода конец текста сигнализируется вводом специальной комбинации клавиш, как правило, Ctrl+D. Сокращённое название сигнала конца текста — EOT (end of text).

⁠75.3.2. Перенаправление ввода и вывода [Черновик]

При необходимости можно перенаправить стандартный вывод, используя символ >, и стандартный ввод, используя символ <.

Фильтр (filter) — программа, которая читает данные из стандартного ввода, некоторым образом их обрабатывает и результат направляет на стандартный вывод. Когда применяется перенаправление, в качестве стандартного ввода и вывода могут выступать файлы. Как указывалось выше, по умолчанию, stdin и stdout относятся к клавиатуре и к экрану соответственно. Команда sort является простым фильтром — она сортирует входные данные и посылает результат на стандартный вывод. Совсем простым фильтром является команда cat — она ничего не делает с входными данными, а просто пересылает их на выход.

⁠75.3.3. Использование состыкованных команд [Черновик]

Стыковку команд (pipelines) осуществляет командная оболочка, которая stdout первой команды направляет на stdin второй команды. Для стыковки используется символ |. Направить stdout команды ls на stdin команды sort:

ls | sort -r
notes
masters-thesis
history-final
english-list

Вывод списка файлов частями:

ls /usr/bin | more

Если необходимо вывести на экран последнее по алфавиту имя файла в текущем каталоге, можно использовать следующую команду:

ls | sort -r | head -1 notes

где команда head -1 выводит на экран первую строку получаемого ей входного потока строк (в примере поток состоит из данных от команды ls), отсортированных в обратном алфавитном порядке.

⁠75.3.4. Недеструктивное перенаправление вывода [Черновик]

Эффект от использования символа > для перенаправления вывода файла является деструктивным; т.е, команда

ls > file-list

уничтожит содержимое файла file-list, если этот файл ранее существовал, и создаст на его месте новый файл. Если вместо этого перенаправление будет сделано с помощью символов >>, то вывод будет приписан в конец указанного файла, при этом исходное содержимое файла не будет уничтожено.

Примечание [Черновик]

Перенаправление ввода и вывода и стыкование команд осуществляется командными оболочками, которые поддерживают использование символов >, >> и |. Сами команды не способны воспринимать и интерпретировать эти символы.

⁠Глава 76. Средства управления дискреционными правами доступа [Черновик]

⁠76.1. Команда chmod [Черновик]

Команда chmod предназначена для изменения прав доступа файлов и каталогов.

Синтаксис:

chmod [ОПЦИИ] РЕЖИМ[,РЕЖИМ]... <ФАЙЛ>

chmod [ОПЦИИ] --reference=ИФАЙЛ <ФАЙЛ>

Основные опции:

-R — рекурсивно изменять режим доступа к файлам, расположенным в указанных каталогах;

--reference=ИФАЙЛ — использовать режим файла ИФАЙЛ.

chmod изменяет права доступа каждого указанного файла в соответствии с правами доступа, указанными в параметре режим, который может быть представлен как в символьном виде, так и в виде восьмеричного, представляющего битовую маску новых прав доступа.

Формат символьного режима следующий:

[ugoa...][[+-=][разрешения...]...]

Здесь разрешения — это ноль или более букв из набора «rwxXst» или одна из букв из набора «ugo».

Каждый аргумент — это список символьных команд изменения прав доступа, разделеных запятыми. Каждая такая команда начинается с нуля или более букв «ugoa», комбинация которых указывает, чьи права доступа к файлу будут изменены: пользователя, владеющего файлом (u), пользователей, входящих в группу, к которой принадлежит файл (g), остальных пользователей (o) или всех пользователей (a). Если не задана ни одна буква, то автоматически будет использована буква «a», но биты, установленные в umask, не будут затронуты.

Оператор «+» добавляет выбранные права доступа к уже имеющимся у каждого файла, «-» удаляет эти права. «=» присваивает только эти права каждому указанному файлу.

Буквы «rwxXst» задают биты доступа для пользователей: «r» — чтение, «w» — запись, «x» — выполнение (или поиск для каталогов), «X» — выполнение/поиск только если это каталог или же файл с уже установленным битом выполнения, «s» — задать ID пользователя и группы при выполнении, «t» — запрет удаления.

Числовой режим состоит из не более четырех восьмеричных цифр (от нуля до семи), которые складываются из битовых масок с разрядами «4», «2» и «1». Любые пропущенные разряды дополняются лидирующими нулями:

первый разряд выбирает установку идентификатора пользователя (setuid) (4) или идентификатора группы (setgid) (2) или sticky-бита (1);

второй разряд выбирает права доступа для пользователя, владеющего данным файлом: чтение (4), запись (2) и исполнение (1);

третий разряд выбирает права доступа для пользователей, входящих в данную группу, с тем же смыслом, что и у второго разряда;

четвертый разряд выбирает права доступа для остальных пользователей (не входящих в данную группу), опять с тем же смыслом.

Примеры:

установить права, позволяющие владельцу читать и писать в файл f1, а членам группы и прочим пользователям только читать. Команду можно записать двумя способами:

$ chmod 644 f1
$ chmod u=rw,go=r f1

позволить всем выполнять файл f2:

$ chmod +x f2

запретить удаление файла f3:

$ chmod +t f3

дать всем права на чтение запись и выполнение, а также на переустановку идентификатора группы при выполнении файла f4:

$ chmod =rwx,g+s f4
$ chmod 2777 f4

⁠76.2. Команда chown [Черновик]

Команда chown изменяет владельца и/или группу для каждого заданного файла.

Синтаксис:

chown [КЛЮЧ]…[ВЛАДЕЛЕЦ][:[ГРУППА]] <ФАЙЛ>

chown [ОПЦИИ] --reference=ИФАЙЛ <ФАЙЛ>

Основные опции:

-R — рекурсивно изменять файлы и каталоги;

--reference=ИФАЙЛ — использовать владельца и группу файла ИФАЙЛ.

Изменить владельца может только владелец файла или суперпользователь.

Владелец не изменяется, если он не задан в аргументе. Группа также не изменяется, если не задана, но если после символьного ВЛАДЕЛЬЦА стоит символ «:», подразумевается изменение группы на основную группу текущего пользователя. Поля ВЛАДЕЛЕЦ и ГРУППА могут быть как числовыми, так и символьными.

Примеры:

поменять владельца каталога /u на пользователя test:

chown test /u

поменять владельца и группу каталога /u:

chown test:staff /u

поменять владельца каталога /u и вложенных файлов на test:

chown -hR test /u

⁠76.3. Команда chgrp [Черновик]

Команда chgrp изменяет группу для каждого заданного файла.

Синтаксис:

chgrp [ОПЦИИ] ГРУППА <ФАЙЛ>

chgrp [ОПЦИИ] --reference=ИФАЙЛ <ФАЙЛ>

Основные опции:

-R — рекурсивно изменять файлы и каталоги;

--reference=ИФАЙЛ — использовать группу файла ИФАЙЛ.

⁠76.4. Команда umask [Черновик]

Команда umask задает маску режима создания файла в текущей среде командного интерпретатора равной значению, задаваемому операндом режим. Эта маска влияет на начальное значение битов прав доступа всех создаваемых далее файлов.

Синтаксис:

umask [-p] [-S] [режим]

Пользовательской маске режима создания файлов присваивается указанное восьмеричное значение. Три восьмеричные цифры соответствуют правам на чтение/запись/выполнение для владельца, членов группы и прочих пользователей соответственно. Значение каждой заданной в маске цифры вычитается из соответствующей «цифры», определенной системой при создании файла. Например, umask 022 удаляет права на запись для членов группы и прочих пользователей (у файлов, создававшихся с режимом 777, он оказывается равным 755; а режим 666 преобразуется в 644).

Если маска не указана, выдается ее текущее значение:

$ umask
0022

или то же самое в символьном режиме:

$ umask -S
u=rwx,g=rx,o=rx

Команда umask распознается и выполняется командным интерпретатором bash.

⁠76.5. Команда chattr [Черновик]

Команда chattr изменяет атрибуты файлов на файловых системах ext3, ext4.

Синтаксис:

chattr [ -RVf ] [+-=aAcCdDeFijmPsStTux] [ -v версия ] <ФАЙЛЫ> …

Опции:

-R — рекурсивно изменять атрибуты каталогов и их содержимого. Символические ссылки игнорируются;

-V — выводит расширенную информацию и версию программы;

-f — подавлять сообщения об ошибках;

-v версия — установить номер версии/генерации файла.

Формат символьного режима:

+-=aAcCdDeFijmPsStTux

Оператор «+» означает добавление выбранных атрибутов к существующим атрибутам; «-» означает их снятие; «=» означает определение только этих указанных атрибутов для файлов.

Символы «aAcCdDeFijmPsStTux» указывают на новые атрибуты файлов:

a — только добавление к файлу;

A — не обновлять время последнего доступа (atime) к файлу;

c — сжатый файл;

C — отключение режима «Copy-on-write» для указанного файла;

d — не архивировать (отключает создание архивной копии файла командой dump);

D — синхронное обновление каталогов;

e — включает использование extent при выделении места на устройстве (атрибут не может быть отключён с помощью chattr);

F — регистронезависимый поиск в каталогах;

i — неизменяемый файл (файл защищен от изменений: не может быть удалён или переименован, к этому файлу не могут быть созданы ссылки, и никакие данные не могут быть записаны в этот файл);

j — ведение журнала данных (данные файла перед записью будут записаны в журнал ext3/ext4);

m — не сжимать;

P — каталог с вложенными файлами является иерархической структурой проекта;

s — безопасное удаление (перед удалением все содержимое файла полностью затирается «00»);

S — синхронное обновление (аналогичен опции монтирования «sync» файловой системы);

t — отключает метод tail-merging для файлов;

T — вершина иерархии каталогов;

u — неудаляемый (при удалении файла его содержимое сохраняется, это позволяет пользователю восстановить файл);

x — прямой доступ к файлам (атрибут не может быть установлен с помощью chattr).

⁠76.6. Команда lsattr [Черновик]

Команда lsattr выводит атрибуты файла расширенной файловой системы.

Синтаксис:

lsattr [ -RVadlpv ] <ФАЙЛЫ> …

Опции:

-R — рекурсивно изменять атрибуты каталогов и их содержимого. Символические ссылки игнорируются;

-V — выводит расширенную информацию и версию программы;

-a — просматривает все файлы в каталоге, включая скрытые файлы (имена которых начинаются с «.»);

-d — отображает каталоги также, как и файлы вместо того, чтобы просматривать их содержимое;

-l — отображает параметры, используя длинные имена вместо одного символа;

-p — выводит номер проекта файла;

-v — выводит номер версии/генерации файла.

⁠76.7. Команда getfacl [Черновик]

Команда getfacl выводит атрибуты файла расширенной файловой системы.

Синтаксис:

getfacl [ --aceEsRLPtpndvh ] <ФАЙЛ> …

Опции:

-a — вывести только ACL файла;

-d — вывести только ACL по умолчанию;

-c — не показывать заголовок (имя файла);

-e — показывать все эффективные права;

-E — не показывать эффективные права;

-s — пропускать файлы, имеющие только основные записи;

-R — для подкаталогов рекурсивно;

-L — следовать по символическим ссылкам, даже если они не указаны в командной строке;

-P — не следовать по символическим ссылкам, даже если они указаны в командной строке;

-t — использовать табулированный формат вывода;

-p — не удалять ведущие «/» из пути файла;

-n — показывать числовые значения пользователя/группы.

Формат вывода:

1: # file: somedir/
2: # owner: lisa
3: # group: staff
4: # flags: -s-
5: user::rwx
6: user:joe:rwx			#effective:r-x
7: group::rwx			#effective:r-x
8: group:cool:r-x
9: mask:r-x
10: other:r-x
11: default:user::rwx
12: default:user:joe:rwx	#effective:r-x
13: default:group::r-x
14: default:mask:r-x
15: default:oter:---

Строки 1 — 3 указывают имя файла, владельца и группу владельцев.

В строке 4 указаны биты setuid (s), setgid (s) и sticky (t): либо буква, обозначающая бит, либо тире (-). Эта строка включается, если какой-либо из этих битов установлен, и опускается в противном случае, поэтому она не будет отображаться для большинства файлов.

Строки 5, 7 и 10 относятся к традиционным битам прав доступа к файлу, соответственно, для владельца, группы-владельца и всех остальных. Эти три элемента являются базовыми. Строки 6 и 8 являются элементами для отдельных пользователя и группы. Строка 9 — маска эффективных прав. Этот элемент ограничивает эффективные права, предоставляемые всем группам и отдельным пользователям. Маска не влияет на права для владельца файла и всех других. Строки 11 — 15 показывают ACL по умолчанию, ассоциированный с данным каталогом.

⁠76.8. Команда setfacl [Черновик]

Команда setfacl изменяет ACL к файлам или каталогам. В командной строке за последовательностью команд идет последовательность файлов (за которой, в свою очередь, также может идти последовательность команд и так далее).

Синтаксис:

setfacl [-bkndRLPvh] [{-m|-x} acl_spec] [{-M|-X} acl_file] <ФАЙЛ> …

setfacl --restore=file

Опции:

-b — удалить все разрешенные записи ACL;

-k — удалить ACL по умолчанию;

-n — не пересчитывать маску эффективных прав, обычно setfacl пересчитывает маску (кроме случая явного задания маски) для того, чтобы включить ее в максимальный набор прав доступа элементов, на которые воздействует маска (для всех групп и отдельных пользователей);

-d — применить ACL по умолчанию;

-R — для подкаталогов рекурсивно;

-L — переходить по символическим ссылкам на каталоги (имеет смысл только в сочетании с -R);

-P — не переходить по символическим ссылкам на каталоги (имеет смысл только в сочетании с -R);

-L — следовать по символическим ссылкам, даже если они не указаны в командной строке;

-P — не следовать по символическим ссылкам, даже если они указаны в командной строке;

--mask — пересчитать маску эффективных прав;

-m — изменить текущий ACL для файла;

-M — прочитать записи ACL для модификации из файла;

-x — удалить записи из ACL файла;

-X — прочитать записи ACL для удаления из файла;

--restore=file — восстановить резервную копию прав доступа, созданную командой getfacl –R или ей подобной. Все права доступа дерева каталогов восстанавливаются, используя этот механизм. В случае если вводимые данные содержат элементы для владельца или группы-владельца, и команда setfacl выполняется пользователем с именем root, то владелец и группа-владелец всех файлов также восстанавливаются. Эта опция не может использоваться совместно с другими опциями за исключением опции --test;

--set=acl — установить ACL для файла, заменив текущий ACL;

--set-file=file — прочитать записи ACL для установления из файла;

--test — режим тестирования (ACL не изменяются).

При использовании опций --set, -m и -x должны быть перечислены записи ACL в командной строке. Элементы ACL разделяются одинарными кавычками.

При чтении ACL из файла при помощи опций -set-file, -M и -X команда setfacl принимает множество элементов в формате вывода команды getfacl. В строке обычно содержится не больше одного элемента ACL.

Команда setfacl использует следующие форматы элементов ACL:

права доступа отдельного пользователя (если не задан UID, то права доступа владельца файла):

[d[efault]:] [u[ser]:]uid [:perms]

права доступа отдельной группы (если не задан GID, то права доступа группы-владельца):

[d[efault]:] g[roup]:gid [:perms]

маска эффективных прав:

[d[efault]:] m[ask][:] [:perms]

права доступа всех остальных:

[d[efault]:] o[ther][:] [:perms]

Элемент ACL является абсолютным, если он содержит поле perms и является относительным, если он включает один из модификаторов: «+» или «^». Абсолютные элементы могут использоваться в операциях установки или модификации ACL. Относительные элементы могут использоваться только в операции модификации ACL. Права доступа для отдельных пользователей, группы, не содержащие никаких полей после значений UID, GID (поле perms при этом отсутствует), используются только для удаления элементов.

Значения UID и GID задаются именем или числом. Поле perms может быть представлено комбинацией символов «r», «w», «x», «-» или цифр (0 — 7).

Изначально файлы и каталоги содержат только три базовых элемента ACL: для владельца, группы-владельца и всех остальных пользователей. Существует ряд правил, которые следует учитывать при установке прав доступа:

не могут быть удалены сразу три базовых элемента, должен присутствовать хотя бы один;

если ACL содержит права доступа для отдельного пользователя или группы, то ACL также должен содержать маску эффективных прав;

если ACL содержит какие-либо элементы ACL по умолчанию, то в последнем должны также присутствовать три базовых элемента (т. е. права доступа по умолчанию для владельца, группы-владельца и всех остальных);

если ACL по умолчанию содержит права доступа для всех отдельных пользователей или групп, то в ACL также должна присутствовать маска эффективных прав.

Для того чтобы помочь пользователю выполнять эти правила, команда setfacl создает права доступа, используя уже существующие, согласно следующим условиям:

если права доступа для отдельного пользователя или группы добавлены в ACL, а маски прав не существует, то создается маска с правами доступа группы-владельца;

если создан элемент ACL по умолчанию, а трех базовых элементов не было, тогда делается их копия и они добавляются в ACL по умолчанию;

если ACL по умолчанию содержит какие-либо права доступа для конкретных пользователя или группы и не содержит маску прав доступа по умолчанию, то при создании эта маска будет иметь те же права, что и группа по умолчанию.

Пример. Изменить разрешения для файла test.txt, принадлежащего пользователю liza и группе docs, так, чтобы:

пользователь ivan имел права на чтение и запись в этот файл;

пользователь misha не имел никаких прав на этот файл.

Исходные данные

$ ls -l test.txt
-rw-r-r-- 1 liza docs 8 янв 22 15:54 test.txt
$ getfacl test.txt
# file: test.txt
# owner: liza
# group: docs
user::rw-
group::r--
other::r--

Установить разрешения (от пользователя liza):

$ setfacl -m u:ivan:rw- test.txt
$ setfacl -m u:misha:--- test.txt

Просмотреть разрешения (от пользователя liza):

$ getfacl test.txt
# file: test.txt
# owner: liza
# group: docs
user::rw-
user:ivan:rw-
user:misha:---
group::r--
mask::rw-
other::r--

Примечание [Черновик]

Символ «+» (плюс) после прав доступа в выводе команды ls -l указывает на использование ACL:

$ ls -l test.txt
-rw-rw-r--+ 1 liza docs 8 янв 22 15:54 test.txt

⁠Глава 77. Режим суперпользователя [Черновик]

⁠77.1. Какие бывают пользователи? [Черновик]

Linux — система многопользовательская, а потому пользователь — ключевое понятие для организации всей системы доступа в Linux. Файлы всех пользователей в Linux хранятся раздельно, у каждого пользователя есть собственный домашний каталог, в котором он может хранить свои данные. Доступ других пользователей к домашнему каталогу пользователя может быть ограничен.

Суперпользователь в Linux — это выделенный пользователь системы, на которого не распространяются ограничения прав доступа. Именно суперпользователь имеет возможность произвольно изменять владельца и группу файла. Ему открыт доступ на чтение и запись к любому файлу или каталогу системы.

Среди учётных записей Linux всегда есть учётная запись суперпользователя — root. Поэтому вместо «суперпользователь» часто говорят «root». Множество системных файлов принадлежат root, множество файлов только ему доступны для чтения или записи. Пароль этой учётной записи — одна из самых больших драгоценностей системы. Именно с её помощью системные администраторы выполняют самую ответственную работу.

⁠77.2. Для чего может понадобиться режим суперпользователя? [Черновик]

Системные утилиты, например, такие, как Центр управления системой или Программа управления пакетами Synaptic требуют для своей работы привилегий суперпользователя, потому что они вносят изменения в системные файлы. При их запуске выводится диалоговое окно с запросом пароля системного администратора.

⁠77.3. Как получить права суперпользователя? [Черновик]

Для опытных пользователей, умеющих работать с командной строкой, существует два различных способа получить права суперпользователя.

Первый — это зарегистрироваться в системе под именем root.

Второй способ — воспользоваться специальной утилитой su (shell of user), которая позволяет выполнить одну или несколько команд от лица другого пользователя. По умолчанию эта утилита выполняет команду sh от пользователя root, то есть запускает командный интерпретатор. Отличие от предыдущего способа в том, что всегда известно, кто именно запускал su, а значит, ясно, кто выполнил определённое административное действие.

В некоторых случаях удобнее использовать не su, а утилиту sudo, которая позволяет выполнять только заранее заданные команды.

Важно [Черновик]

Для того чтобы воспользоваться командами su и sudo, необходимо быть членом группы wheel. Пользователь, созданный при установке системы, по умолчанию уже включён в эту группу.

В дистрибутивах Альт для управления доступом к важным службам используется подсистема control. control — механизм переключения между неким набором фиксированных состояний для задач, допускающих такой набор.

Команда control доступна только для суперпользователя (root). Для того чтобы посмотреть, что означает та или иная политика control (разрешения выполнения конкретной команды, управляемой control), надо запустить команду с ключом help:

# control su help

Запустив control без параметров, можно увидеть полный список команд, управляемых командой (facilities) вместе с их текущим состоянием и набором допустимых состояний.

⁠77.4. Как перейти в режим суперпользователя? [Черновик]

Для перехода в режим суперпользователя наберите в терминале команду (минус важен!):

su -

Если воспользоваться командой su без ключа, то происходит вызов командного интерпретатора с правами root. При этом значение переменных окружения, в частности $PATH, остаётся таким же, как у пользователя: в переменной $PATH не окажется каталогов /sbin, /usr/sbin, без указания полного имени будут недоступны команды route, shutdown, mkswap и другие. Более того, переменная $HOME будет указывать на каталог пользователя, все программы, запущенные в режиме суперпользователя, сохранят свои настройки с правами root в каталоге пользователя, что в дальнейшем может вызвать проблемы.

Чтобы избежать этого, следует использовать su -. В этом режиме su запустит командный интерпретатор в качестве login shell, и он будет вести себя в точности так, как если бы в системе зарегистрировался root.

⁠Глава 78. Управление пользователями [Черновик]

⁠78.1. Общая информация [Черновик]

Пользователи и группы внутри системы обозначаются цифровыми идентификаторами — UID и GID, соответственно.

Пользователь может входить в одну или несколько групп. По умолчанию он входит в группу, совпадающую с его именем. Чтобы узнать, в какие еще группы входит пользователь, введите команду id, вывод её может быть примерно следующим:

uid=500(test) gid=500(test) группы=500(test),16(rpm)

Такая запись означает, что пользователь test (цифровой идентификатор 500) входит в группы test и rpm. Разные группы могут иметь разный уровень доступа к тем или иным каталогам; чем в большее количество групп входит пользователь, тем больше прав он имеет в системе.

Примечание [Черновик]

В связи с тем, что большинство привилегированных системных утилит в дистрибутивах Альт имеют не SUID-, а SGID-бит, будьте предельно внимательны и осторожны в переназначении групповых прав на системные каталоги.

⁠78.2. Команда useradd [Черновик]

Команда useradd регистрирует нового пользователя или изменяет информацию по умолчанию о новых пользователях.

Синтаксис:

useradd [ОПЦИИ...] <ИМЯ ПОЛЬЗОВАТЕЛЯ>
useradd -D [ОПЦИИ...]

Некоторые опции:

-b каталог — базовый каталог для домашнего каталога новой учётной записи;

-c комментарий — текстовая строка (обычно используется для указания фамилии и мени);

-d каталог — домашний каталог новой учётной записи;

-D — показать или изменить настройки по умолчанию для useradd;

-e дата — дата устаревания новой учётной записи;

-g группа — имя или ID первичной группы новой учётной записи;

-G группы — список дополнительных групп (через запятую) новой учётной записи;

-m — создать домашний каталог пользователя;

-M — не создавать домашний каталог пользователя;

-p пароль — зашифрованный пароль новой учётной записи (не рекомендуется);

-s оболочка — регистрационная оболочка новой учётной записи (по умолчанию /bin/bash);

-u UID — пользовательский ID новой учётной записи.

Команда useradd имеет множество параметров, которые позволяют менять её поведение по умолчанию. Например, можно принудительно указать, какой будет UID или какой группе будет принадлежать пользователь:

# useradd -u 1500 -G usershares new_user

⁠78.3. Команда passwd [Черновик]

Команда passwd поддерживает традиционные опции passwd и утилит shadow.

Синтаксис:

passwd [ОПЦИИ...] [ИМЯ ПОЛЬЗОВАТЕЛЯ]

Возможные опции:

-d, --delete — удалить пароль для указанной записи;

-f, --force — форсировать операцию;

-k, --keep-tokens — сохранить не устаревшие пароли;

-l, --lock — блокировать указанную запись;

--stdin — прочитать новые пароли из стандартного ввода;

-S, --status — дать отчет о статусе пароля в указанной записи;

-u, --unlock — разблокировать указанную запись;

-?, --help — показать справку и выйти;

--usage — дать короткую справку по использованию;

-V, --version — показать версию программы и выйти.

Код выхода: при успешном завершении passwd заканчивает работу с кодом выхода 0. Код выхода 1 означает, что произошла ошибка. Текстовое описание ошибки выводится на стандартный поток ошибок.

Пользователь может в любой момент поменять свой пароль. Единственное, что требуется для смены пароля — знать текущий пароль.

Только суперпользователь может обновить пароль другого пользователя.

⁠78.4. Добавление нового пользователя [Черновик]

Для добавления нового пользователя используйте команды useradd и passwd:

# useradd test1

# passwd test1
passwd: updating all authentication tokens for user test1.

You can now choose the new password or passphrase.

A valid password should be a mix of upper and lower case letters, digits, and
other characters.  You can use a password containing at least 7 characters
from all of these classes, or a password containing at least 8 characters
from just 3 of these 4 classes.
An upper case letter that begins the password and a digit that ends it do not
count towards the number of character classes used.

A passphrase should be of at least 3 words, 11 to 72 characters long, and
contain enough different characters.

Alternatively, if no one else can see your terminal now, you can pick this as
your password: "Burst*texas$Flow".

Enter new password:
Weak password: too short.
Re-type new password:
passwd: all authentication tokens updated successfully.

В результате описанных действий в системе появился пользователь test1 с некоторым паролем. Если пароль оказался слишком слабым с точки зрения системы, она об этом предупредит (как в примере выше). Пользователь в дальнейшем может поменять свой пароль при помощи команды passwd — но если он попытается поставить слабый пароль, система откажет ему (в отличие от root) в изменении.

В Альт Виртуализация для проверки паролей на слабость используется модуль PAM passwdqc.

⁠78.5. Настройка парольных ограничений [Черновик]

Настройка парольных ограничений производится в файле /etc/passwdqc.conf.

Файл passwdqc.conf состоит из 0 или более строк следующего формата:

опция=значение

Пустые строки и строки, начинающиеся со знака решетка («#»), игнорируются. Символы пробела между опцией и значением не допускаются.

Опции, которые могут быть переданы в модуль (в скобках указаны значения по умолчанию): min=N0,N1,N2,N3,N4 (min=disabled,24,11,8,7) — минимально допустимая длина пароля.

Используемые типы паролей по классам символов (алфавит, число, спецсимвол, верхний и нижний регистр) определяются следующим образом:

тип N0 используется для паролей, состоящих из символов только одного класса;

тип N1 используется для паролей, состоящих из символов двух классов;

тип N2 используется для парольных фраз, кроме этого требования длины, парольная фраза должна также состоять из достаточного количества слов;

типы N3 и N4 используются для паролей, состоящих из символов трех и четырех классов, соответственно.

Ключевое слово disabled используется для запрета паролей выбранного типа N0 — N4 независимо от их длины.

Примечание [Черновик]

Каждое следующее число в настройке «min» должно быть не больше, чем предыдущее.

При расчете количества классов символов, заглавные буквы, используемые в качестве первого символа и цифр, используемых в качестве последнего символа пароля, не учитываются.

max=N (max=40) — максимально допустимая длина пароля. Эта опция может быть использована для того, чтобы запретить пользователям устанавливать пароли, которые могут быть слишком длинными для некоторых системных служб. Значение 8 обрабатывается особым образом: пароли длиннее 8 символов, не отклоняются, а обрезаются до 8 символов для проверки надежности (пользователь при этом предупреждается).

passphrase=N (passphrase=3) — число слов, необходимых для ключевой фразы (значение 0 отключает поддержку парольных фраз).

match=N (match=4) — длина общей подстроки, необходимой для вывода, что пароль хотя бы частично основан на информации, найденной в символьной строке (значение 0 отключает поиск подстроки). Если найдена слабая подстрока пароль не будет отклонен; вместо этого он будет подвергаться обычным требованиям к прочности при удалении слабой подстроки. Поиск подстроки нечувствителен к регистру и может обнаружить и удалить общую подстроку, написанную в обратном направлении.

similar=permit|deny (similar=deny) — параметр similar=permit разрешает задать новый пароль, если он похож на старый (параметр similar=deny — запрещает). Пароли считаются похожими, если есть достаточно длинная общая подстрока, и при этом новый пароль с частично удаленной подстрокой будет слабым.

random=N[,only] (random=42) — размер случайно сгенерированных парольных фраз в битах (от 26 до 81) или 0, чтобы отключить эту функцию. Любая парольная фраза, которая содержит предложенную случайно сгенерированную строку, будет разрешена вне зависимости от других возможных ограничений. Значение only используется для запрета выбранных пользователем паролей.

enforce=none|users|everyone (enforce=users) — параметр enforce=users задает ограничение задания паролей в passwd на пользователей без полномочий root. Параметр enforce=everyone задает ограничение задания паролей в passwd и на пользователей, и на суперпользователя root. При значении none модуль PAM будет только предупреждать о слабых паролях.

retry=N (retry=3) — количество запросов нового пароля, если пользователь с первого раза не сможет ввести достаточно надежный пароль и повторить его ввод.

Далее приводится пример задания следующих значений в файле /etc/passwdqc.conf:

min=8,7,4,4,4
enforce=everyone

В указанном примере пользователям, включая суперпользователя root, будет невозможно задать пароли:

типа N0 (символы одного класса) — длиной меньше восьми символов;

типа N1 (символы двух классов) — длиной меньше семи символов;

типа N2 (парольные фразы), типа N3 (символы трех классов) и N4 (символы четырех классов) — длиной меньше четырех символов.

⁠78.6. Управление сроком действия пароля [Черновик]

Для управления сроком действия паролей используется команда chage.

Примечание [Черновик]

Должен быть установлен пакет shadow-change:

# apt-get install shadow-change

chage изменяет количество дней между сменой пароля и датой последнего изменения пароля.

Синтаксис команды:

chage [опции] логин

Основные опции:

-d, --lastday LAST_DAY — установить последний день смены пароля в LAST_DAY на день (число дней с 1 января 1970). Дата также может быть указана в формате ГГГГ-ММ-ДД;

-E, -expiredate EXPIRE_DAYS — установить дату окончания действия учётной записи в EXPIRE_DAYS (число дней с 1 января 1970) Дата также может быть указана в формате ГГГГ-ММ-ДД. Значение -1 удаляет дату окончания действия учётной записи;

-I, --inactive INACTIVE — используется для задания количества дней «неактивности», то есть дней, когда пользователь вообще не входил в систему, после которых его учетная запись будет заблокирована. Пользователь, чья учетная запись заблокирована, должен обратиться к системному администратору, прежде чем снова сможет использовать систему. Значение -1 отключает этот режим;

-l, --list — просмотр информации о «возрасте» учётной записи пользователя;

-m, --mindays MIN_DAYS — установить минимальное число дней перед сменой пароля. Значение 0 в этом поле обозначает, что пользователь может изменять свой пароль, когда угодно;

-M, --maxdays MAX_DAYS — установить максимальное число дней перед сменой пароля. Когда сумма MAX_DAYS и LAST_DAY меньше, чем текущий день, у пользователя будет запрошен новый пароль до начала работы в системе. Эта операция может предваряться предупреждением (параметр -W). При установке значения -1, проверка действительности пароля не будет выполняться;

-W, --warndays WARN_DAYS — установить число дней до истечения срока действия пароля, начиная с которых пользователю будет выдаваться предупреждение о необходимости смены пароля.

Пример настройки времени действия пароля для пользователя test:

# chage -M 5 test

Получить информацию о «возрасте» учётной записи пользователя test:

# chage -l test
Последний раз пароль был изменён				: дек 27, 2023
Срок действия пароля истекает					: янв 01, 2024
Пароль будет деактивирован через				: янв 11, 2024
Срок действия учётной записи истекает				: никогда
Минимальное количество дней между сменой пароля			: -1
Максимальное количество дней между сменой пароля		: 5
Количество дней с предупреждением перед деактивацией пароля	: -1

Примечание [Черновик]

Задать время действия пароля для вновь создаваемых пользователей можно, изменив параметр PASS_MAX_DAYS в файле /etc/login.defs.

⁠78.7. Настройка неповторяемости пароля [Черновик]

Для настройки неповторяемости паролей используется модуль pam_pwhistory, который сохраняет последние пароли каждого пользователя и не позволяет пользователю при смене пароля чередовать один и тот же пароль слишком часто.

Предупреждение [Черновик]

В данном случае системный каталог станет доступным для записи пользователям группы pw_users (создайте эту группу и включите туда пользователей).

Предупреждение [Черновик]

База используемых паролей ведется в файле /etc/security/opasswd, в который пользователи должны иметь доступ на чтение и запись. При этом они могут читать хэши паролей остальных пользователей. Не рекомендуется использовать на многопользовательских системах.

Создайте файл /etc/security/opasswd и дайте права на запись пользователям:

# install -Dm0660 -gpw_users /dev/null /etc/security/opasswd
# chgrp pw_users /etc/security
# chmod g+w /etc/security

Для настройки этого ограничения необходимо изменить файл /etc/pam.d/system-auth-local-only таким образом, чтобы он включал модуль pam_pwhistory после первого появления строки с паролем:

password        required        pam_passwdqc.so config=/etc/passwdqc.conf
password        required        pam_pwhistory.so debug use_authtok remember=10 retry=3

После добавления этой строки в файле /etc/security/opasswd будут храниться последние 10 паролей пользователя (содержит хэши паролей всех учетных записей пользователей) и при попытке использования пароля из этого списка будет выведена ошибка:

Password has been already used. Choose another.

В случае если необходимо, чтобы проверка выполнялась и для суперпользователя root, в настройки нужно добавить параметр enforce_for_root:

password        required        pam_pwhistory.so
use_authtok enforce_for_root remember=10 retry=3

⁠78.8. Модификация пользовательских записей [Черновик]

Для модификации пользовательских записей применяется утилита usermod:

# usermod -G audio,rpm,test1 test1

Такая команда изменит список групп, в которые входит пользователь test1 — теперь это audio, rpm, test1.

# usermod -l test2 test1

Будет произведена смена имени пользователя с test1 на test2.

Команды usermod -L test2 и usermod -U test2 соответственно временно блокируют возможность входа в систему пользователю test2 и возвращают всё на свои места.

Изменения вступят в силу только при следующем входе пользователя в систему.

При неинтерактивной смене или задании паролей для целой группы пользователей используйте утилиту chpasswd. На стандартный вход ей следует подавать список, каждая строка которого будет выглядеть как имя:пароль.

⁠78.9. Удаление пользователей [Черновик]

Для удаления пользователей используйте userdel.

Команда userdel test2 удалит пользователя test2 из системы. Если будет дополнительно задан параметр -r, то будет уничтожен и домашний каталог пользователя. Нельзя удалить пользователя, если в данный момент он еще работает в системе.

⁠Глава 79. Система инициализации systemd и sysvinit [Черновик]

⁠79.1. Запуск операционной системы [Черновик]

⁠79.1.1. Запуск системы [Черновик]

Алгоритм запуска компьютера приблизительно такой:

BIOS компьютера.

Загрузчик системы (например, LILO, GRUB или другой). В загрузчике вы можете задать параметры запуска системы или выбрать систему для запуска.

Загружается ядро Linux.

Запускается на выполнение первый процесс в системе — init.

Ядром запускается самая первая программа в системе init. Её задачей является запуск новых процессов и повторный запуск завершившихся. Вы можете посмотреть, где расположился init в иерархии процессов вашей системы, введя команду pstree.

От конфигурации init зависит, какая система инициализации будет использована.

⁠79.1.2. Система инициализации [Черновик]

Система инициализации — это набор скриптов, которые будут выполнены при старте системы.

Существуют разные системы инициализации, наиболее популярной системой являются sysvinit и ее модификации. systemd разрабатывается как замена для sysVinit.

В Альт Виртуализация используется systemd.

⁠79.2. Системы инициализации systemd и sysvinit [Черновик]

⁠79.2.1. sysvinit [Черновик]

System V — классическая схема инициализации, на которой базируются многие дистрибутивы. Привычна и довольно проста для понимания: init описывает весь процесс загрузки в своем конфигурационном файле /etc/inittab, откуда вызываются другие программы и скрипты на определенном этапе запуска.

⁠79.2.2. systemd [Черновик]

systemd является альтернативной системой инициализации Linux, вобравшей в себя достоинства классического System V init и более современных launchd (OS X), SMF (Solaris) и Upstart (Ubuntu, Fedora), но при этом лишенной многих их недостатков. Он разрабатывался для обеспечения лучшего выражения зависимостей между службами, что позволяет делать одновременно больше работы при загрузке системы, и уменьшить время загрузки системы.

systemd (system daemon) реализует принципиально новый подход к инициализации и контролю работы системы. Одним из ключевых новшеств этого подхода является высокая степень параллелизации запуска служб при инициализации системы, что в перспективе позволяет добиться гораздо более высокой скорости, чем традиционный подход с последовательным запуском взаимозависимых служб. Другим важным моментом является контроль над точками монтирования (не-жизненно-важные файловые системы можно монтировать только при первом обращении к ним, не тратя на это время при инициализации системы) и устройствами (можно запускать и останавливать определенные службы и при появлении или удалении заданных устройств). Для отслеживания групп процессов используется механизм cgroups, который также может быть использован для ограничения потребляемых ими системных ресурсов.

Удобство systemd особенно заметно на компьютерах для домашнего пользования — когда пользователи включают и перезагружают компьютер ежедневно. В отличие от sysvinit, подвисание при запуске одного сервиса не приведет к остановке всего процесса загрузки.

⁠79.3. Примеры команд управления службами, журнал в systemd [Черновик]

Обратите внимание, что команды service и chkconfig продолжат работать в мире systemd практически без изменений. Тем не менее, в этой таблице показано как выполнить те же действия с помощью встроенных утилит systemctl.

⁠

Таблица 79.1. Команды управления службами [Черновик]

Команды Sysvinit

Команды Systemd

Примечания

service frobozz start

systemctl start frobozz.service

Используется для запуска службы (не перезагружает постоянные)

service frobozz stop

systemctl stop frobozz.service

Используется для остановки службы (не перезагружает постоянные)

service frobozz restart

systemctl restart frobozz.service

Используется для остановки и последующего запуска службы

service frobozz reload

systemctl reload frobozz.service

Если поддерживается, перезагружает файлы конфигурации без прерывания незаконченных операций

service frobozz condrestart

systemctl condrestart frobozz.service

Перезапускает службу, если она уже работает

service frobozz status

systemctl status frobozz.service

Сообщает, запущена ли уже служба

ls /etc/rc.d/init.d/

systemctl list-unit-files --type=service (preferred)

ls /lib/systemd/system/*.service /etc/systemd/system/*.service

Используется для отображения списка служб, которые можно запустить или остановить.

Используется для отображения списка всех служб.

chkconfig frobozz on

systemctl enable frobozz.service

Включает службу во время следующей перезагрузки, или любой другой триггер

chkconfig frobozz off

systemctl disable frobozz.service

Выключает службу во время следующей перезагрузки, или любой другой триггер

chkconfig frobozz

systemctl is-enabled frobozz.service

Используется для проверки, сконфигурирована ли служба для запуска в текущем окружении

chkconfig --list

systemctl list-unit-files --type=service(preferred)

ls /etc/systemd/system/*.wants/

Выводит таблицу служб. В ней видно, на каких уровнях загрузки они (не)запускаются

chkconfig frobozz --list

ls /etc/systemd/system/*.wants/frobozz.service

Используется, для отображения на каких уровнях служба (не)запускается

chkconfig frobozz --add

systemctl daemon-reload

Используется, когда вы создаете новую службу или модифицируете любую конфигурацию

⁠79.4. Журнал в systemd [Черновик]

В systemd включена возможность ведения системного журнала. Для чтения журнала следует использовать команду journalctl. По умолчанию, больше не требуется запуск службы syslog.

Вы можете запускать journalctl с разными ключами:

journalctl -b — покажет сообщения только с текущей загрузки;

journalctl -f — покажет только последние сообщения.

Так же вы можете посмотреть сообщения определенного процесса:

journalctl _PID=1 — покажет сообщения первого процесса (init).

Для ознакомления с прочими возможностями, читайте руководство по journalctl. Для этого используйте команду man journalctl.

⁠Глава 80. Документация [Черновик]

Каждый объект системы Linux обязательно сопровождается документацией, описывающей их назначение и способы использования. От пользователя системы не требуется заучивать все возможные варианты взаимодействия с ней. Достаточно понимать основные принципы её устройства и уметь находить справочную информацию.

Не пренебрегайте чтением документации: она поможет вам избежать многих сложностей, сэкономить массу времени и усилий при установке, настройке и администрировании системы, поможет найти нужное для работы приложение и быстро разобраться в нём.

⁠80.1. Экранная документация [Черновик]

Почти все системы семейства UNIX, включая систему Linux, имеют экранную документацию. Её тексты содержат документацию по системным командам, ресурсам, конфигурационным файлам и т. д., а также могут быть выведены на экран в процессе работы.

⁠80.1.1. man [Черновик]

Для доступа к экранной документации используется команда man (сокращение от manual). Каждая страница руководства посвящена одному объекту системы. Для того чтобы прочесть страницу руководства по программе, необходимо набрать man название_программы. К примеру, если вы хотите узнать, какие опции есть у команды date, вы можете ввести команду:

 $ man date

Большинство экранной документации написано для пользователей, имеющих некоторое представление о том, что делает данная команда. Поэтому большинство текстов экранной документации содержит исключительно технические детали команды без особых пояснений. Тем не менее, экранная документация оказывается очень ценной в том случае, если вы помните название команды, но её синтаксис просто выпал у вас из памяти.

Поиск по описаниям man осуществляется командой apropos. Если вы точно не знаете, как называется необходимая вам программа, то поиск осуществляется по ключевому слову, к примеру, apropos date или при помощи ввода слова, обозначающего нужное действие, после команды man -k (например, man -k copy). Слово, характеризующее желаемое для вас действие, можно вводить и на русском языке. При наличии русского перевода страниц руководства man результаты поиска будут выведены на запрашиваемом языке.

«Страница руководства» занимает, как правило, больше одной страницы экрана. Для того чтобы читать было удобнее, man запускает программу постраничного просмотра текстов. Страницы перелистывают пробелом, для выхода из режима чтения описания команд man необходимо нажать на клавиатуре q. Команда man man выдаёт справку по пользованию самой командой man.

Документация в подавляющем большинстве случаев пишется на простом английском языке. Необходимость писать на языке, который будет более или менее понятен большинству пользователей, объясняется постоянным развитием Linux. Дело не в том, что страницу руководства нельзя перевести, а в том, что её придётся переводить всякий раз, когда изменится описываемый ею объект! Например, выход новой версии программного продукта сопровождается изменением его возможностей и особенностей работы, а следовательно, и новой версией документации.

Тем не менее, некоторые наиболее актуальные руководства существуют в переводе на русский язык. Свежие версии таких переводов на русский язык собраны в пакете man-pages-ru. Установив этот пакет, вы добавите в систему руководства, для которых есть перевод, и man по умолчанию будет отображать их на русском языке.

⁠80.1.2. info [Черновик]

Другой источник информации о Linux и составляющих его программах — справочная подсистема info. Страница руководства, несмотря на обилие ссылок различного типа, остаётся «линейным» текстом, структурированным только логически. Документ info — это настоящий гипертекст, в котором множество небольших страниц объединены в дерево. В каждом разделе документа info всегда есть оглавление, из которого можно перейти к нужному подразделу, а затем вернуться обратно (ссылки для перемещения по разделам текста помечены *). Для получения вспомогательной информации о перемещении по тексту используйте клавишу h. Полное руководство info вызывается командой info info. Команда info, введённая без параметров, предлагает пользователю список всех документов info, установленных в системе.

⁠80.2. Документация по пакетам [Черновик]

Дополнительным источником информации об интересующей вас программе, в основном на английском языке, является каталог /usr/share/doc — место хранения разнообразной документации.

Каждый пакет также содержит поставляемую вместе с включённым в него ПО документацию, располагающуюся обычно в каталоге /usr/share/doc/имя_пакета. Например, документация к пакету file-5.44 находится в /usr/share/doc/file-5.44. Для получения полного списка файлов документации, относящихся к пакету, воспользуйтесь командой rpm -qd имя_установленного_пакета.

В документации к каждому пакету вы можете найти такие файлы как README, FAQ, TODO, СhangeLog и другие. В файле README содержится основная информация о программе — имя и контактные данные авторов, назначение, полезные советы и пр. FAQ содержит ответы на часто задаваемые вопросы; этот файл стоит прочитать в первую очередь, если у вас возникли проблемы или вопросы по использованию программы, поскольку большинство проблем и сложностей типичны, вполне вероятно, что в FAQ вы тут же найдёте готовое решение. В файле TODO записаны планы разработчиков на реализацию той или иной функциональности. В файле СhangeLog записана история изменений в программе от версии к версии.

Для поиска внешней информации о программе, например, адреса сайта программы в сети Интернет можно использовать команду rpm -qi имя_установленного_пакета. В информационном заголовке соответствующего пакета, среди прочей информации, будет выведена искомая ссылка.

⁠Часть XII. Техническая поддержка продуктов «Базальт СПО» [Черновик]

⁠Глава 81. Покупателям нашей продукции [Черновик]

«Базальт СПО» предоставляет следующие виды технической поддержки:

Поддержка продукта входит в стоимость лицензии и включает регулярный выпуск обновлений, исправление ошибок, устранение уязвимостей в течение всего срока жизни дистрибутива.

Поддержка пользователей обеспечивает качественную эксплуатацию продукта. Техническая поддержка эксплуатации продуктов «Базальт СПО» оказывается в объеме SLA. Доступны три уровня SLA («Базовый», «Стандартный» и «Расширенный»).

Право на получение консультационной и технической поддержки вы приобретаете при покупке большинства продуктов торговой марки Альт. Сроки и объём помощи указаны в сертификате технической поддержки.

Условия технической поддержки можно найти на странице сайта «Базальт СПО»: http://www.basealt.ru/support.

⁠Глава 82. Пользователям нашей продукции [Черновик]

Вне зависимости от того, скачали вы или же приобрели наш дистрибутив, задавать вопросы или обсуждать их с сообществом пользователей дистрибутивов Альт вы можете на форуме или в списках рассылки.

Помощь сообщества:

Документация сообщества: https://altlinux.org

Форум: https://forum.altlinux.org

Списки рассылки: https://lists.altlinux.org

Сообщить об ошибке: https://bugs.altlinux.org

Репозиторий: https://packages.altlinux.org

Сборочная среда: https://git.altlinux.org

Telegram-канал сообщества: https://telegram.me/alt_linux

Ресурсы компании «Базальт СПО»:

Сайт компании: https://www.basealt.ru

Контакты: https://basealt.ru/contacts

Новости обновлений безопасности: https://cve.basealt.ru

Форум и списки рассылки читают опытные пользователи, профессиональные системные администраторы и разработчики «Базальт СПО». Сообщество пользователей и специалистов окажет содействие в поиске ответа на ваш вопрос или посоветует выход из сложной ситуации. При обращении к данному виду помощи у вас нет гарантии на полноту и своевременность ответа, но мы стараемся не оставлять без ответа вопросы, задаваемые в списках.