Files
KindClustersDashboard/Makefile
Sergey Antropoff ae961ef5fe first commit
2026-04-04 05:15:54 +03:00

82 lines
5.2 KiB
Makefile
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Локальные кластеры Kubernetes через kind.
# Основной сценарий: только Docker (+ make) на хосте — скрипты и kind внутри образа kind-k8s-tools.
#
# Автор: Сергей Антропов — https://devops.org.ru
# https://kind.sigs.k8s.io/docs/user/quick-start/
.PHONY: help setup clusters-dir check-docker compose-build create delete list status \
create-host delete-host status-host check-host kubeconfig create-compose delete-compose
KIND_K8S_DIR := $(abspath $(dir $(lastword $(MAKEFILE_LIST))))
SETUP_ENV_SCRIPT := $(KIND_K8S_DIR)/scripts/setup_env_interactive.py
PYTHON ?= python3
COMPOSE ?= docker compose
# При ошибке «exec format error» у kind в контейнере: make compose-build COMPOSE_BUILD_FLAGS=--platform linux/arm64
COMPOSE_BUILD_FLAGS ?=
K8S_APP := /opt/kind-k8s/app
help: ## Показать справку
@echo "Команды (из каталога kind-k8s-develop или: make -C kind-k8s-develop <цель>):"
@echo " Основной путь — Docker: make create / delete / list / status (kind и Python не нужны на хосте)."
@grep -E '^[a-zA-Z0-9_-]+:.*?##' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?##"} {printf " \033[36m%-22s\033[0m %s\n", $$1, $$2}'
setup: ## Интерактивно создать .env по env.example (scripts/setup_env_interactive.py)
@$(PYTHON) "$(SETUP_ENV_SCRIPT)"
clusters-dir: ## Создать каталог clusters/ для тома (если ещё нет)
@mkdir -p "$(KIND_K8S_DIR)/clusters"
check-docker: ## Проверить docker/podman в PATH и работу команды COMPOSE (по умолчанию docker compose)
@command -v docker >/dev/null 2>&1 || command -v podman >/dev/null 2>&1 || { echo "Нужен docker или podman в PATH."; exit 1; }
@$(COMPOSE) version >/dev/null 2>&1 || { echo "Нужна рабочая команда Compose: «$(COMPOSE)». Для Podman: COMPOSE='podman compose' make check-docker"; exit 1; }
@echo "$(COMPOSE): OK"
compose-build: clusters-dir ## Собрать образ kind-k8s-tools
cd "$(KIND_K8S_DIR)" && $(COMPOSE) build $(COMPOSE_BUILD_FLAGS)
# --- Сценарий без установки kind/kubectl/python на хост (только Docker) ---
create: compose-build ## Интерактивно создать кластер (всё в контейнере)
cd "$(KIND_K8S_DIR)" && $(COMPOSE) run --rm -it kind-k8s-tools python3 $(K8S_APP)/create_cluster.py
delete: compose-build ## Интерактивно удалить кластер и папку clusters/<имя>/
cd "$(KIND_K8S_DIR)" && $(COMPOSE) run --rm -it kind-k8s-tools python3 $(K8S_APP)/delete_cluster.py
list: compose-build ## Список кластеров kind (kind внутри контейнера)
cd "$(KIND_K8S_DIR)" && $(COMPOSE) run --rm kind-k8s-tools kind get clusters
status: compose-build ## Статус узлов; make status CLUSTER=имя — один кластер
cd "$(KIND_K8S_DIR)" && $(COMPOSE) run --rm -it kind-k8s-tools python3 $(K8S_APP)/cluster_status.py $(CLUSTER)
# Совместимость со старыми именами целей
create-compose: ## то же, что create (совместимость)
@$(MAKE) -C "$(KIND_K8S_DIR)" create
delete-compose: ## то же, что delete (совместимость)
@$(MAKE) -C "$(KIND_K8S_DIR)" delete
# --- Локальный запуск скриптов на хосте (нужны kind, kubectl, python3) ---
check-host: ## Проверить docker, kind, kubectl, python3 на хосте
@echo "--- check-host (локальные бинарники) ---"
@command -v docker >/dev/null 2>&1 && echo " docker: $$(command -v docker)" || { echo " docker: НЕ НАЙДЕН"; exit 1; }
@command -v kind >/dev/null 2>&1 && echo " kind: $$(command -v kind)" || { echo " kind: НЕ НАЙДЕН (см. https://kind.sigs.k8s.io/docs/user/quick-start/#installation)"; exit 1; }
@command -v kubectl >/dev/null 2>&1 && echo " kubectl: $$(command -v kubectl)" || { echo " kubectl: НЕ НАЙДЕН"; exit 1; }
@command -v $(PYTHON) >/dev/null 2>&1 && echo " $(PYTHON): $$(command -v $(PYTHON))" || { echo " $(PYTHON): НЕ НАЙДЕН"; exit 1; }
create-host: check-host ## Создать кластер скриптом на хосте (не через образ)
cd "$(KIND_K8S_DIR)" && $(PYTHON) app/create_cluster.py
delete-host: ## Удалить кластер скриптом на хосте
@command -v $(PYTHON) >/dev/null 2>&1 || { echo "Нужен $(PYTHON)"; exit 1; }
cd "$(KIND_K8S_DIR)" && $(PYTHON) app/delete_cluster.py
status-host: check-host ## Статус узлов скриптом на хосте
cd "$(KIND_K8S_DIR)" && \
if [ -n "$(CLUSTER)" ]; then $(PYTHON) app/cluster_status.py "$(CLUSTER)"; else $(PYTHON) app/cluster_status.py; fi
kubeconfig: ## Путь к kubeconfig на хосте: make kubeconfig CLUSTER=имя
@if [ -z "$(CLUSTER)" ]; then echo "Использование: make kubeconfig CLUSTER=<имя_кластера>"; exit 1; fi
@test -f "$(KIND_K8S_DIR)/clusters/$(CLUSTER)/kubeconfig" || { echo "Файл не найден: clusters/$(CLUSTER)/kubeconfig"; exit 1; }
@echo "$(KIND_K8S_DIR)/clusters/$(CLUSTER)/kubeconfig"