![](https://habrastorage.org/getpro/habr/upload_files/a9a/fbc/62f/a9afbc62f9d83c8a025f10d5fa625d5b.png)
Kubenav — бесплатное приложение с открытым исходным кодом. Его основная цель — предоставление удобного GUI для управления кластером Kubernetes из-под всех возможных платформ. Их ассортимент действительно богат: десктоп-клиенты (для Linux, macOS и Windows), мобильные (для Android и iOS), а также веб-версия.
Возможности и особенности
Приложение написано преимущественно на TypeScript и Go. Разработка была начата почти два года назад, а сегодня у него больше 1100 звезд на GitHub.
Основные особенности Kubenav, выделяемые разработчиками:
Возможность использования на максимально широком спектре устройств. При этом разработчики обещают максимально одинаковый опыт использования на всех платформах, в том числе за счет максимальной унификации кодовой базы.
Возможность одновременной работы с несколькими Kubernetes-кластерами.
Поддержка разных вариантов инсталляции K8s: как self-managed, так и облачных кластеров (Google, AWS, Azure, DigitalOcean, Rancher).
А с функциональной точки зрения приложение позволяет:
просматривать состояние и настройки основных ресурсов кластера (Deployments, StatefulSets, DaemonSets, Pods, и т.д.);
просматривать события в кластере;
просматривать логи контейнеров, в том числе в реальном времени;
попадать в терминал в контейнере (поддерживаются Bash, sh, PowerShell, cmd);
изменять, удалять и масштабировать ресурсы кластера.
Также стоит отметить, что у Kubenav доступны интеграции (плагины) для Prometheus (для просмотра нужных метрик в панели инструмента), Elasticsearch (для хранения логов) и Jaeger (для трассировки).
Посмотрим на Kubenav в действии.
Интерфейсы и их установка
1. Веб-приложение
Этот вариант клиента Kubenav устанавливается в одну команду, что фактически создает в кластере Pod с бэкендом kubenav
через Kustomize:
kubectl apply --kustomize github.com/kubenav/deploy/kustomize
Далее, чтобы на него зайти, скажем Kubernetes сделать для нас port-forward:
kubectl port-forward --namespace kubenav svc/kubenav 14122
Вряд ли на сервере с Kubernetes у вас стоит браузер. Я, конечно, попробовал открыть его через lynx… но, естественно, это не сработало.
Потому прокидываем порт на локальный компьютер:
ssh -L 127.0.0.1:14122:127.0.0.1:14122 <cluster master ip>
… и заходим в веб-интерфейс по адресу http://localhost:14122/
.
![](https://habrastorage.org/getpro/habr/upload_files/efc/e7f/dc8/efce7fdc881ea294119c23546a92e1cd.png)
Выглядит достаточно симпатично и внешне напоминает упрощенную версию обычного Kubernetes dashboard.
Однако важно иметь в виду, что о разграничении прав в данном случае речи не идет: мы получаем полный доступ ко всему кластеру. По умолчанию в Deployment включен параметр --incluster
, из-за чего kubenav не требует kubeconfig
, а получает полный доступ к API своими силами. Настроить права для него можно, но это нужно еще найти в недрах документации, добравшись до раздела «Configure Access to Multiple Clusters».
Выставить веб-интерфейс наружу из коробки на постоянной основе тоже нельзя, потому что авторизации здесь не предусмотрено. Basic Auth или что-то подобное придется делать самостоятельно.
2. Приложение для ПК
Это приложение существует для всех основных платформ: Linux (amd64/arm64), macOS (amd64/arm64), Windows (x64). Скачать его можно со страницы релизов. Приложение распространяется в виде единственного исполняемого файла, так что установка не требуется.
Разработчики не стали подписывать его для Windows, из-за чего Windows Defender ругается при каждом запуске. Кроме того, стабильность приложения под Windows вызывает вопросы: у меня оно нормально запускалось только на одном из трех доступных компьютеров, и от чего это зависит — понимания нет. Впрочем, когда приложение под Windows все же запустилось, проблем в дальнейшей работе не возникло. Под Linux все работало и запускалось стабильно.
Также в поведении этого клиента случайно обнаружилась смешная особенность, связанная с тем, что бэкенд занимает под себя порт 14122. Если под Windows пробросить этот порт аналогично варианту с веб-интерфейсом, приложение «зацепится» за него. Поэтому, если мы не делали специальных настроек Deployment’а, что развернут в Kubernetes для веб-интерфейса kubenav, получим подключение к кластеру с полными правами, которое не надо настраивать. Linux таких фокусов вытворять не дает.
Внешний вид полностью повторяет веб-интерфейс, поэтому смысла в отдельном скриншоте нет.
3. Мобильное приложение
Приложение kubenav под мобильные платформы выглядит аналогично остальным. И устанавливается банально из магазинов Google Play / App Store; какой-то специфики здесь нет. А к особенностям и внешнему виду мобильного приложения вернемся чуть позже — после того, как рассмотрим общие для всех клиентов функции.
Сразу после установки у мобильной версии не все очевидно с настройкой кластеров. Во-первых, хоть и заявлена возможность импортировать kubeconfig
из файла, ни на одном из доступных мне телефонов (три модели с Android) сделать это не получилось: работает только ввод конфигурации в текстовое поле. Во-вторых, из списка кластеров нельзя удалить ненужный. Это странно, но кнопки удаления просто нет (и долгое нажатие тоже не работает).
Использование в сравнении с K8s dashboard
Нужно отдать должное разработчикам: опыт использования действительно одинаков на всех устройствах. Потому буду далее для иллюстраций использовать веб-версию.
А предлагаемые возможности сравню с уже упомянутой Kubernetes dashboard.
Набор доступных для просмотра ресурсов у kubenav примерно аналогичен обычной dashboard. Тут Pods и все «вокруг» них (Jobs, CronJobs, Deployments, StatefulSets…), PV/PVC, Services, Network Policies… Перечислять все, пожалуй, избыточно.
![](https://habrastorage.org/getpro/habr/upload_files/dde/2a5/859/dde2a585988e9795337f4f396b41a498.png)
![](https://habrastorage.org/getpro/habr/upload_files/8d0/581/487/8d05814873cce4ab0c3edf61863a2f7d.png)
Из отличий в пользу kubenav:
несколько дополнительных пунктов (HPA, Pod Disruption Budgets), которые не выглядят очень уж важными;
собранные в отдельный пункт события кластера — Events (в K8s dashboard их тоже можно посмотреть, но внутри конкретных объектов, к которым они относятся).
Отличия в обратную сторону (недостатки kubenav) — отсутствие графиков использования CPU и RAM. Конечно, они не могут являться полноценной заменой связке Prometheus + Grafana, но для общего понимания бывают полезны.
Кстати, к вопросу мониторинга: плагин Prometheus запустить не получилось. В веб-интерфейсе добавить его можно, но настройки не появляются. А в мобильном приложении после его включения для настройки доступны всего «три с половиной» поля, но при попытке их открытия приложение зависает.
При просмотре конкретных ресурсов — например, свойства Pod — отображаемый список у обоих панелей примерно одинаков и достаточен. Но у kubenav есть неприятная особенность: в списках labels, annotations и т.п. все элементы кликабельны, однако ничего не делают. В K8s dashboard более понятное поведение: если элемент кликабелен — значит, он будет что-то делать.
![](https://habrastorage.org/getpro/habr/upload_files/657/46f/470/65746f4700878e2c02cb34e1eca93fea.png)
Редактирование ресурсов в обоих панелях реализовано через веб-редактор, а технически отредактированное применяется через kubectl apply -f <>
. Тут из различий только то, что K8s dashboard понимает не только YAML, но и JSON.
![](https://habrastorage.org/getpro/habr/upload_files/c49/fea/719/c49fea7194f66e4d1c569d57d38c676e.png)
Обе панели позволяют сделать exec
внутрь Pod. Но kubenav хочет явного указания, какой из shell’ов запускать. А если такого shell’а нет внутри Pod’а — не будет даже сообщения об ошибке, можно просто бесконечно ждать. K8s dashboard изначально пробует зайти под Bash, если его нет — запускает sh.
![](https://habrastorage.org/getpro/habr/upload_files/8b9/a87/43a/8b9a8743a4edbfaee40dd6e2fedbf996.png)
Просмотр логов, по моему мнению, лучше организован в K8s dashboard: он позволяет переключаться между current/previous logs, включать follow и auto refresh на лету. В kubenav для этого придется закрыть окно с логами и открыть заново в другом режиме. А еще обычная dashboard позволяет скачать логи файлом — пусть это и не killer feature, иногда пригождается.
![](https://habrastorage.org/getpro/habr/upload_files/fef/4c8/d44/fef4c8d44c29a4c3d076094df7c44651.png)
![](https://habrastorage.org/getpro/habr/upload_files/18f/011/954/18f0119541a351eb39b0d4a740af1bf5.png)
Те ресурсы, которые позволяют сделать им scale
, масштабируются вполне успешно. Тут же рядом можно сделать kubectl reload restart
. Эти функции работают без нареканий.
![](https://habrastorage.org/getpro/habr/upload_files/0f3/f39/e5b/0f3f39e5b0dfa70e4519e4a813e034ea.png)
И снова о мобильной версии
В контексте применения панели управления на смартфоне мобильное приложение от kubenav безусловно выигрывает, и это заслуживает отдельного рассмотрения. Хотя бы просто по той причине, что Kubernetes dashboard на доступных мне устройствах выглядит примерно так:
![](https://habrastorage.org/getpro/habr/upload_files/114/255/930/114255930fe7d5be645b0372ab3cdc0f.png)
В landscape-режиме все чуть лучше, но здесь клавиатура будет закрывать практически все, так что любой ввод придется делать на ощупь.
![](https://habrastorage.org/getpro/habr/upload_files/cd6/3a6/424/cd63a6424004dfaffbcb0bdcc318efa0.png)
Сравните с kubenav:
![](https://habrastorage.org/getpro/habr/upload_files/057/205/4e9/0572054e9539c7a18e66ebcba8362eaf.png)
![](https://habrastorage.org/getpro/habr/upload_files/670/fbc/60b/670fbc60bf36d0f224798369bd5c6bb3.png)
Здесь ему же в плюс идет то, что благодаря единой кодовой базе совпадают и функциональные возможности всех клиентов kubenav (web, desktop и mobile). В общем, управление Kubernetes на смартфоне действительно выглядит качественно удобнее.
Однако не обошлось без ложки дегтя в бочке меда. Ввод в shell в контейнере работает несколько странно… Вот я пытаюсь набрать слово «text»:
![](https://habrastorage.org/getpro/habr/upload_files/944/3d2/1d3/9443d21d3cc9373629b4ee38cc07e48f.png)
Причем так себя ведет и gboard, и swift keyboard. Допускаю, что можно найти и клавиатуру, которая будет вести себя «прилично», но по умолчанию получается вот так.
Другая особенность мобильного клиента — для Kubernetes-кластеров категории self-hosted необходим прямой доступ к API. То есть либо нужен VPN до него, либо API придется выставлять в сеть (что вы делать не будете, правда ведь?).
Если эти две особенности не смущают, то kubenav — лучший вариант для управления кластером как с Android, так и с iOS. Благо, выбор очень ограничен: K8s dashboard работает странно, а единственный конкурент Kuber есть только под iOS, он платный, да еще и не обновлялся уже больше полугода. Был еще проект от Bitnami — Cabin, — но он тоже давно заброшен.
Резюме
В целом, со своей задачей мобильного клиента для Kubernetes приложение kubenav справляется хорошо, даже несмотря на некоторые огрехи типа проблем с клавиатурой. Часто ли нужно управление кластерами со смартфона — это вопрос, на который пусть каждый лучше ответит сам.
Для остальных же платформ клиент, пожалуй, идентичен или чуть проигрывает обычному Kubernetes Dashboard. Если же нужно больше возможностей, то лучше присмотреться к Lens (про него в нашем блоге уже писали).
P.S.
Читайте также в нашем блоге: