Files
KindClustersDashboard/docker-compose.yml
Sergey Antropoff 4b703801e1 Kiali anonymous, журнал Helm, kubeconfig для контейнеров, UI аддонов
- Kiali: убран login, anonymous по умолчанию; удалены поля логина/пароля из UI и API
- Журнал Helm: install/upgrade/delete, message и колонка в journal.js
- Аддоны: values свёрнуты при подгрузке для установленных
- GET …/kubeconfig/docker: host.docker.internal:порт + tls-server-name; кнопка в UI
- apply_apiserver_endpoint_to_kubeconfig_file; KIND_K8S_APISERVER_GATEWAY_HOST в compose/env.example
- README и api_routes.md обновлены
2026-04-04 18:54:10 +03:00

89 lines
6.3 KiB
YAML
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.

# Веб-UI kind: том ./clusters, сокет Docker/Podman. Каталог ./app монтируется в контейнер —
# правки Python/шаблонов/static без пересборки образа; uvicorn --reload (см. KIND_K8S_UVICORN_RELOAD).
# Запуск: make docker up
#
# Podman (пример rootless):
# export CONTAINER_SOCKET="$XDG_RUNTIME_DIR/podman/podman.sock"
# make podman up
#
# Доступ к сокету: при rootless Podman сокет часто принадлежит вашему UID; процесс в контейнере
# должен совпадать по UID/GID. «make podman …» передаёт KIND_K8S_CONTAINER_UIDGID и HOME (см. Makefile).
# Вручную: KIND_K8S_CONTAINER_UIDGID=$(id -u):$(id -g) KIND_K8S_CONTAINER_HOME=/tmp podman compose up -d
# SELinux (Fedora и т.д.): при «permission denied» попробуйте CONTAINER_SOCKET_VOLUME_OPTS=:Z в .env
# Podman rootless: «make podman …» подключает docker-compose.podman.yml (userns_mode: keep-id), подставляет
# путь к podman.sock и монтирует его в контейнер как /run/podman/podman.sock (см. CONTAINER_SOCKET_MOUNT_TARGET,
# KIND_K8S_REMOTE_SOCKET_URI). В .env нужны KIND_K8S_CONTAINER_UIDGID / KIND_K8S_CONTAINER_HOME (make setup).
#
# Автор: Сергей Антропов — https://devops.org.ru
services:
kind-k8s-web:
build:
context: .
dockerfile: Dockerfile
args:
KIND_VERSION: ${KIND_VERSION:-0.24.0}
KUBECTL_VERSION: ${KUBECTL_VERSION:-}
HELM_VERSION: ${HELM_VERSION:-v3.16.3}
image: kind-k8s-tools:local
container_name: kind-clusters-dashboard
# 0:0 — как root в образе (Docker Desktop и т.д.). Для rootless Podman задайте UID:GID владельца сокета.
user: "${KIND_K8S_CONTAINER_UIDGID:-0:0}"
volumes:
- ./clusters:/work/clusters
- ${CONTAINER_SOCKET:-/var/run/docker.sock}:${CONTAINER_SOCKET_MOUNT_TARGET:-/var/run/docker.sock}${CONTAINER_SOCKET_VOLUME_OPTS:-}
# Локальная разработка: код с хоста сразу в контейнере (пересборка образа не нужна).
- ./app:/opt/kind-k8s/app
# README для /documentation и GET /api/v1/docs/readme (без пересборки образа).
- ./README.md:/opt/kind-k8s/README.md:ro
working_dir: /opt/kind-k8s/app
# Хост по умолчанию 8080: порт 6000 в Chrome/Edge даёт ERR_UNSAFE_PORT; внутри контейнера слушает 6000.
ports:
- "${KIND_K8S_WEB_PORT:-8080}:6000"
# Доступ к apiserver kind с проброшенного порта хоста (kubectl внутри контейнера веб-UI).
extra_hosts:
- "host.docker.internal:host-gateway"
environment:
# Не-root в контейнере: домашний каталог (в образе нет /home/<uid>).
HOME: ${KIND_K8S_CONTAINER_HOME:-/root}
# docker-cli и kind читают DOCKER_HOST; путь должен совпадать с правой частью тома сокета выше.
DOCKER_HOST: ${KIND_K8S_REMOTE_SOCKET_URI:-unix:///var/run/docker.sock}
KIND_K8S_IN_CONTAINER: "1"
KIND_K8S_WORKDIR: /work
# kubeconfig.host на томе; скачивание в UI патчит копию с KIND_K8S_KUBECONFIG_CLIENT_HOST (по умолчанию localhost).
KIND_K8S_PATCH_KUBECONFIG: ${KIND_K8S_PATCH_KUBECONFIG:-1}
KIND_K8S_KUBECONFIG_CLIENT_HOST: ${KIND_K8S_KUBECONFIG_CLIENT_HOST:-localhost}
# Для kubectl внутри контейнера при server=host.docker.internal: SAN kind — localhost (редко менять).
KIND_K8S_KUBECONFIG_TLS_SERVER_NAME: ${KIND_K8S_KUBECONFIG_TLS_SERVER_NAME:-localhost}
# Хост в server= для GET …/kubeconfig/docker и для kubectl в контейнере (проброс порта на хост); пусто — host.docker.internal.
KIND_K8S_APISERVER_GATEWAY_HOST: ${KIND_K8S_APISERVER_GATEWAY_HOST:-}
CONTAINER_CLI: ${CONTAINER_CLI:-docker}
KIND_K8S_SKIP_VERSION_LIST: ${KIND_K8S_SKIP_VERSION_LIST:-}
KIND_K8S_VERSION_LIST_DISPLAY: ${KIND_K8S_VERSION_LIST_DISPLAY:-}
KIND_K8S_HUB_TAGS_MAX_PAGES: ${KIND_K8S_HUB_TAGS_MAX_PAGES:-}
KIND_K8S_DEBUG: ${KIND_K8S_DEBUG:-}
KIND_K8S_JOB_LOG_MAX_LINES: ${KIND_K8S_JOB_LOG_MAX_LINES:-}
# Псевдо-TTY для потоковых команд (0 = pipe). Для docker pull по умолчанию используется --progress=plain без PTY.
KIND_K8S_STREAM_PTY: ${KIND_K8S_STREAM_PTY:-}
KIND_K8S_DOCKER_PULL_PLAIN: ${KIND_K8S_DOCKER_PULL_PLAIN:-}
# Сколько строк журнала отдавать в GET /api/v1/jobs/{id} (по умолчанию 5000 в коде).
KIND_K8S_JOB_API_LOG_MAX_LINES: ${KIND_K8S_JOB_API_LOG_MAX_LINES:-}
KIND_K8S_JOBS_JSON: ${KIND_K8S_JOBS_JSON:-}
KIND_K8S_README_PATH: ${KIND_K8S_README_PATH:-}
KIND_K8S_WAIT_NODES: ${KIND_K8S_WAIT_NODES:-}
KIND_K8S_WAIT_NODES_TIMEOUT_SEC: ${KIND_K8S_WAIT_NODES_TIMEOUT_SEC:-}
# Таймаут subprocess helm/kubectl на странице «Аддоны» (секунды, 607200).
KIND_K8S_HELM_TIMEOUT_SEC: ${KIND_K8S_HELM_TIMEOUT_SEC:-}
# Кэш списков версий чартов (helm search repo), секунды; лимит строк на чарт — KIND_K8S_HELM_VERSIONS_MAX.
KIND_K8S_HELM_VERSIONS_CACHE_SEC: ${KIND_K8S_HELM_VERSIONS_CACHE_SEC:-}
KIND_K8S_HELM_VERSIONS_MAX: ${KIND_K8S_HELM_VERSIONS_MAX:-}
# Журнал заданий в clusters/<имя>/journal/jobs_history.json
KIND_K8S_CLUSTER_JOURNAL_MAX_ENTRIES: ${KIND_K8S_CLUSTER_JOURNAL_MAX_ENTRIES:-}
KIND_K8S_CLUSTER_JOURNAL_MAX_LOG_LINES: ${KIND_K8S_CLUSTER_JOURNAL_MAX_LOG_LINES:-}
# Максимум записей в clusters/<имя>/helm_addon_log.json (история Helm).
KIND_K8S_HELM_ADDON_LOG_MAX_ENTRIES: ${KIND_K8S_HELM_ADDON_LOG_MAX_ENTRIES:-}
KIND_K8S_APP_TITLE: ${KIND_K8S_APP_TITLE:-}
# 1 — uvicorn --reload (изменения в ./app); 0 — один процесс без reload.
KIND_K8S_UVICORN_RELOAD: ${KIND_K8S_UVICORN_RELOAD:-1}
command: ["/opt/kind-k8s/run_uvicorn.sh"]