docs: публичный образ inecs/kind-cluster-dashboard:v1.0.0 в быстром старте и hub-compose

Синхронизация с дефолтами Makefile (DOCKERHUB_REPO, RELEASE_TAG).
Исправлен пробел в DOCKERHUB_REPO ?=.
This commit is contained in:
Sergey Antropoff
2026-04-05 00:40:14 +03:00
parent f0b24c8901
commit 5b5844289e
4 changed files with 281 additions and 1 deletions

133
README.md
View File

@@ -66,6 +66,139 @@
## Быстрый старт
### Готовый образ с Docker Hub (без сборки, без файла `.env`)
**Опубликованный образ:** **`inecs/kind-cluster-dashboard:v1.0.0`** (соответствует значениям по умолчанию в `Makefile`: `DOCKERHUB_REPO=inecs/kind-cluster-dashboard`, `RELEASE_TAG=v1.0.0`). Все теги: [hub.docker.com/r/inecs/kind-cluster-dashboard/tags](https://hub.docker.com/r/inecs/kind-cluster-dashboard/tags).
Сборка и отправка в Docker Hub (для сопровождения образа): **linux/amd64** (ПК **x86_64**) и **linux/arm64** (**Apple Silicon** и прочий ARM). Образ **linux/386** (32-bit x86) для **kind** официальными бинарниками не поставляется, поэтому в релиз не входит.
```bash
docker login
# По умолчанию пушит inecs/kind-cluster-dashboard:v1.0.0 (см. Makefile):
make release
# Или явно: make release DOCKERHUB_REPO=inecs/kind-cluster-dashboard RELEASE_TAG=v1.0.0
# Необязательно: KIND_VERSION=0.24.0 HELM_VERSION=v3.16.3 KUBECTL_VERSION=v1.32.0
```
Другой образ/тег задайте в shell: **`KIND_K8S_HUB_IMAGE=логин/репозиторий:тег`** при вызове compose (в YAML ниже то же через подстановку).
```bash
mkdir -p clusters
# Docker (файл в репозитории: compose/docker-compose.hub.docker.yml; образ по умолчанию — v1.0.0):
docker compose -f compose/docker-compose.hub.docker.yml up -d
# Другой тег: KIND_K8S_HUB_IMAGE=inecs/kind-cluster-dashboard:latest docker compose -f compose/docker-compose.hub.docker.yml up -d
# Podman — путь к API-сокету только через переменные окружения (не через .env):
export CONTAINER_SOCKET="${XDG_RUNTIME_DIR}/podman/podman.sock"
podman compose -f compose/docker-compose.hub.podman.yml up -d
```
Браузер: **http://127.0.0.1:8080** (в примерах ниже публикация **8080:6000**; при необходимости поменяйте в YAML).
Ниже — **полные** примеры `docker-compose`: все переменные **`environment`** заданы явно теми же значениями, что использует приложение по умолчанию (см. `docker-compose.yml`, `app/core/*.py`, `app/kubeconfig_patch.py`). **`.env` не нужен**. Актуальные копии — в [`compose/docker-compose.hub.docker.yml`](compose/docker-compose.hub.docker.yml) и [`compose/docker-compose.hub.podman.yml`](compose/docker-compose.hub.podman.yml).
**Docker** — вставьте в `docker-compose.yml` (или сохраните как отдельный файл):
```yaml
services:
kind-k8s-web:
image: ${KIND_K8S_HUB_IMAGE:-inecs/kind-cluster-dashboard:v1.0.0}
container_name: kind-clusters-dashboard
user: "0:0"
volumes:
- ${KIND_K8S_CLUSTERS_DIR:-./clusters}:/work/clusters
- ${CONTAINER_SOCKET:-/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"]
```
**Podman** — перед запуском: **`export CONTAINER_SOCKET="$XDG_RUNTIME_DIR/podman/podman.sock"`** (или фактический путь к `podman.sock`). При **EACCES** на сокет подберите **`user`** / **UID:GID** как в основном [`docker-compose.yml`](docker-compose.yml) и [`Makefile`](Makefile) для `make podman up`.
```yaml
services:
kind-k8s-web:
image: ${KIND_K8S_HUB_IMAGE:-inecs/kind-cluster-dashboard:v1.0.0}
container_name: kind-clusters-dashboard
userns_mode: keep-id
user: "0:0"
volumes:
- ${KIND_K8S_CLUSTERS_DIR:-./clusters}:/work/clusters
- ${CONTAINER_SOCKET}:/run/podman/podman.sock
ports:
- "8080:6000"
extra_hosts:
- "host.docker.internal:host-gateway"
environment:
HOME: /tmp
DOCKER_HOST: unix:///run/podman/podman.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: podman
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"]
```
### Запуск из репозитория (локальная сборка образа)
```bash
# Из корня клонированного репозитория Kind Clusters Dashboard (рядом с Makefile):
make setup # опционально: интерактивно создать .env (Enter — дефолты из скрипта)