lae.proxmox

Galaxy 角色

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-subscriptionpve-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_keypve_ssl_certificate 指向用于 pvecluster 的 SSL 证书。在这里,使用了文件查找来读取剧本中文件的内容,例如 files/pve01/lab-node01.key。如果您更愿意,也可以只是使用主机变量而不是文件。

pve_cluster_enabled 启用角色以执行所有集群管理任务。这包括在不存在时创建集群,或将节点添加到现有集群。有检查以确保您没有将已经存在不同名称的集群中节点混合在一起。

pve_groupspve_userspve_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.ymlpve_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 PAMProxmox VE 身份验证服务器 域。支持的类型为 pampveadldap。可以使用 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 中管理存储(无论是在单服务器部署还是集群部署中)。目前,唯一支持的类型是 dirrbdnfscephfslvmlvmthinzfspoolbtrfscifspbs。以下是一些示例。

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 类型只能用于 imagesrootdir 内容。 如果您希望在 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 卷。要使用加密卷,必须为每个驱动器设置参数 encryptedtrue

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 直通支持

完整贡献者列表

关于项目

Installs and configures Proxmox Virtual Environment 6.x/7.x on Debian servers.

安装
ansible-galaxy install lae.proxmox
许可证
mit
下载
128.8k
拥有者