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

Ответ

Работал с 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

Ответ 18+ 🔞

Слушай, а вот Proxmox — это вообще отдельная религия, я тебе скажу. Два года с ним провозился, как DevOps, и знаешь что? Это пиздопроебебина уровня «я сам себе облако построил». Представь: вместо того чтобы платить дохуя денег за AWS, ты берешь три сервера, ставишь на них Proxmox VE и получаешь своё приватное облако для разработки и тестирования. И оно, блядь, реально работает, а не просто в презентации красиво.

Вот смотри, как обычно выглядит кластер, который я настраивал. Три ноды, не меньше, иначе нихуя не будет HA. На каждой — процессоров по 32 ядра, оперативки по 128 гигов, и самое главное — хранилище Ceph, чтобы всё было распределённое и отказоустойчивое. Отдельная сеть на 10 гигабит под него, иначе производительность будет — хуй с горы.

┌─────────────────────────────────────────────────────┐
│                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)                 │
└─────────────────────────────────────────────────────┘

А теперь самое вкусное — автоматизация. Потому что вручную создавать виртуалки — это, ёпта, как в 2002-м году жить. Тут на помощь приходит их API. Смотри, какой простой код на Python:

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

Главное — диск под OSD выбрать нормальный, а не какой-нибудь древний SAS, который уже бздит. Иначе производительность будет — ядрёна вошь.

  1. High Availability. Это когда виртуалка критически важная и должна жить вечно. Настроил — и спи спокойно.
# Включение HA для VM
ha-manager add vm:100 --state started --max_relocate 2 --max_restart 2

# Просмотр статуса
ha-manager status

Видишь статус started — и доверия ебать ноль, но хоть так.

  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"

Сделал снапшот перед обновлением — и хоть всё к чертям, откатился за минуту.

  1. Сети. Тут можно разойтись: и обычные VLAN на бриджах, и SDN для изоляции разных команд, и OVS, если уж совсем хитрая жопа и сложная топология нужна.

А ещё интеграция со всей остальной инфраструктурой — это отдельная песня:

  • Terraform. Провайдер telmate/proxmox позволяет управлять всем как кодом. Написал конфиг — и кластер как под копирку.
  • Ansible. Внутрь виртуалок залез, всё настроил.
  • Мониторинг. Prometheus с pve-exporter выводит все метрики, а Alertmanager орёт, если с Ceph что-то не так. Проснулся ночью от уведомления — и сразу понятно, что пора впендюрить проблему.

В общем, Proxmox — это мощный инструмент, если руки из правильного места. Сначала, конечно, охуеваешь от количества настроек, но потом, когда всё работает, понимаешь — оно того стоит. Можно и облако своё построить, и с публичными провайдерами не связываться. Главное — Ceph не запороть на этапе настройки, а то будет тебе нигерсраки.