# 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 и другие) - **Автоматическая проверка** синтаксиса Ansible ролей - **Управление секретами** через Ansible Vault ### 🐳 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. Клонирование репозитория ```bash git clone cd DevOpsLab ``` ### 2. Тестирование ролей ```bash # Тестирование с default preset (2 хоста) make role test # Тестирование с минимальным preset (1 хост) make role test minimal # Тестирование с кастомным preset make role test my-custom-preset ``` ### 3. Проверка синтаксиса ```bash # Проверка всех ролей make role lint # Проверка конкретной роли make role lint docker make role lint ping ``` ### 4. Работа с Kubernetes ```bash # Создание 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](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 **Пример использования:** ```yaml - hosts: all roles: - role: docker vars: docker_users: - ansible - deploy ``` **Подробная документация:** [roles/docker/README.md](roles/docker/README.md) ### DevOps Роль для установки и настройки инструментов DevOps. **Подробная документация:** [roles/devops/README.md](roles/devops/README.md) ### Ping Роль для выполнения ping проверок подключения к сети. **Пример использования:** ```yaml - hosts: all roles: - role: ping vars: ping_host: google.com ping_count: 10 ``` **Подробная документация:** [roles/ping/README.md](roles/ping/README.md) ## 🧪 Preset система Preset система позволяет быстро выбрать окружение для тестирования. ### Доступные preset'ы #### Базовые - **`default`** - Стандартный preset (2 хоста: Ubuntu + Debian) - **`minimal`** - Минимальный preset (1 хост: Debian) - **`test`** - Базовый тест (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` (все версии) #### Специализированные - **`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`: ```yaml --- #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: ```bash make role test my-preset ``` ## 🔐 Управление секретами ### Ansible Vault ```bash # Создание секретного файла make vault create # Редактирование секретов make vault edit # Просмотр секретов make vault show # Шифрование файла make vault encrypt # Расшифровка файла make vault decrypt ``` ## 🚀 Развертывание ### Тестирование (Docker контейнеры) ```bash # Тестирование с разными preset'ами make role test # default preset make role test minimal # minimal preset ``` ### Развертывание на реальные серверы ```bash # Развертывание на продакшн make role deploy ``` **Инвентори для продакшн** находится в файле `inventory/hosts.ini`: ```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 ``` ## 🔧 Основные команды ### Управление ролями ```bash # Список всех ролей 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'ами ```bash # Просмотр доступных preset'ов make presets list # показать все preset'ы # Информация о preset'е make presets info PRESET=etcd-patroni # подробная информация # Тестирование с preset'ом make presets test PRESET=minimal # запустить тест с preset'ом ``` ### Управление секретами (Vault) ```bash # Инициализация 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 ```bash # Отправка изменений make git push # git add . && git commit && git push # Получение изменений make git pull # git pull origin main # Создание ветки make git new # создать новую ветку ``` ### Управление Docker образами ```bash # Подготовка к работе 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 ```bash # Сборка и запуск make controller build # собрать ansible-controller (multi-arch) make controller rebuild # пересобрать с исправлениями make controller run # запустить ansible-controller make controller stop # остановить ansible-controller ``` ### Собственные образы для тестирования ```bash # Тестирование с собственными образами 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 # собрать все образы для тестирования ``` ### Автоматизация ```bash # Обновление playbook'ов make update-playbooks # обновление при добавлении ролей # Генерация документации make generate-docs # генерация документации для ролей # Настройка CI/CD make setup-cicd # настройка CI/CD для всех платформ ``` ### Очистка ```bash # Очистка контейнеров Molecule make clean-containers # удалить контейнеры Molecule # Очистка Docker make docker clean # удалить образы и кеш make docker clean-builder # очистить builder make docker purge # ПОЛНАЯ очистка Docker ``` ### Справка ```bash # Основная справка make help # показать общую справку # Детальная справка по командам make role # справка по работе с ролями make presets # справка по preset'ам make vault # справка по vault make docker # справка по docker make controller # справка по controller make custom-images # справка по собственным образам ``` ## 📖 Документация ### Основная документация - **[docs/getting-started.md](docs/getting-started.md)** - Быстрый старт - **[docs/molecule-guide.md](docs/molecule-guide.md)** - Руководство по Molecule - **[docs/creating-roles.md](docs/creating-roles.md)** - Создание ролей - **[docs/cicd-setup.md](docs/cicd-setup.md)** - Настройка CI/CD ### Presets и тестирование - **[docs/all-images-preset.md](docs/all-images-preset.md)** - Пресет all-images для тестирования всех образов - **[docs/presets-by-os.md](docs/presets-by-os.md)** - Presets по операционным системам - **[docs/testing-vs-deployment.md](docs/testing-vs-deployment.md)** - Различия между тестированием и развертыванием - **[docs/universal-testing.md](docs/universal-testing.md)** - Универсальное тестирование ### Развертывание и конфигурация - **[docs/site-yml-guide.md](docs/site-yml-guide.md)** - Руководство по файлу site.yml - **[docs/deploy-yml-customization.md](docs/deploy-yml-customization.md)** - Полное руководство по кастомизации deploy.yml ### Безопасность и качество - **[docs/vault-guide.md](docs/vault-guide.md)** - Работа с Ansible Vault - **[docs/linting-guide.md](docs/linting-guide.md)** - Руководство по линтингу ролей ### Мониторинг и диагностика - **[docs/monitoring.md](docs/monitoring.md)** - Мониторинг, диагностика и troubleshooting - **[docs/buildx-fixes.md](docs/buildx-fixes.md)** - Исправление проблем с Docker Buildx ### Платформы и примеры - **[docs/platform-support.md](docs/platform-support.md)** - Поддержка платформ - **[docs/examples.md](docs/examples.md)** - Примеры использования ### Документация по ролям - **[roles/docker/README.md](roles/docker/README.md)** - Документация роли Docker - **[roles/devops/README.md](roles/devops/README.md)** - Документация роли DevOps - **[roles/ping/README.md](roles/ping/README.md)** - Документация роли Ping ### Docker образы - **[docs/dockerfiles.md](docs/dockerfiles.md)** - Полная документация по Docker образам ### Kubernetes **Полная документация:** [docs/kubernetes-kind.md](docs/kubernetes-kind.md) DevOpsLab предоставляет полную поддержку локальных Kubernetes кластеров на базе Kind: #### Основные команды ```bash # Создание кластера с аддонами 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 образы для различных ОС: - **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 Все образы с поддержкой systemd для корректной работы служб. ## 🛠️ Разработка новых ролей ### Создание структуры роли ```bash 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:** ```yaml --- - name: Пример задачи debug: msg: "Роль my-role выполнена" ``` **defaults/main.yml:** ```yaml --- # Переменные по умолчанию my_role_enabled: true my_role_version: "1.0.0" ``` **README.md:** ```markdown # Роль My-Role Описание роли... ``` ### Тестирование новой роли ```bash # Проверка синтаксиса 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](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 доступом ## 🤝 Вклад в проект 1. Fork репозитория 2. Создайте feature branch (`git checkout -b feature/amazing-feature`) 3. Commit изменения (`git commit -m 'Add amazing feature'`) 4. Push в branch (`git push origin feature/amazing-feature`) 5. Создайте Pull Request ## 📄 Лицензия MIT License ## 📞 Поддержка При возникновении проблем: 1. Проверьте наличие Docker 2. Убедитесь, что все preset файлы существуют 3. Используйте `make role lint` для проверки синтаксиса 4. Проверьте логи тестирования ## 🎉 Основные достижения - ✅ Универсальная preset система - ✅ Мультиплатформенное тестирование - ✅ Автоматическая проверка синтаксиса - ✅ Управление секретами через Ansible Vault - ✅ Готовые Docker образы для разных ОС - ✅ CI/CD интеграция - ✅ Kubernetes Kind кластеры для тестирования --- **Автор:** Сергей Антропов **Сайт:** https://devops.org.ru