Документация

Документация/Продакшен

Kubernetes: кластеры в приложении

Как смотреть и менять кластеры прямо в DevMachine через ваш kubectl и kubeconfig и как дать агенту читать и чинить их, с вашим подтверждением там, где это важно.

Бета

Вид «Kubernetes» и доступ агента к кластерам — бета-функции. Поведение и подписи могут меняться.

Вид «Kubernetes» — просмотрщик и пульт ваших кластеров прямо в DevMachine. В нём списки ресурсов, манифесты, логи подов, терминал в контейнере, проброс портов, Helm, графики и алерты. Вид работает через ваши kubectl, helm и kubeconfig: своих доступов к кластерам приложение не хранит и ничего в кластер не устанавливает. Если включить модуль «Kubernetes» в «Настройки → Модули», агент тоже сможет читать кластеры и выполнять простые действия. Модуль — набор инструментов, инструкций и навыков агента для одной области, подробнее — на странице Модули.

Что нужно

  • kubectl на компьютере — обязательно. Без него вид покажет «kubectl не установлен».
  • kubeconfig в ~/.kube/config. Каждый контекст kubeconfig — отдельный кластер в приложении.
  • По желанию: helm — для раздела «Helm»; metrics-server в кластере — для CPU и памяти в списках; Prometheus и Alertmanager в самом кластере — для графиков и алертов.

Добавить кластер в самом приложении нельзя. Добавьте его командой своего облачного провайдера или положите kubeconfig в ~/.kube/config, затем нажмите «Обновить».

Как открыть

  1. В полосе заголовка окна откройте меню «Другие инструменты» и выберите «Kubernetes».
  2. Слева — полоса кластеров, по значку на каждый контекст. Нажмите на нужный.
  3. Чтобы вернуться в чат, нажмите кнопку «Kubernetes» ещё раз.

Кнопку можно вынести из меню прямо в полосу заголовка: «Настройки → Расположение панелей». Слэш-команды у этого вида нет.

Кнопка «Открепить в отдельное окно» в шапке вида переносит его в своё окно, «Вернуть в ADE» — обратно. Кнопка «Агент» показывает разговор с агентом рядом с кластером.

Как пользоваться

Сводка кластера

В шапке вида — имя кластера, выбор «Namespace» («Все» или один) и числа состояния: Alerts, CPU, MEM, Nodes, Pods not running, Warnings, K8s. CPU и память показаны долей от ёмкости узлов: от 75 % число становится жёлтым, от 90 % — красным. На виду только числа, которые о чём-то говорят, остальные спрятаны за кнопкой «Состояние».

Пока окно DevMachine на экране, приложение раз в минуту проверяет кластер, который вы открывали последним. Если нашлась проблема, на кнопке «Kubernetes» (или на «Другие инструменты») появляется красная или жёлтая отметка, а подсказка называет причину: сработал алерт, не готовы узлы, CPU на пределе, не запущены поды.

Списки и объекты

Слева — дерево разделов: «Workloads», «Network», «Config», «Storage», «Access Control», «Helm», «GitOps», «Cluster». Таблицы выглядят как вывод kubectl get и сами обновляются раз в 5 секунд. «Фильтр по списку» ищет по любой ячейке.

Чтобы открыть объект, нажмите на его строку. Вкладки объекта: «Manifest», «Events», «Pods», «Logs» (у пода), «Metrics», «Permissions» (у ServiceAccount). У релиза Helm — «Values» и «History». Значения переменных окружения и секретов в манифесте скрыты.

Логи пода

Вкладка «Logs» показывает последние 500 строк и дальше дописывает новые. Там же «Follow» / «Stop following», «Previous» (предыдущий запуск), выбор «Container», «Поиск в логе» и «Скачать». Логи вы видите без маскирования.

Действия и правка манифеста

В меню «Действия» — «Restart», «Scale…», «Delete», «Cordon» / «Uncordon», у релиза Helm — «Rollback…» и «Uninstall». Перед каждым действием приложение просит подтверждения и называет кластер и namespace. Namespace, узел или том из вида не удалить — только в терминале.

