Files
DevOpsLab/docs/kubernetes-kind.md
Сергей Антропов 881502ad69
Some checks failed
Ansible Testing / lint (push) Has been cancelled
Ansible Testing / test (default) (push) Has been cancelled
Ansible Testing / test (minimal) (push) Has been cancelled
Ansible Testing / test (performance) (push) Has been cancelled
Ansible Testing / deploy-check (push) Has been cancelled
feat: добавить поддержку Kubernetes Kind кластеров
- Создан новый Docker образ k8s для работы с Kind, kubectl, Helm, Istio CLI
- Добавлены команды make k8s: create, destroy, stop, start, status, config, nodes, addon, shell
- Добавлена поддержка пресетов Kubernetes в molecule/presets/k8s/
- Создан скрипт create_k8s_cluster.py для автоматического создания кластеров и установки аддонов
- Добавлена документация docs/kubernetes-kind.md
- Команды kubectl выполняются внутри контейнера k8s, не требуют локальной установки
2025-10-26 03:30:58 +03:00

298 lines
9.7 KiB
Markdown
Raw 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.

# Kubernetes Kind Кластеры
**Автор:** Сергей Антропов
**Сайт:** https://devops.org.ru
## Описание
Проект поддерживает автоматическое создание и управление Kubernetes кластерами на базе [Kind](https://kind.sigs.k8s.io/) для тестирования в изолированной лабораторной среде.
## Возможности
- Создание Kind кластеров с настраиваемым количеством worker-узлов
- Автоматическая установка аддонов:
- Ingress NGINX Controller
- Metrics Server
- Istio Service Mesh
- Kiali (визуализация Istio)
- Prometheus Stack (Prometheus + Grafana)
- Настройка портов для внешнего доступа к аддонам
- Интеграция с Docker контейнерами в одной лабораторной сети
## Команды
### Создание кластера
```bash
# Создание минимального кластера (без аддонов)
make k8s create
# Создание кластера с полным набором аддонов
make k8s create kubernetes
# Использование пользовательского пресета
make k8s create my-custom-preset
```
### Управление кластером
```bash
# Удаление кластера
make k8s destroy [preset]
# Остановка кластера (без удаления)
make k8s stop [cluster]
# Запуск остановленного кластера
make k8s start [cluster]
# Проверка статуса кластера
make k8s status [cluster]
# Получение kubeconfig для подключения
make k8s config [cluster]
# Открытие shell в контейнере
make k8s shell
```
## Конфигурация
### Пресеты Kubernetes хранятся в `molecule/presets/k8s/`
#### Минимальный кластер (`k8s-minimal.yml`)
```yaml
kind_clusters:
- name: minimal
workers: 0 # Только control-plane узел
api_port: 6443
```
#### Полный кластер с аддонами (`kubernetes.yml`)
```yaml
kind_clusters:
- name: lab
workers: 2
api_port: 6443
addons:
ingress_nginx: true
metrics_server: true
istio: true
kiali: true
prometheus_stack: true
ingress_host_http_port: 8081
ingress_host_https_port: 8443
# Порты для внешнего доступа к аддонам
addon_ports:
prometheus: 9090
grafana: 3000
kiali: 20001
```
## Доступ к аддонам
После создания кластера с аддонами, они доступны на следующих портах:
### Prometheus
```bash
# Web UI доступна на порту 9090
http://localhost:9090
```
### Grafana
```bash
# Web UI доступна на порту 3000
http://localhost:3000
# Пароль администратора
kubectl get secret -n monitoring monitoring-grafana \
-o jsonpath="{.data.admin-password}" | base64 -d
# Логин: admin
# Пароль: (получен выше)
```
### Kiali
```bash
# Web UI доступна на порту 20001
http://localhost:20001
# Аутентификация: anonymous (отключена по умолчанию)
```
### Istio Ingress
```bash
# HTTP доступен на порту 8081
http://localhost:8081
# HTTPS доступен на порту 8443
https://localhost:8443
```
## Примеры использования
### Создание и настройка кластера
```bash
# 1. Создать кластер с аддонами
make k8s create kubernetes
# 2. Проверить статус
make k8s status
# 3. Получить kubeconfig
make k8s config lab
# 4. Использовать kubeconfig
export KUBECONFIG=kubeconfig
kubectl get nodes
kubectl get pods -A
# 5. Открыть Grafana в браузере
open http://localhost:3000
# Логин: admin
# Пароль: (получить командой выше)
```
### Управление кластером
```bash
# Остановить кластер (без удаления)
make k8s stop lab
# Запустить остановленный кластер
make k8s start lab
# Проверить конкретный кластер
make k8s status lab
# Получить kubeconfig для конкретного кластера
make k8s config lab
# Удалить кластер
make k8s destroy kubernetes
```
### Работа внутри контейнера
```bash
# Открыть shell в контейнере ansible-controller
make k8s shell
# Внутри контейнера:
kind get clusters
kubectl --context kind-lab get nodes
istioctl --context kind-lab proxy-status
kubectl --context kind-lab get pods -n monitoring
```
## Архитектура
```
┌─────────────────────────────────────────────────────────┐
│ Docker Network: labnet │
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Ubuntu22 │ │ Debian12 │ │ Ansible │ │
│ │ Container │ │ Container │ │ Controller │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
│ │
│ ┌──────────────────────────────────────────────────┐ │
│ │ Kind Cluster: "lab" │ │
│ │ ┌──────────────┐ ┌──────────────┐ │ │
│ │ │ Control Plane│ │ Worker 1 │ │ │
│ │ │ Port 6443 │ │ │ │ │
│ │ └──────────────┘ └──────────────┘ │ │
│ │ ┌──────────────┐ │ │
│ │ │ Worker 2 │ │ │
│ │ └──────────────┘ │ │
│ │ │ │
│ │ NodePort Services: │ │
│ │ - Prometheus :9090 │ │
│ │ - Grafana :3000 │ │
│ │ - Kiali :20001 │ │
│ │ - Ingress :8081 (HTTP), :8443 (HTTPS) │ │
│ └──────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────┘
```
## Настройка портов аддонов
Вы можете настроить порты для внешнего доступа в пресете:
```yaml
kind_clusters:
- name: lab
workers: 2
addons:
prometheus_stack: true
kiali: true
addon_ports:
prometheus: 9090 # Prometheus UI
grafana: 3000 # Grafana UI
kiali: 20001 # Kiali UI
```
## Best Practices
1. **Минимальные ресурсы:** Для быстрого тестирования используйте `workers: 0` (только control-plane)
2. **Production-like:** Для реалистичных тестов используйте `workers: 2-3`
3. **Аддоны:** Включайте только необходимые аддоны для уменьшения времени создания
4. **Изоляция:** Каждый preset может иметь свой уникальный кластер с разными настройками
5. **Порты:** Используйте разные порты для разных кластеров, если запускаете несколько
## Troubleshooting
### Кластер не создается
```bash
# Проверить логи
docker logs ansible-controller
# Проверить доступное место на диске
df -h
# Проверить Docker ресурсы
docker system df
```
### Проблемы с аддонами
```bash
# Проверить статус подов
kubectl get pods -A
# Проверить сервисы
kubectl get svc -A
# Проверить порты
kubectl get svc -n monitoring
```
### Проблемы с Istio
```bash
# Переустановить Istio
istioctl uninstall -y --context kind-lab
istioctl install -y --set profile=demo --context kind-lab
```
### Проблемы с Prometheus Stack
```bash
# Переустановить
helm uninstall monitoring -n monitoring
helm upgrade --install monitoring prometheus-community/kube-prometheus-stack \
--namespace monitoring --kube-context kind-lab
```
## Дополнительные ресурсы
- [Kind Documentation](https://kind.sigs.k8s.io/docs/)
- [Istio Documentation](https://istio.io/latest/docs/)
- [Kiali Documentation](https://kiali.io/documentation/)
- [Prometheus Operator](https://prometheus-operator.dev/)