docs: обновлена документация Kubernetes Kind

- Добавлен раздел 'Требования к системе' (Python 3, kubectl)
- Описан автоматический port-forward
- Добавлены все команды Helm (apply, delete, update, rollback, list, status)
- Добавлены команды управления Helm репозиториями
- Добавлены команды работы с манифестами
- Обновлены примеры использования
- Добавлен раздел Troubleshooting для port-forward
- Обновлена архитектура с учетом port-forward
- Добавлены порты Ingress и Metrics Server
This commit is contained in:
Сергей Антропов
2025-10-26 09:58:50 +03:00
parent 02eab55d73
commit 3b8c6e52ea

View File

@@ -7,17 +7,60 @@
Проект поддерживает автоматическое создание и управление Kubernetes кластерами на базе [Kind](https://kind.sigs.k8s.io/) для тестирования в изолированной лабораторной среде.
## Требования к системе
Для работы с Kubernetes кластерами **на локальной машине** требуется установить:
### 1. Python 3
Port-forward управляется Python скриптом. Установите Python 3:
**macOS:**
```bash
brew install python3
```
**Ubuntu/Debian:**
```bash
sudo apt update && sudo apt install -y python3 python3-pip
```
**CentOS/RHEL:**
```bash
sudo yum install -y python3 python3-pip
```
### 2. kubectl
`kubectl` используется для port-forward и работы с кластером. Установите kubectl:
**macOS:**
```bash
brew install kubectl
```
**Linux:**
```bash
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/
```
**Проверка установки:**
```bash
python3 --version
kubectl version --client
```
## Возможности
- Создание Kind кластеров с настраиваемым количеством worker-узлов
- Автоматическая установка аддонов:
- Ingress NGINX Controller
- Metrics Server
- Istio Service Mesh
- Kiali (визуализация Istio)
- Prometheus Stack (Prometheus + Grafana)
- Настройка портов для внешнего доступа к аддонам
- Интеграция с Docker контейнерами в одной лабораторной сети
- Создание Kind кластеров с настраиваемым количеством worker-узлов
- Автоматическая установка аддонов (Ingress NGINX, Metrics Server, Istio, Kiali, Prometheus Stack)
- **Автоматический port-forward** для доступа к аддонам
- ✅ Работа с Helm (установка, удаление, обновление чартов)
- ✅ Работа с Kubernetes манифестами
- ✅ Управление Docker контейнерами в лабораторной сети
- ✅ Интеграция с Istio Service Mesh
## Команды
@@ -34,26 +77,148 @@ make k8s create kubernetes
make k8s create my-custom-preset
```
**Что происходит при создании:**
1. Создается Docker контейнер `k8s-controller` с Kind, kubectl, Helm, Istio CLI
2. Создаются Docker контейнеры из раздела `hosts` пресета (если есть)
3. Создается Kind кластер с настройками из пресета
4. Устанавливаются аддоны (Ingress, Metrics Server, Istio, Kiali, Prometheus)
5. **Автоматически создается port-forward** для доступа к сервисам
### Управление кластером
```bash
# Удаление кластера
# Удаление кластера (с автоматической очисткой port-forward)
make k8s destroy [preset]
# Остановка кластера (без удаления)
make k8s stop [cluster]
make k8s stop [preset]
# Запуск остановленного кластера
make k8s start [cluster]
make k8s start [preset]
# Проверка статуса кластера
make k8s status [cluster]
make k8s status [preset]
# Получение kubeconfig для подключения
make k8s config [cluster]
make k8s config [preset]
# Открытие shell в контейнере
make k8s shell
# Открытие shell в контейнере k8s-controller
make k8s shell [preset]
# Просмотр узлов кластера
make k8s nodes [preset]
```
### Port-Forward (Проброс портов)
Port-forward **создается автоматически** при создании кластера и **удаляется автоматически** при его уничтожении.
```bash
# Создать port-forward для всех сервисов из preset
make k8s portforward create [preset]
# Просмотреть активные port-forward
make k8s portforward list
# Удалить конкретный port-forward по порту
make k8s portforward delete [port]
# Удалить все port-forward
make k8s portforward clear
# Пересоздать все port-forward (очистить + создать)
make k8s portforward recreate
```
**Порты по умолчанию:**
- **Prometheus:** 9090
- **Grafana:** 3000
- **Kiali:** 20001
- **Ingress HTTP:** 8081
- **Ingress HTTPS:** 8443
- **Metrics Server:** 4443
### Установка аддонов из манифестов
```bash
# Установить аддон из URL манифеста
make k8s addon [preset] [manifest_url]
# Пример: установить MetalLB
make k8s addon kubernetes https://raw.githubusercontent.com/metallb/metallb/v0.13.12/config/manifests/metallb-native.yaml
```
### Работа с манифестами
```bash
# Применить манифест
make k8s manifest apply [preset] [manifest_url_or_path]
# Удалить ресурсы из манифеста
make k8s manifest delete [preset] [manifest_url_or_path]
# Обновить манифест (apply с --force)
make k8s manifest update [preset] [manifest_url_or_path]
# Примеры:
make k8s manifest apply kubernetes https://example.com/app.yaml
make k8s manifest apply kubernetes ./manifests/my-app.yaml
make k8s manifest delete kubernetes ./manifests/my-app.yaml
```
### Работа с Helm
#### Установка и управление релизами
```bash
# Установить Helm chart
make k8s helm apply [preset] [release_name] [chart_name]
# Удалить Helm release
make k8s helm delete [preset] [release_name]
# Обновить Helm release
make k8s helm update [preset] [release_name] [chart_name]
# Откатить Helm release к предыдущей версии
make k8s helm rollback [preset] [release_name]
# Список всех Helm releases
make k8s helm list [preset]
# Статус конкретного Helm release
make k8s helm status [preset] [release_name]
# Примеры:
make k8s helm apply kubernetes my-app bitnami/nginx
make k8s helm status kubernetes my-app
make k8s helm list kubernetes
make k8s helm rollback kubernetes my-app
```
#### Управление Helm репозиториями
```bash
# Добавить Helm репозиторий
make k8s helmrepo add [preset] [repo_name] [repo_url]
# Список Helm репозиториев
make k8s helmrepo list [preset]
# Удалить Helm репозиторий
make k8s helmrepo delete [preset] [repo_name]
# Обновить Helm репозитории
make k8s helmrepo update [preset]
# Список пакетов (charts) в репозитории
make k8s helmrepo packages [preset] [repo_name]
# Примеры:
make k8s helmrepo add kubernetes bitnami https://charts.bitnami.com/bitnami
make k8s helmrepo list kubernetes
make k8s helmrepo packages kubernetes bitnami
make k8s helmrepo update kubernetes
```
## Конфигурация
@@ -82,18 +247,19 @@ kind_clusters:
istio: true
kiali: true
prometheus_stack: true
ingress_host_http_port: 8081
ingress_host_https_port: 8443
# Порты для внешнего доступа к аддонам
# Порты для port-forward
addon_ports:
ingress_http: 8081
ingress_https: 8443
prometheus: 9090
grafana: 3000
kiali: 20001
metrics_server: 4443
```
## Доступ к аддонам
После создания кластера с аддонами, они доступны на следующих портах:
После создания кластера с аддонами, они доступны через **автоматический port-forward**:
### Prometheus
```bash
@@ -136,68 +302,112 @@ https://localhost:8443
### Создание и настройка кластера
```bash
# 1. Создать кластер с аддонами
# 1. Создать кластер с аддонами (port-forward создастся автоматически!)
make k8s create kubernetes
# 2. Проверить статус
make k8s status
make k8s status kubernetes
# 3. Получить kubeconfig
make k8s config lab
# 3. Проверить port-forward
make k8s portforward list
# 4. Использовать kubeconfig
# 4. Получить kubeconfig
make k8s config kubernetes
# 5. Использовать kubeconfig
export KUBECONFIG=kubeconfig
kubectl get nodes
kubectl get pods -A
# 5. Открыть Grafana в браузере
# 6. Открыть Grafana в браузере
open http://localhost:3000
# Логин: admin
# Пароль: (получить командой выше)
```
### Управление кластером
### Работа с Helm
```bash
# Остановить кластер (без удаления)
make k8s stop lab
# 1. Добавить репозиторий
make k8s helmrepo add kubernetes bitnami https://charts.bitnami.com/bitnami
# Запустить остановленный кластер
make k8s start lab
# 2. Посмотреть доступные charts
make k8s helmrepo packages kubernetes bitnami
# Проверить конкретный кластер
make k8s status lab
# 3. Установить nginx
make k8s helm apply kubernetes nginx bitnami/nginx
# Получить kubeconfig для конкретного кластера
make k8s config lab
# 4. Проверить статус
make k8s helm status kubernetes nginx
# Удалить кластер
# 5. Посмотреть все релизы
make k8s helm list kubernetes
# 6. Откатить релиз
make k8s helm rollback kubernetes nginx
# 7. Удалить релиз
make k8s helm delete kubernetes nginx
```
### Работа с манифестами
```bash
# 1. Применить манифест из URL
make k8s manifest apply kubernetes https://k8s.io/examples/application/deployment.yaml
# 2. Применить манифест из файла
make k8s manifest apply kubernetes ./manifests/my-app.yaml
# 3. Обновить манифест
make k8s manifest update kubernetes ./manifests/my-app.yaml
# 4. Удалить ресурсы
make k8s manifest delete kubernetes ./manifests/my-app.yaml
```
### Управление портами
```bash
# Если нужно пересоздать port-forward
make k8s portforward recreate
# Посмотреть активные port-forward
make k8s portforward list
# Удалить конкретный порт (например, 3000 для Grafana)
make k8s portforward delete 3000
# Удалить все port-forward
make k8s portforward clear
```
### Полное удаление кластера
```bash
# Удалит кластер, контейнеры и все port-forward
make k8s destroy kubernetes
```
### Работа внутри контейнера
```bash
# Открыть shell в контейнере ansible-controller
make k8s shell
# Открыть shell в контейнере k8s-controller
make k8s shell kubernetes
# Внутри контейнера:
kind get clusters
kubectl --context kind-lab get nodes
istioctl --context kind-lab proxy-status
kubectl --context kind-lab get pods -n monitoring
helm list --all-namespaces
```
## Архитектура
```
┌─────────────────────────────────────────────────────────┐
│ Docker Network: labnet
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Ubuntu22 │ │ Debian12 │ │ Ansible │ │
│ │ Container │ │ Container │ │ Controller │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
│ Docker Network: kind
│ │
│ ┌──────────────────────────────────────────────────┐ │
│ │ Kind Cluster: "lab" │ │
@@ -209,19 +419,36 @@ kubectl --context kind-lab get pods -n monitoring
│ │ │ Worker 2 │ │ │
│ │ └──────────────┘ │ │
│ │ │ │
│ │ NodePort Services: │ │
│ │ ClusterIP Services: │ │
│ │ - Prometheus :9090 │ │
│ │ - Grafana :3000 │ │
│ │ - Kiali :20001 │ │
│ │ - Ingress :8081 (HTTP), :8443 (HTTPS) │ │
│ │ - Ingress :80 (HTTP), :443 (HTTPS) │ │
│ └──────────────────────────────────────────────────┘ │
│ │
│ ┌──────────────┐ │
│ │ k8s-controller│ ← kubectl port-forward │
│ │ (Kind, Helm) │ │
│ └──────────────┘ │
└─────────────────────────────────────────────────────────┘
│ kubectl port-forward
│ (localhost)
┌─────────────────────────────────────────────────────────┐
│ Локальная машина │
│ │
│ • localhost:9090 → Prometheus │
│ • localhost:3000 → Grafana │
│ • localhost:20001 → Kiali │
│ • localhost:8081 → Ingress HTTP │
│ • localhost:8443 → Ingress HTTPS │
└─────────────────────────────────────────────────────────┘
```
## Настройка портов аддонов
Вы можете настроить порты для внешнего доступа в пресете:
Вы можете настроить порты для port-forward в пресете:
```yaml
kind_clusters:
@@ -231,26 +458,48 @@ kind_clusters:
prometheus_stack: true
kiali: true
addon_ports:
prometheus: 9090 # Prometheus UI
grafana: 3000 # Grafana UI
kiali: 20001 # Kiali UI
prometheus: 9090 # Port-forward для Prometheus
grafana: 3000 # Port-forward для Grafana
kiali: 20001 # Port-forward для Kiali
ingress_http: 8081 # Port-forward для Ingress HTTP
ingress_https: 8443 # Port-forward для Ingress HTTPS
metrics_server: 4443 # Port-forward для Metrics Server
```
## Best Practices
1. **Минимальные ресурсы:** Для быстрого тестирования используйте `workers: 0` (только control-plane)
2. **Production-like:** Для реалистичных тестов используйте `workers: 2-3`
3. **Аддоны:** Включайте только необходимые аддоны для уменьшения времени создания
4. **Изоляция:** Каждый preset может иметь свой уникальный кластер с разными настройками
5. **Порты:** Используйте разные порты для разных кластеров, если запускаете несколько
1. **Порты:** Port-forward создается автоматически при создании кластера - не нужно делать это вручную
2. **Локальные зависимости:** Установите Python 3 и kubectl на локальной машине для работы port-forward
3. **Минимальные ресурсы:** Для быстрого тестирования используйте `workers: 0` (только control-plane)
4. **Production-like:** Для реалистичных тестов используйте `workers: 2-3`
5. **Аддоны:** Включайте только необходимые аддоны для уменьшения времени создания
6. **Удаление:** Используйте `make k8s destroy` - он автоматически очистит port-forward
7. **Helm:** Используйте официальные Helm charts из проверенных репозиториев
8. **Изоляция:** Каждый preset может иметь свой уникальный кластер с разными настройками
## Troubleshooting
### Port-forward не работает
```bash
# Проверить, что порт не занят
lsof -i :3000
# Пересоздать port-forward
make k8s portforward recreate
# Проверить активные port-forward
make k8s portforward list
# Проверить, что kubectl установлен локально
kubectl version --client
```
### Кластер не создается
```bash
# Проверить логи
docker logs ansible-controller
docker logs k8s-controller
# Проверить доступное место на диске
df -h
@@ -268,25 +517,32 @@ kubectl get pods -A
# Проверить сервисы
kubectl get svc -A
# Проверить порты
kubectl get svc -n monitoring
# Проверить логи
kubectl logs -n monitoring -l app.kubernetes.io/name=grafana
```
### Проблемы с Istio
```bash
# Переустановить Istio
istioctl uninstall -y --context kind-lab
istioctl install -y --set profile=demo --context kind-lab
# Открыть shell в контейнере
make k8s shell kubernetes
# Внутри контейнера:
istioctl proxy-status --context kind-lab
istioctl proxy-config --context kind-lab
```
### Проблемы с Prometheus Stack
### Python не установлен
```bash
# Переустановить
helm uninstall monitoring -n monitoring
helm upgrade --install monitoring prometheus-community/kube-prometheus-stack \
--namespace monitoring --kube-context kind-lab
# macOS
brew install python3
# Ubuntu/Debian
sudo apt update && sudo apt install -y python3 python3-pip
# Проверка
python3 --version
```
## Дополнительные ресурсы
@@ -295,3 +551,4 @@ helm upgrade --install monitoring prometheus-community/kube-prometheus-stack \
- [Istio Documentation](https://istio.io/latest/docs/)
- [Kiali Documentation](https://kiali.io/documentation/)
- [Prometheus Operator](https://prometheus-operator.dev/)
- [Helm Documentation](https://helm.sh/docs/)