feat: добавить поддержку Kubernetes Kind кластеров
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
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
- Создан новый 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, не требуют локальной установки
This commit is contained in:
297
docs/kubernetes-kind.md
Normal file
297
docs/kubernetes-kind.md
Normal file
@@ -0,0 +1,297 @@
|
||||
# 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/)
|
||||
Reference in New Issue
Block a user