Files
DevOpsLab/docs/podman.md
Sergey Antropoff 05881e8d74 podman: переход на Podman, Minikube, локальные образы и док для новичков
- Molecule: драйвер delegated, коллекция containers.podman, create/destroy/verify на Podman
- Makefile: все вызовы docker заменены на podman, сокет /run/podman/podman.sock
- Сборка образов: podman build (без buildx), buildall/buildall-image — только локально без push
- Ansible-controller: Podman в образе, docker-compose на podman compose, сокет Podman
- K8s: Kind заменён на Minikube (драйвер podman), скрипты и Makefile обновлены
- Пресеты: проверка локальных образов, без podman pull (registry запрещён)
- Документация: docs/podman.md, docs/quickstart-for-dummies.md (роли, плейбук, линт, тесты, пресеты, инвентори)
- README: ссылка на quickstart-for-dummies

Made-with: Cursor
2026-03-11 19:59:47 +03:00

4.0 KiB
Raw Permalink Blame History

Работа с Podman (ветка podman)

Автор: Сергей Антропов
Сайт: https://devops.org.ru

В ветке podman проект переведён на использование только Podman (без Docker и Docker Compose).

Требования

  • Podman установлен и запущен (rootful: сокет /run/podman/podman.sock)
  • podman compose (встроен в Podman 4.1+ или пакет podman-compose)
  • Для K8s: Minikube и kubectl на хосте

Основные изменения

Molecule

  • Драйвер: delegated (создание/удаление контейнеров в create.yml / destroy.yml через Ansible).
  • Используется коллекция containers.podman (podman_network, podman_container).
  • Сокет: /run/podman/podman.sock (DOoD-узлы заменены на POoD с монтированием сокета Podman).
  • Инвентарь: ansible_connection=containers.podman.podman.

Makefile

  • Все вызовы docker заменены на podman.
  • Сборка образов: podman build --platform ... (без buildx).
  • Compose: podman compose (вместо docker-compose).
  • Сокет в целях контроллера: PODMAN_SOCKET ?= /run/podman/podman.sock, монтируется в контейнер ansible-controller.

Ansible-controller

  • Образ собирается и запускается через Podman.
  • В образе установлен Podman (вместо Docker).
  • При запуске монтируется сокет хоста: -v $(PODMAN_SOCKET):/run/podman/podman.sock.
  • Переменная окружения: CONTAINER_HOST=unix:///run/podman/podman.sock.

Kubernetes

  • Вместо Kind используется Minikube с драйвером podman.
  • Кластер создаётся на хосте: minikube start --driver=podman.
  • Скрипт: scripts/create_minikube_cluster.py (читает пресет из molecule/presets/k8s/*.yml).
  • В пресетах K8s: minikube_profile, minikube_addons, minikube_cpus, minikube_memory (вместо kind_clusters).

Локальные образы (без доступа к registry)

Во всех пресетах при использовании Podman используются только локальные образы. Выгрузка из registry отключена.

  1. Соберите все образы локально один раз:
    make buildall
    
  2. Либо один образ для нужного пресета:
    make buildall-image IMAGE=ubuntu22
    make buildall-image IMAGE=debian11
    
  3. После этого Molecule при create проверяет наличие образов локально и не выполняет podman pull. Если какого-то образа нет — выведет сообщение с указанием выполнить make buildall.

Быстрый старт

# 1. Собрать локальные образы (без registry)
make buildall

# 2. Сеть labnet для compose (если нужен controller)
podman network create labnet 2>/dev/null || true

# 3. Запуск ansible-controller
make controller run

# 4. Тест ролей (контейнеры создаются через Podman из локальных образов)
make role test minimal

# Minikube (на хосте)
make k8s create k8s-minimal
make k8s status
kubectl get nodes

Переменные

  • PODMAN_SOCKET — путь к сокету Podman на хосте (по умолчанию /run/podman/podman.sock для rootful).

CI/CD

Секция CI/CD (cicd/) в этой ветке не менялась — рассчитана на окружения с Docker. Для Podman в пайплайнах нужно отдельно устанавливать Podman и вызывать podman / podman compose в jobах.