يقوم بتثبيت وتكوين Proxmox Virtual Environment 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 (بسبب إعادة التشغيل في المقام الأول في منتصف التثبيت ، على الرغم من أنني قد أتعامل مع هذا بشكل مختلف إلى حد ما لحالة الاستخدام هذه لاحقًا).
انسخ كتاب playbook التالي إلى ملف مثل 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
الخاصة بك ، فقم بتمرير علامة -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
قد يتطلب منك ذلك بعد ذلك تمرير كلمة مرور 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 أو لديك طريقة مختلفة لتكوين NTP.
الآن ، دعنا نحدد بعض متغيرات المجموعة. أولاً ، دعنا نقوم بإنشاء group_vars/all
لإعداد المتغيرات المتعلقة بـ NTP:
---
ntp_manage_config: true
ntp_servers:
- lab-ntp01.local iburst
- lab-ntp02.local iburst
بالطبع ، استبدل خوادم NTP تلك التي تفضلها.
الآن للحصول على جسد Playbook الخاص بك ، متغيرات مجموعة 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's HA MANGARE لاستخدامه. استخدم 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
(صواب افتراضي) تعطيل أي تغييرات قد تقوم بها هذه الوحدة على تكوين خادم 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-Lusternet.local"). بالطبع ، قد تبدو لك مختلفة تمامًا ، خاصة إذا كنت تستخدم الترابط ، وثلاث شبكات مختلفة للإدارة/corosync ، وتخزين وحركة VM ، إلخ.
أخيرًا ، دعنا نكتب كتاب اللعب الخاص بنا. سيبدو 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
هنا بحيث يتم تحديث الأدوار إلى أحدث إصداراتها إذا تم تثبيتها بالفعل.
قم الآن بتشغيل Playbook:
ansible-playbook -i inventory site.yml -e '{"pve_reboot_on_kernel_update": true}'
يجب تشغيل -e '{"pve_reboot_on_kernel_update": true}'
بشكل أساسي في المرة الأولى التي تقوم فيها بإعداد مجموعة proxmox ، لأنه سيعيد تشغيل الخادم للتمهيد في kernel pve. يجب أن تترك التشغيل اللاحق هذا ، حيث تريد إعادة تشغيل الخوادم بشكل متتابع بعد تشغيل الكتلة.
لتحديد مستخدم معين ، استخدم -u root
(استبدال root
) ، وإذا كنت بحاجة إلى توفير كلمات مرور ، فاستخدم -k
لكلمة مرور SSH و/أو -K
لكلمة مرور SUDO. على سبيل المثال:
ansible-playbook -i inventory site.yml -K -u admin1
سيطلب هذا كلمة مرور sudo ، ثم قم بتسجيل الدخول إلى مستخدم admin1
(باستخدام Auth Bublic Key Auth - Add -k
لـ PW) وتشغيل Playbook.
هذا كل شيء! يجب أن يكون لديك الآن مجموعة 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 التي يجب أن تتعامل مع حركة الكتلة (تشير الأرقام الأدنى إلى أولوية أعلى). لمزيد من المعلومات ، ارجع إلى فصل مدير المجموعة في وثائق 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
. إذا لم يكن هذا الملف موجودًا ، فستتوفر عوالم خادم المصادقة Linux PAM
و Proxmox VE authentication server
فقط. الأنواع المدعومة هي 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
رابط لوثائق الوحدة النمطية.
بالنسبة لإدارة الأدوار و ACLs ، يتم استخدام وحدة مماثلة ، ولكن الفرق الرئيسي هو أن معظم المعلمات تقبل فقط القوائم (عرضة للتغيير):
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
ارجع إلى https://pve.proxmox.com/pve-docs/api- Viewer/index.html لمزيد من المعلومات.
حاليًا يمكن استخدام نوع zfspool
فقط images
ومحتويات rootdir
. إذا كنت ترغب في تخزين أنواع المحتوى الأخرى على وحدة تخزين ZFS ، فأنت بحاجة إلى تحديدها باستخدام type 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 Management مع هذا الدور تجريبي. على الرغم من أن المستخدمين قد استخدموا هذا الدور بنجاح لنشر 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.
يستخدم pve_ceph_nodes
افتراضيًا pve_group
، تسمح هذه المعلمة بتحديد العقد على CEPH (على سبيل المثال ، إذا كنت لا ترغب في تثبيت CEPH على جميع العقد الخاصة بك).
pve_ceph_osds
افتراضيًا يخلق أحجام CEPH غير المشفرة. لاستخدام المجلدات المشفرة ، يجب ضبط المعلمة encrypted
لكل محرك أقراص على true
.
يمكن تكوين هذا الدور للسماح بتمرير جهاز PCI من مضيف Proxmox إلى VMs. لا يتم تمكين هذه الميزة افتراضيًا نظرًا لأن جميع اللوحات الأم ووحدات المعالجة المركزية تدعم هذه الميزة. لتمكين النجاح ، يجب أن تدعم وحدة المعالجة المركزية للأجهزة المحاكاة الافتراضية للأجهزة (VT-D للأنظمة القائمة على Intel و AMD-V للأنظمة المستندة إلى AMD). ارجع إلى أدلة جميع المكونات لتحديد ما إذا كانت هذه الميزة مدعومة أم لا. تختلف اتفاقيات تسمية الإرادة ، ولكن عادة ما يشار إليها باسم IOMMU أو VT-D أو AMD-V.
من خلال تمكين هذه الميزة ، يمكن نقل الأجهزة المخصصة (مثل أجهزة GPU أو USB) إلى VMs. جنبا إلى جنب مع الأجهزة المخصصة ، يمكن أيضًا نقل الأجهزة المتكاملة المختلفة مثل Intel أو AMD المتكاملة ل GPU إلى VMs.
بعض الأجهزة قادرة على الاستفادة من الاستخدام بوساطة. يمكن نقل الأجهزة بوساطة إلى VMs متعددة لتبادل الموارد ، بينما لا تزال قابلة للاستخدام من قبل النظام المضيف. لا يتم دعم تقسيم الأجهزة دائمًا ويجب التحقق من صحته قبل تمكينه لمنع الأخطاء. ارجع إلى دليل الجهاز الذي تريد المرور فيه لتحديد ما إذا كان الجهاز قادرًا على الاستخدام بوساطة (حاليًا هذا الدور يدعم فقط 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 من أداء الجهاز. من خلال تمكين هذه الميزة ، فإنه يسمح لـ VMS بتجاوز ترجمة DMA الافتراضية التي عادة ما يتم تنفيذها بواسطة الفائقة المفرطة. بدلاً من ذلك ، تمر VMS تمرر DMA مباشرة إلى الجهاز iommu.
يجب تمكين pve_iommu_unsafe_interrupts
للسماح بتمرير PCI إذا لم يدعم نظامك إعادة عرض المقاطعة. يمكنك العثور على التحقق مما إذا كان الجهاز يدعم إعادة عرض المقاطعة باستخدام dmesg | grep 'remapping'
. إذا رأيت أحد الأسطر التالية:
ثم يتم دعم إعادة عرض المقاطعة في النظام ولا تحتاج إلى تمكين المقاطعات غير الآمنة. كن على دراية أنه من خلال تمكين هذه القيمة يمكن أن يصبح نظامك غير مستقر.
يتيح pve_mediated_devices_enabled
دعم GVT-G للأجهزة المتكاملة مثل Intel IGPU's. لا تدعم جميع الأجهزة GVT-G ، لذا يوصى بالتحقق من جهازك المحدد مسبقًا للتأكد من السماح به.
pve_pcie_ovmf_enabled
يمكّن GPU OVMF PCI. عند استخدام OVMF ، يجب عليك تحديد "OVMF" كخيار BIOS لـ VM بدلاً من "Seabios" داخل Proxmox. سيحاول هذا الإعداد إلغاء الاشتراك في الأجهزة من تحكيم VGA إن أمكن.
pve_pci_device_ids
هي قائمة من معرفات الجهاز ومعرفات البائع التي يُتمنى تمريرها إلى VMS من المضيف. راجع القسم "GPU Passhrough" على Wiki Proxmox للعثور على جهازك المحدد ومعرف البائع. عند تعيين هذه القيمة ، يجب تحديد "معرف" لكل عنصر جديد في الصفيف.
pve_vfio_blacklist_drivers
هي قائمة من السائقين المراد استبعادها/سوداء من المضيف. هذا مطلوب عند المرور عبر جهاز PCI لمنع المضيف من استخدام الجهاز قبل تعيينه إلى VM. عند تعيين هذه القيمة ، يجب تحديد "اسم" لكل عنصر جديد في الصفيف.
يمنع pve_pcie_ignore_msrs
بعض تطبيقات Windows مثل Geforce Experience و Passmark Performance و Sisoftware Sandra من تعطل VM. هذه القيمة مطلوبة فقط عند تمرير أجهزة 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
. الافتراضي هو influxdb
.protocol
: بروتوكول (اختياري) يستخدم لإرسال المقاييس. القيم المحتملة: udp
، tcp
، http
، https
. الافتراضي هو udp
.disable
: (اختياري) تعطيل الخادم المتري. الافتراضي false
.organization
: (اختياري) اسم المنظمة. متاح فقط لـ informuxdb مع HTTP V2 API.bucket
: (اختياري) اسم دلو لـ influxdb. مفيد فقط مع API HTTP V2 أو متوافق.token
المميز: (اختياري) رمز الوصول إلى informdb. مطلوب فقط عند استخدام HTTP V2 API.path
: (اختياري) مسار الجذر الجرافيت. متاح فقط للجرافيت.api_path_prefix
: (اختياري) بادئة مسار API تم إدخالها بين <host>:<port>/
و /api2/
. مفيد إذا كانت خدمة influxDB تعمل خلف وكيل عكسي. متاح فقط لـ informuxdb مع HTTP V2 API.timeout
: مهلة (اختيارية) في ثوان. متوفر فقط لـ informuxDB مع HTTP V2 API أو مقبس TCP الجرافيت.max_body_size
: (اختياري) الحد الأقصى لحجم الجسم بالبايت. متاح فقط لـ informuxdb مع HTTP V2 API. الافتراضي هو 25000000
.mtu
: (اختياري) MTU لنقل متري UDP.verify_certificate
: (اختياري) تحقق من شهادة SSL. متاح فقط لـ influxDB مع HTTPS. يقدم Proxmox 8.2 Linux 6.8 ، والذي قد يسبب مشاكل في بعض عمليات النشر. للتغلب على هذا ، يمكنك تثبيت إصدار kernel المستخدم في 6.5 عن طريق إضافة متغير الدور التالي:
pve_default_kernel_version : 1.0.1
هذا ينشئ دبوسًا على حزمة proxmox-default-kernel
، وهي الطريقة التي اقترحتها PVE. يمكن إزالته لاحقًا عن طريق إلغاء ضبط هذا الدور المتغير.
أضف هذا القسم إلى ansible.cfg
.
[ssh_connection]
ssh_args = -o ServerAliveInterval=20
قضية مرجعية
عند تطوير ميزات جديدة أو إصلاح شيء ما في هذا الدور ، يمكنك اختبار التغييرات الخاصة بك باستخدام Vagrant (فقط libvirt مدعوم حاليًا). يمكن العثور على كتاب اللعب في tests/vagrant
(لذا تأكد من تعديل متغيرات المجموعة حسب الحاجة). تأكد من اختبار أي تغييرات على جميع الإصدارات المدعومة من Debian (تحديث Vagrantfile محليًا لاستخدام debian/bookworm64
أو debian/bullseye64
أو debian/buster64
) قبل تقديم العلاقات العامة.
يمكنك أيضًا تحديد وكيل التخزين المؤقت المناسب (مثل apt-cacher-ng
، ويجب أن يعمل على المنفذ 3142) مع متغير البيئة APT_CACHE_HOST
لتسريع تنزيلات الحزمة إذا كان لديك واحدة تعمل محليًا في بيئتك. سوف يكتشف كتاب Playbook Vagrant ما إذا كان وكيل التخزين المؤقت متاحًا واستخدامه فقط إذا كان من الممكن الوصول إليه من شبكتك ، بحيث يمكنك فقط تعيين هذا المتغير في بيئة التطوير الخاصة بك إذا كنت تفضل ذلك.
على سبيل المثال ، يمكنك تشغيل ما يلي لإظهار الإخراج المطول/الأسهل ، واستخدام وكيل التخزين المؤقت ، والحفاظ على تشغيل VMs إذا واجهت خطأً (بحيث يمكنك استكشاف الأخطاء وإصلاحها و/أو تشغيل vagrant provision
بعد التثبيت):
APT_CACHE_HOST=10.71.71.10 ANSIBLE_STDOUT_CALLBACK=debug vagrant up --no-destroy-on-error
Musee Ullah (lae ، [email protected]) - المطور الرئيسي
Fabien Brachere (fbrachere) - دعم تكوين التخزين
Gaudenz Steinlin (gaundez) - دعم Ceph ، إلخ
ريتشارد سكوت (Zenntrix) - دعم Ceph ، دعم PVE 7.x ، إلخ
Thoralf Rickert -Wendt (@trictert76) - دعم PVE 6.x ، إلخ
Engin Dumlu (roadRunner)
جوناس ميتر (@mejo-)
ondrej flidr (snipercze)
Niko2 (@niko2)
كريستيان أليت (caublet)
جيل بيتري (gilou)
مايكل هولاسيك (mholasek)
ألكساندر بيترمان (@lexxxel) - دعم PVE 8.x ، إلخ
Bruno Travouillon (btravouillon) - تحسينات UX
Tobias Negd (@wu3rstle) - دعم Ceph
Pendagtp (pendagtp) - دعم Ceph
جون ماريون (@jmariondev)
Foerkede (foerkede) - دعم تخزين ZFS
جيفو جويل (futuriste) - دعم تكوين البلياردو
Adam Delo (@ol3d) - PCIE Passthrough دعم Antoine Thys (thystips) - دعم الخوادم المتري
قائمة كاملة من المساهمين