lae.proxmox
以下のテキストを日本語に翻訳します。
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_groups
、pve_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
ルックアップを使用している場合には必要です。ここで--force
をansible-galaxy
に渡して、すでにインストールされている場合はロールを最新バージョンに更新します。
さて、プレイブックを実行しましょう:
ansible-playbook -i inventory site.yml -e '{"pve_reboot_on_kernel_update": true}'
-e '{"pve_reboot_on_kernel_update": true}'
は主に初めてのProxmoxクラスタ設定時に実行されるべきですが、これにはサーバーを再起動してPVEカーネルが立ち上がります。その後の実行ではこれを省略する必要があります。なぜなら、クラスターが動作し始めた後、サーバーを順次再起動するためです。
特定のユーザーを指定する場合は、-u root
(root
を置き換え)を使用し、パスワードが必要な場合は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 PAM
とProxmox VE認証サーバー
の領域のみが使用可能です。サポートされているタイプはpam
、pve
、ad
、および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内のストレージを管理することができます(単一サーバーの展開やクラスターの展開の両方で)。現時点では、サポートされている型は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
詳細情報については、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