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

9.7 KiB
Raw Blame History

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

  1. Минимальные ресурсы: Для быстрого тестирования используйте workers: 0 (только control-plane)
  2. Production-like: Для реалистичных тестов используйте workers: 2-3
  3. Аддоны: Включайте только необходимые аддоны для уменьшения времени создания
  4. Изоляция: Каждый preset может иметь свой уникальный кластер с разными настройками
  5. Порты: Используйте разные порты для разных кластеров, если запускаете несколько

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

Дополнительные ресурсы