- Удален скрипт scripts/manage_hosts.py - Удалены все вызовы из Makefile - Удалены упоминания из документации - Обновлена документация по Ingress - теперь требуется ручное добавление в /etc/hosts - Убрано автоматическое управление /etc/hosts (не состоятельное решение)
		
			
				
	
	
	
		
			11 KiB
		
	
	
	
	
	
	
	
			
		
		
	
	Скрипты управления Kubernetes
Автор: Сергей Антропов
Сайт: https://devops.org.ru
Обзор
В проекте используются несколько Python скриптов для автоматизации работы с Kubernetes кластерами на базе Kind. Все скрипты находятся в директории scripts/.
Скрипты
1. create_k8s_cluster.py
Назначение: Создание Kind кластера, установка аддонов и создание Docker контейнеров из пресета.
Принцип работы:
- 
Парсинг пресета: Читает YAML файл пресета (например, molecule/presets/k8s/kubernetes.yml)
- 
Создание Docker сети: - Проверяет наличие сети (по умолчанию labnet)
- Создает сеть если её нет
 
- Проверяет наличие сети (по умолчанию 
- 
Создание Docker контейнеров: - Читает секцию hostsиз пресета
- Для каждого хоста создает Docker контейнер с настройками из systemd_defaults
- Использует образы из секции images
 
- Читает секцию 
- 
Создание Kind кластера: - Генерирует конфигурацию Kind в формате YAML
- Настраивает extraPortMappingsдля Ingress портов
- Создает кластер через команду kind create cluster
 
- 
Установка аддонов: - Ingress NGINX: Устанавливает ingress-nginx controller через kubectl apply
- Metrics Server: Устанавливает metrics-server с патчем для insecure TLS
- Istio: Устанавливает Istio через istioctl с профилем demo
- Kiali: Устанавливает Kiali через Helm (использует Helm chart)
- Prometheus Stack: Устанавливает Prometheus + Grafana через Helm (kube-prometheus-stack)
 
- 
Подключение к сети Kind: Подключает контейнер k8s-controllerк сетиkindдля доступа к API серверу
Параметры:
python3 scripts/create_k8s_cluster.py <preset_file> <container_name>
Пример:
python3 scripts/create_k8s_cluster.py molecule/presets/k8s/kubernetes.yml k8s-controller
2. delete_hosts.py
Назначение: Удаление Docker контейнеров, созданных из секции hosts пресета.
Принцип работы:
- Парсинг пресета: Читает YAML файл пресета
- Получение списка хостов: Извлекает секцию hosts
- Удаление контейнеров: Для каждого хоста выполняет docker rm -f <host_name>
Параметры:
python3 scripts/delete_hosts.py <preset_file>
Пример:
python3 scripts/delete_hosts.py molecule/presets/k8s/kubernetes.yml
3. portforward.py
Назначение: Управление port-forward для доступа к сервисам Kubernetes извне кластера.
Принцип работы:
- 
Загрузка пресета: Читает файл molecule/presets/k8s/kubernetes.yml
- 
Получение kubeconfig: - Копирует kubeconfig из контейнера k8s-controllerчерезdocker exec
- Сохраняет во временный файл
 
- Копирует kubeconfig из контейнера 
- 
Модификация kubeconfig: - Заменяет server: https://0.0.0.0:6443наserver: https://localhost:6443
- Это необходимо для доступа с локальной машины
 
- Заменяет 
- 
Создание port-forward: - Запускает kubectl port-forwardдля каждого сервиса изaddon_ports
- Использует формат: kubectl port-forward -n <namespace> svc/<service> <local_port>:<remote_port>
- Управляет процессами через PID
 
- Запускает 
Команды:
- create- создает port-forward для всех сервисов
- list- показывает список активных портов
- clear- останавливает все port-forward процессы
- recreate- очищает и заново создает port-forward
- delete <port>- удаляет конкретный port-forward
Пример использования:
python3 scripts/portforward.py create
python3 scripts/portforward.py list
python3 scripts/portforward.py delete 3000
python3 scripts/portforward.py clear
Важно: Скрипт должен запускаться на локальной машине, где установлены kubectl и Python 3.
4. k8s_status.py
Назначение: Детальный отчет о состоянии Kubernetes кластера.
Принцип работы:
- 
Подключение к кластеру: - Получает имя кластера через kind get clusters
- Формирует адрес API сервера: https://<cluster_name>-control-plane:6443
- Выполняет все kubectl команды через docker exec k8s-controller
 
- Получает имя кластера через 
- 
Сбор информации: - Общая информация: версия Kubernetes
- Узлы: статус, ресурсы, описание каждого узла
- Namespaces: список всех namespace
- Использование ресурсов: метрики через metrics-server (если установлен)
- Pods: поды по каждому namespace
- Deployments: deployments по namespace
- DaemonSets: daemonsets по namespace
- StatefulSets: statefulsets по namespace
- Services: сервисы по namespace
- Ingress: ingress ресурсы
- PVC: PersistentVolumeClaims
- События: последние 20 событий по namespace
- Helm релизы: список установленных через Helm
 
- 
Форматирование вывода: - Использует секции с разделителями
- Группирует информацию по namespace
- Показывает только непустые секции
 
Пример использования:
python3 scripts/k8s_status.py
Интеграция:
- Автоматически вызывается командой make k8s status [preset]
Особенности:
- Выполняет все команды внутри контейнера k8s-controller
- Использует прямой адрес control-plane для подключения
- Обходит проблемы с kubeconfig через --insecure-skip-tls-verify
Архитектура взаимодействия
┌─────────────────────────────────────────────────────┐
│                Локальная машина                     │
│                                                     │
│  Makefile → Python скрипты → Docker API            │
│     ↓                    ↓             ↓           │
│  make k8s    scripts/*.py   docker exec             │
└─────────────────────────────────────────────────────┘
                        │
                        ↓
┌─────────────────────────────────────────────────────┐
│              Docker контейнер                       │
│         k8s-controller                              │
│  ┌──────────────────────────────────────────┐     │
│  │ kind, kubectl, helm, istioctl             │     │
│  └──────────────────────────────────────────┘     │
└─────────────────────────────────────────────────────┘
                        │
                        ↓
┌─────────────────────────────────────────────────────┐
│            Docker сеть: kind                        │
│  ┌──────────────────────────────────────────┐     │
│  │         Kind Kubernetes Cluster          │     │
│  │  • Control Plane (6443)                   │     │
│  │  • Worker Nodes                           │     │
│  │  • Services (ClusterIP)                   │     │
│  │  • Ingress                                │     │
│  └──────────────────────────────────────────┘     │
└─────────────────────────────────────────────────────┘
Общие принципы
- Изоляция: Все kubectl команды выполняются внутри контейнера k8s-controller
- Безопасность: Используется --insecure-skip-tls-verifyдля обхода проблем с сертификатами
- Автоматизация: Скрипты вызываются автоматически через Makefile
- Логгирование: Все скрипты выводят подробную информацию о своих действиях
Требования
- Python 3 (на локальной машине)
- kubectl (на локальной машине, для portforward.py)
- Docker
- Docker контейнер k8s-controllerдолжен быть запущен
Отладка
Если что-то не работает:
- 
Проверьте контейнер: docker ps | grep k8s-controller
- 
Запустите скрипт вручную: python3 scripts/k8s_status.py
- 
Посмотрите логи: docker logs k8s-controller
- 
Проверьте кластер: docker exec k8s-controller kubectl get nodes