Запускаем PDM в виде docker образа

Зачем это?

  1. Не люблю контейнеры с debian, у меня все на alpine
  2. PDM, развернутый через helper scripts у меня сломался
  3. В целом, такой подход более управляемый

Оригинальная статья

Мой docker-compose

services:
  pdm:
    image: ghcr.io/longqt-sea/proxmox-datacenter-manager
    container_name: pdm
    hostname: pdm
    restart: unless-stopped
    network_mode: host
    cgroup: host
    security_opt:
      - seccomp=unconfined
      - apparmor=unconfined
    cap_add:
      - ALL
    volumes:
      - /sys/fs/cgroup:/sys/fs/cgroup
      - ./proxmox-datacenter-manager:/etc/proxmox-datacenter-manager

Текущие проблемы:

  1. Пока что не полноценный stateless контейнер, как минимум пароль рута не сохраняется
  2. Что-то много откючено по безопасности мне думается, что можно сократить часть параметров
  3. Не факт, что заведется с первого раза, сырой проект очень
  4. Не факт, что будет обновляться оперативно, но может быть можно обновлять из самого контейнера, текущая версия PDM в docker 1.0.1
  5. Встроенная документация не работает
    image

Собственно, для первого входа надо задать пароль рута

docker exec -it pdm passwd

Далее открываем в браузере по порту 8443

