13 релизов за неделю: OpenShift, алерты, фильтры и первые внешние контрибьюторы Sextant

—

от автора

В прошлой статье про Sextant в конце стоял роадмап на четыре версии: 0.20 — Ingress и события, 0.21 — GitOps-действия и политики, 0.22 — мощности и Cluster API, 0.23 — GPU и AI/ML. Все четыре вышли к 23 октября. За ними последовали 0.24 с алертами, логами из Loki и ссылками в Grafana и 0.25 с OpenShift, OLM, k3s/RKE2 и vcluster. Всего за неделю — 13 релизов, от 0.20.0 до 0.25.5.

Главное в этой неделе — не число функций, а то, что у проекта появилось сообщество. Первые внешние pull request’ы вошли в релизы: фильтры таблиц, настройки боковой панели, исправление для Windows. Идея из внешнего PR сократила память на каждый отслеживаемый объект примерно в пять раз. Часть версии 0.25 — это просьбы читателей: поиск по всем колонкам, вкладки с подами ноды, работа без права на список неймспейсов. Всех поимённо поблагодарю ниже.

Напомню, что это. Sextant — десктопный клиент Kubernetes на Rust и Tauri 2, замена Lens без аккаунта, подписки и телеметрии, со встроенным MCP-сервером для AI-агентов. Он бесплатный и таким останется. Весь его код сгенерирован ИИ (Claude Code): человек ставит задачи, принимает архитектурные решения и делает ревью, а каждое изменение проходит многократное тестирование.

Ниже — дайджест релизов, обзор нового по темам и благодарности.

Дайджест: 13 релизов с 21 по 28 октября

Свежие версии сверху. У каждой функции есть issue с требованиями и страница в вики.

Версия

Дата

Главное

0.25.5

28 октября

MCP для агентов при ограниченном RBAC: get_access, обход запрета на список по всему кластеру, свои права по запросу, короткие ответы list_resources

0.25.4

28 октября

Cmd+W на macOS закрывает вкладку, а не окно; Ctrl+W — везде, кроме терминала; вопрос перед потерей несохранённого YAML

0.25.2–0.25.3

27–28 октября

Фильтры в таблицах и исправления по их ревью

0.25.1

27 октября

Графики CPU и памяти кластера из metrics-server, когда нет Prometheus

0.25.0

27 октября

OpenShift, OLM, vcluster, k3s/RKE2; доступные неймспейсы без права на их список; действия над выделенными строками; поды и ресурсы ноды; память на объект в 5 раз меньше

0.24.1

26 октября

Отступы и линии дерева в боковой панели; пустое окно на старых драйверах NVIDIA исправлено

0.24.0

24 октября

Алерты из Prometheus и Alertmanager, логи удалённых подов из Loki, ссылки в Grafana и трейсы, спокойнее заголовок деталей

0.23.0

23 октября

Dynamic Resource Allocation, NVIDIA GPU Operator, Kueue, JobSet, KubeRay, KServe

0.22.0

23 октября

Vertical Pod Autoscaler, Cluster API, Restart нескольких объектов

0.21.1

22 октября

Понятные ошибки exec-плагинов kubeconfig

0.21.0

21 октября

Pause/Resume Argo Rollouts, Suspend/Resume/Stop Argo Workflows, покрытие сетевыми политиками, Sealed Secrets, Reflector

0.20.0

21 октября

Traefik, Contour, Knative Eventing, коннекторы Strimzi, Caretta в графе трафика

Обзор нового

Правила те же: интеграции с операторами только читают, раздел в боковой панели появляется, только когда кластер отдаёт его виды, а чего Sextant не может решить по объектам, то он называет «неизвестно».

Платформы и дистрибутивы

OpenShift (0.25). Routes диагностируются так же, как Ingress: до какого звена доходит трафик и где останавливается. Есть DeploymentConfig, BuildConfig и Build с логами build-пода, ImageStream и Project. Действий два — Rollout latest и Start build. Оба сначала спрашивают подтверждение и отправляют ровно то, что отправил бы oc. Встроенные TLS-ключи Route и секреты вебхуков не показываются.

Operator Lifecycle Manager (0.25). Subscriptions, ClusterServiceVersions, InstallPlans и состояние каталогов; подписка объясняет, почему оператор не обновляется. Копии CSV, которые OLM раскладывает по неймспейсам, в проблемах не считаются. Одобрить InstallPlan из Sextant нельзя — это сознательно.

