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, не требуют локальной установки
9.7 KiB
9.7 KiB
Kubernetes Kind Кластеры
Автор: Сергей Антропов
Сайт: https://devops.org.ru
Описание
Проект поддерживает автоматическое создание и управление Kubernetes кластерами на базе Kind для тестирования в изолированной лабораторной среде.
Возможности
- Создание Kind кластеров с настраиваемым количеством worker-узлов
- Автоматическая установка аддонов:
- Ingress NGINX Controller
- Metrics Server
- Istio Service Mesh
- Kiali (визуализация Istio)
- Prometheus Stack (Prometheus + Grafana)
- Настройка портов для внешнего доступа к аддонам
- Интеграция с Docker контейнерами в одной лабораторной сети
Команды
Создание кластера
# Создание минимального кластера (без аддонов)
make k8s create
# Создание кластера с полным набором аддонов
make k8s create kubernetes
# Использование пользовательского пресета
make k8s create my-custom-preset
Управление кластером
# Удаление кластера
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)
kind_clusters:
- name: minimal
workers: 0 # Только control-plane узел
api_port: 6443
Полный кластер с аддонами (kubernetes.yml)
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
# Web UI доступна на порту 9090
http://localhost:9090
Grafana
# Web UI доступна на порту 3000
http://localhost:3000
# Пароль администратора
kubectl get secret -n monitoring monitoring-grafana \
-o jsonpath="{.data.admin-password}" | base64 -d
# Логин: admin
# Пароль: (получен выше)
Kiali
# Web UI доступна на порту 20001
http://localhost:20001
# Аутентификация: anonymous (отключена по умолчанию)
Istio Ingress
# HTTP доступен на порту 8081
http://localhost:8081
# HTTPS доступен на порту 8443
https://localhost:8443
Примеры использования
Создание и настройка кластера
# 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
# Пароль: (получить командой выше)
Управление кластером
# Остановить кластер (без удаления)
make k8s stop lab
# Запустить остановленный кластер
make k8s start lab
# Проверить конкретный кластер
make k8s status lab
# Получить kubeconfig для конкретного кластера
make k8s config lab
# Удалить кластер
make k8s destroy kubernetes
Работа внутри контейнера
# Открыть 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) │ │
│ └──────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────┘
Настройка портов аддонов
Вы можете настроить порты для внешнего доступа в пресете:
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
- Минимальные ресурсы: Для быстрого тестирования используйте
workers: 0(только control-plane) - Production-like: Для реалистичных тестов используйте
workers: 2-3 - Аддоны: Включайте только необходимые аддоны для уменьшения времени создания
- Изоляция: Каждый preset может иметь свой уникальный кластер с разными настройками
- Порты: Используйте разные порты для разных кластеров, если запускаете несколько
Troubleshooting
Кластер не создается
# Проверить логи
docker logs ansible-controller
# Проверить доступное место на диске
df -h
# Проверить Docker ресурсы
docker system df
Проблемы с аддонами
# Проверить статус подов
kubectl get pods -A
# Проверить сервисы
kubectl get svc -A
# Проверить порты
kubectl get svc -n monitoring
Проблемы с Istio
# Переустановить Istio
istioctl uninstall -y --context kind-lab
istioctl install -y --set profile=demo --context kind-lab
Проблемы с Prometheus Stack
# Переустановить
helm uninstall monitoring -n monitoring
helm upgrade --install monitoring prometheus-community/kube-prometheus-stack \
--namespace monitoring --kube-context kind-lab