Если видим кучу ошибок, то надо создать структуру каталогов в ./proxmox-datacenter-manager`

я сделал так

  1. поменял точку монтирования - ./proxmox-datacenter-manager:/etc/proxmox-datacenter-manager_new
  2. Зашел в docker контейнер docker compose exec bash
  3. Скопировал файлы в точку монтирования cp -ar /etc/proxmox-datacenter-manager/* /etc/proxmox-datacenter-manager_new/
  4. Поменял точку монтирования как в конфиге и перезапустил

Для чего это надо? Чтобы при каждом деплое не терялись настройки

Что я сделал со сбросом пароля рута? Я добавил аутентификацию через openid-connect и через нее и работаю

Что еще можно сделать на будущее:

  1. Я бы разобрался с привилегиями и поубирал лишее из конфига, но пока только запустил и на том хорошо
  2. Может быть добавить еще точки монтирования т.к. внутри практически полноценный debian с ssh сервером и init, может быть /etc/shadow или что-то еще стоит добавить для сохранения состояния между обновлениями

Обновление

docker compose exec pdm sh -c 'apt update; apt upgrade -y'
2 лайка

Каков опыт эксплуатации в такой конфигурации?
Сейчас в поисках варианта установки, в виртуалку не хочу из-за тяжеловестности, в LXC есть вариант на community-scripts, но хотелось бы обойтись без скриптов.

Работает замечательно, проблем нет.

Нашел интересный репозиторий от автора докер образа

Он запихну все (и PVE и PDM) в docker, в основном для тестирования, чтобы можно было быстро разворачивать
Судя по всему, он решил проблему слетания пароля рута, вот финальный compose от автора

services:
  pdm:
    image: ghcr.io/longqt-sea/proxmox-datacenter-manager
    container_name: pdm
    hostname: pdm
    restart: unless-stopped
    stdin_open: true
    tty: true
    cgroup: private
    cap_add:
      - ALL
    environment:
      PASSWORD: "secret"
    cap_add:
      - SYS_ADMIN
      - NET_ADMIN
    security_opt:
      - seccomp=unconfined
      - apparmor=unconfined
    ports:
      - "2225:22"
      - "8443:8443"
    volumes:
      - /sys/fs/cgroup:/sys/fs/cgroup
      - ./proxmox-datacenter-manager:/etc/proxmox-datacenter-manager
1 лайк

В репозитории не смог найти именно этот docker-compose, ты его дорабатывал?
Есть опечатка в volumes, находится на одном уровне с services.

volumes потом добавлял т.к. оказалось, что его там нет, поменял уровень
За основу брал отсюда, но там не было волюмов, причем без у меня в restarting сваливается, а без /etc/proxmox-datacenter-manager не будет персистентности хранения конфигов самого PDM

Но я вспомнил, что хотел сделать нормальную подготовку локального proxmox-datacenter-manager

Лучше начать без монтированния /etc/proxmox-datacenter-manager
Потом выполнить команду docker cp -a pdm:/etc/proxmox-datacenter-manager .
И только после этого добавить точку монтирования

Видимо из-за того, что сборку обновили (Datacenter Manager 1.0.2), у меня с первого раза всё завелось без ошибок.
Пришлось только в docker-compose удалить секцию:

    cap_add:
      - SYS_ADMIN
      - NET_ADMIN

т.к. она дублирует:

    cap_add:
      - ALL

Сменил пароль, несколько раз передеплоил, пароль сохраняется.

Есть ли смысл при таком раскладе монтировать proxmox-datacenter-manager ?

У меня тоже удалено

Можно и не прокидывать, но все равно переживаю, что конфиги потеряются и надо будет заново настраивать.

Оставлю комментарий у контейнера, если конфиги будут теряться после обновления, то придется откатываться бэкапом и донастраивать.

На всякий случай уточню для будущих читателей.
Данная команда

docker cp -a pdm:/etc/proxmox-datacenter-manager .

работает нескольо иначе, чем ожидается, а точнее не сохраняются uid и gid после копирования в LXC. У директории proxmox-datacenter-manager и у всех вложений после копирования uid:gid = 0:0

root@pdm-lxc~# ls -lnh /etc/
drwxrwx--T 5 0  0 4.0K Feb  9 21:48 proxmox-datacenter-manager
root@pdm-lxc:~# ls -lnh /etc/proxmox-datacenter-manager/
drwxr-x--- 2 0 0 4.0K Feb  8 23:56 access
drwx------ 3 0 0 4.0K Feb  8 23:56 acme
drwxr-x--- 2 0 0 4.0K Feb  8 23:56 auth

а должно быть

root@pdm:~# ls -lnh /etc/proxmox-datacenter-manager/
drwxr-x--- 2 0 33 4.0K Feb  9 18:56 access
drwx------ 3 0  0 4.0K Feb  9 18:56 acme
drwxr-x--- 2 0 33 4.0K Feb  9 18:56 auth
root@pdm:~# ls -lnh /etc/
drwxrwx--T 5 33 33 4.0K Feb  9 18:56 proxmox-datacenter-manager

что не соответсвует uid:gid в docker и соответственно web ui не стартует.

Проблема решается создание архива в docker, копированием и разархивированием его в LXC:

docker exec pdm tar --numeric-owner -cpf - /etc/proxmox-datacenter-manager | tar --numeric-owner -xpf - -C /

И ещё уточнение к статье, если вы разворачивали docker не через docker-compose файл в LXC, а через Portainer stack, то для обновления компонент контейнера нужно использовать такую команду:

docker exec -it pdm sh -c 'apt update && apt upgrade -y'
1 лайк
  1. Я пробовал без -a флага, там не сохранялось
  2. пробовал добавить -a, по доке должно, прописывать и у меня вроде даже прописывало, но не работало
  3. пробовал через chmod 33:33 прописать владельца

Вариант с архивом мне нравится :flexed_biceps:

Изначально я подмонтировал каталог в другое место и в самом контейнере скопировал файлы в эту точку монтирования.

Еще у меня была мысль создать архив типовой и положить еще в интернет, чтобы просто скачивать и распаковывать в локальный катаог

Либо просто скриптом создать нужную структуру.

Ну и на тему обновления, если не считать всякие ansible, то проще обновлять из самого PDM

Ещё обратил внимание, что при установке в LXC нельзя изменить DNS-сервер в web ui (Configuration → Network → DNS)


По дефолту указан IP: 127.0.0.11
Не знаю влияет ли это на что-то или нет..

В ходе тестирования миграции LXC-контейнера между разными экземплярами PVE, LXC перешёл в статус CT is locked (migrate), пришлось вручную выполнять анлок:

pct unlock <CTID>

Возможно, сообщение в соседнюю тему про PDM в docker
У меня DNS сервер прописан тот, который раздается по DHCP

Но у меня network_mode: host

Но вообще /etc/resolv.conf должен обслуживаться докером, а не софтом внутри него

а в логах что-то есть?

  • у меня перенос между нодами кластера сработала без проблем
  • перенос между нодой кластера и независимым узлом завершился ошибкой настройки фаервола, хотя эта нода была частью кластера и общая конфигурация одинаковая

Миграция нормально работает, просто я один и тот же контейнер несколько раз подряд между разными нодами мигрировал и видимо PVE решил меня притормозить:)
Копать не стал, на поверхности было только это:

Для меня на данный момент в этом инструменте ценны следующие вещи:

  1. Миграция между нодами (сильно упрощает процесс переноса из теста в прод)
  2. Быстрый доступ к любой ноде или конкретному объекту
  3. Доступ к Shell любой из нод

Надеюсь допилят возможность расширенных действий на нодах (создание объектов, изменение параметров), завезут дополнительных виджетов для кастомного View или дадут самим кастомизировать виджеты, ну и визуально конечно компановка пока не очень практичная.