proxmox
lae.proxmox
Устанавливает и настраивает Proxmox Virtual Environment 6.x/7.x/8.x на серверах Debian.
Эта роль позволяет вам развертывать и управлять однобазовыми установками PVE и PVE кластерами (3 и более узлов) на Debian Buster (10) и Bullseye (11). С помощью этой роли вы сможете настроить следующее:
- Определения RBAC PVE (роли, группы, пользователи и списки управления доступом)
- Определения хранилищ PVE
datacenter.cfg
- HTTPS-сертификаты для веб-интерфейса Proxmox (принесите свои)
- Выбор репозитория PVE (например,
pve-no-subscription
илиpve-enterprise
) - Модули контроллера (IPMI и NMI) с соответствующей конфигурацией pve-ha-manager
- Настройка ZFS и уведомления по электронной почте ZED
С включенной кластеризацией эта роль делает (или позволяет вам делать) следующее:
- Убедитесь, что все узлы могут подключаться друг к другу как root через SSH
- Инициализировать новый кластер PVE (или, возможно, принять существующий)
- Создать или добавить новые узлы в кластер PVE
- Настроить Ceph на кластере PVE
- Создать и управлять группами высокой доступности
Поддержка/Участие
Для поддержки или если вы хотите внести вклад в эту роль, но вам нужна помощь, не стесняйтесь присоединяться к этому серверу Discord: https://discord.gg/cjqr6Fg. Пожалуйста, обратите внимание, что это временное приглашение, поэтому вам нужно дождаться, пока @lae назначит вам роль, иначе Discord удалит вас с сервера после выхода.
Быстрый старт
Основная цель этой роли - настроить и управлять кластерами Proxmox VE (см. пример плейбука), однако эту роль также можно использовать для быстрой установки однобазовых серверов Proxmox.
Я предполагаю, что у вас уже установлен Ansible. Вам нужно будет использовать внешнюю машину для установки Proxmox (в первую очередь из-за перезагрузки во время установки, хотя я могу немного иначе подойти к этому в будущем).
Скопируйте следующий плейбук в файл, например, install_proxmox.yml
:
- hosts: all
become: True
roles:
- role: geerlingguy.ntp
vars:
ntp_manage_config: true
ntp_servers:
- clock.sjc.he.net
- clock.fmt.he.net
- clock.nyc.he.net
- role: lae.proxmox
vars:
- pve_group: all
- pve_reboot_on_kernel_update: true
Установите эту роль и роль для настройки NTP:
ansible-galaxy install lae.proxmox geerlingguy.ntp
Теперь вы можете выполнить установку:
ansible-playbook install_proxmox.yml -i $SSH_HOST_FQDN, -u $SSH_USER
Если ваш SSH_USER
имеет пароль sudo, передайте флаг -K
в вышеуказанную команду. Если вы также аутентифицируетесь на хосте по паролю вместо использования публичного ключа, передайте флаг -k
(убедитесь, что у вас также установлен sshpass
). Вы можете задать эти переменные перед выполнением команды или просто заменить их. Обратите внимание, что запятая важна, так как ожидается список (иначе он попытается найти файл со списком узлов).
После завершения установки вы сможете получить доступ к вашему экземпляру Proxmox VE по адресу
https://$SSH_HOST_FQDN:8006
.
Развертывание полнофункционального кластера PVE 8.x
Создайте новый каталог плейбука. Мы назвали его lab-cluster
. Наш плейбук в конечном итоге будет выглядеть так, но вам не обязательно следовать всем шагам:
lab-cluster/
├── files
│ └── pve01
│ ├── lab-node01.local.key
│ ├── lab-node01.local.pem
│ ├── lab-node02.local.key
│ ├── lab-node02.local.pem
│ ├── lab-node03.local.key
│ └── lab-node03.local.pem
├── group_vars
│ ├── all
│ └── pve01
├── inventory
├── roles
│ └── requirements.yml
├── site.yml
└── templates
└── interfaces-pve01.j2
6 директорий, 12 файлов
Первое, что вы можете заметить, это то, что у нас есть множество файлов .key
и .pem
.
Это закрытые ключи и SSL-сертификаты, которые эта роль будет использовать для настройки веб-интерфейса Proxmox на всех узлах. Они не обязательны, однако, если вы хотите продолжать использовать подписанные сертификаты, предоставленные CA, которые Proxmox настраивает внутренне. Обычно вы можете использовать Ansible Vault для шифрования закрытых ключей, например:
ansible-vault encrypt files/pve01/*.key
Это потребует ввести пароль Vault при запуске плейбука.
Сначала давайте укажем наши кластерные узлы. Наш файл inventory
может выглядеть так:
[pve01]
lab-node01.local
lab-node02.local
lab-node03.local
Вы можете иметь несколько кластеров, поэтому хорошей идеей будет создание одной группы для каждого кластера. Теперь давайте укажем наши требования к ролям в roles/requirements.yml
:
---
- src: geerlingguy.ntp
- src: lae.proxmox
Нам нужна роль NTP для его настройки, поэтому мы используем роль Джеффа Гирлингa для этого. Вам не нужна эта роль, если настройки NTP уже выполнены или у вас есть другой метод настройки NTP.
Теперь давайте укажем несколько групповых переменных. Сначала создадим group_vars/all
для установки переменных, связанных с NTP:
---
ntp_manage_config: true
ntp_servers:
- lab-ntp01.local iburst
- lab-ntp02.local iburst
Конечно, замените эти серверы NTP на более предпочитаемые.
Теперь перейдем к основной части вашего плейбука, переменные группы pve01
. Создайте файл
group_vars/pve01
, добавьте следующее и измените по необходимости для вашего окружения.
---
pve_group: pve01
pve_watchdog: ipmi
pve_ssl_private_key: "{{ lookup('file', pve_group + '/' + inventory_hostname + '.key') }}"
pve_ssl_certificate: "{{ lookup('file', pve_group + '/' + inventory_hostname + '.pem') }}"
pve_cluster_enabled: yes
pve_groups:
- name: ops
comment: Операционная команда
pve_users:
- name: admin1@pam
email: [email protected]
firstname: Admin
lastname: User 1
groups: [ "ops" ]
- name: admin2@pam
email: [email protected]
firstname: Admin
lastname: User 2
groups: [ "ops" ]
pve_acls:
- path: /
roles: [ "Administrator" ]
groups: [ "ops" ]
pve_storages:
- name: localdir
type: dir
content: [ "images", "iso", "backup" ]
path: /plop
maxfiles: 4
pve_ssh_port: 22
interfaces_template: "interfaces-{{ pve_group }}.j2"
pve_group
установлен на имя группы нашего кластера, pve01
- это название, которое будет использоваться для обеспечения возможности всем узлам в этой группе подключаться друг к другу и быть объединенными в кластер. Обратите внимание, что имя кластера PVE также будет установлено на это имя группы, если не указано другое значение pve_cluster_clustername
.
Если оставить это значение неопределенным, оно по умолчанию будет proxmox
.
pve_watchdog
здесь включает поддержку IPMI watchdog и настраивает PVE для использования его в менеджере высокой доступности. Оставьте это неопределенным, если не хотите настраивать его.
pve_ssl_private_key
и pve_ssl_certificate
указывают на SSL-сертификаты для pvecluster. Здесь используется поиск файла для чтения содержимого файла в плейбуке, например, files/pve01/lab-node01.key
. Вы могли бы также использовать переменные хостов вместо файлов, если предпочтете.
pve_cluster_enabled
позволяет роли выполнять все задачи управления кластером.
Это включает создание кластера, если его еще нет, или добавление узлов в существующий кластер. Существуют проверки, чтобы убедиться, что вы не смешиваете узлы, которые находятся в уже существующих кластерах с различными именами.
pve_groups
, pve_users
и pve_acls
авторизуют некоторых локальных пользователей UNIX (они должны уже существовать) для доступа к PVE и предоставляют им роль администратора как часть группы ops
. Читайте раздел Управление пользователями и ACL для получения дополнительной информации.
pve_storages
позволяет создавать различные типы хранилищ и настраивать их.
Бэкенд должен поддерживаться Proxmox. Читайте раздел Управление хранилищем для получения дополнительной информации.
pve_ssh_port
позволяет изменить порт SSH. Если ваш SSH слушает на порту, отличном от стандартного 22, пожалуйста, установите эту переменную. Если новый узел присоединяется к кластеру, кластеру PVE необходимо один раз установить связь через SSH.
pve_manage_ssh
(по умолчанию true) позволяет вам отключить любые изменения, которые этот модуль может внести в конфигурацию вашего SSH-сервера. Это полезно, если вы используете другую роль для управления вашим SSH-сервером. Обратите внимание, что установка этого значения в false не поддерживается официально, вам нужно будет самостоятельно воспроизвести изменения, обычно внесенные в ssh_cluster_config.yml
и pve_add_node.yml
.
interfaces_template
установлен на путь к шаблону, который мы будем использовать для настройки сети на этих машинах Debian. Это необходимо только в том случае, если вы хотите управлять настройками сети из Ansible, а не вручную или через каждый хост в PVE.
Вероятно, вам следует познакомиться с Ansible перед тем, как это делать, так как ваш метод может включать установку переменных хостов для IP-адресов для каждого хоста и т. д.
Давайте упростим шаблон интерфейса. Вы можете пропустить этот файл (и оставить его неопределенным в group_vars/pve01
), если хотите. Вот один, который я использую:
# {{ ansible_managed }}
auto lo
iface lo inet loopback
allow-hotplug enp2s0f0
iface enp2s0f0 inet manual
auto vmbr0
iface vmbr0 inet static
address {{ lookup('dig', ansible_fqdn) }}
gateway 10.4.0.1
netmask 255.255.255.0
bridge_ports enp2s0f0
bridge_stp off
bridge_fd 0
allow-hotplug enp2s0f1
auto enp2s0f1
iface enp2s0f1 inet static
address {{ lookup('dig', ansible_hostname + "-clusternet.local") }}
netmask 255.255.255.0
Вы можете не знать о поиске dig
, но, в основном, мы выполняем запрос записи A для каждой машины (например, lab-node01.local) для первого интерфейса (и настраиваем его как мост, который мы будем использовать для интерфейсов ВМ), а затем еще один слегка измененный поиск для "кластерной" сети, которую мы, возможно, будем использовать для Ceph ("lab-node01-clusternet.local"). Конечно, ваш шаблон может выглядеть совершенно иначе, особенно если вы используете связь, три разные сети для управления/коросинк, хранения и трафика ВМ и т. д.
Наконец, давайте напишем наш плейбук. site.yml
будет выглядеть примерно так:
---
- hosts: all
become: True
roles:
- geerlingguy.ntp
# Оставьте это, если не изменяете сетевые настройки через Ansible
- hosts: pve01
become: True
serial: 1
tasks:
- name: Установить bridge-utils
apt:
name: bridge-utils
- name: Настроить /etc/network/interfaces
template:
src: "{{ interfaces_template }}"
dest: /etc/network/interfaces
register: _configure_interfaces
- block:
- name: Перезагружаемся для применения сетевых изменений
shell: "sleep 5 && shutdown -r now 'Найдены изменения в сети, перезагрузка'"
async: 1
poll: 0
- name: Дождаться повторного включения сервера
wait_for_connection:
delay: 15
when: _configure_interfaces is changed
- hosts: pve01
become: True
roles:
- lae.proxmox
В основном, мы запускаем роль NTP для всех узлов (возможно, вы захотите добавить некоторые не-Proxmox машины), настраиваем сеть на pve01
с нашей отдельной кластерной сетью и макетами моста, перезагружаемся, чтобы изменения вступили в силу, а затем запускаем эту роль Proxmox для настройки кластера.
На данном этапе наш плейбук готов, и мы можем его запустить.
Убедитесь, что роли и зависимости установлены:
ansible-galaxy install -r roles/requirements.yml --force
pip install jmespath dnspython
jmespath
требуется для некоторых задач, связанных с кластеризацией. dnspython
требуется только в том случае, если вы используете поиск dig
, что, вероятно, не будет необходимо, если вы пропустили настройки сети. Мы передаем параметр --force
в ansible-galaxy
, чтобы роли обновлялись до последних версий, если они уже установлены.
Теперь запустите плейбук:
ansible-playbook -i inventory site.yml -e '{"pve_reboot_on_kernel_update": true}'
Параметр -e '{"pve_reboot_on_kernel_update": true}'
в основном следует запускать в первый раз, когда вы настраиваете кластер Proxmox, так как он перезагрузит сервер, чтобы загрузиться в ядро PVE. Последующие запуски должны обходиться без этого параметра, так как вы хотите поочередно перезагружать серверы после запуска кластера.
Чтобы указать конкретного пользователя, используйте -u root
(замените root
) и, если вам нужно предоставить пароли, используйте -k
для пароля SSH и/или -K
для пароля sudo. Например:
ansible-playbook -i inventory site.yml -K -u admin1
Это запросит пароль sudo, затем войдет в пользователя admin1
(используя аутентификацию с публичным ключом - добавьте -k
для пароля) и запустит плейбук.
Вот и все! Теперь у вас должен быть полностью развернутый кластер Proxmox. Возможно, вы захотите позже создать Ceph-хранилище на нем (см. Ceph для получения дополнительной информации) и выполнить другие задачи, но сложная часть в основном завершена.
Пример плейбука
Это настроит узлы в группе pve01
как один кластер, а также перезагрузит машины, если ядро было обновлено. (Рекомендуется устанавливать этот флаг во время установки - перезагрузки во время работы должны происходить последовательно в течение периода обслуживания.) Это также включит IPMI watchdog.
- hosts: pve01
become: True
roles:
- role: geerlingguy.ntp
ntp_manage_config: true
ntp_servers:
- clock.sjc.he.net
- clock.fmt.he.net
- clock.nyc.he.net
- role: lae.proxmox
pve_group: pve01
pve_cluster_enabled: yes
pve_reboot_on_kernel_update: true
pve_watchdog: ipmi
Переменные роли
[переменная]: [по умолчанию] #[описание/цель]
pve_group: proxmox # группа хостов, в которой находятся Proxmox-узлы, которые необходимо объединить в кластер
pve_repository_line: "deb http://download.proxmox.com/debian/pve bullseye pve-no-subscription" # конфигурация apt-репозитория - измените на enterprise, если необходимо (хотя может потребоваться дальнейшая настройка)
pve_remove_subscription_warning: true # исправляет сообщения об ошибке подписки в proxmox, если вы используете сообщество
pve_extra_packages: [] # любые дополнительные пакеты, которые вы можете захотеть установить, например, ngrep
pve_run_system_upgrades: false # разрешить роли выполнять обновления системы
pve_run_proxmox_upgrades: true # разрешить роли выполнять обновления Proxmox VE
pve_check_for_kernel_update: true # запускает скрипт на хосте для проверки версий ядра
pve_reboot_on_kernel_update: false # если установлено в true, автоматически перезагрузит машину при обновлении ядра
pve_reboot_on_kernel_update_delay: 60 # количество секунд, которые нужно подождать перед и после процесса перезагрузки для продолжения следующей задачи в кластерном режиме
pve_remove_old_kernels: true # в настоящее время удаляет ядро из основного репозитория Debian
pve_pcie_passthrough_enabled: false # установите это в true, чтобы включить PCIe passthrough.
pve_iommu_passthrough_mode: false # установите это в true, чтобы разрешить ВМ обходить трансляцию DMA. Это может повысить производительность для IOMMU passthrough.
pve_iommu_unsafe_interrupts: false # установите это в true, если ваша система не поддерживает перенаправление прерываний.
pve_mediated_devices_enabled: false # установите это в true, если ваше устройство поддерживает gtv-g и вы хотите включить функциональность разделения.
pve_pcie_ovmf_enabled: false # установите это в true, чтобы включить GPU OVMF PCI passthrough.
pve_pci_device_ids: [] # список идентификаторов pci-устройств (см. https://pve.proxmox.com/wiki/Pci_passthrough#GPU_Passthrough).
pve_vfio_blacklist_drivers: [] # список драйверов устройств, которые необходимо занести в черный список на хосте Proxmox (см. https://pve.proxmox.com/wiki/PCI(e)_Passthrough).
pve_pcie_ignore_msrs: false # установите это в true, если происходит передача через Windows, чтобы предотвратить сбой ВМ.
pve_pcie_report_msrs: true # установите это в false, чтобы предотвратить записи о сбоях msrs в dmesg.
pve_watchdog: none # установите это на "ipmi", если вы хотите настроить аппаратный watchdog. Proxmox по умолчанию использует программный watchdog (nmi_watchdog).
pve_watchdog_ipmi_action: power_cycle # может быть одним из "reset", "power_cycle" и "power_off".
pve_watchdog_ipmi_timeout: 10 # количество секунд, которые watchdog должен ждать
pve_zfs_enabled: no # указывает, нужно ли устанавливать и настраивать пакеты ZFS
# pve_zfs_options: "" # параметры модуль для передачи модулю zfs при загрузке/modprobe
# pve_zfs_zed_email: "" # должен быть установлен на электронную почту для получения уведомлений ZFS
pve_zfs_create_volumes: [] # список ZFS томов для создания (для использования в качестве хранилищ PVE). См. раздел Управление хранилищами.
pve_ceph_enabled: false # указывает, нужно ли устанавливать и настраивать пакеты Ceph. См. ниже для примера конфигурации.
pve_ceph_repository_line: "deb http://download.proxmox.com/debian/ceph-pacific bullseye main" # конфигурация apt-репозитория. Будет автоматически установлена для 6.x и 7.x (дополнительная информация: https://pve.proxmox.com/wiki/Package_Repositories)
pve_ceph_network: "{{ (ansible_default_ipv4.network +'/'+ ansible_default_ipv4.netmask) | ansible.utils.ipaddr('net') }}" # публичная сеть Ceph
# pve_ceph_cluster_network: "" # необязательный, если кластерная сеть ceph отличается от публичной сети (см. https://pve.proxmox.com/pve-docs/chapter-pveceph.html#pve_ceph_install_wizard)
pve_ceph_nodes: "{{ pve_group }}" # группа хостов, содержащая все узлы Ceph
pve_ceph_mon_group: "{{ pve_group }}" # группа хостов, содержащая все хосты-мониторы Ceph
pve_ceph_mgr_group: "{{ pve_ceph_mon_group }}" # группа хостов, содержащая все хосты-менеджеры Ceph
pve_ceph_mds_group: "{{ pve_group }}" # группа хостов, содержащая все хосты-метаданные Ceph
pve_ceph_osds: [] # список дисков OSD
pve_ceph_pools: [] # список пулов для создания
pve_ceph_fs: [] # список файловых систем CephFS для создания
pve_ceph_crush_rules: [] # список правил CRUSH для создания
# pve_ssl_private_key: "" # должен быть установлен на содержимое закрытого ключа для использования HTTPS
# pve_ssl_certificate: "" # должен быть установлен на содержимое сертификата для использования HTTPS
pve_roles: [] # Добавленные роли с особыми привилегиями. См. раздел Управление пользователями.
pve_groups: [] # список определений групп для управления в PVE. См. раздел Управление пользователями.
pve_users: [] # список определений пользователей для управления в PVE. См. раздел Управление пользователями.
pve_storages: [] # список хранилищ для управления в PVE. См. раздел Управление хранилищами.
pve_datacenter_cfg: {} # словарь для конфигурации файла конфигурации PVE datacenter.cfg.
pve_domains_cfg: [] # список областей, которые использовать в качестве источников аутентификации в файле конфигурации PVE domains.cfg.
pve_no_log: false # установите это в true в производственной среде, чтобы предотвратить утечку учетных данных хранилища в журналы выполнения. (может использоваться в других задачах в будущем)
Чтобы включить кластеризацию с помощью этой роли, правильно настройте следующие переменные:
pve_cluster_enabled: no # установите это в yes, чтобы настроить узлы для объединения в кластер
pve_cluster_clustername: "{{ pve_group }}" # должно быть установлено на имя кластера PVE
pve_manage_hosts_enabled : yes # установите это в no, чтобы НЕ настраивать файл хостов (в случае использования vpn и файл хостов уже настроен)
Следующие переменные используются для предоставления сетевой информации corosync. Эти переменные известны как ring0_addr/ring1_addr или link0_addr/link1_addr, в зависимости от версии PVE. Они должны быть адресами IPv4 или IPv6. Вы также можете настроить приоритет этих интерфейсов, чтобы намекнуть corosync, какой интерфейс должен обрабатывать трафик кластера (меньшие числа указывают на более высокий приоритет). Для получения дополнительной информации смотрите главу Cluster Manager в документации PVE.
# pve_cluster_addr0: "{{ по умолчанию используется адрес ipv4 или ipv6, если он обнаружен }}"
# pve_cluster_addr1: "IP-адрес или имя хоста другого интерфейса"
# pve_cluster_addr0_priority: 255
# pve_cluster_addr1_priority: 0
Вы можете установить параметры в файле конфигурации datacenter.cfg:
pve_datacenter_cfg:
keyboard: en-us
Вы также можете настроить группы менеджера HA:
pve_cluster_ha_groups: [] # список групп HA для создания в PVE.
Этот пример создает группу "lab_node01" для ресурсов, назначенных хосту lab-node01:
pve_cluster_ha_groups:
- name: lab_node01
comment: "Моя группа HA"
nodes: "lab-node01"
nofailback: 0
restricted: 0
Все параметры конфигурации, поддерживаемые в файле datacenter.cfg, задокументированы в разделе справки по datacenter.cfg Proxmox.
Чтобы живая перезагрузка сетевых интерфейсов работала через веб-интерфейс PVE, вам нужно установить пакет ifupdown2
. Обратите внимание, что это удалит ifupdown
. Вы можете указать это с помощью переменной роли pve_extra_packages
.
Вы можете установить области/доменов в качестве источников аутентификации в файле конфигурации domains.cfg
.
Если этот файл отсутствует, доступны только области Linux PAM
и сервер аутентификации Proxmox VE
.
Поддерживаемые типы: pam
, pve
, ad
и ldap
.
Возможно автоматически синхронизировать пользователей и группы для областей, основанных на LDAP (LDAP и Microsoft Active Directory), установив sync: true
.
Одна область должна иметь свойство default: 1
, чтобы обозначить ее как основную:
pve_domains_cfg:
- name: pam
type: pam
attributes:
comment: Стандартная аутентификация Linux PAM
- name: pve
type: pve
attributes:
comment: Сервер аутентификации Proxmox VE
- name: ad
type: ad
attributes:
comment: Аутентификация Active Directory
domain: вашдомен.com
server1: dc01.вашдомен.com
default: 1
secure: 1
server2: dc02.вашдомен.com
- name: ldap
type: ldap
sync: true
attributes:
comment: Аутентификация LDAP
base_dn: CN=Users,dc=вашдомен,dc=com
bind_dn: "uid=svc-reader,CN=Users,dc=вашдомен,dc=com"
bind_password: "{{ secret_ldap_svc_reader_password }}"
server1: ldap1.вашдомен.com
user_attr: uid
secure: 1
server2: ldap2.вашдомен.com
Зависимости
Эта роль не устанавливает NTP, поэтому вам следует настроить NTP самостоятельно, например, с помощью роли geerlingguy.ntp
, как показано в примере плейбука.
Когда кластеризация включена, эта роль использует фильтр json_query
,
который требует, чтобы библиотека jmespath
была установлена на вашем управляющем хосте.
Вы можете либо pip install jmespath
, либо установить его через пакетный менеджер вашей дистрибуции, например, apt-get install python-jmespath
.
Управление пользователями и ACL
Вы можете использовать эту роль для управления пользователями и группами в Proxmox VE (как в развертываниях на одном сервере, так и в развертываниях кластеров). Вот некоторые примеры.
pve_groups:
- name: Admins
comment: Администраторы этого кластера PVE
- name: api_users
- name: test_users
pve_users:
- name: root@pam
email: [email protected]
- name: lae@pam
email: [email protected]
firstname: Musee
lastname: Ullah
groups: [ "Admins" ]
- name: pveapi@pve
password: "Proxmox789"
groups:
- api_users
- name: testapi@pve
password: "Test456"
enable: no
groups:
- api_users
- test_users
- name: tempuser@pam
expire: 1514793600
groups: [ "test_users" ]
comment: "Временный пользователь, установленный на истечение 1 января 2018 года 00:00:00 PST"
email: [email protected]
firstname: Test
lastname: User
Обратитесь к library/proxmox_user.py
link и
library/proxmox_group.py
link для документации по модулям.
Для управления ролями и ACL используется аналогичный модуль, но основное различие заключается в том, что большинство параметров принимает только списки (что может измениться):
pve_roles:
- name: Monitoring
privileges:
- "Sys.Modify"
- "Sys.Audit"
- "Datastore.Audit"
- "VM.Monitor"
- "VM.Audit"
pve_acls:
- path: /
roles: [ "Administrator" ]
groups: [ "Admins" ]
- path: /pools/testpool
roles: [ "PVEAdmin" ]
users:
- pveapi@pve
groups:
- test_users
Обратитесь к library/proxmox_role.py
link и
library/proxmox_acl.py
link для документации по модулям.
Управление хранилищем
Вы можете использовать эту роль для управления хранилищем в Proxmox VE (как в развертываниях на одном сервере, так и в развертываниях кластеров). В настоящее время поддерживаемые типы это dir
, rbd
, nfs
, cephfs
, lvm
, lvmthin
, zfspool
, btrfs
, cifs
и pbs
. Вот некоторые примеры.
pve_storages:
- name: dir1
type: dir
content: [ "images", "iso", "backup" ]
path: /ploup
disable: no
maxfiles: 4
- name: ceph1
type: rbd
content: [ "images", "rootdir" ]
nodes: [ "lab-node01.local", "lab-node02.local" ]
username: admin
pool: rbd
krbd: yes
monhost:
- 10.0.0.1
- 10.0.0.2
- 10.0.0.3
- name: nfs1
type: nfs
content: [ "images", "iso" ]
server: 192.168.122.2
export: /data
- name: lvm1
type: lvm
content: [ "images", "rootdir" ]
vgname: vg1
- name: lvmthin1
type: lvmthin
content: [ "images", "rootdir" ]
vgname: vg2
thinpool: data
- name: cephfs1
type: cephfs
content: [ "snippets", "vztmpl", "iso" ]
nodes: [ "lab-node01.local", "lab-node02.local" ]
monhost:
- 10.0.0.1
- 10.0.0.2
- 10.0.0.3
- name: pbs1
type: pbs
content: [ "backup" ]
server: 192.168.122.2
username: user@pbs
password: PBSPassword1
datastore: main
namespace: Top/something # Необязательно
- name: zfs1
type: zfspool
content: [ "images", "rootdir" ]
pool: rpool/data
sparse: true
- name: btrfs1
type: btrfs
content: [ "images", "rootdir" ]
nodes: [ "lab-node01.local", "lab-node02.local" ]
path: /mnt/proxmox_storage
is_mountpoint: true
- name: cifs1
server: cifs-host.domain.tld
type: cifs
content: [ "snippets", "vztmpl", "iso" ]
share: sharename
subdir: /subdir
username: user
password: supersecurepass
domain: addomain.tld
Дополнительную информацию смотрите на https://pve.proxmox.com/pve-docs/api-viewer/index.html.
В настоящее время тип zfspool
можно использовать только для содержимого images
и rootdir
.
Если вы хотите сохранить другие типы содержимого на ZFS-томе, вам нужно указать их с типом dir
, путь /<POOL>/<VOLUME>
и добавить запись в
pve_zfs_create_volumes
. Этот пример добавляет хранилище iso
на ZFS-пул:
pve_zfs_create_volumes:
- rpool/iso
pve_storages:
- name: iso
type: dir
path: /rpool/iso
content: [ "iso" ]
Обратитесь к library/proxmox_storage.py
link для документации по модулю.
Конфигурация Ceph
Этот раздел требует дополнительного освещения. Если вы активно используете эту роль для управления вашим кластером PVE Ceph, пожалуйста, дайте поправки для этого раздела и откройте запрос на изменение! Смотрите проблема #68.
Управление PVE Ceph с помощью этой роли является экспериментальным. Хотя пользователи успешно использовали эту роль для развертывания PVE Ceph, она не полностью протестирована в CI (из-за недостатка доступных блочных устройств, которые можно использовать в качестве OSD в Travis CI). Пожалуйста, разверните тестовую среду с вашей конфигурацией предварительно перед производственными развертываниями, и сообщите о любых проблемах, если они возникнут.
Эта роль может настроить систему хранения Ceph на ваших хостах Proxmox. Следующие определения демонстрируют некоторые из возможных конфигураций.
pve_ceph_enabled: true
pve_ceph_network: '172.10.0.0/24'
pve_ceph_cluster_network: '172.10.1.0/24'
pve_ceph_nodes: "ceph_nodes"
pve_ceph_osds:
# OSD с всем на одном устройстве
- device: /dev/sdc
# OSD с block.db/WAL на другом устройстве
- device: /dev/sdd
block.db: /dev/sdb1
# зашифрованный OSD с всем на одном устройстве
- device: /dev/sdc
encrypted: true
# зашифрованный OSD с block.db/WAL на другом устройстве
- device: /dev/sdd
block.db: /dev/sdb1
encrypted: true
# Правила Crush для разных классов хранилища
# По умолчанию 'type' установлен на host, вы можете найти действительные типы на
# (https://docs.ceph.com/en/latest/rados/operations/crush-map/)
# перечислены в разделе 'ТИПЫ И КОРОБКИ'
pve_ceph_crush_rules:
- name: replicated_rule
type: osd # Это пример того, как вы можете переопределить предсуществующее правило
- name: ssd
class: ssd
type: osd
min-size: 2
max-size: 8
- name: hdd
class: hdd
type: host
# 2 пула Ceph для ВМ-дисков, которые также будут определены как хранилища Proxmox
# Используя разные правила CRUSH
pve_ceph_pools:
- name: ssd
pgs: 128
rule: ssd
application: rbd
storage: true
# Этот пул Ceph использует значения размеров/репликации
- name: hdd
pgs: 32
rule: hdd
application: rbd
storage: true
size: 2
min-size: 1
# Этот пул Ceph использует относительно настраиваемый режим авто-масштабирования: "off" | "on" | "warn" (по умолчанию = "warn")
- name: vm-storage
pgs: 128
rule: replicated_rule
application: rbd
autoscale_mode: "on"
storage: true
pve_ceph_fs:
# Файловая система CephFS, не определенная как хранилище Proxmox
- name: backup
pgs: 64
rule: hdd
storage: false
mountpoint: /srv/proxmox/backup
pve_ceph_network
по умолчанию использует фильтр ansible.utils.ipaddr
, который
требует, чтобы библиотека netaddr
была установлена и использовалась вашим управляющим хостом.
pve_ceph_nodes
по умолчанию использует pve_group
, этот параметр позволяет указать
на каких узлах установить Ceph (например, если вы не хотите устанавливать Ceph на всех своих
узлах).
pve_ceph_osds
по умолчанию создает незашифрованные объемы ceph. Чтобы использовать зашифрованные
объемы, нужно указать параметр encrypted
для каждого диска как true
.
Passthrough PCIe
Эта роль может быть настроена для разрешения передачи устройств PCI с хоста Proxmox на ВМ. Эта функция по умолчанию не включена, так как не все материнские платы и процессоры поддерживают эту функцию. Чтобы включить передачу, процессор должен поддерживать аппаратную виртуализацию (VT-d для систем на базе Intel и AMD-V для систем на базе AMD). Ссылки на инструкции всех компонентов помогут определить, поддерживается ли эта функция. Номенклатура может различаться, но обычно это называют IOMMU, VT-d или AMD-V.
Включив эту функцию, выделенные устройства (такие как GPU или USB-устройства) могут быть переданы ВМ. Вместе с выделенными устройствами могут передаваться различные интегрированные устройства, такие как интегрированные GPU Intel или AMD.
Некоторые устройства могут воспользоваться медиированным использованием. Медиированные устройства могут передаваться нескольким ВМ для совместного использования ресурсов, оставаясь при этом доступными для хост-системы. Разделение устройств не всегда поддерживается, и его следует проверить перед включением, чтобы предотвратить ошибки. Обратитесь к руководству устройства, которое вы хотите передать, чтобы определить, поддерживает ли данное устройство медиированное использование (в настоящее время эта роль поддерживает только GVT-g; SR-IOV в данный момент не поддерживается и должен быть включен вручную после завершения роли).
Следующая конфигурация позволяет включить передачу PCIe:
pve_pcie_passthrough_enabled: true
pve_iommu_passthrough_mode: true
pve_iommu_unsafe_interrupts: false
pve_mediated_devices_enabled: false
pve_pcie_ovmf_enabled: false
pve_pci_device_ids:
- id: "10de:1381"
- id: "10de:0fbc"
pve_vfio_blacklist_drivers:
- name: "radeon"
- name: "nouveau"
- name: "nvidia"
pve_pcie_ignore_msrs: false
pve_pcie_report_msrs: true
pve_pcie_passthrough_enabled
обязательно для использования любой функциональности передачи PCIe. Без включения этого параметра все другие поля, относящиеся к PCIe, останутся неиспользуемыми.
pve_iommu_passthrough_mode
включение режима передачи IOMMU может повысить производительность устройства. Включив эту функцию, ВМ обойдет стандартное преобразование DMA, которое обычно выполняет гипервизор. Вместо этого ВМ передает запросы DMA непосредственно на аппаратный IOMMU.
pve_iommu_unsafe_interrupts
должен быть включен, чтобы разрешить передачу PCI, если ваша система не поддерживает перенаправление прерываний. Вы можете проверить, поддерживает ли устройство перенаправление прерываний, используя dmesg | grep 'remapping'
. Если вы увидите одну из следующих строк:
- "AMD-Vi: Interrupt remapping enabled"
- "DMAR-IR: Enabled IRQ remapping in x2apic mode" ('x2apic' может отличаться на старых процессорах, но должна по-прежнему работать)
Тогда система поддерживает перенаправление прерываний и вам не нужно включать небезопасные прерывания. Обратите внимание, что включив эту переменную, ваша система может стать нестабильной.
pve_mediated_devices_enabled
включает поддержку GVT-g для интегрированных устройств, таких как iGPU Intel. Не все устройства поддерживают GVT-g, поэтому рекомендуется сначала проверить вашу конкретную модель устройства, чтобы убедиться, что она разрешена.
pve_pcie_ovmf_enabled
позволяет передавать GPU OVMF PCI. При использовании OVMF вам следует выбрать 'OVMF' в качестве параметра BIOS для ВМ, а не 'SeaBIOS' в Proxmox. Эта настройка попытается исключить устройства из VGA-арбитража, если это возможно.
pve_pci_device_ids
это список идентификаторов устройств и производителей, которые вы хотите передать ВМ с хоста. См. раздел 'Передача GPU' на Wiki Proxmox для поиска ваших конкретных идентификаторов устройства и производителя. При установке этого значения обязательно укажите 'id' для каждого нового элемента в массиве.
pve_vfio_blacklist_drivers
это список драйверов, которые нужно исключить/заблокировать на хосте. Это необходимо при передаче устройства PCI, чтобы предотвратить использование устройства хостом перед его назначением на ВМ. При установке этого значения нужно обязательно установить 'name' для каждого нового элемента в массиве.
pve_pcie_ignore_msrs
предотвращает сбой некоторых приложений Windows, таких как GeForce Experience, Passmark Performance Test и SiSoftware Sandra. Эта переменная нужна только при передаче PCI-устройств для систем на основе Windows.
pve_pcie_report_msrs
можно использовать, чтобы включить или отключить сообщения о предупреждениях msrs. Если вы видите много сообщений предупреждений в вашем системном журнале 'dmesg', это значение может быть использовано, чтобы заглушить предупреждения msrs.
Примечания разработчика
При разработке новых функций или исправлении ошибок в этой роли вы можете протестировать свои изменения, используя Vagrant (в настоящее время поддерживается только libvirt).
Плейбук можно найти в tests/vagrant
(поэтому убедитесь, что вы вносите изменения в групповые переменные по мере необходимости). Обязательно протестируйте любые изменения как на Debian 10, так и на 11 (обновите Vagrantfile локально, чтобы использовать debian/buster64
) перед отправкой запроса на изменение.
Вы также можете указать прокси-кэш для apt (например, apt-cacher-ng
, который должен работать на порту 3142), если у вас в вашем окружении имеется такой. Плейбук vagrant определит, доступен ли кэш-прокси, и будет использовать его только в том случае, если он доступен в вашей сети, так что вы можете просто постоянно установить эту переменную в вашей среде разработки, если предпочтете.
Например, вы можете запустить следующее, чтобы отобразить более подробный/легкий для чтения вывод,
использовать кэш-прокси и оставлять ВМ работающими, если возникнет ошибка (чтобы вы могли устранить ее и/или выполнить vagrant provision
после исправления):
APT_CACHE_HOST=10.71.71.10 ANSIBLE_STDOUT_CALLBACK=debug vagrant up --no-destroy-on-error
Участники
Musee Ullah (@lae, lae@lae.is) - Главный разработчик
Fabien Brachere (@Fbrachere) - Поддержка конфигурации хранилищ
Gaudenz Steinlin (@gaundez) - Поддержка Ceph и др.
Richard Scott (@zenntrix) - Поддержка Ceph, поддержка PVE 7.x и др.
Thoralf Rickert-Wendt (@trickert76) - Поддержка PVE 6.x и др.
Engin Dumlu (@roadrunner)
Jonas Meurer (@mejo-)
Ondrej Flidr (@SniperCZE)
niko2 (@niko2)
Christian Aublet (@caublet)
Gille Pietri (@gilou)
Michael Holasek (@mholasek)
Alexander Petermann (@lexxxel) - Поддержка PVE 8.x и др.
Bruno Travouillon (@btravouillon) - Усовершенствования UX
Tobias Negd (@wu3rstle) - Поддержка Ceph
PendaGTP (@PendaGTP) - Поддержка Ceph
John Marion (@jmariondev)
foerkede (@foerkede) - Поддержка хранилища ZFS
Guiffo Joel (@futuriste) - Поддержка конфигурации пула
Adam Delo (@ol3d) - Поддержка PCIe Passthrough
Installs and configures Proxmox Virtual Environment 6.x/7.x on Debian servers.
ansible-galaxy install lae/ansible-role-proxmox