Документация и kubectl из контейнера; Kind Clusters Dashboard
- Цель make docker|podman kubectl CLUSTER=… (KUBECTL_ARGS) — exec kubectl в kind-k8s-web - README: без kubectl на хосте; раздел про проверку API из контейнера - create_cluster/cluster_status: подсказки для UI, make kubectl и exec в контейнере - app/docs: api_routes.md и README.md про kubectl и API workloads - Прочее: переименование проекта, документация, UI документации (ранее в рабочем дереве)
This commit is contained in:
41
README.md
41
README.md
@@ -1,4 +1,4 @@
|
||||
# kind-k8s-develop — локальные кластеры Kubernetes (kind)
|
||||
# Kind Clusters Dashboard — локальные кластеры Kubernetes (kind)
|
||||
|
||||
Образ **kind-k8s-tools:local** и **Makefile** поднимают **веб-интерфейс** (FastAPI) на порту **8080** на хосте по умолчанию (или **`KIND_K8S_WEB_PORT`** в `.env`; внутри контейнера приложение слушает **6000**). Порт **6000 на хосте** не используем по умолчанию: Chrome и другие браузеры на Chromium отдают **ERR_UNSAFE_PORT**. Через браузер создаёте и удаляете кластеры, смотрите статистику и вывод `kubectl`. **kubeconfig** сохраняется в `clusters/<имя>/`. На хосте достаточно **Docker** (или Podman) и **make**; **kind** и **kubectl** — внутри контейнера.
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
- Быстро получить Kubernetes без облака (интеграционные тесты, манифесты, обучение).
|
||||
- Версия кластера и число worker-нод задаются **в веб-UI** (или через REST API / скрипты в контейнере).
|
||||
- Количество кластеров **не ограничено** кодом (ограничения — ресурсы хоста и Docker).
|
||||
- Артефакты на хосте: `clusters/<имя>/` — удобно указать путь к `kubeconfig` в приложении или в `kubectl`.
|
||||
- Артефакты на хосте: `clusters/<имя>/` — том для `kubeconfig` (доступен в контейнере как `/work/clusters/<имя>/`).
|
||||
|
||||
## Веб-интерфейс
|
||||
|
||||
@@ -43,9 +43,10 @@
|
||||
| **Docker** + **Compose v2** (или **Podman** + compose) | Сборка образа и запуск веб-сервиса |
|
||||
| **make** | `make docker up` / `make podman up` и вспомогательные цели |
|
||||
| **python3** | Только для **`make setup`** (создание `.env`) |
|
||||
| **kubectl** (опционально) | Проверка API с хоста: `kubectl --kubeconfig=clusters/<имя>/kubeconfig get nodes` |
|
||||
|
||||
**В образ не обязательно ставить на хост:** kind, Python приложения — они внутри контейнера.
|
||||
**На хост не нужны:** **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`** внутри уже запущенного сервиса.
|
||||
|
||||
Файл **`clusters/<имя>/kubeconfig`** на хосте можно использовать **опционально**, если у вас локально установлен kubectl (например IDE или отладка) — после патча apiserver обычно указывает на `127.0.0.1:<порт>`.
|
||||
|
||||
Смонтированы **сокет** Docker/Podman и каталог **`./clusters`** → в контейнере **`/work/clusters`**. Каталог **`./app`** монтируется в **`/opt/kind-k8s/app`** для разработки без пересборки образа. Файл **`./README.md`** монтируется в **`/opt/kind-k8s/README.md`** (страница **«Документация»** и **`GET /api/v1/docs/readme`** без пересборки образа).
|
||||
|
||||
@@ -54,14 +55,14 @@
|
||||
## Быстрый старт
|
||||
|
||||
```bash
|
||||
cd kind-k8s-develop
|
||||
# Из корня клонированного репозитория Kind Clusters Dashboard (рядом с Makefile):
|
||||
make setup # опционально: интерактивно создать .env (Enter — дефолты из скрипта)
|
||||
make docker check-docker # или: make podman check-docker
|
||||
make docker up # или: make podman up
|
||||
# Браузер: http://127.0.0.1:8080 (порт: KIND_K8S_WEB_PORT в .env; не 6000 на хосте — Chrome ERR_UNSAFE_PORT)
|
||||
```
|
||||
|
||||
Из родительского каталога: `make -C kind-k8s-develop docker up`.
|
||||
Из родительского каталога: `make -C <каталог-корня-репозитория> docker up` (подставьте путь к каталогу с `Makefile`).
|
||||
|
||||
**Логи, статус и остановка:** `make docker logs` / `make podman logs` (follow), `make docker ps` / `make podman ps`, `make docker down` / `make podman down`.
|
||||
|
||||
@@ -87,7 +88,26 @@ docker compose run --rm --entrypoint python3 kind-k8s-web \
|
||||
|
||||
Рабочий каталог сервиса в образе — `/opt/kind-k8s/app`; том `clusters/` и сокет те же, что у `docker compose up`.
|
||||
|
||||
После успешного `kind create` по умолчанию выполняется **`kubectl wait`** готовности нод (`KIND_K8S_WAIT_NODES`, `KIND_K8S_WAIT_NODES_TIMEOUT_SEC` в `.env`).
|
||||
### kubectl без установки на хост
|
||||
|
||||
Пока запущен веб-сервис (`make docker up` или `make podman up`), **kubectl** из образа:
|
||||
|
||||
```bash
|
||||
# По умолчанию: get nodes (kubeconfig: /work/clusters/<имя>/kubeconfig внутри контейнера)
|
||||
make docker kubectl CLUSTER=<имя_кластера>
|
||||
# или: make podman kubectl CLUSTER=<имя_кластера>
|
||||
|
||||
make docker kubectl CLUSTER=<имя> KUBECTL_ARGS="get pods -A"
|
||||
make docker kubectl CLUSTER=<имя> KUBECTL_ARGS="config view --minify"
|
||||
```
|
||||
|
||||
Эквивалент вручную (из корня репозитория, **Docker**):
|
||||
|
||||
```bash
|
||||
docker compose exec kind-k8s-web kubectl --kubeconfig=/work/clusters/<имя>/kubeconfig get nodes
|
||||
```
|
||||
|
||||
После успешного `kind create` по умолчанию выполняется **`kubectl wait`** готовности нод (`KIND_K8S_WAIT_NODES`, `KIND_K8S_WAIT_NODES_TIMEOUT_SEC` в `.env`) — тоже **внутри** контейнера приложения.
|
||||
|
||||
## Команды Makefile
|
||||
|
||||
@@ -101,11 +121,12 @@ docker compose run --rm --entrypoint python3 kind-k8s-web \
|
||||
| `make docker compose-build` / `make podman compose-build` | Собрать образ `kind-k8s-tools:local` |
|
||||
| `make docker rebuild` / `make podman rebuild` | Пересборка образа **без кэша** (`build --no-cache`) и пересоздание контейнера (`up -d --force-recreate`) |
|
||||
| `make docker check-docker` / `make podman check-docker` | Проверить выбранный CLI и `compose version` |
|
||||
| `make docker kubectl CLUSTER=…` / `make podman kubectl CLUSTER=…` | **kubectl** в контейнере `kind-k8s-web` (опционально `KUBECTL_ARGS="…"`; по умолчанию `get nodes`). Сервис должен быть **up**. |
|
||||
| `make setup` | Интерактивно создать `.env` (список переменных в `scripts/setup_env_interactive.py`) |
|
||||
| `make clusters-dir` | Создать каталог `clusters/` |
|
||||
| `make docker …` / `make podman …` | Префикс **обязателен** для целей `up`, `down`, `logs`, `ps`, `compose-build`, `rebuild`, `check-docker` |
|
||||
| `make docker …` / `make podman …` | Префикс **обязателен** для целей `up`, `down`, `logs`, `ps`, `compose-build`, `rebuild`, `check-docker`, `kubectl` |
|
||||
|
||||
Цели `up`, `down`, `logs`, `ps`, `compose-build`, `rebuild` и `check-docker` **без** `docker`/`podman` в той же команде завершатся с подсказкой.
|
||||
Цели `up`, `down`, `logs`, `ps`, `compose-build`, `rebuild`, `check-docker` и `kubectl` **без** `docker`/`podman` в той же команде завершатся с подсказкой.
|
||||
|
||||
## Переменные окружения
|
||||
|
||||
@@ -179,6 +200,6 @@ make podman up
|
||||
|
||||
- Образ `kindest/node:v…` должен быть доступен для pull.
|
||||
- На **Windows** без WSL удобнее WSL2 + Docker Desktop.
|
||||
- Для проверки с хоста нужен отдельный **kubectl** (в образе kubectl только внутри контейнера).
|
||||
- **kubectl** на хосте **не обязателен**: используйте веб-UI или **`make docker kubectl`** / **`make podman kubectl`** (см. выше).
|
||||
- История заданий создания в UI/API хранится в памяти (до **200** записей); после перезапуска контейнера очищается.
|
||||
- При **`exec format error`** у kind пересоберите образ: `make docker rebuild COMPOSE_BUILD_FLAGS=--platform linux/arm64` (или `make podman …`, или `compose-build` без `--no-cache`, или `linux/amd64`).
|
||||
|
||||
Reference in New Issue
Block a user