Как стать автором
Обновить
Флант
DevOps-as-a-Service, Kubernetes, обслуживание 24×7

Обзор kubenav для управления Kubernetes-кластерами со смартфона

Время на прочтение6 мин
Количество просмотров6.5K

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/.

Выглядит достаточно симпатично и внешне напоминает упрощенную версию обычного 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… Перечислять все, пожалуй, избыточно. 

Из отличий в пользу kubenav:

  • несколько дополнительных пунктов (HPA, Pod Disruption Budgets), которые не выглядят очень уж важными;

  • собранные в отдельный пункт события кластера — Events (в K8s dashboard их тоже можно посмотреть, но внутри конкретных объектов, к которым они относятся).

Отличия в обратную сторону (недостатки kubenav) — отсутствие графиков использования CPU и RAM. Конечно, они не могут являться полноценной заменой связке Prometheus + Grafana, но для общего понимания бывают полезны.

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

При просмотре конкретных ресурсов — например, свойства Pod — отображаемый список у обоих панелей примерно одинаков и достаточен. Но у kubenav есть неприятная особенность: в списках labels, annotations и т.п. все элементы кликабельны, однако ничего не делают. В K8s dashboard более понятное поведение: если элемент кликабелен — значит, он будет что-то делать.

Редактирование ресурсов в обоих панелях реализовано через веб-редактор, а технически отредактированное применяется через kubectl apply -f <>. Тут из различий только то, что K8s dashboard понимает не только YAML, но и JSON.

Обе панели позволяют сделать exec внутрь Pod. Но kubenav хочет явного указания, какой из shell’ов запускать. А если такого shell’а нет внутри Pod’а — не будет даже сообщения об ошибке, можно просто бесконечно ждать. K8s dashboard изначально пробует зайти под Bash, если его нет — запускает sh.

Просмотр логов, по моему мнению, лучше организован в K8s dashboard: он позволяет переключаться между current/previous logs, включать follow и auto refresh на лету. В kubenav для этого придется закрыть окно с логами и открыть заново в другом режиме. А еще обычная dashboard позволяет скачать логи файлом — пусть это и не killer feature, иногда пригождается.

Те ресурсы, которые позволяют сделать им scale, масштабируются вполне успешно. Тут же рядом можно сделать kubectl reload restart. Эти функции работают без нареканий.

И снова о мобильной версии

В контексте применения панели управления на смартфоне мобильное приложение от kubenav безусловно выигрывает, и это заслуживает отдельного рассмотрения. Хотя бы просто по той причине, что Kubernetes dashboard на доступных мне устройствах выглядит примерно так:

В landscape-режиме все чуть лучше, но здесь клавиатура будет закрывать практически все, так что любой ввод придется делать на ощупь.

Сравните с kubenav:

Здесь ему же в плюс идет то, что благодаря единой кодовой базе совпадают и функциональные возможности всех клиентов kubenav (web, desktop и mobile). В общем, управление Kubernetes на смартфоне действительно выглядит качественно удобнее.

Однако не обошлось без ложки дегтя в бочке меда. Ввод в shell в контейнере работает несколько странно… Вот я пытаюсь набрать слово «text»:

Причем так себя ведет и 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.

Читайте также в нашем блоге:

Теги:
Хабы:
Всего голосов 31: ↑31 и ↓0+31
Комментарии0

Публикации

Информация

Сайт
flant.ru
Дата регистрации
Дата основания
Численность
201–500 человек
Местоположение
Россия
Представитель
Александр Лукьянов