Какой у вас опыт работы с Proxmox?

«Какой у вас опыт работы с Proxmox?» — вопрос из категории Виртуализация, который задают на 24% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Работал с Proxmox VE 2 года в роли DevOps-инженера: развертывал кластеры, настраивал Ceph-хранилища, автоматизировал через API. Основной use case — приватное облако для разработки и тестирования.

Типичная архитектура кластера:

┌─────────────────────────────────────────────────────┐
│                Proxmox Cluster (3+ nodes)           │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐         │
│  │ Node 1   │  │ Node 2   │  │ Node 3   │         │
│  │ CPU: 32  │  │ CPU: 32  │  │ CPU: 32  │         │
│  │ RAM: 128 │  │ RAM: 128 │  │ RAM: 128 │         │
│  │ Storage: │  │ Storage: │  │ Storage: │         │
│  │ Ceph OSD │  │ Ceph OSD │  │ Ceph OSD │         │
│  └─────┬────┘  └────┬─────┘  └────┬─────┘         │
│        │            │             │               │
│        └────────────┼─────────────┘               │
│                Ceph Network (10G)                 │
└─────────────────────────────────────────────────────┘

Автоматизация через Proxmox API:

import proxmoxer
import json

# Подключение к кластеру
proxmox = proxmoxer.ProxmoxAPI(
    'pve-cluster.example.com',
    user='root@pam',
    password='{{ vault_proxmox_password }}',
    verify_ssl=False
)

# Создание VM из шаблона
def create_vm_from_template(vm_name, template_id=9000):
    # Клонирование шаблона
    task_id = proxmox.nodes('pve1').qemu(template_id).clone.post(
        newid=100,
        name=vm_name,
        storage='local-lvm',
        full=1
    )

    # Ожидание завершения клонирования
    while True:
        status = proxmox.nodes('pve1').tasks(task_id).status.get()
        if status['status'] == 'stopped':
            break
        time.sleep(2)

    # Настройка параметров VM
    proxmox.nodes('pve1').qemu(100).config.post(
        cores=2,
        memory=4096,
        net0='virtio,bridge=vmbr0,tag=100'
    )

    # Запуск VM
    proxmox.nodes('pve1').qemu(100).status.start.post()
    return 100

Ключевые задачи:

  1. Настройка Ceph для распределенного хранилища:
    
    # На каждой ноде
    pveceph install
    pveceph init --network 10.0.100.0/24
    pveceph createmon
    pveceph createosd /dev/sdb

Создание pool

ceph osd pool create vm-data 128 pvesm add ceph vm-data --pool vm-data


2. **High Availability для критичных VM:**
```bash
# Включение HA для VM
ha-manager add vm:100 --state started --max_relocate 2 --max_restart 2

# Просмотр статуса
ha-manager status
  1. Резервное копирование через Proxmox Backup Server:
    
    # Настройка хранилища PBS
    pvesm add pbs backup-pbs --server backup.example.com 
    --datastore main --username root@pam --password secret

Планирование бэкапов

pvesh set /nodes/pve1/qemu/100 --protection 1 pvesh create /nodes/pve1/qemu/100/snapshot --snapname "pre-update" --description "Before OS update"



4. **Сетевые конфигурации:**
- VLAN tagging на Linux bridges
- SDN (Software Defined Networking) для изоляции tenant'ов
- OVS (Open vSwitch) для сложных сетевых топологий

**Интеграция с инфраструктурой:**
- Terraform provider `telmate/proxmox` для управления как кодом
- Ansible для конфигурации гостевых ОС
- Prometheus + `pve-exporter` для мониторинга
- Alertmanager для уведомлений о проблемах с хранилищем или HA