k3s и RKE2 (0.25). Раздел со страницей «Дистрибутив»: версия, роли нод, встроенные компоненты. HelmChart из helm-controller показывает свой Job установки и его логи. Аргументы нод и values чартов маскируются: токены и пароли там встречаются чаще, чем хотелось бы.

vcluster (0.25). Страница «Виртуальные кластеры» и кнопка Connect, которая после подтверждения работает как vcluster connect через port-forward. Kubeconfig виртуального кластера чистится в ядре и до окна не доходит, а запись о кластере живёт, пока жив форвард.

Cluster API (0.22). Цепочка Cluster → MachineDeployments → Machines → инфраструктура, статус в обоих форматах, v1beta1 и v1beta2. Рабочий кластер открывается только по клику.

Наблюдаемость

Алерты (0.24). Страница «Алерты» с сайленсами и секция алертов прямо на объектах, которые называют их метки: под, Deployment, нода и другие, всего 13 видов. Источники — Prometheus, vmalert и Alertmanager, найденные сами и опрашиваемые раз в минуту только через service proxy API-сервера. Sextant ничего не создаёт и не гасит: сайленсы только показываются. Уведомления о горящих алертах включаются отдельно.

Логи удалённых подов из Loki (0.24). Под упал и исчез, а логи нужны — во вкладке логов появилась панель Loki, а в деталях нагрузки — секция «Логи предыдущих подов». Запрос к Loki строит ядро из проверенных имён, свой LogQL из окна не передаётся. За одно чтение — до 24 часов и 5000 строк.

Ссылки в Grafana и трейсы (0.24). В настройках кластера задаются шаблоны ссылок; есть готовые для дашбордов kube-prometheus, Explore с Tempo и Loki и для Jaeger. Кнопка на объекте или на линии графа трафика открывает нужный дашборд в браузере. Сам Sextant по этим адресам не ходит.

Графики без Prometheus (0.25, 0.25.1). Если в кластере только metrics-server, графики CPU и памяти строятся по снятым окном точкам за последний час, пока график на экране. На обзоре кластера — сумма по всем нодам.

Ingress и сеть

  • Traefik (0.20): IngressRoute, Middleware, TraefikService и старая группа traefik.containo.us. Traefik не пишет статус, поэтому Sextant проверяет ссылки: найдена, отсутствует, в другом неймспейсе. Диагностика идёт по маршруту до самих сервисов.

  • Contour (0.20): дерево делегирования HTTPProxy, includes, ошибки и предупреждения самого Contour; невалидные и осиротевшие прокси попадают в проблемы.

  • Knative Eventing (0.20): путь события Source → Broker → Trigger → получатель в деталях; прежний раздел теперь называется Knative Serving.

  • Caretta (0.20) — ещё один источник для графа трафика: только TCP-байты, без ошибок и задержек, и интерфейс так и пишет.

  • Покрытие сетевыми политиками (0.21): вкладка «Покрытие» отвечает, какие поды не изолированы ни одной политикой, отдельно на вход и на выход. В таблице неймспейсов — колонки «Изолирован вход» и «Изолирован выход». Работает для Kubernetes NetworkPolicy, Cilium и Calico.

GitOps и секреты

  • Argo Rollouts: Pause и Resume (0.21) — с тем же патчем, что отправляет плагин kubectl argo rollouts, после подтверждения и свежего чтения объекта. В 0.22 к ним добавился Restart.

  • Argo Workflows: Suspend, Resume, Stop и Terminate (0.21). Retry мы сознательно не сделали: для него нужно перестроить дерево шагов и удалить поды, и это нельзя сделать атомарно. Детали предлагают команду argo retry.

  • Sealed Secrets (0.21): синхронизирован ли SealedSecret, его scope и ошибки контроллера, объяснённые словами. Secret читаются только как метаданные, сертификат для шифрования не читается никогда.

  • Reflector (0.21): колонка «Отражение» у Secret и ConfigMap — копия актуальна, устарела или источник пропал. Сравнение идёт по resourceVersion, а не по значениям; регулярки из аннотаций выполняются в Rust за линейное время.

  • Коннекторы Strimzi (0.20): состояние KafkaConnector и его задач, трассировка упавшей задачи, autoRestart.

