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

10 KiB
Raw Blame History

Примеры использования

Автор

Сергей Антропов
Сайт: https://devops.org.ru

Описание

Этот документ содержит практические примеры использования универсальной лаборатории для различных сценариев тестирования Ansible ролей.

Содержание

Базовые примеры

Пример 1: Тестирование веб-сервера

# Запустить веб-приложение пресет
make lab-test LAB_SPEC=molecule/presets/webapp.yml

# Проверить статус
make lab-verify

# Посмотреть отчет
make lab-report

Пример 2: Тестирование базы данных

# Запустить пресет с базой данных
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: Тестирование микросервисов

# Запустить микросервисный пресет
make lab-test LAB_SPEC=molecule/presets/microservices.yml

# Проверить API Gateway
curl http://localhost:8000/health

Kubernetes примеры

Пример 1: Простой Kubernetes кластер

# Запустить одиночный Kind кластер
make lab-test LAB_SPEC=molecule/presets/k8s-single.yml

# Войти в кластер
make kube-sh

# Проверить ноды
kubectl get nodes

# Проверить поды
kubectl get pods -A

Пример 2: Мульти-кластерная конфигурация

# Запустить мульти-кластер
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

# Запустить полный 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

# 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

# Запустить 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

# Запустить 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

# Запустить 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

# Запустить 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

# Запустить смешанный пресет
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

# Запустить смешанный пресет
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: Полная гибридная конфигурация

# Запустить полный смешанный пресет
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 отчета

# Запустить тест
make lab-test LAB_SPEC=molecule/presets/enterprise.yml

# Сгенерировать отчет
make lab-report

# Открыть отчет
open reports/lab-report.html

Пример 2: Снапшоты

# Создать снапшот
make lab-snapshot

# Восстановить из снапшота
make lab-restore

# Очистить лабораторию
make lab-cleanup

Пример 3: Мониторинг в реальном времени

# 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: Проблемы с портами

# Проверить занятые порты
netstat -tulpn | grep :8080

# Остановить все port-forward
make kube-pf-stop

# Перезапустить лабораторию
make lab-reset

Пример 2: Проблемы с Docker

# Проверить Docker daemon
docker ps

# Перезапустить Docker
sudo systemctl restart docker

# Очистить Docker
docker system prune -a

Пример 3: Проблемы с Kubernetes

# Проверить Kind кластеры
kind get clusters

# Удалить проблемный кластер
kind delete cluster --name lab

# Пересоздать кластер
make lab-create

Пример 4: Проблемы с ресурсами

# Проверить использование ресурсов
docker stats

# Ограничить ресурсы
docker run --memory=512m --cpus=1.0 your-image

# Очистить неиспользуемые ресурсы
make lab-cleanup

Продвинутые примеры

Пример 1: Создание собственного пресета

# Создать новый пресет
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: Создание собственной роли

# Создать структуру роли
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

# Создать 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

Заключение

Эти примеры демонстрируют основные возможности универсальной лаборатории. Для получения дополнительной информации обратитесь к основной документации и описанию пресетов.