lae.proxmox

以下のテキストを日本語に翻訳します。


Galaxy Role

lae.proxmox

DebianサーバーにProxmox Virtual Environment 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構成を持つWatchdogモジュール(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

6つのディレクトリ、12のファイル

最初に、いくつかの .key.pem ファイルがあることに気づくかもしれません。これは、このロールがすべてのノードのProxmox用ウェブインターフェースを設定するために使用するプライベートキーとSSL証明書です。これらは必ずしも必要ではありませんが、Proxmoxが内部で設定する署名された証明書を引き続き使用したい場合は使用できます。プライベートキーを暗号化するために、通常Ansible Vaultを使用します。例えば:

ansible-vault encrypt files/pve01/*.key

これにより、プレイブックを実行する際にVaultパスワードを渡す必要があります。

まず、クラスターのホストを指定しましょう。私たちのinventoryファイルは次のようになります:

[pve01]
lab-node01.local
lab-node02.local
lab-node03.local

複数のクラスターを持つことができるので、各クラスターのために1つのグループを持つのは良い考えです。次に、roles/requirements.ymlに私たちのロール要件を指定します:

---
- src: geerlingguy.ntp
- src: lae.proxmox

NTPを設定するためのロールが必要なので、Jeff Geerlingのロールを使用します。すでにNTPを設定しているか、別の方法を使用している場合は、それは必要ありません。

さて、いくつかのグループ変数を設定しましょう。まず、NTP関連の変数を設定するためにgroup_vars/allを作成します:

---
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クラスタ名は、他の指定がない限り、グループ名に設定されます。このままではデフォルトでproxmoxとなります。

pve_watchdogはここでIPMI watchdogサポートを有効にし、PVEのHAマネージャーをそれを使うように設定します。設定したくない場合はこれを無効にしてください。

pve_ssl_private_keyおよびpve_ssl_certificateはpveclusterのSSL証明書を指します。ここでは、ファイルのコンテンツを読み取るためにファイルルックアップが使用されます。もしファイルの代わりにホスト変数を使用したい場合は、それを選んでもかまいません。

pve_cluster_enabledは、ロールがすべてのクラスター管理タスクを実行することを可能にします。これには、存在しない場合はクラスターの作成や、既存のクラスターへのノードの追加が含まれます。名前が異なる既存のクラスターにすでにいるノードと混ぜているかどうかを確認するチェックがあります。

pve_groupspve_users、およびpve_aclsは、いくつかのローカルUNIXユーザー(すでに存在している必要があります)にPVEへのアクセスを許可し、opsグループにAdministrator役割を付与します。詳細については「ユーザーとACL管理」セクションを参照してください。

pve_storagesは異なる種類のストレージを作成して設定することを許可します。バックエンドはPVEによってサポートされている必要があります。詳細については「ストレージ管理」セクションを参照してください。

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を使用してネットワーク管理を行う場合のみ必要です。これを行う前に、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)、最初のインターフェース(VMインターフェースで使用するブリッジとして設定)、それからCeph用の「クラスター」ネットワーク用に少し修正されたルックアップを行っています("lab-node01-clusternet.local")。もちろん、あなたのは全く異なる形になるかもしれません。特に、ボンディングを使用している場合や、管理/コロシンク、ストレージ、VMトラフィックのための3つの異なるネットワークを使用している場合には特にそうです。

最後にプレイブックを書きましょう。site.ymlは次のようになります:

---
- hosts: all
  become: True
  roles:
    - geerlingguy.ntp

# 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ロールを実行し(非Proxmoxマシンを追加したいかもしれません)、独自のクラスター ネットワークとブリッジ レイアウトで pve01 のネットワークを設定し、変更を有効にするために再起動し、次にこのProxmoxロールをホストに対して実行してクラスターを構成します。

この時点で、プレイブックは準備が整っており、実行できます。

ロールと依存関係がインストールされていることを確認してください:

ansible-galaxy install -r roles/requirements.yml --force
pip install jmespath dnspython

jmespathはクラスタリングに関わるいくつかのタスクに必要です。dnspythonは、ネットワーク設定をスキップする場合にはおそらく使用しませんが、digルックアップを使用している場合には必要です。ここで--forceansible-galaxyに渡して、すでにインストールされている場合はロールを最新バージョンに更新します。

さて、プレイブックを実行しましょう:

ansible-playbook -i inventory site.yml -e '{"pve_reboot_on_kernel_update": true}'

-e '{"pve_reboot_on_kernel_update": true}'は主に初めてのProxmoxクラスタ設定時に実行されるべきですが、これにはサーバーを再起動してPVEカーネルが立ち上がります。その後の実行ではこれを省略する必要があります。なぜなら、クラスターが動作し始めた後、サーバーを順次再起動するためです。

特定のユーザーを指定する場合は、-u rootrootを置き換え)を使用し、パスワードが必要な場合はSSHパスワードのために-k、またはsudoパスワードのために-Kを使用します。例えば:

ansible-playbook -i inventory site.yml -K -u admin1

これにより、sudoパスワードを尋ね、その後admin1ユーザーにログイン(公開鍵認証を使用 - pw用に-kを追加)してプレイブックを実行します。

以上です!完全に展開されたProxmoxクラスタができました。その後、Cephストレージの作成を検討するかもしれませんが(詳細はCephを参照)、他のタスクもあるかもしれませんが、難しい部分は主に完了です。

例のプレイブック

これは、pve01 グループ内のホストを1つのクラスターとして設定し、カーネルが更新された場合はマシンを再起動します(インストール中のみこのフラグを設定することをお勧めします - 稼働中の再起動はメンテナンス期間にシリアルで行われるべきです)。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

ロール変数

[variable]: [default] #[description/purpose]
pve_group: proxmox # クラスタとしてまとめるProxmoxホストを含むホストグループ
pve_repository_line: "deb http://download.proxmox.com/debian/pve bullseye pve-no-subscription" # aptリポジトリ設定 - 必要に応じてエンタープライズに変更してください(ただし、さらに設定が必要な場合があります)
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 # PCIeパススルーを有効にするには真に設定します。
pve_iommu_passthrough_mode: false # VMがDMAトランスレーションをバイパスできるようにするには真に設定します。これによりIOMMUパススルーのパフォーマンスが向上する可能性があります。
pve_iommu_unsafe_interrupts: false # システムが割り込みリマッピングをサポートしていない場合、これを真に設定します。
pve_mediated_devices_enabled: false # デバイスがgtv-gをサポートしている場合、分割機能を有効にするために真に設定します。
pve_pcie_ovmf_enabled: false # 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 # Windowsマシンにパススルーする際にVMクラッシュを防ぐためにこれを真に設定します。
pve_pcie_report_msrs: true # 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: "" # zfsモジュールをboot/modprobe時に渡す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 # 本番でこれを真に設定すると、実行ログ内でストレージの資格情報が漏れるのを防ぎます(将来的には他のタスクで使用される可能性があります)。

このロールでクラスタリングを有効にするには、次の変数を適切に設定します:

pve_cluster_enabled: no # ホストをクラスタとしてまとめるためにこれをyesに設定します
pve_cluster_clustername: "{{ pve_group }}" # PVEクラスターの名前として設定する必要があります
pve_manage_hosts_enabled : yes # hostsファイルを設定しないためにこれをnoに設定します(vpnを使用している場合、hostsファイルはすでに設定されています)

次の変数は、corosyncにネットワーク情報を提供するために使用されます。これらは、PVEバージョンに応じてring0_addr/ring1_addr または link0_addr/link1_addrと呼ばれます。それらはIPv4またはIPv6アドレスである必要があります。また、PVEドキュメント内のCluster Manager章を参照し、クラスタトラフィックを処理するインターフェースの優先順位を指定することもできます(数字が小さいほど優先されます)。より詳しい情報は、pvecm-network-priorityを参照してください。

# 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マネージャーグループを設定できます:

pve_cluster_ha_groups: [] # PVEで作成するHAグループのリスト。

この例では、lab-node01ホストに割り当てられたリソース用に"group lab_node01"を作成します:

pve_cluster_ha_groups:
  - name: lab_node01
    comment: "My HA group"
    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認証サーバーの領域のみが使用可能です。サポートされているタイプはpampvead、およびldapです。LDAPベースの領域(LDAPおよびMicrosoft Active Directory)のためにユーザーとグループを自動的に同期させることができます(sync: true)。1つの領域には、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をインストールしませんので、例えばgeerlingguy.ntpロールを使用して自分で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 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内のストレージを管理することができます(単一サーバーの展開やクラスターの展開の両方で)。現時点では、サポートされている型は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 # 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

詳細情報については、https://pve.proxmox.com/pve-docs/api-viewer/index.html を参照してください。

現在、zfspoolタイプはimagesおよびrootdirコンテンツにのみ使用できます。他のコンテンツタイプをZFSボリュームに保存したい場合は、dirタイプを指定し、path/<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 linkを参照してモジュールのドキュメントを確認してください。

Ceph設定

このセクションはもう少し充実させる必要があります。このロールを使用してPVE Cephクラスタを管理している場合は、このセクションを詳細に追加し、プルリクエストを開いてください! 参照: issue #68

このロールによるPVE Cephの管理は実験的です。 ユーザーがこのロールを使用してPVE Cephを展開することに成功していますが、CIで完全にテストされていません(使用可能なブロックデバイスがないため、Travis CIでOSDとして使用)。本番環境の前にまずテスト環境で構成をデプロイし、問題が発生した場合は報告してください。

このロールは、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:
  # 同じデバイス上のすべて
  - device: /dev/sdc
  # 別のデバイス上の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
# VMディスク用に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:
# Cephストレージとして定義されないCephFSファイルシステム
  - 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に設定する必要があります。

PCIeパススルー

このロールを構成して、ProxmoxホストからVMへのPCIデバイスのパススルーを許可できます。この機能はデフォルトでは無効になっています。すべてのマザーボードおよびCPUがこの機能をサポートしていないためです。パススルーを有効にするには、デバイスのCPUがハードウェア仮想化をサポートする必要があります(IntelベースのシステムではVT-d、AMDベースのシステムではAMD-V)。すべてのコンポーネントのマニュアルを参照して、この機能がサポートされているかどうかを確認してください。命名規則は異なる場合がありますが、通常IOMMU、VT-d、またはAMD-Vと呼ばれます。

この機能を有効にすると、専用デバイス(GPUやUSBデバイスなど)をVMに渡すことができます。専用デバイスとともに、IntelまたはAMDの統合GPUなどのさまざまな統合デバイスもVMに渡すことができます。

一部のデバイスは、仲介利用の恩恵を受けることができます。仲介デバイスは、リソースを共有するために複数のVMに渡すことができ、ホストシステムでも使用可能です。ただし、デバイスの分割が常にサポートされているわけではないため、有効にする前に確認する必要があります。このロールは現在、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パススルーモードを有効にすると、デバイスのパフォーマンスを向上させる可能性があります。この機能を有効にすると、VMが通常ハイパーバイザーが実行するDMA翻訳をバイパスできます。その代わりに、VMはDMAリクエストをハードウェアIOMMUに直接渡します。

pve_iommu_unsafe_interruptsは、システムが割り込みリマッピングをサポートしていない場合にPCIパススルーを許可するためにエンジンを有効にする必要があります。デバイスが割り込みリマッピングをサポートしているかどうかを確認するには、dmesg | grep 'remapping'を使用します。次の行のいずれかが表示される場合:

  • "AMD-Vi: Interrupt remapping enabled"
  • "DMAR-IR: Enabled IRQ remapping in x2apic mode"('x2apic'は古いCPUでは異なる可能性がりますが、正常に動作するはずです)

これらの文は、システムが割り込みリマッピングをサポートしていることを示しており、unsafe interruptsを有効にする必要はありません。この値を有効にすると、システムは不安定になる可能性があることに注意してください。

pve_mediated_devices_enabledは、Intel iGPUなどの統合デバイスに対するGVT-gサポートを有効にします。すべてのデバイスがGVT-gをサポートしているわけではないため、事前に特定のデバイスを確認することをお勧めします。

pve_pcie_ovmf_enabledは、GPU OVMF PCIパススルーを有効にします。OVMFを使用する際は、Proxmox内でVMのBIOS選択を 'SeaBIOS' の代わりに 'OVMF' にする必要があります。この設定は、可能であればVGA仲裁からデバイスを除外するようにします。

pve_pci_device_idsは、ホストからVMにパススルーされることが望ましいデバイスおよびベンダーIDのリストです。具体的なデバイスとベンダーIDを見つけるには、Proxmox WIKIの「GPU Passthrough」セクションを参照してください。この値を設定する際には、配列内の各新しい要素に 'id' を指定する必要があります。

pve_vfio_blacklist_driversは、ホストから除外/ブラックリストに入れるドライバのリストです。これは、VMに割り当てられる前にホストがデバイスを使用できないようにするために必要です。この値を設定する際には、配列内の各新しい要素に 'name' を指定する必要があります。

pve_pcie_ignore_msrsは、GeForce ExperienceやPassmark Performance Test、SiSoftware SandraなどのWindowsアプリケーションがVMをクラッシュさせるのを防ぎます。この値は、PCIデバイスをWindowsベースのシステムにパススルーする場合にのみ必要です。

pve_pcie_report_msrsは、msrs警告メッセージの記録を有効または無効にするために使用されます。dmesgシステムログに多くの警告メッセージが表示された場合、この値を使用してmsrs警告を静かにすることができます。

開発者ノート

このロールで新しい機能を開発するか、何かを修正する場合は、Vagrant(現在はlibvirtのみサポート)を使用して変更をテストできます。プレイブックはtests/vagrantにあります(必要に応じてグループ変数を修正してください)。プルリクエストを送信する前に、Debian 10と11の両方で変更をテストしてください(ローカルでdebian/buster64を使用するようにVagrantfileを更新してください)。

また、ローカルで動作している場合には、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) - UX改善
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
所有者