Kind Clusters Dashboard — локальные кластеры Kubernetes (kind)
Проект сделан для тех, кому нужен локальный Kubernetes без облака и без ручной возни в терминале: kind остаётся движком, а поверх него — единая панель в браузере и REST API. В одном месте можно создавать и удалять кластеры, смотреть узлы и поды, ставить типовые вещи через Helm (ingress, мониторинг, metrics-server и др.), вести журнал операций и скачивать kubeconfig для работы с кластером с хоста или из других контейнеров. Удобно для обучения DevOps/Kubernetes, быстрой проверки манифестов и Helm-чартов, демо и песочниц, когда не хочется поднимать управляемый кластер и платить за API control plane.
Технически панель — это FastAPI в Docker-образе kind-k8s-tools:local, запуск через Makefile и Compose (Docker или Podman). На хосте по умолчанию интерфейс открывается на порту 8080 (переменная KIND_K8S_WEB_PORT в .env); внутри контейнера приложение слушает 6000. Порт 6000 наружу по умолчанию не пробрасываем: в Chrome и других браузерах на Chromium он считается небезопасным (ERR_UNSAFE_PORT). kind, kubectl и Helm ставятся в образ — на машине достаточно контейнерной среды и make. Данные кластеров и kubeconfig лежат на хосте в clusters/<имя>/.
Зачем это нужно
- Быстро получить Kubernetes локально (интеграционные тесты, манифесты, обучение) — см. ввод о назначении проекта выше.
- Версия кластера и число worker-нод задаются в веб-UI (или через REST API / скрипты в контейнере).
- Количество кластеров не ограничено кодом (ограничения — ресурсы хоста и Docker).
- Артефакты на хосте: clusters/<имя>/ — том для kubeconfig (доступен в контейнере как /work/clusters/<имя>/).
Требования на хосте
| Компонент |
Назначение |
| Docker + Compose v2 (или Podman + compose) |
Сборка образа и запуск веб-сервиса |
| make |
make docker up / make podman up и вспомогательные цели |
| python3 |
Только для make setup (создание .env) |
На хост не нужны: kind, kubectl, Python приложения — всё это в образе kind-k8s-tools:local и выполняется в контейнере kind-k8s-web. Проверка API и узлов: веб-интерфейс (кластер → узлы/поды) или make docker kubectl CLUSTER=<имя> / make podman kubectl … (см. ниже) — kubectl вызывается через docker compose exec / podman compose exec внутри уже запущенного сервиса.
Быстрый старт в docker-compose.yml
services:
kind-k8s-web:
image: inecs/kind-cluster-dashboard:v1.0.0
container_name: kind-clusters-dashboard
user: "0:0"
volumes:
- ./clusters}:/work/clusters
- /var/run/docker.sock:/var/run/docker.sock
ports:
- "8080:6000"
extra_hosts:
- "host.docker.internal:host-gateway"
environment:
HOME: /root
DOCKER_HOST: unix:///var/run/docker.sock
KIND_K8S_IN_CONTAINER: "1"
KIND_K8S_WORKDIR: /work
KIND_K8S_PATCH_KUBECONFIG: "1"
KIND_K8S_KUBECONFIG_CLIENT_HOST: localhost
KIND_K8S_KUBECONFIG_TLS_SERVER_NAME: localhost
KIND_K8S_APISERVER_GATEWAY_HOST: host.docker.internal
CONTAINER_CLI: docker
KIND_K8S_SKIP_VERSION_LIST: "0"
KIND_K8S_VERSION_LIST_DISPLAY: "50"
KIND_K8S_HUB_TAGS_MAX_PAGES: "120"
KIND_K8S_DEBUG: "0"
KIND_K8S_JOB_LOG_MAX_LINES: "2500"
KIND_K8S_STREAM_PTY: "1"
KIND_K8S_DOCKER_PULL_PLAIN: "1"
KIND_K8S_JOB_API_LOG_MAX_LINES: "5000"
KIND_K8S_JOBS_JSON: /work/clusters/kind_k8s_jobs.json
KIND_K8S_README_PATH: /opt/kind-k8s/README.md
KIND_K8S_WAIT_NODES: "1"
KIND_K8S_WAIT_NODES_TIMEOUT_SEC: "300"
KIND_K8S_HELM_TIMEOUT_SEC: "900"
KIND_K8S_HELM_VERSIONS_CACHE_SEC: "600"
KIND_K8S_HELM_VERSIONS_MAX: "80"
KIND_K8S_CLUSTER_JOURNAL_MAX_ENTRIES: "500"
KIND_K8S_CLUSTER_JOURNAL_MAX_LOG_LINES: "2000"
KIND_K8S_HELM_ADDON_LOG_MAX_ENTRIES: "500"
KIND_K8S_APP_TITLE: "Kind Clusters Dashboard"
KIND_K8S_UVICORN_RELOAD: "0"
working_dir: /opt/kind-k8s/app
command: ["/opt/kind-k8s/run_uvicorn.sh"]