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

Kate

Administrator
Команда форума
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/.

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

dde2a585988e9795337f4f396b41a498.png
8d05814873cce4ab0c3edf61863a2f7d.png

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

  • несколько дополнительных пунктов (HPA, Pod Disruption Budgets), которые не выглядят очень уж важными;
  • собранные в отдельный пункт события кластера — Events (в K8s dashboard их тоже можно посмотреть, но внутри конкретных объектов, к которым они относятся).
Отличия в обратную сторону (недостатки kubenav) — отсутствие графиков использования CPU и RAM. Конечно, они не могут являться полноценной заменой связке Prometheus + Grafana, но для общего понимания бывают полезны.

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

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

65746f4700878e2c02cb34e1eca93fea.png

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

c49fea7194f66e4d1c569d57d38c676e.png

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

8b9a8743a4edbfaee40dd6e2fedbf996.png

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

fef4c8d44c29a4c3d076094df7c44651.png
18f0119541a351eb39b0d4a740af1bf5.png

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

0f3f39e5b0dfa70e4519e4a813e034ea.png

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

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

114255930fe7d5be645b0372ab3cdc0f.png

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

cd63a6424004dfaffbcb0bdcc318efa0.png

Сравните с kubenav:

0572054e9539c7a18e66ebcba8362eaf.png
670fbc60bf36d0f224798369bd5c6bb3.png

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

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

9443d21d3cc9373629b4ee38cc07e48f.png

Причем так себя ведет и gboard, и swift keyboard. Допускаю, что можно найти и клавиатуру, которая будет вести себя «прилично», но по умолчанию получается вот так.

Другая особенность мобильного клиента — для Kubernetes-кластеров категории self-hosted необходим прямой доступ к API. То есть либо нужен VPN до него, либо API придется выставлять в сеть (что вы делать не будете, правда ведь?).

Если эти две особенности не смущают, то kubenav — лучший вариант для управления кластером как с Android, так и с iOS. Благо, выбор очень ограничен: K8s dashboard работает странно, а единственный конкурент Kuber есть только под iOS, он платный, да еще и не обновлялся уже больше полугода. Был еще проект от Bitnami — Cabin, — но он тоже давно заброшен.

Резюме​

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

 
Сверху