# Работа с 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. Соберите все образы локально один раз: ```bash make buildall ``` 2. Либо один образ для нужного пресета: ```bash make buildall-image IMAGE=ubuntu22 make buildall-image IMAGE=debian11 ``` 3. После этого Molecule при `create` проверяет наличие образов локально и не выполняет `podman pull`. Если какого-то образа нет — выведет сообщение с указанием выполнить `make buildall`. ## Быстрый старт ```bash # 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’ах.