- Создан новый 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
653 lines
14 KiB
Markdown
653 lines
14 KiB
Markdown
# Troubleshooting
|
||
|
||
## Автор
|
||
Сергей Антропов
|
||
Сайт: https://devops.org.ru
|
||
|
||
## Описание
|
||
|
||
Этот документ содержит решения наиболее распространенных проблем при работе с универсальной лабораторией.
|
||
|
||
## Содержание
|
||
|
||
- [Общие проблемы](#общие-проблемы)
|
||
- [Проблемы с Docker](#проблемы-с-docker)
|
||
- [Проблемы с Kubernetes](#проблемы-с-kubernetes)
|
||
- [Проблемы с портами](#проблемы-с-портами)
|
||
- [Проблемы с ресурсами](#проблемы-с-ресурсами)
|
||
- [Проблемы с сетью](#проблемы-с-сетью)
|
||
- [Проблемы с Ansible](#проблемы-с-ansible)
|
||
- [Проблемы с Molecule](#проблемы-с-molecule)
|
||
- [Проблемы с пресетами](#проблемы-с-пресетами)
|
||
- [Проблемы с отчетами](#проблемы-с-отчетами)
|
||
|
||
## Общие проблемы
|
||
|
||
### Проблема: Лаборатория не запускается
|
||
|
||
**Симптомы:**
|
||
- Команда `make lab-up` завершается с ошибкой
|
||
- Контейнеры не создаются
|
||
- Ошибки в логах Docker
|
||
|
||
**Решение:**
|
||
```bash
|
||
# Проверить статус Docker
|
||
docker ps
|
||
docker version
|
||
|
||
# Перезапустить Docker
|
||
sudo systemctl restart docker
|
||
|
||
# Очистить Docker
|
||
docker system prune -a
|
||
|
||
# Перезапустить лабораторию
|
||
make lab-reset
|
||
```
|
||
|
||
### Проблема: Команды Make не работают
|
||
|
||
**Симптомы:**
|
||
- `make: command not found`
|
||
- Ошибки в Makefile
|
||
|
||
**Решение:**
|
||
```bash
|
||
# Установить Make
|
||
# Ubuntu/Debian
|
||
sudo apt-get install make
|
||
|
||
# CentOS/RHEL
|
||
sudo yum install make
|
||
|
||
# macOS
|
||
brew install make
|
||
|
||
# Проверить версию
|
||
make --version
|
||
```
|
||
|
||
### Проблема: Недостаточно прав
|
||
|
||
**Симптомы:**
|
||
- `Permission denied`
|
||
- Ошибки доступа к файлам
|
||
|
||
**Решение:**
|
||
```bash
|
||
# Проверить права на файлы
|
||
ls -la
|
||
|
||
# Установить права
|
||
chmod +x scripts/*.sh
|
||
chmod 644 *.yml
|
||
|
||
# Добавить пользователя в группу docker
|
||
sudo usermod -aG docker $USER
|
||
newgrp docker
|
||
```
|
||
|
||
## Проблемы с Docker
|
||
|
||
### Проблема: Docker daemon не запущен
|
||
|
||
**Симптомы:**
|
||
- `Cannot connect to the Docker daemon`
|
||
- `docker: command not found`
|
||
|
||
**Решение:**
|
||
```bash
|
||
# Запустить Docker daemon
|
||
sudo systemctl start docker
|
||
sudo systemctl enable docker
|
||
|
||
# Проверить статус
|
||
sudo systemctl status docker
|
||
|
||
# Проверить доступ
|
||
docker ps
|
||
```
|
||
|
||
### Проблема: Недостаточно места на диске
|
||
|
||
**Симптомы:**
|
||
- `No space left on device`
|
||
- Ошибки создания контейнеров
|
||
|
||
**Решение:**
|
||
```bash
|
||
# Проверить использование диска
|
||
df -h
|
||
|
||
# Очистить Docker
|
||
docker system prune -a
|
||
docker volume prune
|
||
docker network prune
|
||
|
||
# Удалить неиспользуемые образы
|
||
docker image prune -a
|
||
```
|
||
|
||
### Проблема: Конфликты портов
|
||
|
||
**Симптомы:**
|
||
- `Port is already in use`
|
||
- Ошибки привязки портов
|
||
|
||
**Решение:**
|
||
```bash
|
||
# Найти процесс, использующий порт
|
||
sudo netstat -tulpn | grep :8080
|
||
sudo lsof -i :8080
|
||
|
||
# Убить процесс
|
||
sudo kill -9 <PID>
|
||
|
||
# Или изменить порт в пресете
|
||
publish:
|
||
- "8081:80" # Вместо 8080:80
|
||
```
|
||
|
||
### Проблема: DinD контейнеры не работают
|
||
|
||
**Симптомы:**
|
||
- DinD контейнеры не запускаются
|
||
- Ошибки Docker-in-Docker
|
||
|
||
**Решение:**
|
||
```bash
|
||
# Проверить privileged режим
|
||
docker run --privileged -d docker:dind
|
||
|
||
# Проверить доступ к Docker socket
|
||
docker run -v /var/run/docker.sock:/var/run/docker.sock docker:latest ps
|
||
|
||
# Перезапустить с правильными параметрами
|
||
make lab-reset
|
||
make lab-create
|
||
```
|
||
|
||
## Проблемы с Kubernetes
|
||
|
||
### Проблема: Kind кластер не создается
|
||
|
||
**Симптомы:**
|
||
- `kind create cluster` завершается с ошибкой
|
||
- Кластер не доступен
|
||
|
||
**Решение:**
|
||
```bash
|
||
# Проверить Kind
|
||
kind version
|
||
|
||
# Удалить существующие кластеры
|
||
kind delete cluster --name lab
|
||
|
||
# Очистить Docker
|
||
docker system prune -a
|
||
|
||
# Пересоздать кластер
|
||
make lab-create
|
||
```
|
||
|
||
### Проблема: kubectl не работает
|
||
|
||
**Симптомы:**
|
||
- `kubectl: command not found`
|
||
- Ошибки подключения к кластеру
|
||
|
||
**Решение:**
|
||
```bash
|
||
# Установить kubectl
|
||
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
|
||
chmod +x kubectl
|
||
sudo mv kubectl /usr/local/bin/
|
||
|
||
# Проверить конфигурацию
|
||
kubectl config get-contexts
|
||
|
||
# Переключиться на правильный контекст
|
||
kubectl config use-context kind-lab
|
||
```
|
||
|
||
### Проблема: Pods не запускаются
|
||
|
||
**Симптомы:**
|
||
- Pods в состоянии Pending
|
||
- Ошибки в логах pods
|
||
|
||
**Решение:**
|
||
```bash
|
||
# Проверить статус pods
|
||
kubectl get pods -A
|
||
kubectl describe pod <pod-name>
|
||
|
||
# Проверить события
|
||
kubectl get events --sort-by=.metadata.creationTimestamp
|
||
|
||
# Проверить ресурсы
|
||
kubectl top nodes
|
||
kubectl top pods
|
||
```
|
||
|
||
### Проблема: Istio не устанавливается
|
||
|
||
**Симптомы:**
|
||
- Istio компоненты не запускаются
|
||
- Ошибки в Istio логах
|
||
|
||
**Решение:**
|
||
```bash
|
||
# Проверить Istio
|
||
istioctl version
|
||
|
||
# Переустановить Istio
|
||
istioctl uninstall --purge
|
||
istioctl install --set profile=demo
|
||
|
||
# Проверить статус
|
||
kubectl get pods -n istio-system
|
||
```
|
||
|
||
## Проблемы с портами
|
||
|
||
### Проблема: Порт уже используется
|
||
|
||
**Симптомы:**
|
||
- `bind: address already in use`
|
||
- Ошибки привязки портов
|
||
|
||
**Решение:**
|
||
```bash
|
||
# Найти процесс
|
||
sudo lsof -i :8080
|
||
|
||
# Убить процесс
|
||
sudo kill -9 <PID>
|
||
|
||
# Или изменить порт в пресете
|
||
publish:
|
||
- "8081:80"
|
||
```
|
||
|
||
### Проблема: Port-forward не работает
|
||
|
||
**Симптомы:**
|
||
- Port-forward не устанавливается
|
||
- Ошибки подключения
|
||
|
||
**Решение:**
|
||
```bash
|
||
# Остановить все port-forward
|
||
make kube-pf-stop
|
||
|
||
# Проверить доступность сервиса
|
||
kubectl get svc -n istio-system
|
||
|
||
# Перезапустить port-forward
|
||
make kiali-port-forward CLUSTER=lab
|
||
```
|
||
|
||
## Проблемы с ресурсами
|
||
|
||
### Проблема: Недостаточно памяти
|
||
|
||
**Симптомы:**
|
||
- `Out of memory`
|
||
- Контейнеры завершаются
|
||
|
||
**Решение:**
|
||
```bash
|
||
# Проверить память
|
||
free -h
|
||
docker stats
|
||
|
||
# Ограничить ресурсы
|
||
docker run --memory=512m your-image
|
||
|
||
# Или уменьшить количество контейнеров в пресете
|
||
```
|
||
|
||
### Проблема: Недостаточно CPU
|
||
|
||
**Симптомы:**
|
||
- Медленная работа
|
||
- Высокая нагрузка на CPU
|
||
|
||
**Решение:**
|
||
```bash
|
||
# Проверить CPU
|
||
top
|
||
htop
|
||
|
||
# Ограничить CPU
|
||
docker run --cpus=1.0 your-image
|
||
|
||
# Или использовать более легкие образы
|
||
```
|
||
|
||
### Проблема: Недостаточно места на диске
|
||
|
||
**Симптомы:**
|
||
- `No space left on device`
|
||
- Ошибки записи
|
||
|
||
**Решение:**
|
||
```bash
|
||
# Проверить место
|
||
df -h
|
||
|
||
# Очистить Docker
|
||
docker system prune -a
|
||
docker volume prune
|
||
|
||
# Удалить неиспользуемые образы
|
||
docker image prune -a
|
||
```
|
||
|
||
## Проблемы с сетью
|
||
|
||
### Проблема: Контейнеры не могут связаться
|
||
|
||
**Симптомы:**
|
||
- Ping не работает между контейнерами
|
||
- Ошибки сети
|
||
|
||
**Решение:**
|
||
```bash
|
||
# Проверить сеть
|
||
docker network ls
|
||
docker network inspect labnet
|
||
|
||
# Пересоздать сеть
|
||
docker network rm labnet
|
||
docker network create labnet
|
||
|
||
# Перезапустить лабораторию
|
||
make lab-reset
|
||
```
|
||
|
||
### Проблема: DNS не работает
|
||
|
||
**Симптомы:**
|
||
- Не удается разрешить имена
|
||
- Ошибки DNS
|
||
|
||
**Решение:**
|
||
```bash
|
||
# Проверить DNS
|
||
nslookup google.com
|
||
|
||
# Перезапустить Docker
|
||
sudo systemctl restart docker
|
||
|
||
# Проверить resolv.conf
|
||
cat /etc/resolv.conf
|
||
```
|
||
|
||
## Проблемы с Ansible
|
||
|
||
### Проблема: Ansible не найден
|
||
|
||
**Симптомы:**
|
||
- `ansible: command not found`
|
||
- Ошибки выполнения playbook
|
||
|
||
**Решение:**
|
||
```bash
|
||
# Установить Ansible
|
||
pip install ansible
|
||
|
||
# Или через пакетный менеджер
|
||
sudo apt-get install ansible
|
||
|
||
# Проверить версию
|
||
ansible --version
|
||
```
|
||
|
||
### Проблема: Ошибки в playbook
|
||
|
||
**Симптомы:**
|
||
- Синтаксические ошибки
|
||
- Ошибки выполнения задач
|
||
|
||
**Решение:**
|
||
```bash
|
||
# Проверить синтаксис
|
||
ansible-playbook --syntax-check playbook.yml
|
||
|
||
# Запустить в режиме отладки
|
||
ansible-playbook -vvv playbook.yml
|
||
|
||
# Проверить инвентарь
|
||
ansible-inventory --list
|
||
```
|
||
|
||
### Проблема: Ошибки подключения
|
||
|
||
**Симптомы:**
|
||
- `Connection refused`
|
||
- Ошибки SSH
|
||
|
||
**Решение:**
|
||
```bash
|
||
# Проверить подключение
|
||
ansible all -m ping
|
||
|
||
# Проверить SSH ключи
|
||
ssh-keygen -t rsa -b 4096
|
||
ssh-copy-id user@host
|
||
|
||
# Или использовать пароль
|
||
ansible all -m ping -k
|
||
```
|
||
|
||
## Проблемы с Molecule
|
||
|
||
### Проблема: Molecule не найден
|
||
|
||
**Симптомы:**
|
||
- `molecule: command not found`
|
||
- Ошибки выполнения molecule
|
||
|
||
**Решение:**
|
||
```bash
|
||
# Установить Molecule
|
||
pip install molecule
|
||
|
||
# Или через пакетный менеджер
|
||
sudo apt-get install molecule
|
||
|
||
# Проверить версию
|
||
molecule --version
|
||
```
|
||
|
||
### Проблема: Ошибки в molecule.yml
|
||
|
||
**Симптомы:**
|
||
- Синтаксические ошибки в конфигурации
|
||
- Ошибки валидации
|
||
|
||
**Решение:**
|
||
```bash
|
||
# Проверить синтаксис
|
||
molecule syntax
|
||
|
||
# Проверить конфигурацию
|
||
molecule lint
|
||
|
||
# Исправить ошибки
|
||
molecule validate
|
||
```
|
||
|
||
### Проблема: Ошибки драйвера
|
||
|
||
**Симптомы:**
|
||
- Ошибки Docker драйвера
|
||
- Проблемы с контейнерами
|
||
|
||
**Решение:**
|
||
```bash
|
||
# Проверить драйвер
|
||
molecule driver list
|
||
|
||
# Установить Docker драйвер
|
||
pip install molecule-docker
|
||
|
||
# Перезапустить Molecule
|
||
molecule destroy
|
||
molecule create
|
||
```
|
||
|
||
## Проблемы с пресетами
|
||
|
||
### Проблема: Пресет не найден
|
||
|
||
**Симптомы:**
|
||
- `File not found`
|
||
- Ошибки загрузки пресета
|
||
|
||
**Решение:**
|
||
```bash
|
||
# Проверить путь
|
||
ls -la molecule/presets/
|
||
|
||
# Проверить синтаксис YAML
|
||
yamllint molecule/presets/your-preset.yml
|
||
|
||
# Исправить ошибки
|
||
molecule validate
|
||
```
|
||
|
||
### Проблема: Ошибки в пресете
|
||
|
||
**Симптомы:**
|
||
- Синтаксические ошибки
|
||
- Ошибки валидации
|
||
|
||
**Решение:**
|
||
```bash
|
||
# Проверить синтаксис
|
||
yamllint molecule/presets/your-preset.yml
|
||
|
||
# Проверить структуру
|
||
molecule validate
|
||
|
||
# Исправить ошибки
|
||
molecule syntax
|
||
```
|
||
|
||
## Проблемы с отчетами
|
||
|
||
### Проблема: HTML отчет не генерируется
|
||
|
||
**Симптомы:**
|
||
- `File not found`
|
||
- Ошибки генерации отчета
|
||
|
||
**Решение:**
|
||
```bash
|
||
# Проверить JSON файл
|
||
ls -la reports/
|
||
cat reports/lab-health.json
|
||
|
||
# Перезапустить верификацию
|
||
make lab-verify
|
||
|
||
# Сгенерировать отчет
|
||
make lab-report
|
||
```
|
||
|
||
### Проблема: Отчет пустой
|
||
|
||
**Симптомы:**
|
||
- Отчет не содержит данных
|
||
- Ошибки в JSON
|
||
|
||
**Решение:**
|
||
```bash
|
||
# Проверить JSON
|
||
jq . reports/lab-health.json
|
||
|
||
# Перезапустить тест
|
||
make lab-test
|
||
|
||
# Проверить логи
|
||
make lab-verify
|
||
```
|
||
|
||
## Полезные команды для диагностики
|
||
|
||
### Общие команды
|
||
|
||
```bash
|
||
# Проверить статус системы
|
||
docker ps
|
||
docker images
|
||
docker network ls
|
||
docker volume ls
|
||
|
||
# Проверить ресурсы
|
||
free -h
|
||
df -h
|
||
top
|
||
|
||
# Проверить сеть
|
||
netstat -tulpn
|
||
ss -tulpn
|
||
```
|
||
|
||
### Команды для Kubernetes
|
||
|
||
```bash
|
||
# Проверить кластеры
|
||
kind get clusters
|
||
kubectl config get-contexts
|
||
|
||
# Проверить ресурсы
|
||
kubectl get nodes
|
||
kubectl get pods -A
|
||
kubectl get svc -A
|
||
|
||
# Проверить события
|
||
kubectl get events --sort-by=.metadata.creationTimestamp
|
||
```
|
||
|
||
### Команды для Ansible
|
||
|
||
```bash
|
||
# Проверить инвентарь
|
||
ansible-inventory --list
|
||
ansible all -m ping
|
||
|
||
# Проверить playbook
|
||
ansible-playbook --syntax-check playbook.yml
|
||
ansible-playbook --check playbook.yml
|
||
```
|
||
|
||
## Получение помощи
|
||
|
||
Если проблема не решается:
|
||
|
||
1. **Проверьте логи:**
|
||
```bash
|
||
docker logs <container-name>
|
||
kubectl logs <pod-name>
|
||
```
|
||
|
||
2. **Создайте issue:**
|
||
- Опишите проблему
|
||
- Приложите логи
|
||
- Укажите версии компонентов
|
||
|
||
3. **Обратитесь к сообществу:**
|
||
- GitHub Discussions
|
||
- Discord/Slack каналы
|
||
- Форумы Ansible
|
||
|
||
4. **Проверьте документацию:**
|
||
- [Основная документация](universal-lab.md)
|
||
- [Примеры использования](examples.md)
|
||
- [API Reference](api.md)
|