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
This commit is contained in:
86
docs/podman.md
Normal file
86
docs/podman.md
Normal file
@@ -0,0 +1,86 @@
|
||||
# Работа с 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’ах.
|
||||
Reference in New Issue
Block a user