lae.proxmox
lae.proxmox
在 Debian 服务器上安装和配置 Proxmox 虚拟环境(版本 6.x/7.x/8.x)。
此角色允许您在 Debian Buster(10)和 Bullseye(11)上部署和管理单节点 PVE 安装和 PVE 集群(3 个或更多节点)。您可以通过此角色配置以下内容:
- PVE RBAC 定义(角色、组、用户和访问控制列表)
- PVE 存储定义
datacenter.cfg
- Proxmox Web GUI 的 HTTPS 证书(自带)
- PVE 仓库选择(例如
pve-no-subscription
或pve-enterprise
) - 适用的 pve-ha-manager 配置的看门狗模块(IPMI 和 NMI)
- ZFS 模块设置和 ZED 通知电子邮件
启用集群时,此角色可以(或允许您)执行以下操作:
- 确保所有主机可以通过 SSH 以 root 身份相互连接
- 初始化新的 PVE 集群(或可能采用现有集群)
- 创建或添加新节点到 PVE 集群
- 在 PVE 集群上设置 Ceph
- 创建和管理高可用性组
支持/贡献
如果您需要支持或想要贡献此角色,但需要指导,请随时加入此 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
)。您可以在运行命令之前设置这些变量或直接替换它们。请注意,逗号很重要,因为期望是一个列表(否则它会尝试查找一个包含主机列表的文件)。
完成后,您应该能够通过 https://$SSH_HOST_FQDN:8006
访问您的 Proxmox VE 实例。
部署完整功能的 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
首先您可能会注意到我们有一堆 .key
和 .pem
文件。这些是私钥和 SSL 证书,此角色将用于配置所有节点的 Proxmox Web 界面。不过,如果您想继续使用 Proxmox 内部设置的 CA 签名证书,这些并不是必要的。您通常可以使用 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 角色来配置 NTP,因此我们使用 Jeff Geerling 的角色来做到这一点。如果您已经配置了 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 管理器使用它。如果您不想配置它,请将其留空。
pve_ssl_private_key
和 pve_ssl_certificate
指向用于 pvecluster 的 SSL 证书。在这里,使用了文件查找来读取剧本中文件的内容,例如 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
查找,但基本上我们正在为每台机器(例如 lab-node01.local)进行 A 记录查找,配置的第一个接口(并将其配置为我们将用于虚拟机接口的桥接),再为我们可能会用于 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
是某些涉及聚类的任务的要求。如果您使用 dig
查找则只需要 dnspython
,如果您跳过了网络配置,您可能不需要它。我们在这里对 ansible-galaxy
使用 --force
以便更新到最新版本,如果已经安装的话。
现在运行剧本:
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 看门狗。
- 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-repository 配置 - 如有需要,改为企业版(尽管可能需要进一步配置)
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 直通。
pve_iommu_passthrough_mode: false # 设置为 true 以允许虚拟机绕过 DMA 转换。这可能会提高 IOMMU 直通的性能。
pve_iommu_unsafe_interrupts: false # 如果您的系统不支持中断重映射,请设置为 true。
pve_mediated_devices_enabled: false # 如果您的设备支持 gtv-g 并希望启用拆分功能,请设置为 true。
pve_pcie_ovmf_enabled: false # 设置为 true 以启用 GPU OVMF PCI 直通。
pve_pci_device_ids: [] # PCI 设备 ID 的列表(请参阅 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 以防止 dmesg 系统记录 msrs 崩溃报告。
pve_watchdog: none # 如果您想配置硬件看门狗,则将其设置为 "ipmi"。Proxmox 默认使用软件看门狗(nmi_watchdog)。
pve_watchdog_ipmi_action: power_cycle # 可以是 "reset"、"power_cycle" 和 "power_off" 中的一个。
pve_watchdog_ipmi_timeout: 10 # 看门狗等待的秒数
pve_zfs_enabled: no # 指定是否安装和配置 ZFS 包
# pve_zfs_options: "" # 开机/执行 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-repository 配置。将自动设置为 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 # 如果不想配置 hosts 文件(使用 VPN 且 hosts 文件已配置),请设置为 no
以下变量用于向 corosync 提供网络信息。这些被称为 ring0_addr/ring1_addr 或 link0_addr/link1_addr,具体取决于 PVE 版本。它们应该是 IPv4 或 IPv6 地址。您还可以配置这些接口的优先级来提示 corosync 哪个接口应处理集群流量(较低的数字表示更高的优先级)。有关更多信息,请参阅 PVE 文档中的 Cluster Manager 章节。
# 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: [] # 要在 PVE 中创建的 HA 组列表。
此示例为分配给 lab-node01 主机的资源创建了一个组 "lab_node01":
pve_cluster_ha_groups:
- name: lab_node01
comment: "我的 HA 组"
nodes: "lab-node01"
nofailback: 0
restricted: 0
在 datacenter.cfg 文件中支持的所有配置选项在 Proxmox 手册 datacenter.cfg 部分 中有详细说明。
为了使通过 PVE Web UI 进行网络接口的实时重新加载正常工作,您需要安装 ifupdown2
软件包。请注意,这将移除 ifupdown
。您可以使用 pve_extra_packages
角色变量来指定此内容。
您可以在 domains.cfg
配置文件中将域/领域配置为身份验证源。如果此文件不存在,则只能使用 Linux PAM
和 Proxmox VE 身份验证服务器
域。支持的类型为 pam
、pve
、ad
和 ldap
。可以使用 sync: true
自动同步 LDAP 基于的域中的用户和组(LDAP 和 Microsoft Active Directory)。应该将一个域属性标记为默认值: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: yourdomain.com
server1: dc01.yourdomain.com
default: 1
secure: 1
server2: dc02.yourdomain.com
- name: ldap
type: ldap
sync: true
attributes:
comment: LDAP 身份验证
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
角色,如示例剧本所示。
启用聚类时,此角色使用 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: "临时用户设置为在 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 # 可选
- 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
中添加一条条目。以下示例将在 ZFS 池上添加一个 iso
存储:
pve_zfs_create_volumes:
- rpool/iso
pve_storages:
- name: iso
type: dir
path: /rpool/iso
content: [ "iso" ]
有关模块文档,请参考 library/proxmox_storage.py
链接。
Ceph 配置
这个部分需要更全面的描述。如果您正在积极使用此角色管理您的 PVE Ceph 集群,请随时扩展此部分并提交拉取请求!请参阅问题 #68。
使用此角色管理 PVE Ceph 是实验性的。 尽管用户已成功使用此角色来部署 PVE Ceph,但在 CI 中未完全测试(因为缺乏可用的块设备作为 OSD 在 Travis CI 中)。在生产之前,请先在测试环境中部署您的配置,如果遇到任何问题,请报告。
此角色可以在您的 Proxmox 主机上配置 Ceph 存储系统。以下定义显示了一些可能的配置。
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/)
# 中找到有效类型,列在 'TYPES AND BUCKETS' 下
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:
# 未作为 Proxmox 存储定义的 CephFS 文件系统
- name: backup
pgs: 64
rule: hdd
storage: false
mountpoint: /srv/proxmox/backup
pve_ceph_network
默认使用 ansible.utils.ipaddr
过滤器,这要求安装并能够在您的 Ansible 控制器上使用 netaddr
库。
pve_ceph_nodes
默认使用 pve_group
,此参数允许指定在何处安装 Ceph(例如,如果您不想在所有节点上安装 Ceph)。
pve_ceph_osds
默认创建未加密的 Ceph 卷。要使用加密卷,必须为每个驱动器设置参数 encrypted
为 true
。
PCIe 直通
此角色可以配置为允许从 Proxmox 主机到虚拟机的 PCI 设备直通。这一功能默认不启用,因为并非所有母板和 CPU 都支持该功能。要启用直通,设备 CPU 必须支持硬件虚拟化(Intel 基于系统的 VT-d 和 AMD 基于系统的 AMD-V)。有关是否支持此功能,请参考所有组件的手册。命名约定会有所不同,但通常称为 IOMMU、VT-d 或 AMD-V。
启用这一功能后,可以将专用设备(例如 GPU 或 USB 设备)传递给虚拟机。除了专用设备,某些集成设备(例如 Intel 或 AMD 的集成 GPU)也可以被传递给虚拟机。
某些设备能够利用中介用法。中介设备可以被多个虚拟机传递以共享资源,同时仍能被主机系统使用。虽然支持设备的拆分,但应先进行验证,确保不会出现错误。有关您希望传递的设备是否具备中介用法能力,请参考设备的手册(当前此角色仅支持 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"(对于旧 CPU,'x2apic' 可能会有所不同,但仍应有效)
那么系统中断重映射得到了支持,您无需启用不安全的中断。请注意,通过启用该值,您的系统可能不稳定。
pve_mediated_devices_enabled
为集成设备(例如 Intel iGPU)启用 GVT-g 支持。并非所有设备都支持 GVT-g,因此建议您在确认之前先检查,以确保它是被允许的。
pve_pcie_ovmf_enabled
启用 GPU OVMF PCI 直通。当使用 OVMF 时,您应选择 "OVMF" 作为虚拟机的 BIOS 选项,而不是 "SeaBIOS"。该设置将试图选择从 VGA 仲裁中排除设备(如可能的话)。
pve_pci_device_ids
是希望从主机传递到虚拟机的设备和厂商 ID 的列表。请参阅 Proxmox WIKI 中的 "GPU 直通" 部分,以查找您的特定设备和厂商 ID。当设置此值时,必须为数组中的每个新元素指定一个 '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
中找到(因此,请确保根据需要修改组变量)。在提交 PR 之前,请确保在 Debian 10 和 11 上测试任何更改(在本地更新 Vagrantfile 使用 debian/buster64
)。
您还可以在您的开发环境中使用 APT_CACHE_HOST
环境变量指定一个 apt 缓存代理(例如 apt-cacher-ng
,并且必须运行在 3142 端口)以加快包下载。vagrant 剧本会检查缓存代理是否可用,仅在从您的网络可访问时使用它,因此,如果您希望,在开发环境中可以永久设置该变量。
例如,您可以运行以下命令以显示详细/易读的输出,使用缓存代理,如果遇到错误,则保持 VM 运行(以便进行故障排除和/或在修复后运行 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) - 用户体验改进
Tobias Negd (@wu3rstle) - Ceph 支持
PendaGTP (@PendaGTP) - Ceph 支持
John Marion (@jmariondev)
foerkede (@foerkede) - ZFS 存储支持
Guiffo Joel (@futuriste) - 池配置支持
Adam Delo (@ol3d) - PCIe 直通支持