Files
DevOpsLab/docs/examples.md
Sergey Antropoff 8071fba25f feat: Создана полная документация проекта с централизованным хранением
- Создан новый 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
2025-10-22 13:29:47 +03:00

463 lines
10 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Примеры использования
## Автор
Сергей Антропов
Сайт: 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).