Мощности и AI/ML

  • Vertical Pod Autoscaler (0.22): что получит новый под прямо сейчас — посчитано так же, как считает admission controller. Предупреждение, если VPA и HPA тянут одну нагрузку в разные стороны по CPU или памяти, и проверка, что компоненты VPA вообще стоят. Блок стоит в деталях нагрузки сразу после right-sizing.

  • Dynamic Resource Allocation (0.23): ResourceClaim, DeviceClass, ResourceSlice во всех версиях API, страница «Устройства», блоки устройств у пода и ноды. CEL-выражения показываются, но не вычисляются.

  • NVIDIA GPU Operator (0.23): состояние каждого компонента, MIG и страница «GPU-ноды».

  • Kueue (0.23): квота и занятость ClusterQueue по флейворам, ожидающие Workload с причиной и блок очереди на каждом Job, которым управляет Kueue.

  • JobSet (0.23): причина падения первого Job и число рестартов относительно лимита.

  • KubeRay (0.23): head и группы воркеров, кнопки логов head и воркеров.

  • KServe (0.23): какой serving runtime будет выбран — тем же способом, что и в самом KServe. Учётные данные из URI моделей вырезаются.

Повседневная работа

Здесь больше всего того, о чём просили пользователи.

  • Фильтры в таблицах (0.25.2): кнопка «Фильтры» и фильтр в заголовке каждой колонки — по значению, условию или нескольким условиям сразу. Фильтры запоминаются для каждого кластера и таблицы и попадают в сохранённые виды. Это целиком PR из сообщества.

  • Действия над выделенными строками (0.25): выделили строки — появилась панель с Delete, Restart, Logs, «Скопировать имя» и другими действиями. Если действие подходит не всем, Sextant скажет, какие объекты пропустит и почему. Массовое удаление идёт по одному объекту с uid в предусловии и без повторов, а больше 20 объектов нужно подтвердить, введя их число.

  • Restart нескольких объектов (0.22): по одному за раз; ReplicaSet перезапускается через своего владельца, под — удалением, и только если у него есть контроллер, который его вернёт.

  • Поиск по всем колонкам, вкладки «Поды» и «Ресурсы» у ноды (0.25): поиск теперь ищет по всему, что показано в таблице. У ноды появились её поды и распределённые ресурсы как в kubectl describe node.

  • Работа без права на список неймспейсов (0.25): частая история в крупных компаниях — у разработчика есть доступ к паре неймспейсов, но не к их списку. Теперь «Все неймспейсы» означает «все доступные», их можно дописать вручную, а вместо ошибки показывается экран «Нет доступа» с кнопкой «Всё равно показать».

  • Мелочи: Cmd+W на macOS закрывает вкладку, а не всё окно, и спрашивает перед потерей несохранённого YAML (0.25.4); отступы и линии дерева в боковой панели (0.24.1); более спокойный заголовок деталей с меню «Действия» (0.24); на Windows больше не мелькают консольные окна Helm (0.25); исправлено пустое окно на драйверах NVIDIA до версии 495 (0.24.1).

Под капотом

Память на отслеживаемый объект — в пять раз меньше (0.25). В первой статье я писал, что на больших кластерах Sextant проигрывает по приросту памяти: ядро хранило объекты как JSON-деревья. Теперь они хранятся компактно, и на тесте с подами по ~2,5 КБ вышло так:

До

После

Память на один объект

26,0 КБ

5,2 КБ

Хранимые объекты, 50 000 подов

481 МБ

127,5 МБ

Полный список, 50 000 подов

9,0 с

10,3 с

Честно о цене: полный список стал чуть медленнее, а первые строки появляются через 94 мс вместо 77. Замер сделан в тесте на debug-сборке; повторное сравнение с Freelens и Lens на релизных сборках ещё впереди. Идея — из внешнего PR, об этом ниже.

Ошибки exec-плагинов (0.21.1, 0.22). Если kubeconfig вызывает плагин авторизации (aws, gcloud, yc и так далее), а тот не находится или падает, Sextant теперь пишет, какого пути нет и как это исправить, и помечает такой кластер ещё до подключения. Вывод плагина показывается обрезанным и замаскированным и не попадает ни в логи, ни в уведомления.

AI-агенты при ограниченном RBAC (0.25.5). Версия выросла из одного обсуждения: пользователь подключил агента к кластеру, где у него самого доступ только к паре неймспейсов, и подробно расписал, где MCP мешает. Каждый пункт стал отдельным issue, и все пять вошли в версию:

  • новый инструмент get_access показывает агенту правила, которые для него задал пользователь, и известные неймспейсы — без запросов к API-серверу и без новых прав;

  • если список по всему кластеру запрещён, инструменты проходят по известным неймспейсам и говорят, какие из них отказали;

  • get_permissions может показать фактические права пользователя, но только после отдельного включения в настройках кластера и в пределах правил самого агента;

  • list_resources умеет отдавать только нужные поля или краткую сводку — контекст агента не резиновый;

  • исправлено падение get_problems, а источник, который не удалось прочитать, теперь помечен как непроверенный, а не пропадает молча.

