🤖 K8s AI Diagnostic Hub

Видно, какой pod болен, и почему

K8s AI Diagnostic Hub следит за Kubernetes-кластером в реальном времени. Он читает состояние pod'ов, события и логи, выносит вердикт Healthy, Warning или Critical и объясняет причину простыми словами. Рядом рисует карту: какие сервисы друг к другу обращаются и где ломается связь.

Демо работает на вымышленных данных, подключать кластер не нужно.

Дашборд Hub: счётчики pod'ов и карточки с вердиктами Critical и Warning

Что умеет AI

Вердикт строят правила и состояние Kubernetes, а обучаемая модель даёт второй, независимый сигнал. Если они расходятся, Hub показывает это явно.

Вердикт и причина для каждого pod'а

Каждый pod получает статус Healthy, Warning или Critical и одну строку с причиной: OOMKilled, CrashLoopBackOff, ImagePullBackOff, не проходит readiness probe, нет места на узле. Pod'ы с проблемами идут первыми, namespace с Critical и Warning подсвечены в списке.

Закрытые события не поднимают тревогу: если Secret появился и контейнер запустился, Hub помечает событие как Recovered, а pod остаётся зелёным.

Блок AI model signal: модель не согласна с диагнозом Kubernetes, ниже кнопки для правильного вердикта
Просмотр логов предыдущего экземпляра контейнера с ошибкой OutOfMemoryError

Логи и доказательства ошибки

Hub показывает строку лога, по которой вынесен вердикт, и время ошибки. Ниже полный просмотр: до 10 000 строк на контейнер, период от 5 минут до 7 дней, логи предыдущего экземпляра до перезапуска, фильтр, режим «только ошибки», скачивание и копирование.

Пароли и токены в логах маскируются: вместо значения видно password=***.

Диалог с AI

Кнопка «Ask AI» открывает чат прямо в Hub. Спросите «Что сломалось?», «Почему упал payments-api?», а затем «Что делать?»: ответ собирается из диагноза, событий и логов этого pod'а и заканчивается конкретными шагами и командами kubectl.

Чат помнит, о каком pod'е идёт речь, понимает русский и английский и умеет показать ошибку из логов, события, перезапуски и сигнал модели. Он работает по правилам на сервере Hub, поэтому данные кластера никуда не уходят.

Чат Ask AI в Hub: обзор проблем кластера, причина падения базы shop-db и шаги исправления
Модель учится на ваших ответах
Небольшая нейросеть на numpy обучается на истории диагнозов. В карточке pod'а вы отмечаете правильный вердикт, и он идёт в обучение. Кнопка Train AI запускает дообучение и показывает точность на отложенной выборке.
Цепочка от Service до контейнера
Для каждого pod'а строится схема Service → Deployment → ReplicaSet → Pod → Container → ConfigMap. Сломанное звено выделено красным пунктиром.
Несколько кластеров
Кластер добавляется прямо в браузере: имя и файл kubeconfig. Переключатель в шапке меняет кластер без перезапуска, добавленные кластеры сохраняются после перезапуска.
Быстро на больших кластерах
Дашборд выдерживает сотни pod'ов: список подгружается по 100, повторные запросы объединяются, прогнозы модели кэшируются. Обновление идёт каждые 15 секунд или по кнопке Refresh.

Карта запросов между сервисами

Выберите сервис, и Hub покажет, к кому он обращается и кто обращается к нему. Связи собираются из переменных окружения, ConfigMap и, по желанию, из логов: по DNS-имени или по IP, с портом.

Карта зависимостей сервиса cart-api: красные пунктирные связи к неисправной базе shop-db

Как проходит диагностика

  1. 1
    Сканирование. Hub читает pods, events, services и configmaps кластера и держит свежий снимок.
  2. 2
    Правила. Состояние контейнеров, перезапуски и события дают вердикт и причину. Логи подтверждают или уточняют её.
  3. 3
    Сигнал модели. Нейросеть независимо оценивает тот же pod. Расхождение с правилами помечено предупреждением.
  4. 4
    Ваш ответ. В окне диагностики pod'а, в блоке AI model signal, справа три кнопки: Healthy, Warning, Critical. Нажмите верную, затем «Train AI» в шапке: модель дообучится на вашей метке.

Безопасность

Только чтение
Hub читает pods, events, logs, services и configmaps и ничего не меняет в кластере. Лучше выдать ему kubeconfig ServiceAccount с read-only правами. Значения Secret не читаются.
Kubeconfig проверяется
Файл хранится на сервере с правами 600. Загрузка отклоняет exec и cloud-плагины, ссылки на локальные файлы, proxy-url и незащищённые http-адреса.
Защита веб-интерфейса
Вход по паролю с ограничением попыток, CSRF-токены, строгий Content-Security-Policy, выход только через POST.
Запуск в Docker
Hub работает как контейнер (Flask и gunicorn) с одним томом данных. Конфигурация задаётся переменными окружения, пароль не хранится в образе.

Установка в Docker

Образ Hub скачивается прямо с этого сайта. Реестр контейнеров и доступ в интернет на сервере не нужны: образ загружается командой docker load. Понадобится Docker Engine (Linux) или Docker Desktop (Windows, macOS).

  1. Скачайте образ и SHA256SUMS в одну папку.
  2. Проверьте контрольную сумму.

    Команда должна ответить OK. В Windows сравните вывод Get-FileHash со строкой в SHA256SUMS.

    # Linux
    sha256sum -c SHA256SUMS
    # macOS
    shasum -a 256 -c SHA256SUMS
    # Windows PowerShell
    Get-FileHash .\k8s-ai-diagnostic-hub-latest.tar.gz -Algorithm SHA256
  3. Загрузите образ в Docker.
    docker load -i k8s-ai-diagnostic-hub-latest.tar.gz
  4. Запустите контейнер. Замените пароль на свой, длинный и случайный.
    docker run -d --name k8s-ai-diagnostic-hub --restart unless-stopped -p 8080:8080 -v hub-data:/mnt/data -e APP_USER=admin -e APP_PASSWORD='ваш-пароль' k8s-ai-diagnostic-hub:latest

    Команда одинаково работает в bash и PowerShell. Либо запустите через Compose: docker compose up -d рядом с docker-compose.yml и .env.

  5. Откройте http://localhost:8080 и войдите под APP_USER и APP_PASSWORD. Добавьте кластер: загрузите kubeconfig в интерфейсе.
Данные сохраняются
Кластеры, kubeconfig, модель и датасет лежат в томе hub-data и переживают обновление и перезапуск контейнера.
Обновление
Скачайте новый образ, выполните docker load, затем docker rm -f k8s-ai-diagnostic-hub и повторите команду запуска. Том с данными остаётся.
HTTPS
Поставьте перед контейнером reverse proxy (nginx или Caddy) с сертификатом и добавьте в запуск -e COOKIE_SECURE=true.
Доступ к кластеру
Hub только читает данные кластера. Выдайте ему kubeconfig ServiceAccount с правами на чтение.

Посмотрите, как это выглядит изнутри

Демо открывается в новой вкладке и повторяет интерфейс Hub: дашборд, диагностика pod'а, логи, карта связей, переключение кластеров и Train AI.

Открыть демо