# Примеры использования ## Автор Сергей Антропов Сайт: https://devops.org.ru ## Описание Этот документ содержит практические примеры использования универсальной лаборатории для различных сценариев тестирования Ansible ролей. ## Содержание - [Базовые примеры](#базовые-примеры) - [Kubernetes примеры](#kubernetes-примеры) - [Docker примеры](#docker-примеры) - [Смешанные примеры](#смешанные-примеры) - [Мониторинг и отчеты](#мониторинг-и-отчеты) - [Troubleshooting](#troubleshooting) ## Базовые примеры ### Пример 1: Тестирование веб-сервера ```bash # Запустить веб-приложение пресет make lab-test LAB_SPEC=molecule/presets/webapp.yml # Проверить статус make lab-verify # Посмотреть отчет make lab-report ``` ### Пример 2: Тестирование базы данных ```bash # Запустить пресет с базой данных make lab-test LAB_SPEC=molecule/presets/ha.yml # Проверить подключение к БД make kube-cmd CLUSTER=lab CMD="exec -it postgres-0 -- psql -U postgres -c 'SELECT 1;'" ``` ### Пример 3: Тестирование микросервисов ```bash # Запустить микросервисный пресет make lab-test LAB_SPEC=molecule/presets/microservices.yml # Проверить API Gateway curl http://localhost:8000/health ``` ## Kubernetes примеры ### Пример 1: Простой Kubernetes кластер ```bash # Запустить одиночный Kind кластер make lab-test LAB_SPEC=molecule/presets/k8s-single.yml # Войти в кластер make kube-sh # Проверить ноды kubectl get nodes # Проверить поды kubectl get pods -A ``` ### Пример 2: Мульти-кластерная конфигурация ```bash # Запустить мульти-кластер make lab-test LAB_SPEC=molecule/presets/k8s-multi.yml # Переключиться между кластерами kubectl config use-context kind-dev kubectl get nodes kubectl config use-context kind-staging kubectl get nodes kubectl config use-context kind-prod kubectl get nodes ``` ### Пример 3: Istio Service Mesh ```bash # Запустить полный Istio стек make lab-test LAB_SPEC=molecule/presets/k8s-istio-full.yml # Port-forward Kiali make kiali-port-forward CLUSTER=istio-full # Port-forward Istio Gateway make istio-gw-port-forward CLUSTER=istio-full # Открыть Kiali open http://localhost:20001 # Открыть Bookinfo open http://localhost:8082/productpage ``` ### Пример 4: Мониторинг Kubernetes ```bash # Port-forward Grafana make grafana-port-forward CLUSTER=istio-full # Port-forward Prometheus make prom-port-forward CLUSTER=istio-full # Открыть Grafana open http://localhost:3000 # Открыть Prometheus open http://localhost:9090 ``` ## Docker примеры ### Пример 1: Docker-in-Docker ```bash # Запустить DinD пресет make lab-test LAB_SPEC=molecule/presets/dind-simple.yml # Войти в DinD контейнер docker exec -it dind1 sh # Внутри контейнера проверить Docker docker ps docker images ``` ### Пример 2: Docker Swarm ```bash # Запустить Docker Swarm пресет make lab-test LAB_SPEC=molecule/presets/dind-swarm.yml # Войти в manager docker exec -it swarm-manager sh # Инициализировать Swarm docker swarm init # Присоединить workers docker node ls ``` ### Пример 3: Docker Compose ```bash # Запустить Compose пресет make lab-test LAB_SPEC=molecule/presets/dind-compose.yml # Войти в compose контейнер docker exec -it compose-web sh # Создать docker-compose.yml cat > docker-compose.yml << EOF version: '3.8' services: web: image: nginx:alpine ports: - "80:80" api: image: node:alpine ports: - "3000:3000" EOF # Запустить стек docker-compose up -d ``` ### Пример 4: Docker-outside-of-Docker ```bash # Запустить DOoD пресет make lab-test LAB_SPEC=molecule/presets/dood-simple.yml # Войти в DOoD контейнер docker exec -it dood1 sh # Проверить доступ к Docker daemon хоста docker ps docker images ``` ## Смешанные примеры ### Пример 1: Kubernetes + DinD ```bash # Запустить смешанный пресет make lab-test LAB_SPEC=molecule/presets/mixed-k8s-dind.yml # Проверить Kubernetes make kube-cmd CLUSTER=hybrid CMD="get nodes" # Проверить DinD docker exec -it dind-dev sh docker ps ``` ### Пример 2: Kubernetes + DOoD ```bash # Запустить смешанный пресет make lab-test LAB_SPEC=molecule/presets/mixed-k8s-dood.yml # Проверить Kubernetes make kube-cmd CLUSTER=hybrid CMD="get pods -A" # Проверить DOoD docker exec -it dood-web sh docker ps ``` ### Пример 3: Полная гибридная конфигурация ```bash # Запустить полный смешанный пресет make lab-test LAB_SPEC=molecule/presets/mixed-full.yml # Проверить все компоненты make kube-cmd CLUSTER=full-stack CMD="get nodes" docker exec -it dind-dev sh docker exec -it dood-web sh ``` ## Мониторинг и отчеты ### Пример 1: Генерация HTML отчета ```bash # Запустить тест make lab-test LAB_SPEC=molecule/presets/enterprise.yml # Сгенерировать отчет make lab-report # Открыть отчет open reports/lab-report.html ``` ### Пример 2: Снапшоты ```bash # Создать снапшот make lab-snapshot # Восстановить из снапшота make lab-restore # Очистить лабораторию make lab-cleanup ``` ### Пример 3: Мониторинг в реальном времени ```bash # Port-forward всех сервисов мониторинга make grafana-port-forward CLUSTER=lab make prom-port-forward CLUSTER=lab make kiali-port-forward CLUSTER=lab # Открыть все дашборды open http://localhost:3000 # Grafana open http://localhost:9090 # Prometheus open http://localhost:20001 # Kiali ``` ## Troubleshooting ### Пример 1: Проблемы с портами ```bash # Проверить занятые порты netstat -tulpn | grep :8080 # Остановить все port-forward make kube-pf-stop # Перезапустить лабораторию make lab-reset ``` ### Пример 2: Проблемы с Docker ```bash # Проверить Docker daemon docker ps # Перезапустить Docker sudo systemctl restart docker # Очистить Docker docker system prune -a ``` ### Пример 3: Проблемы с Kubernetes ```bash # Проверить Kind кластеры kind get clusters # Удалить проблемный кластер kind delete cluster --name lab # Пересоздать кластер make lab-create ``` ### Пример 4: Проблемы с ресурсами ```bash # Проверить использование ресурсов docker stats # Ограничить ресурсы docker run --memory=512m --cpus=1.0 your-image # Очистить неиспользуемые ресурсы make lab-cleanup ``` ## Продвинутые примеры ### Пример 1: Создание собственного пресета ```bash # Создать новый пресет cat > molecule/presets/my-custom.yml << EOF --- # ПРЕСЕТ: Мой кастомный пресет # # Описание: Кастомная конфигурация для моих нужд # # Использование: make lab-test LAB_SPEC=molecule/presets/my-custom.yml docker_network: labnet images: debian: "ghcr.io/ansible-community/molecule-ubuntu-systemd:jammy" rhel: "quay.io/centos/centos:stream9-systemd" systemd_defaults: privileged: true command: "/sbin/init" volumes: - "/sys/fs/cgroup:/sys/fs/cgroup:ro" tmpfs: - "/run" - "/run/lock" capabilities: - "SYS_ADMIN" hosts: - name: my-web family: debian group: webservers publish: - "8080:80" - name: my-db family: rhel group: databases publish: - "5432:5432" EOF # Протестировать пресет make lab-test LAB_SPEC=molecule/presets/my-custom.yml ``` ### Пример 2: Создание собственной роли ```bash # Создать структуру роли mkdir -p roles/my-role/{tasks,handlers,templates,files,vars,defaults,meta} # Создать основной task cat > roles/my-role/tasks/main.yml << EOF --- - name: Install nginx package: name: nginx state: present - name: Start nginx service: name: nginx state: started enabled: true EOF # Создать playbook cat > files/playbooks/my-playbook.yml << EOF --- - name: Deploy my role hosts: webservers become: true roles: - my-role EOF # Протестировать роль make lab-test LAB_SPEC=molecule/presets/webapp.yml ``` ### Пример 3: Интеграция с CI/CD ```bash # Создать GitHub Actions workflow cat > .github/workflows/test.yml << EOF name: Test Ansible Roles on: push: branches: [ main ] pull_request: branches: [ main ] jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Setup Docker run: | docker-compose up -d - name: Run tests run: | make lab-test LAB_SPEC=molecule/presets/minimal.yml - name: Generate report run: | make lab-report - name: Upload report uses: actions/upload-artifact@v3 with: name: lab-report path: reports/lab-report.html EOF ``` ## Заключение Эти примеры демонстрируют основные возможности универсальной лаборатории. Для получения дополнительной информации обратитесь к [основной документации](universal-lab.md) и [описанию пресетов](presets.md).