- 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
4.0 KiB
4.0 KiB
Работа с 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 отключена.
- Соберите все образы локально один раз:
make buildall - Либо один образ для нужного пресета:
make buildall-image IMAGE=ubuntu22 make buildall-image IMAGE=debian11 - После этого 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’ах.