Устанавливает и настраивает виртуальную среду Proxmox 6.x/7.x/8.x на серверах Debian.
Эта роль позволяет вам развернуть и управлять установками PVE с одним узлом и кластерами PVE (3+ узлов) на Debian Buster (10) и Bullseye (11) и Bookworm (12). Вы можете настроить следующее с помощью этой роли:
datacenter.cfg
pve-no-subscription
или pve-enterprise
)При включении кластеризации эта роль (или позволяет вам делать) следующее:
Для поддержки или, если вы хотите внести свой вклад в эту роль, но хотите руководство, не стесняйтесь присоединиться к этому серверу Discord: https://discord.gg/cjqr6fg. Обратите внимание, что это временное приглашение, поэтому вам нужно ждать, пока @Lae назначит вам роль, в противном случае Discord удалит вас с сервера при выходе.
Основной целью для этой роли является настройка и управление кластером ProxMox VE (см. Пример Playbook), однако эта роль можно использовать для быстрого установки одно узловых серверов 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
к вышеуказанной команде. Если вы также аутентифицируете хост через пароль вместо Pubkey Auth, передайте флаг -k
(убедитесь, что у вас также установлен sshpass
). Вы можете установить эти переменные до запуска команды или просто заменить их. Обратите внимание, что запятая важна, так как ожидается список (в противном случае он попытается найти файл, содержащий список хостов).
После завершения вы сможете получить доступ к вашему экземпляру Proxmox VE по адресу https://$SSH_HOST_FQDN:8006
.
Создайте новый каталог Playbook. Мы называем наш 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 directories, 12 files
Во -первых, вы можете отметить, что у нас есть куча файлов .key
и .pem
. Это частные ключи и сертификаты SSL, которые эта роль будет использовать для настройки веб -интерфейса для Proxmox во всех узлах. Это не требуется, однако, если вы хотите продолжать использовать подписанные сертификаты с помощью CA, которые Proxmox устанавливает внутренне. Обычно вы можете использовать Ansible Vault для шифрования частных ключей, например:
ansible-vault encrypt files/pve01/*.key
Затем это потребует от вас передачи пароля хранилища при запуске Playbook.
Давайте сначала указать наши кластерные хосты. Наш файл inventory
может выглядеть так:
[pve01]
lab-node01.local
lab-node02.local
lab-node03.local
У вас может быть несколько кластеров, так что это хорошая идея иметь одну группу для каждого кластера. Теперь давайте укажем наши требования к роли в roles/requirements.yml
. Myml:
---
- src: geerlingguy.ntp
- src: lae.proxmox
Нам нужна роль NTP для настройки NTP, поэтому мы используем роль Джеффа Герлинга для этого. Вам не понадобится, если у вас уже настроен 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: Operations Team
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 и настраивает менеджер PVE HA для его использования. Используйте None
или оставьте это неопределенным, чтобы использовать программный контроль Proxmox по умолчанию. Если установить что -либо еще, ожидается, что значение будет модулем ядра сторожевого пса.
pve_ssl_private_key
и pve_ssl_certificate
Точка к сертификатам SSL для PVECLuster. Здесь поиск файла используется для чтения содержимого файла в Playbook, например, files/pve01/lab-node01.key
. Вы можете просто использовать переменные хоста вместо файлов, если вы предпочитаете.
pve_cluster_enabled
позволяет роль выполнять все задачи управления кластером. Это включает в себя создание кластера, если его не существует, или добавление узлов в существующий кластер. Есть проверки, чтобы убедиться, что вы не смешиваете узлы, которые уже находятся в существующих кластерах с разными именами.
pve_groups
, pve_users
и pve_acls
разрешают некоторым локальным пользователям UNIX (они уже должны существовать) доступа к PVE и дают им роль администратора как часть группы ops
. Прочитайте раздел управления пользователем и ACL для получения дополнительной информации.
pve_storages
позволяет создавать различные типы хранения и настраивать их. Бэкэнд должен поддерживать Proxmox. Прочитайте раздел управления хранением для получения дополнительной информации.
pve_metric_servers
позволяет настроить метрический сервер для кластера PVE. Это полезно, если вы хотите использовать InfluxDB, графит или другой (с Telegraf).
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
, но в основном здесь мы делаем поиск записи для каждой машины (например, Lab-Node01.local) для первого интерфейса (и настройка его в качестве моста, который мы используем для интерфейсов VM ), а затем еще один слегка модифицированный поиск для сети «кластеризации», которую мы могли бы использовать для Ceph ("Lab-node01-clustertet.local"). Конечно, ваш может выглядеть совершенно по -другому, особенно если вы используете склеивание, три разные сети для управления/corosync, хранилище и виртуального машины и т. Д.
Наконец, давайте напишем нашу книгу. site.yml
будет выглядеть примерно так:
---
- hosts: all
become: True
roles:
- geerlingguy.ntp
# Leave this out if you're not modifying networking through Ansible
- hosts: pve01
become: True
serial: 1
tasks:
- name: Install bridge-utils
apt:
name: bridge-utils
- name: Configure /etc/network/interfaces
template:
src: "{{ interfaces_template }}"
dest: /etc/network/interfaces
register: _configure_interfaces
- block:
- name: Reboot for networking changes
shell: "sleep 5 && shutdown -r now 'Networking changes found, rebooting'"
async: 1
poll: 0
- name: Wait for server to come back online
wait_for_connection:
delay: 15
when: _configure_interfaces is changed
- hosts: pve01
become: True
roles:
- lae.proxmox
По сути, мы запускаем роль NTP на всех хостах (вы можете добавить несколько непрососальных машин), настроить сеть на 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 Cluster, так как он перезагрузит сервер для загрузки в ядро PVE. Последующие прогоны должны оставить это, так как вы хотите последовательно перезагрузить серверы после работы кластера.
Чтобы указать конкретного пользователя, используйте -u root
(заменить root
), и если вам нужно предоставить пароли, используйте -k
для пароля SSH и/или -K
для пароля SUDO. Например:
ansible-playbook -i inventory site.yml -K -u admin1
Это потребует пароля SUDO, а затем войдите в пользователь admin1
(используя открытый ключ Auth - add -k
для PW) и запустите пейзаж.
Вот и все! Теперь у вас должен быть полностью развернутый кластер Proxmox. Возможно, вы захотите создать хранилище Ceph на нем потом (см. Ceph для получения дополнительной информации) и, возможно, другие задачи, но сложная часть в основном завершена.
Это будет настроить хост в группе pve01
в качестве одного кластера, а также перезагрузить машины в случае обновления ядра. (Рекомендуется только установить этот флаг во время установки - перезагрузки во время работы должны происходить последовательно в течение периода технического обслуживания.) Он также включит сторожевой пейзаж IPMI.
- 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
О значениях по умолчанию: некоторые значения по умолчанию выбираются во время выполнения и могут отличаться от примера, перечисленного здесь.
[variable]: [default] #[description/purpose]
pve_group: proxmox # host group that contains the Proxmox hosts to be clustered together
pve_repository_line: "deb http://download.proxmox.com/debian/pve bookworm pve-no-subscription" # apt-repository configuration - change to enterprise if needed (although TODO further configuration may be needed)
pve_remove_subscription_warning: true # patches the subscription warning messages in proxmox if you are using the community edition
pve_extra_packages: [] # Any extra packages you may want to install, e.g. ngrep
pve_run_system_upgrades: false # Let role perform system upgrades
pve_run_proxmox_upgrades: true # Let role perform Proxmox VE upgrades
pve_check_for_kernel_update: true # Runs a script on the host to check kernel versions
pve_reboot_on_kernel_update: false # If set to true, will automatically reboot the machine on kernel updates
pve_reboot_on_kernel_update_delay: 60 # Number of seconds to wait before and after a reboot process to proceed with next task in cluster mode
pve_remove_old_kernels: true # Currently removes kernel from main Debian repository
# pve_default_kernel_version: # version to pin proxmox-default-kernel to (see https://pve.proxmox.com/wiki/Roadmap#Kernel_6.8)
pve_pcie_passthrough_enabled: false # Set this to true to enable PCIe passthrough.
pve_iommu_passthrough_mode: false # Set this to true to allow VMs to bypass the DMA translation. This might increase performance for IOMMU passthrough.
pve_iommu_unsafe_interrupts: false # Set this to true if your system doesn't support interrupt remapping.
pve_mediated_devices_enabled: false # Set this to true if your device supports gtv-g and you wish to enable split functionality.
pve_pcie_ovmf_enabled: false # Set this to true to enable GPU OVMF PCI passthrough.
pve_pci_device_ids: [] # List of pci device ID's (see https://pve.proxmox.com/wiki/Pci_passthrough#GPU_Passthrough).
pve_vfio_blacklist_drivers: [] # List of device drivers to blacklist from the Proxmox host (see https://pve.proxmox.com/wiki/PCI(e)_Passthrough).
pve_pcie_ignore_msrs: false # Set this to true if passing through to Windows machine to prevent VM crashing.
pve_pcie_report_msrs: true # Set this to false to prevent dmesg system from logging msrs crash reports.
pve_watchdog: none # Set this to "ipmi" if you want to configure a hardware watchdog. Proxmox uses a software watchdog (nmi_watchdog) by default.
pve_watchdog_ipmi_action: power_cycle # Can be one of "reset", "power_cycle", and "power_off".
pve_watchdog_ipmi_timeout: 10 # Number of seconds the watchdog should wait
pve_zfs_enabled: no # Specifies whether or not to install and configure ZFS packages
# pve_zfs_options: "" # modprobe parameters to pass to zfs module on boot/modprobe
# pve_zfs_zed_email: "" # Should be set to an email to receive ZFS notifications
pve_zfs_create_volumes: [] # List of ZFS Volumes to create (to use as PVE Storages). See section on Storage Management.
pve_ceph_enabled: false # Specifies wheter or not to install and configure Ceph packages. See below for an example configuration.
pve_ceph_repository_line: "deb http://download.proxmox.com/debian/ceph-pacific bookworm main" # apt-repository configuration. Will be automatically set for 6.x and 7.x (Further information: https://pve.proxmox.com/wiki/Package_Repositories)
pve_ceph_network: "{{ (ansible_default_ipv4.network +'/'+ ansible_default_ipv4.netmask) | ansible.utils.ipaddr('net') }}" # Ceph public network
# pve_ceph_cluster_network: "" # Optional, if the ceph cluster network is different from the public network (see https://pve.proxmox.com/pve-docs/chapter-pveceph.html#pve_ceph_install_wizard)
pve_ceph_nodes: "{{ pve_group }}" # Host group containing all Ceph nodes
pve_ceph_mon_group: "{{ pve_group }}" # Host group containing all Ceph monitor hosts
pve_ceph_mgr_group: "{{ pve_ceph_mon_group }}" # Host group containing all Ceph manager hosts
pve_ceph_mds_group: "{{ pve_group }}" # Host group containing all Ceph metadata server hosts
pve_ceph_osds: [] # List of OSD disks
pve_ceph_pools: [] # List of pools to create
pve_ceph_fs: [] # List of CephFS filesystems to create
pve_ceph_crush_rules: [] # List of CRUSH rules to create
# pve_ssl_private_key: "" # Should be set to the contents of the private key to use for HTTPS
# pve_ssl_certificate: "" # Should be set to the contents of the certificate to use for HTTPS
pve_roles: [] # Added more roles with specific privileges. See section on User Management.
pve_groups: [] # List of group definitions to manage in PVE. See section on User Management.
pve_users: [] # List of user definitions to manage in PVE. See section on User Management.
pve_storages: [] # List of storages to manage in PVE. See section on Storage Management.
pve_metric_servers: [] # List of metric servers to configure in PVE.
pve_datacenter_cfg: {} # Dictionary to configure the PVE datacenter.cfg config file.
pve_domains_cfg: [] # List of realms to use as authentication sources in the PVE domains.cfg config file.
pve_no_log: false # Set this to true in production to prevent leaking of storage credentials in run logs. (may be used in other tasks in the future)
Чтобы включить кластеризацию с этой ролью, настройте следующие переменные соответствующим образом:
pve_cluster_enabled: no # Set this to yes to configure hosts to be clustered together
pve_cluster_clustername: "{{ pve_group }}" # Should be set to the name of the PVE cluster
pve_manage_hosts_enabled : yes # Set this to no to NOT configure hosts file (case of using vpn and hosts file is already configured)
Следующие переменные используются для предоставления сетевой информации для corosync. Они известны как RING0_ADDR/RING1_ADDR или LINK0_ADDR/LINK1_ADDR, в зависимости от версии PVE. Они должны быть адресами IPv4 или IPv6. Вы также можете настроить приоритет этих интерфейсов, чтобы намекнуть на CoroSync, какой интерфейс должен обрабатывать трафик кластера (меньшие числа указывают на более высокий приоритет). Для получения дополнительной информации обратитесь к главе Manager Cluster в документации PVE.
# pve_cluster_addr0: "{{ defaults to the default interface ipv4 or ipv6 if detected }}"
# pve_cluster_addr1: "another interface's IP address or hostname"
# pve_cluster_addr0_priority: 255
# pve_cluster_addr1_priority: 0
Вы можете установить параметры в файле конфигурации datacenter.cfg:
pve_datacenter_cfg:
keyboard: en-us
Вы также можете настроить группы HA Manager:
pve_cluster_ha_groups: [] # List of HA groups to create in PVE.
Этот пример создает группу "lab_node01" для ресурсов, присвоенных хосту Lab Node01:
pve_cluster_ha_groups:
- name: lab_node01
comment: "My HA group"
nodes: "lab-node01"
nofailback: 0
restricted: 0
Все параметры конфигурации, поддерживаемые в файле datacenter.cfg, задокументированы в разделе Proxmox Manual Datacenter.cfg.
Чтобы перезагрузить сетевые интерфейсы для работы через интерфейс PVE Web, вам необходимо установить пакет ifupdown2
. Обратите внимание, что это удалит ifupdown
. Вы можете указать это, используя переменную роли pve_extra_packages
.
Вы можете установить сферы / домены в качестве источников аутентификации в файле конфигурации domains.cfg
. Если этого файла отсутствует, доступны только сферы Proxmox VE authentication server
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 standard authentication
- name: pve
type: pve
attributes:
comment: Proxmox VE authentication server
- name: ad
type: ad
attributes:
comment: Active Directory authentication
domain: yourdomain.com
server1: dc01.yourdomain.com
default: 1
secure: 1
server2: dc02.yourdomain.com
- name: ldap
type: ldap
sync: true
attributes:
comment: LDAP authentication
base_dn: CN=Users,dc=yourdomain,dc=com
bind_dn: "uid=svc-reader,CN=Users,dc=yourdomain,dc=com"
bind_password: "{{ secret_ldap_svc_reader_password }}"
server1: ldap1.yourdomain.com
user_attr: uid
secure: 1
server2: ldap2.yourdomain.com
Эта роль не устанавливает NTP, поэтому вы должны настроить NTP самостоятельно, например, с роли geerlingguy.ntp
как показано в примере Playbook.
Когда кластеризация включена, эта роль использует фильтр json_query
, который требует, чтобы библиотека jmespath
была установлена на вашем управляющем хосте. Вы можете либо pip install jmespath
, либо установить его через диспетчер пакетов вашего дистрибуции, например, apt-get install python-jmespath
.
Вы можете использовать эту роль для управления пользователями и группами в Proxmox VE (как в развертываниях с одним сервером, так и в развертываниях кластера). Вот несколько примеров.
pve_groups:
- name: Admins
comment: Administrators of this PVE cluster
- 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: "Temporary user set to expire on 2018年 1月 1日 月曜日 00:00:00 PST"
email: [email protected]
firstname: Test
lastname: User
См library/proxmox_user.py
ссылка и library/proxmox_group.py
для документации модуля.
Для управления ролями и 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
ссылка и library/proxmox_acl.py
Ссылка для документации модуля.
Вы можете использовать эту роль для управления хранилищем в 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 # Optional
- 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
См.
В настоящее время тип zfspool
можно использовать только для images
и содержимого rootdir
. Если вы хотите сохранить другие типы контента в томе ZFS, вам необходимо указать их с помощью типа dir
, path /<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
Ссылка для документации модуля.
Этот раздел может использовать немного больше любви. Если вы активно используете эту роль для управления своим кластером PVE Ceph, пожалуйста, не стесняйтесь более тщательно уклеить этот раздел и откройте запрос на притяжение! Смотрите выпуск № 68.
Управление PVE CEPH с этой ролью экспериментально. В то время как пользователи успешно использовали эту роль для развертывания PVE CEPH, она не полностью протестирована в CI (из -за отсутствия полезных блочных устройств для использования в качестве OSDS в Travis CI). Пожалуйста, разверните тестовую среду с вашей конфигурацией сначала перед Prod и сообщите о любых проблемах, если вы столкнетесь с какими -либо.
Эта роль может настроить систему хранения 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 with everything on the same device
- device: /dev/sdc
# OSD with block.db/WAL on another device
- device: /dev/sdd
block.db: /dev/sdb1
# encrypted OSD with everything on the same device
- device: /dev/sdc
encrypted: true
# encrypted OSD with block.db/WAL on another device
- device: /dev/sdd
block.db: /dev/sdb1
encrypted: true
# Crush rules for different storage classes
# By default 'type' is set to host, you can find valid types at
# (https://docs.ceph.com/en/latest/rados/operations/crush-map/)
# listed under 'TYPES AND BUCKETS'
pve_ceph_crush_rules:
- name: replicated_rule
type: osd # This is an example of how you can override a pre-existing rule
- name: ssd
class: ssd
type: osd
min-size: 2
max-size: 8
- name: hdd
class: hdd
type: host
# 2 Ceph pools for VM disks which will also be defined as Proxmox storages
# Using different CRUSH rules
pve_ceph_pools:
- name: ssd
pgs: 128
rule: ssd
application: rbd
storage: true
# This Ceph pool uses custom size/replication values
- name: hdd
pgs: 32
rule: hdd
application: rbd
storage: true
size: 2
min-size: 1
# This Ceph pool uses custom autoscale mode : "off" | "on" | "warn"> (default = "warn")
- name: vm-storage
pgs: 128
rule: replicated_rule
application: rbd
autoscale_mode: "on"
storage: true
pve_ceph_fs:
# A CephFS filesystem not defined as a Proxmox storage
- name: backup
pgs: 64
rule: hdd
storage: false
mountpoint: /srv/proxmox/backup
pve_ceph_network
по умолчанию использует фильтр ansible.utils.ipaddr
, который требует, чтобы библиотека netaddr
была установлена и использована вашим Ansible Controller.
pve_ceph_nodes
По умолчанию использует pve_group
, этот параметр позволяет указать, на какие узлы устанавливают CEPH (например, если вы не хотите устанавливать CEPH на все ваши узлы).
pve_ceph_osds
по умолчанию создает незашифрованные объемы CEPH. Для использования зашифрованных объемов, encrypted
параметр должен быть установлен на диск на true
.
Эта роль может быть настроена, чтобы позволить передаче устройства PCI от хоста Proxmox на виртуальные машины. Эта функция не включена по умолчанию, поскольку не все материнские платы и процессоры поддерживают эту функцию. Чтобы включить пропуск, процессор Devices должен поддерживать виртуализацию оборудования (VT-D для систем на основе Intel и AMD-V для систем на основе AMD). Обратитесь к руководствам всех компонентов, чтобы определить, поддерживается ли эта функция или нет. Конвенции именования воли различаются, но обычно называют iommu, VT-D или AMD-V.
Включив эту функцию, специальные устройства (такие как GPU или USB -устройства) могут передаваться в виртуальные машины. Наряду с выделенными устройствами, различные интегрированные устройства, такие как Intel или интегрированные графические процессоры AMD, также могут передаваться в виртуальные машины.
Некоторые устройства могут воспользоваться преимуществами опосредованного использования. Опосредованные устройства могут быть переданы в несколько виртуальных машин для обмена ресурсами, при этом оставаясь полезными для хост -системы. Разделение устройств не всегда поддерживается и должно быть подтверждено до того, как будет включено предотвратить ошибки. Обратитесь к руководству устройства, которое вы хотите пропустить, чтобы определить, способно ли устройство к опосредованному использованию (в настоящее время эта роль поддерживает только GVT-G; SR-IOV в настоящее время не поддерживается и должно быть включено вручную после завершения роли).
Ниже приведен пример конфигурации, которая позволяет PCIe PassThrough:
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 PassThrough. Без этого включено все другие поля, связанные с PCIe, будут неиспользованы.
pve_iommu_passthrough_mode
Включение режима прохождения IOMMU может повысить производительность устройства. Включая эту функцию, она позволяет VMS обходить перевод DMA по умолчанию, который обычно выполняется гипер-висором. Вместо этого виртуальные машины проходят запросы DMA напрямую на оборудование iOmmu.
pve_iommu_unsafe_interrupts
должен быть включен, чтобы разрешить PCI PassThrough, если ваша система не поддерживает переигрывание прерываний. Вы можете найти проверку, поддерживает ли устройство перенастроение прерывания, используя dmesg | grep 'remapping'
. Если вы видите одну из следующих строк:
Затем поддерживается переработка системы, и вам не нужно включать небезопасные прерывания. Имейте в виду, что, позволяя этому значению, ваша система может стать нестабильной.
pve_mediated_devices_enabled
включает поддержку GVT-G для интегрированных устройств, таких как Intel IGPU. Не все устройства поддерживают GVT-G, поэтому рекомендуется заранее проверить с вашим конкретным устройством, чтобы убедиться, что оно разрешено.
pve_pcie_ovmf_enabled
Включает GPU OVMF PCI PassThrough. При использовании OVMF вы должны выбрать «OVMF» в качестве опции BIOS для VM вместо «Seabios» в Proxmox. Этот параметр будет пытаться отказаться от устройств из арбитража VGA, если это возможно.
pve_pci_device_ids
- это список идентификаторов устройства и поставщиков, который желает передаваться в виртуальные машины от хоста. См. Раздел «Passtrough» на вики Proxmox, чтобы найти ваше конкретное устройство и идентификаторы поставщика. При настройке этого значения необходимо указать «ID» для каждого нового элемента в массиве.
pve_vfio_blacklist_drivers
- это список драйверов, которые должны быть исключены/в черном списке с хоста. Это требуется при прохождении через устройство PCI, чтобы не допустить использования устройства, прежде чем его можно назначить на виртуальную машину. При настройке этого значения необходимо указать «имя» для каждого нового элемента в массиве.
pve_pcie_ignore_msrs
предотвращает некоторые приложения Windows, такие как GeForce Experience, Passmark Performance Test и Sisoftware Sandra от сбоя виртуальной машины. Это значение требуется только при передаче устройств PCI в системы на основе Windows.
pve_pcie_report_msrs
можно использовать для включения или отключения журнальных сообщений предупреждений MSRS. Если вы видите много предупреждающих сообщений в вашем журнале «DMESG», это значение можно использовать для замораживания предупреждений MSRS.
Вы можете настроить метрические серверы в ProxMox VE, используя переменную роли pve_metric_servers
. Ниже приведен пример конфигурации для различных типов метрических серверов:
pve_metric_servers :
- id : influxdb1
port : 8086
server : influxdb.example.com
type : influxdb
protocol : http
organization : myorg
bucket : mybucket
token : mytoken
timeout : 30
max_body_size : 25000000
verify_certificate : true
- id : graphite1
port : 2003
server : graphite.example.com
type : graphite
protocol : tcp
path : mygraphitepath
mtu : 1500
id
: (требуется) Уникальный идентификатор для метрического сервера.port
: (необязательно) Порт метрического сервера. По умолчанию 8089
.server
: (требуется) Имя DNS или IP -адрес метрического сервера.type
: (необязательно) Тип метрического сервера. Возможные значения: influxdb
, graphite
. По умолчанию IS influxdb
.protocol
: (необязательный) протокол, используемый для отправки метрик. Возможные значения: udp
, tcp
, http
, https
. По умолчанию udp
.disable
: (необязательно) Отключить метрический сервер. По умолчанию false
.organization
: (необязательно) название организации. Доступно только для InfluxDB с API HTTP V2.bucket
: (необязательно) Имя ведра для Influxdb. Полезно только с API HTTP V2 или совместимым.token
: (необязательно) Токен доступа InfluxDB. Требуется только при использовании API HTTP V2.path
: (необязательно) Графитный корневой путь. Доступно только для графита.api_path_prefix
: (Необязательно) Префикс пути API вставлен между <host>:<port>/
и /api2/
. Полезно, если служба InfluxDB работает за обратным прокси. Доступно только для InfluxDB с API HTTP V2.timeout
: (необязательно) тайм -аут за секунды. Доступно только для InfluxDB с API HTTP V2 или графитом TCP.max_body_size
: (необязательно) максимальный размер тела в байтах. Доступно только для InfluxDB с API HTTP V2. По умолчанию 25000000
.mtu
: (необязательно) MTU для метрической передачи UDP.verify_certificate
: (необязательно) Проверьте сертификат SSL. Доступно только для InfluxDB с HTTPS. Proxmox 8.2 представляет Linux 6.8, что может вызвать проблемы в некоторых развертываниях. Чтобы обойти это, вы можете прикрепить версию ядра, используемую к 6.5, добавив следующую переменную роль:
pve_default_kernel_version : 1.0.1
Это создает PIN-код proxmox-default-kernel
, который является методом, предложенным PVE. Позже это может быть удалено путем освобождения этой переменной роли.
Добавьте этот раздел в свой ansible.cfg
.
[ssh_connection]
ssh_args = -o ServerAliveInterval=20
Справочный вопрос
При разработке новых функций или исправления чего -либо в этой роли вы можете проверить свои изменения, используя Vagrant (в настоящее время поддерживается только Libvirt). Playbook можно найти в tests/vagrant
(поэтому обязательно измените переменные группы по мере необходимости). Обязательно протестируйте любые изменения во всех поддерживаемых версиях Debian (обновите Vagrantfile на местном уровне, чтобы использовать debian/bookworm64
, debian/bullseye64
или debian/buster64
), прежде чем отправить PR.
Вы также можете указать прокси-прокси-кэширующий кэширование (например, apt-cacher-ng
, и он должен работать на порту 3142) с переменной среды APT_CACHE_HOST
чтобы ускорить загрузки пакетов, если у вас есть локальная работа в вашей среде. В бродягах для бродяги будет обнаружено, доступен ли прокси -сервер кэширования, и использовать его только в том случае, если он доступен из вашей сети, так что вы можете просто навсегда установить эту переменную в среде разработки, если вы предпочитаете.
Например, вы можете запустить следующее, чтобы показать условный/легкий для чтения вывода, использовать кэширующий прокси и сохранить виртуальные машины, если вы столкнетесь с ошибкой (чтобы вы могли устранение его и/или запустить vagrant provision
после исправления)::
APT_CACHE_HOST=10.71.71.10 ANSIBLE_STDOUT_CALLBACK=debug vagrant up --no-destroy-on-error
Мусей Уллах (@lae, [email protected]) - Главный разработчик
Fabien Bracchere (@fbrachere) - Поддержка конфигурации хранения
Гауденц Стейнлин (@gaundez) - поддержка CEPH и т. Д.
Ричард Скотт (@zenntrix) - поддержка CEPH, поддержка PVE 7.X и т. Д.
Торальф Рикерт -Вендт (@Trickert76) - PVE 6.x Поддержка и т. Д.
Engin Dumlu (@roadrunner)
Jonas Meurer (@mejo-)
Ondrej flidr (@snipercze)
niko2 (@niko2)
Christian Aublet (@caublet)
Гилла Пьетри (@Gilou)
Майкл Холасек (@mholasek)
Александр Петерманн (@lexxxel) - поддержка PVE 8.x и т. Д.
Bruno Travouillon (@btravouillon) - UX Улучшения
Tobias Negd (@wu3rstle) - поддержка CEPH
Pendagtp (@pendagtp) - поддержка CEPH
Джон Марион (@jmariondev)
Aperkede (@foerkede) - поддержка хранения ZFS
Guiffo Joel (@futuriste) - Поддержка конфигурации пула
Адам Дело (@OL3D) - PCIe PassThrough поддержка Antoine Thys (@thystips) - Метрические серверы
Полный список участников