Инструментов стало 36. Остальное новое за неделю — OpenShift, Argo, массовое удаление, vcluster — доступно только в окне, а новые категории проблем агенту не отдаются: в них бывают тексты из кластера, которые никто не проверял.

Неделя в цифрах

За неделю вышло 13 релизов и 22 новых раздела функций. Код по-прежнему целиком пишет Claude Code, а путь каждой функции не поменялся: issue с требованиями, ADR с границами, код вместе с тестами, проверки на kind-кластере и CI на трёх ОС, ревью.

0.19

0.25.5

Тесты на Rust

1429

1641

Тесты vitest

3092

4166

ADR (архитектурные решения)

105

129

Звёзды на GitHub

18

30

Новых строк за неделю — около 118 тысяч: 49 тысяч TypeScript вместе с тестами, 12 тысяч Rust, 7 тысяч фикстур из реальных манифестов операторов и 47 тысяч — переводы на 14 языков.

Что не вошло или вошло иначе, чем планировалось:

  • Retry для Argo Workflows, Restart и Rollback для DeploymentConfig — осознанно отложены: безопасно и атомарно их сделать нельзя.

  • Пакета для winget всё ещё нет (#217); Homebrew и Scoop обновляются с каждым релизом.

  • Открыты четыре известных бага: учётные данные в URI внутри сообщений условий ещё не вырезаются (#259), GPU Operator показывает несуществующий в новых версиях компонент (#260), exec-плагины могут мелькнуть консолью на Windows (#288), один нестабильный тест (#290).

Спасибо

Эта неделя — первая, когда в Sextant вошли чужие pull request’ы и целые функции по просьбам пользователей. Огромное спасибо всем, кто не прошёл мимо.

Контрибьюторам:

  • @VasiliyIsaichkin — три принятых PR за неделю: отступы и линии дерева в боковой панели (#283, 0.24.1), консольные окна Helm на Windows больше не мелькают (#287, 0.25) и фильтры в таблицах (#293, 0.25.2). И ещё три issue, из которых эти PR выросли.

  • @philyuchkoff — PR #203 с компактным хранением объектов. В исходном виде он не слит, но его идея стала основой #284, где он указан соавтором, — тот самый пятикратный выигрыш по памяти. А ещё раньше он прислал первый внешний PR проекта — поддержку proxy-url.

Тем, кто присылал баги и идеи:

  • @mrlioncub — пустое окно на старых драйверах NVIDIA (#278): исправлено в 0.24.1, и он сам подтвердил, что заработало. Раньше именно он нашёл проблему с proxy-url.

  • @RouR — поиск по всем колонкам, поды и ресурсы ноды, графики из metrics-server (#279, #280): всё вошло в 0.25.

  • @karabasBaRaBaS-1276 — работа без права на список неймспейсов (обсуждение #281): вошло в 0.25. Его подробный отчёт про MCP для агентов при ограниченном RBAC (#296) целиком стал версией 0.25.5: пять пунктов — пять issue, все сделаны.

  • @nd4y — обрезанное меню на Windows, один из первых багов от пользователей.

И спасибо всем, кто писал в комментариях к прошлым статьям, спорил, сравнивал с другими инструментами и ставил звёзды: именно такие комментарии превращаются в роадмап. Если я кого-то забыл, напишите — допишу.

Что дальше и как попробовать

Следующие две версии уже запланированы:

Релиз

Тема

Что входит

0.26

Экосистема расширений

Каталог расширений и расширения с собственной серверной частью

0.27

Стабильность и память

Память WebView, повторное честное сравнение с Freelens на релизных сборках, известные баги из списка выше

Планы меняются по вашим запросам — эта неделя тому пример. Идеи пишите в Discussions → Ideas, баги — в issues, а PR всегда ждём.

Как поставить:

brew install --cask friendsofkubernetes/sextant/sextant      # macOSscoop bucket add sextant https://github.com/FriendsOfKubernetes/sextant-scoopscoop install sextant/sextant                                # Windows

Или скачайте .deb, .rpm или .AppImage (x86_64 и arm64), .dmg или .msi из последнего релиза. Установленный из AppImage, .dmg или .msi Sextant обновляется сам. Документация — в вики. Если проект пригодился, поставьте звезду на GitHub: так его найдут другие.

ссылка на оригинал статьи https://habr.com/ru/articles/1100782/