- Создан новый README.md с полной документацией проекта - Перемещены все MD файлы в папку /docs - Создана структура документации: - docs/universal-lab.md - руководство по лаборатории - docs/presets.md - описание всех 21 пресета - docs/roles.md - структура и создание Ansible ролей - docs/examples.md - практические примеры использования - docs/troubleshooting.md - решение проблем - docs/api.md - справочник по API Основные возможности документации: - Полное описание всех возможностей лаборатории - 21 готовый пресет для различных сценариев - Подробные инструкции по использованию - Примеры создания собственных пресетов - Руководство по созданию Ansible ролей - Troubleshooting для решения проблем - API Reference для всех команд и параметров Структура проекта: - README.md - основная документация с ссылками - docs/ - централизованное хранение документации - molecule/presets/ - 21 готовый пресет - files/ - файлы для ролей и playbooks - scripts/ - скрипты для управления лабораторией Автор: Сергей Антропов Сайт: https://devops.org.ru
		
			
				
	
	
		
			463 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			463 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # Примеры использования
 | ||
| 
 | ||
| ## Автор
 | ||
| Сергей Антропов  
 | ||
| Сайт: 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).
 |