Кнопка «Edit» на вкладке «Manifest» открывает YAML в редакторе. «Применить» сначала проверяет текст пробным прогоном на сервере, а потом заменяет объект. Если после того, как вы открыли объект, его кто-то изменил, приложение не затрёт чужие правки и предложит «Перечитать» или «Отмена».

Терминал в контейнере и проброс портов

  • «Exec» у пода открывает вкладку терминала с kubectl exec в контейнер. Для этого должен быть открыт проект.
  • «Port Forward» у пода или сервиса: выберите «Remote port» и «Local port» и нажмите «Forward». Порт открыт только на этом компьютере и работает, пока вы не остановите проброс или не закроете приложение. Все пробросы собраны в списке «Port Forwards» в шапке вида, там же «Открыть в браузере» и «Остановить».

Графики и алерты

Вкладка «Metrics» строит графики «CPU», «Memory», «Network RX» и «Network TX» за час, 6 или 24 часа. Данные приложение берёт из Prometheus самого кластера: находит его среди сервисов и запрашивает через API-сервер с вашим доступом. Если Prometheus нет, графиков не будет. Текущие CPU и память всё равно останутся в списках, если в кластере есть metrics-server.

Алерты приложение читает из Alertmanager кластера. Число Alerts открывает список «Сработали сейчас — из Alertmanager кластера». О новом алерте приложение сообщает, пока запущено, и только по кластеру, который вы открывали последним.

Helm, Flux и Argo CD

Раздел «Helm» появляется, если на компьютере есть helm. В нём релизы, их значения и история, «Rollback…» и «Uninstall». Обновить чарт из вида нельзя. Раздел «GitOps» только показывает объекты Flux и Argo CD, если они установлены в кластере.

Метка окружения: dev, stage, prod

У каждого кластера есть метка окружения. От неё зависит, что агент делает сам, а о чём спрашивает. Встроенные метки — dev, stage и prod. Можно добавить свои, например demo: каждая ведёт себя «Как dev», «Как stage» или «Как prod».

Пока вы не выбрали метку, приложение угадывает её по имени: prod, production, live → prod; stage, staging → stage; dev, test, qa, local, minikube, kind, Docker Desktop, OrbStack → dev. Всё остальное приложение считает prod, даже 127.0.0.1: за локальным адресом часто прячется туннель к рабочему кластеру.

Метку можно сменить в двух местах:

  • в полосе кластеров: правой кнопкой по кластеру → «Метка окружения»;
  • в «Настройки → Безопасность агента → Подключения → Кластеры Kubernetes».

Метка привязана к самому кластеру, к адресу его API-сервера. Если переименовать контекст или завести ещё один к тому же кластеру, метка останется той, что вы выбрали. Исключение — кластер на адресе этого компьютера, например 127.0.0.1: у такого кластера метка привязана к контексту.

Метки приложение шифрует системной связкой ключей, поэтому агент не сможет «перекрасить» prod в dev, поправив файл.

Агент и кластеры

Как включить

  1. Откройте «Настройки → Модули» и включите «Kubernetes». Модуль встанет в группу «У агента». Если приложение не найдёт kubeconfig, рядом с модулем будет отметка «Требует настройки», а инструментов у агента не будет, пока kubeconfig не появится.
  2. Изменение действует в новых чатах. Для текущего чата есть «Применить к открытой сессии», подробнее — на странице «Модули».

Без модуля у агента нет инструментов для кластеров. Сам вид от модуля не зависит и токенов не тратит.

Что может агент

  • Читать: список кластеров, списки 16 видов ресурсов (поды, деплойменты, сервисы, узлы, события и другие), описание объекта без значений переменных окружения, CPU и память, статус и историю выкатки деплоймента.
  • Читать логи одного пода.
  • Читать Secret, ConfigMap и значения переменных окружения — отдельным запросом, в котором агент называет причину.
  • Выполнить одно действие над одним объектом: изменить число реплик, перезапустить, откатить, приостановить или продолжить выкатку, сменить образ, удалить, сделать cordon / uncordon узла.

