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
This commit is contained in:
462
docs/examples.md
Normal file
462
docs/examples.md
Normal file
@@ -0,0 +1,462 @@
|
||||
# Примеры использования
|
||||
|
||||
## Автор
|
||||
Сергей Антропов
|
||||
Сайт: 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).
|
||||
Reference in New Issue
Block a user