- Обновлен README.md с новыми возможностями COD preset и роли devops - Добавлена документация по COD preset (docs/cod-preset.md) - Добавлена документация по роли devops (docs/devops-role.md) - Обновлена документация по ARM64 поддержке (docs/arm64-support.md) - Обновлены примеры использования (docs/examples.md) - Исправлен Dockerfile для RHEL с Python 3.11 из EPEL - Обновлен COD preset с 6 контейнерами (Ubuntu + Debian + Alt + Astra + CentOS + RHEL) - Улучшена роль devops с поддержкой российских ОС - Добавлен CHANGELOG.md с историей изменений - Все изменения протестированы на ARM64 архитектуре
DevOpsLab - Универсальная система тестирования Ansible ролей
Автор: Сергей Антропов
Сайт: https://devops.org.ru
Версия: 3.0.0
📋 Описание
DevOpsLab - это универсальная DevOps платформа для разработки, тестирования и развертывания инфраструктуры. Система объединяет Ansible роли, Docker контейнеры и Kubernetes кластеры в единую среду для автоматизации и управления инфраструктурой.
Ключевые компоненты:
- Ansible - автоматизация конфигурации и развертывания
- Docker - контейнеризация для изоляции и переносимости
- Molecule - тестирование Ansible ролей
- Kubernetes (Kind) - локальные K8s кластеры для разработки
- Multi-arch поддержка - сборка для amd64 и arm64 архитектур
✨ Ключевые возможности
🔧 Ansible
- Тестирование ролей через Molecule с Docker
- Preset система для быстрого выбора окружений тестирования
- Мультиплатформенное тестирование (Ubuntu, Debian, CentOS, AlmaLinux, RHEL, Alt Linux, Astra Linux и другие)
- Автоматическая проверка синтаксиса Ansible ролей
- Управление секретами через Ansible Vault
- Универсальная роль devops для настройки пользователей и SSH ключей
- Автоматическое определение ОС и применение соответствующих конфигураций
🐳 Docker
- Готовые Docker образы для разных ОС с поддержкой systemd
- Multi-arch сборка (amd64, arm64)
- Автоматическая публикация в Docker Hub
- Контейнеры для тестирования Ansible ролей
☸️ Kubernetes
- Kind кластеры для локального тестирования
- Автоматическая установка аддонов (Istio, Prometheus, Grafana, Kiali, Ingress, Metrics Server)
- Управление через Helm и Kubernetes манифесты
- Port-forward для доступа к сервисам
- Детальный мониторинг состояния кластера
📁 Структура проекта
DevOpsLab/
├── molecule/ # Конфигурация Molecule
│ ├── default/ # Основная конфигурация
│ │ ├── create.yml # Создание контейнеров
│ │ ├── converge.yml # Запуск тестов
│ │ ├── destroy.yml # Удаление контейнеров
│ │ ├── site.yml # Основной playbook
│ │ ├── verify.yml # Проверка конфигурации
│ │ └── molecule.yml # Конфигурация Molecule
│ └── presets/ # Preset конфигурации
│ ├── default.yml # Стандартный preset
│ ├── mytest.yml # Кастомный preset
│ ├── examples/ # Примеры preset'ов
│ │ ├── all-images.yml # Все образы (16 хостов)
│ │ ├── centos-all.yml # CentOS 7/8/9
│ │ ├── debian-all.yml # Debian 9/10/11/12
│ │ ├── ubuntu-all.yml # Ubuntu 20/22/24
│ │ ├── multi-os.yml # Multi-OS тестирование
│ │ ├── performance.yml # Тест производительности
│ │ ├── security.yml # Тест безопасности
│ │ ├── minimal.yml # Минимальный preset
│ │ └── ...
│ └── k8s/ # Kubernetes preset'ы
│ ├── kubernetes.yml # Полный K8s кластер с аддонами
│ └── k8s-minimal.yml # Минимальный K8s кластер
├── roles/ # Ansible роли
│ ├── docker/ # Роль установки Docker
│ │ ├── defaults/ # Переменные по умолчанию
│ │ ├── handlers/ # Обработчики
│ │ ├── meta/ # Метаданные
│ │ ├── tasks/ # Задачи
│ │ ├── templates/ # Шаблоны
│ │ ├── tests/ # Тесты
│ │ ├── vars/ # Переменные
│ │ ├── README.md
│ │ └── examples.yml
│ ├── devops/ # Роль DevOps инструментов
│ │ ├── defaults/
│ │ ├── files/
│ │ ├── handlers/
│ │ ├── meta/
│ │ ├── tasks/
│ │ ├── templates/
│ │ ├── tests/
│ │ ├── vars/
│ │ ├── README.md
│ │ ├── QUICKSTART.md
│ │ ├── examples.yml
│ │ └── playbook.yml
│ ├── ping/ # Роль для ping проверок
│ │ ├── defaults/
│ │ ├── handlers/
│ │ ├── meta/
│ │ ├── tasks/
│ │ ├── templates/
│ │ ├── README.md
│ │ ├── QUICKSTART.md
│ │ └── playbook.yml
│ └── deploy.yml # Playbook для развертывания
├── dockerfiles/ # Docker образы
│ ├── ansible-controller/ # Ansible контроллер
│ │ ├── Dockerfile
│ │ ├── docker-compose.yml
│ │ ├── requirements.txt
│ │ └── requirements.yml
│ ├── k8s/ # Kubernetes образ (Kind, kubectl, Helm, Istio)
│ │ └── Dockerfile
│ ├── k8s-portforward/ # Port-forward контейнер (устаревший)
│ │ ├── Dockerfile
│ │ └── portforward-container.py
│ ├── ubuntu20/ # Ubuntu 20.04
│ ├── ubuntu22/ # Ubuntu 22.04
│ ├── ubuntu24/ # Ubuntu 24.04
│ ├── debian9/ # Debian 9
│ ├── debian10/ # Debian 10
│ ├── debian11/ # Debian 11
│ ├── debian12/ # Debian 12
│ ├── centos7/ # CentOS 7
│ ├── centos8/ # CentOS 8
│ ├── centos9/ # CentOS 9
│ ├── alma/ # AlmaLinux 8
│ ├── rocky/ # Rocky Linux 8
│ ├── rhel/ # RHEL 8
│ ├── alt-linux/ # ALT Linux P9
│ ├── astra-linux/ # Astra Linux 1.7
│ ├── redos/ # RED OS 9
│ └── README.md
├── cicd/ # CI/CD конфигурации
│ ├── azure-devops/ # Azure DevOps
│ │ └── azure-pipelines.yml
│ ├── github/ # GitHub Actions
│ │ └── workflows.yml
│ ├── gitlab/ # GitLab CI
│ │ ├── config.json
│ │ ├── docker-compose.yaml
│ │ └── runner/
│ │ └── config.toml
│ └── jenkins/ # Jenkins
│ └── Jenkinsfile
├── scripts/ # Вспомогательные скрипты
│ ├── create_k8s_cluster.py # Создание K8s кластера
│ ├── delete_hosts.py # Удаление хостов
│ ├── k8s_status.py # Статус K8s кластера
│ ├── portforward.py # Управление port-forward
│ ├── generate-role-docs.sh # Генерация документации
│ ├── role-manager.sh # Управление ролями
│ ├── setup-cicd.sh # Настройка CI/CD
│ ├── test-custom-images.sh # Тестирование образов
│ └── update-playbooks.sh # Обновление playbook'ов
├── docs/ # Документация
│ ├── kubernetes-kind.md # Руководство по Kubernetes
│ ├── k8s-scripts.md # Описание K8s скриптов
│ ├── kubernetes-commands.md # Команды Kubernetes
│ ├── kubernetes-full-guide.md # Полное руководство K8s
│ ├── k8s-ingress-fix.md # Исправление Ingress
│ ├── getting-started.md # Быстрый старт
│ ├── molecule-guide.md # Руководство по Molecule
│ ├── creating-roles.md # Создание ролей
│ ├── linting-guide.md # Руководство по линтингу
│ ├── platform-support.md # Поддержка платформ
│ ├── monitoring.md # Мониторинг
│ └── ...
├── manifests/ # Kubernetes манифесты
│ └── test-grafana-ingress.yaml
├── vault/ # Зашифрованные секреты
│ └── secrets.yml
├── inventory/ # Инвентори файлы
│ └── hosts.ini
├── Makefile # Основные команды
└── README.md # Этот файл
🚀 Быстрый старт
1. Клонирование репозитория
git clone <repository-url>
cd DevOpsLab
2. Тестирование ролей
# Тестирование с default preset (2 хоста)
make role test
# Тестирование с минимальным preset (1 хост)
make role test minimal
# Тестирование с кастомным preset
make role test my-custom-preset
3. Проверка синтаксиса
# Проверка всех ролей
make role lint
# Проверка конкретной роли
make role lint docker
make role lint ping
4. Работа с Kubernetes
# Создание Kind кластера с аддонами
make k8s create kubernetes
# Статус кластера (детальный отчет)
make k8s status kubernetes
# Создание port-forward для доступа к сервисам
make k8s portforward create
# Установка Helm чарта
make k8s helm apply kubernetes nginx bitnami/nginx
# Удаление кластера
make k8s destroy kubernetes
Подробная документация: docs/kubernetes-kind.md
📚 Доступные роли
Docker
Универсальная роль для установки Docker и Docker Compose на различных Linux-дистрибутивах.
Поддерживаемые ОС:
- Debian 9/10/11/12
- Ubuntu 20.04/22.04/24.04
- CentOS 7/8/9
- AlmaLinux 8/9
- Rocky Linux 8/9
- RHEL 8/9
Пример использования:
- hosts: all
roles:
- role: docker
vars:
docker_users:
- ansible
- deploy
Подробная документация: roles/docker/README.md
DevOps
Роль для установки и настройки инструментов DevOps.
Подробная документация: roles/devops/README.md
Ping
Роль для выполнения ping проверок подключения к сети.
Пример использования:
- hosts: all
roles:
- role: ping
vars:
ping_host: google.com
ping_count: 10
Подробная документация: roles/ping/README.md
🧪 Preset система
Preset система позволяет быстро выбрать окружение для тестирования.
Доступные preset'ы
Базовые
default- Стандартный preset (2 хоста: Ubuntu + Debian)minimal- Минимальный preset (1 хост: Debian)cod- COD preset (6 хостов: Ubuntu + Debian + Alt + Astra + CentOS + RHEL) - ARM64test- Базовый тест (2 хоста)stable- Стабильные ОС (4 хоста)standart- Стандартный набор (4 хоста)mytest- Кастомный preset (3 хоста)
По ОС
- Ubuntu:
ubuntu20,ubuntu22,ubuntu24,ubuntu-all(все версии) - Debian:
debian9,debian10,debian11,debian12,debian-all(все версии) - CentOS:
centos7,centos8,centos9,centos-all(все версии) - Российские ОС:
alt9,alt10,astra-linux,redos(ARM64 поддержка)
Специализированные
all-images- Все образы (16 хостов) - полное покрытие всех ОСmulti-os- Multi-OS тестирование (8 хостов разных ОС)docker-full- Docker тестирование (4 хоста)docker-test- Базовое Docker тестирование (2 хоста)etcd-patroni- ETCD + Patroni кластер (4 хоста)performance- Тест производительности (8 хостов)security- Тест безопасности (6 хостов)
Создание своего preset
Создайте файл molecule/presets/my-preset.yml:
---
#description: Мой кастомный preset
docker_network: labnet
generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini"
images:
ubuntu22: "inecs/ansible-lab:ubuntu22-latest"
centos9: "inecs/ansible-lab:centos9-latest"
systemd_defaults:
privileged: true
command: "/sbin/init"
volumes:
- "/sys/fs/cgroup:/sys/fs/cgroup:rw"
tmpfs: ["/run", "/run/lock"]
capabilities: ["SYS_ADMIN"]
hosts:
- name: web1
family: ubuntu22
groups: [web, test]
- name: db1
family: centos9
groups: [database, test]
Используйте preset:
make role test my-preset
🔐 Управление секретами
Ansible Vault
# Создание секретного файла
make vault create
# Редактирование секретов
make vault edit
# Просмотр секретов
make vault show
# Шифрование файла
make vault encrypt
# Расшифровка файла
make vault decrypt
🚀 Развертывание
Тестирование (Docker контейнеры)
# Тестирование с разными preset'ами
make role test # default preset
make role test minimal # minimal preset
Развертывание на реальные серверы
# Развертывание на продакшн
make role deploy
Инвентори для продакшн находится в файле inventory/hosts.ini:
# inventory/hosts.ini
[web_servers]
web1.example.com ansible_host=192.168.1.10
[db_servers]
db1.example.com ansible_host=192.168.1.20
[all:vars]
ansible_user=devops
ansible_ssh_private_key_file=~/.ssh/id_rsa
🔧 Основные команды
Управление ролями
# Список всех ролей
make role list # показать все роли
ls -1 roles/ # альтернативный способ
# Создание новой роли
make role create # интерактивное создание роли
# Удаление роли
make role delete # интерактивное удаление роли
# Проверка синтаксиса (Linting)
make role lint # проверить все роли
make role lint docker # проверить конкретную роль
make role lint ping # пример проверки одной роли
# Тестирование ролей
make role test # тест с default preset
make role test minimal # тест с minimal preset
make role test all-images # тест со всеми образами
make role test etcd-patroni # тест с кастомным preset
# Развертывание на продакшн
make role deploy # развернуть роли на реальные серверы
Управление Preset'ами
# Просмотр доступных preset'ов
make presets list # показать все preset'ы
# Информация о preset'е
make presets info PRESET=etcd-patroni # подробная информация
# Тестирование с preset'ом
make presets test PRESET=minimal # запустить тест с preset'ом
Управление секретами (Vault)
# Инициализация vault
make vault init # создать vault/.vault с паролем
# Создание секретов
make vault create # создать новый файл секретов
# Редактирование
make vault edit # редактировать существующие секреты
# Просмотр
make vault show # показать содержимое секретов
# Удаление
make vault delete # удалить файл секретов
# Шифрование/расшифровка
make vault encrypt # зашифровать файл
make vault decrypt # расшифровать файл
make vault rekey # сменить пароль шифрования
# Проверка и аудит
make vault check # проверить vault файлы
make vault scan # поиск потенциальных секретов
Управление Git
# Отправка изменений
make git push # git add . && git commit && git push
# Получение изменений
make git pull # git pull origin main
# Создание ветки
make git new # создать новую ветку
Управление Docker образами
# Подготовка к работе
make docker prepare # показать registry, version, список образов
# Сборка образов
make docker build # собрать все образы (multi-arch)
make docker build-image IMAGE=centos7 # собрать отдельный образ
make docker rebuild # полная пересборка с очисткой кеша
# Работа с Docker Hub
make docker push # отправить образы в Docker Hub
make docker pull # загрузить образы из Docker Hub
# Очистка
make docker clean # удалить локальные образы и кеш
make docker clean-builder # очистка multi-arch builder
make docker purge # ПОЛНАЯ очистка Docker (осторожно!)
# Информация
make docker info # информация о собранных образах
make docker update # обновить все образы (pull + build + push)
# Управление builder'ом
make docker setup-builder # настройка multi-arch builder
make docker diagnose # диагностика buildx проблем
make docker reset-builder # сброс buildx builder
Управление Ansible Controller
# Сборка и запуск
make controller build # собрать ansible-controller (multi-arch)
make controller rebuild # пересобрать с исправлениями
make controller run # запустить ansible-controller
make controller stop # остановить ansible-controller
Собственные образы для тестирования
# Тестирование с собственными образами
make custom-images test minimal # минимальный тест (4 хоста)
make custom-images test full # полный тест (все образы)
make custom-images test performance # тест производительности (8 хостов)
# Проверка наличия образов
make custom-images check # проверить наличие собственных образов
# Сборка образов
make custom-images build # собрать все образы для тестирования
Автоматизация
# Обновление playbook'ов
make update-playbooks # обновление при добавлении ролей
# Генерация документации
make generate-docs # генерация документации для ролей
# Настройка CI/CD
make setup-cicd # настройка CI/CD для всех платформ
Очистка
# Очистка контейнеров Molecule
make clean-containers # удалить контейнеры Molecule
# Очистка Docker
make docker clean # удалить образы и кеш
make docker clean-builder # очистить builder
make docker purge # ПОЛНАЯ очистка Docker
Справка
# Основная справка
make help # показать общую справку
# Детальная справка по командам
make role # справка по работе с ролями
make presets # справка по preset'ам
make vault # справка по vault
make docker # справка по docker
make controller # справка по controller
make custom-images # справка по собственным образам
📖 Документация
Основная документация
- docs/getting-started.md - Быстрый старт
- docs/molecule-guide.md - Руководство по Molecule
- docs/creating-roles.md - Создание ролей
- docs/devops-role.md - Универсальная роль devops для настройки пользователей и SSH
- docs/cicd-setup.md - Настройка CI/CD
Presets и тестирование
- docs/all-images-preset.md - Пресет all-images для тестирования всех образов
- docs/cod-preset.md - COD preset для тестирования российских и зарубежных ОС (ARM64)
- docs/presets-by-os.md - Presets по операционным системам
- docs/testing-vs-deployment.md - Различия между тестированием и развертыванием
- docs/universal-testing.md - Универсальное тестирование
Развертывание и конфигурация
- docs/site-yml-guide.md - Руководство по файлу site.yml
- docs/deploy-yml-customization.md - Полное руководство по кастомизации deploy.yml
Безопасность и качество
- docs/vault-guide.md - Работа с Ansible Vault
- docs/linting-guide.md - Руководство по линтингу ролей
Мониторинг и диагностика
- docs/monitoring.md - Мониторинг, диагностика и troubleshooting
- docs/buildx-fixes.md - Исправление проблем с Docker Buildx
Платформы и примеры
- docs/platform-support.md - Поддержка платформ
- docs/arm64-support.md - Поддержка ARM64 архитектуры
- docs/examples.md - Примеры использования
- CHANGELOG.md - История изменений
Документация по ролям
- roles/docker/README.md - Документация роли Docker
- roles/devops/README.md - Документация роли DevOps
- roles/ping/README.md - Документация роли Ping
Docker образы
- docs/dockerfiles.md - Полная документация по Docker образам
- docs/arm64-support.md - Поддержка ARM64 архитектуры
Kubernetes
Полная документация: docs/kubernetes-kind.md
DevOpsLab предоставляет полную поддержку локальных Kubernetes кластеров на базе Kind:
Основные команды
# Создание кластера с аддонами
make k8s create kubernetes
# Детальный статус кластера
make k8s status kubernetes
# Управление port-forward
make k8s portforward create
make k8s portforward list
make k8s portforward clear
# Работа с Helm
make k8s helm apply kubernetes nginx bitnami/nginx
make k8s helm list kubernetes
make k8s helm delete kubernetes nginx
# Работа с манифестами
make k8s manifest apply kubernetes https://example.com/app.yaml
# Удаление кластера
make k8s destroy kubernetes
Доступные аддоны
- Ingress NGINX - маршрутизация трафика
- Metrics Server - сбор метрик
- Istio - Service Mesh
- Prometheus Stack - мониторинг (Prometheus + Grafana)
- Kiali - визуализация Service Mesh
Доступ к сервисам
- Grafana: http://localhost:3000 (admin/admin)
- Prometheus: http://localhost:9090
- Kiali: http://localhost:20001
- Ingress HTTP: http://localhost:8081
- Ingress HTTPS: https://localhost:8443
🐳 Docker образы
Проект использует готовые Docker образы для различных ОС с полной поддержкой multi-arch (amd64 и arm64):
Поддерживаемые ОС
- Ubuntu 20.04, 22.04, 24.04
- Debian 9, 10, 11, 12
- CentOS 7, 8, 9
- AlmaLinux 8, 9
- Rocky Linux 8, 9
- RHEL 8, 9
- ALT Linux P9, P10
- Astra Linux 1.7 (включая ARM64 совместимую версию)
Особенности
- Multi-arch поддержка: Все образы собираются для amd64 и arm64
- systemd: Полная поддержка systemd для корректной работы служб
- Apple Silicon: Оптимизированы для работы на Apple Silicon Mac
- ARM64 серверы: Поддержка AWS Graviton, Azure Ampere и других ARM64 платформ
ARM64 поддержка
- Нативные образы: Ubuntu, Debian, CentOS, AlmaLinux, Rocky Linux, RHEL, ALT Linux
- Совместимые образы: Astra Linux (эмуляция на базе Debian)
- Документация: docs/arm64-support.md
🛠️ Разработка новых ролей
Создание структуры роли
mkdir -p roles/my-role/{tasks,handlers,templates,files,vars,defaults,meta}
touch roles/my-role/{tasks,handlers,meta}/main.yml
touch roles/my-role/defaults/main.yml
Основные файлы
tasks/main.yml:
---
- name: Пример задачи
debug:
msg: "Роль my-role выполнена"
defaults/main.yml:
---
# Переменные по умолчанию
my_role_enabled: true
my_role_version: "1.0.0"
README.md:
# Роль My-Role
Описание роли...
Тестирование новой роли
# Проверка синтаксиса
make role lint my-role
# Тестирование
make role test
🏗️ CI/CD
Проект поддерживает интеграцию с различными CI/CD системами:
- GitHub Actions - готовые workflow'ы
- Azure DevOps - pipeline конфигурации
- Jenkins - pipeline скрипты
- GitLab CI - интеграция
Подробнее в docs/cicd-setup.md
📊 Требования
- Docker - для контейнеризации
- Docker Compose - для оркестрации
- Ansible >= 2.9
- Molecule >= 3.0
- Python >= 3.6
🎯 Поддерживаемые ОС
Для тестирования (Docker)
- Ubuntu 20.04/22.04/24.04
- Debian 9/10/11/12
- CentOS 7/8/9
- AlmaLinux 8/9
- Rocky Linux 8/9
- RHEL 8/9
Для развертывания
- Любые Linux системы с SSH доступом
🤝 Вклад в проект
- Fork репозитория
- Создайте feature branch (
git checkout -b feature/amazing-feature) - Commit изменения (
git commit -m 'Add amazing feature') - Push в branch (
git push origin feature/amazing-feature) - Создайте Pull Request
📄 Лицензия
MIT License
📞 Поддержка
При возникновении проблем:
- Проверьте наличие Docker
- Убедитесь, что все preset файлы существуют
- Используйте
make role lintдля проверки синтаксиса - Проверьте логи тестирования
🎉 Основные достижения
- ✅ Универсальная preset система
- ✅ Мультиплатформенное тестирование (Ubuntu, Debian, CentOS, RHEL, Alt Linux, Astra Linux)
- ✅ ARM64 поддержка для нативной производительности
- ✅ COD preset для тестирования российских и зарубежных ОС
- ✅ Универсальная роль devops с автоматическим определением ОС
- ✅ Автоматическая проверка синтаксиса
- ✅ Управление секретами через Ansible Vault
- ✅ Готовые Docker образы для разных ОС
- ✅ CI/CD интеграция
- ✅ Kubernetes Kind кластеры для тестирования
Автор: Сергей Антропов
Сайт: https://devops.org.ru