Через модуль агенту недоступны разделы «Access Control», «Helm» и «GitOps», а также apply, exec и проброс портов. Если агент запускает kubectl, helm или другой клиент кластера в своём терминале, действуют те же правила, что описаны ниже.

Когда агент обращается к кластеру, вид «Kubernetes» сам выходит в центр окна, а чат переезжает вправо. Окно перестраивается так не чаще раза в 30 секунд и никогда — пока вы печатаете.

Доступ и подтверждения

У каждого кластера свой уровень доступа агента: «Закрыт», «Чтение» или «Чтение и действия». По умолчанию кластер открыт на уровне «Чтение и действия». Сменить уровень и ограничить агенту namespace и типы ресурсов можно в «Настройки → Безопасность агента → Подключения → Кластеры Kubernetes».

Что агент делает сам, а что после вашего «Разрешить», зависит от метки и режима чата. Режим задаёт, как часто агент спрашивает разрешения: в «Авто» — перед рискованными действиями, в «Полном» — только перед самыми опасными (Режимы агента). В «Авто» с настройками по умолчанию правила такие:

Действие агентаdevstageprod
Списки, статусы, описаниясамсамсам
Логи подасамсамспросит
Secret, ConfigMap, переменные окруженияспроситспроситспросит
Изменения: реплики, перезапуск, образсамспроситспросит
Удаление, cordonспроситспроситзапрещено

В режиме «Полный» агент спрашивает только об изменениях и секретах на prod, а удалять на prod ему по-прежнему запрещено. Любую строку таблицы можно перенастроить в «Настройки → Безопасность агента → Действия», тема «Kubernetes». Подробно об уровнях и режимах — на страницах «Доступ агента к базам, кластерам и очередям» и «Режимы агента».

Карточка подтверждения показывает кластер, его метку, аргументы вызова и причину, которую назвал агент. «Разрешить» действует один раз и только на этот вызов. Варианта «больше не спрашивать» у таких карточек нет. Разрешить с телефона нельзя, только отказать: что и где выполнит агент, видно за компьютером.

Что получает агент

Перед тем как отдать агенту ответ кластера, DevMachine его чистит: заменяет значения переменных окружения на ***, у Secret оставляет только ключи и размеры, обрезает найденные в строках ключи и токены, укорачивает длинный ответ. Свои правила маскирования для кластера можно задать там же, в «Подключениях». Маскирование работает по шаблонам и ловит не всё, поэтому главная защита — подтверждения.

Ограничения

  • Всё это работает на macOS, Linux и Windows, если приложение находит kubectl. На Windows оно ищет kubectl только по PATH, а «Exec» там недоступен.
  • Для проекта на сервере по SSH вид работает на вашем компьютере, с его kubectl и kubeconfig. Инструменты агента тоже выполняет ваш компьютер. «Exec» для такого проекта приложение не предлагает.
  • На Linux без системной связки ключей уровни и метки действуют только до закрытия приложения.
  • Нет: добавления кластеров в приложении, произвольных CRD (кроме Flux и Argo CD), обновления релиза Helm, синхронизации GitOps, удаления namespace, узлов и томов из вида.
  • Ответа на один запрос к кластеру приложение ждёт до 20 секунд. Ответ больше 16 МБ оно отклоняет — сузьте запрос.
  • Алерты приходят, только пока приложение запущено, и на телефон не уходят.

Какие данные куда уходят

Вид обращается к кластеру напрямую с вашего компьютера, через ваш kubectl. Сводка, графики и алерты не проходят через серверы DevMachine. Учётные данные кластера приложение не читает и не хранит. То, что прочитал агент, попадает в запрос к модели и уходит к ней через сервер DevMachine, подробнее — на странице «Данные и приватность».

Что дальше

Обновлено · Нашли неточность? Напишите на support@devmachine.ai или в Telegram.