Обзор графических интерфейсов для Kubernetes

72ucanprgd8p8fmlquo3ue_a4mc.png

Для полноценной работы с системой важно знание утилит командной строки: в случае с Kubernetes это kubectl. С другой стороны, хорошо спроектированные, продуманные графические интерфейсы могут выполнять большую часть обычных задач и открыть дополнительные возможности при эксплуатации систем.

В прошлом году мы публиковали перевод небольшого обзора web UI для Kubernetes, приуроченного к анонсу веб-интерфейса Kubernetes Web View. Автор той статьи и самой утилиты — Henning Jacobs из компании Zalando — как раз позиционировал новинку в качестве «kubectl для веба». Он хотел создать инструмент с удобными возможностями для взаимодействия в формате техподдержки (например, быстро показать проблему веб-ссылкой) и для реакции на инциденты, поиска проблем во многих кластерах одновременно. Его детище развивается и в настоящее время (в основном, силами самого автора).

Обслуживая множество Kubernetes-кластеров разных масштабов, мы тоже заинтересованы в возможности предоставлять клиентам инструмент визуальной работы. При выборе подходящего интерфейса ключевыми для нас были следующие возможности:

  • поддержка разграничения прав пользователей (RBAC);
  • визуализация состояния пространства имен и стандартных примитивов Kubernetes (Deployment, StatefulSet, Service, Cronjob, Job, Ingress, ConfigMap, Secret, PVC);
  • получение доступа к командной строке внутри pod«a;
  • просмотр логов pod«ов;
  • просмотр состояния pod«ов (describe status);
  • удаление pod«ов.


Другие функции, такие как просмотр потребляемых ресурсов (в разрезе pod«ов/контроллеров/пространств имён), создание/редактирование примитивов K8s, в рамках нашего рабочего процесса не актуальны.

Обзор мы начнем с классического Kubernetes Dashboard, принятого за стандарт у нас. Поскольку мир не стоит на месте (а значит — у Kubernetes появляются всё новые GUI), расскажем и о его актуальных альтернативах, обобщив всё в сравнительной таблице в конце статьи.

NB: В обзоре мы не будем повторяться с теми решениями, что уже рассматривались в прошлой статье, однако — для полноты картины — релевантные опции из неё (K8Dash, Octant, Kubernetes Web View) включены в финальную таблицу.

1. Kubernetes Dashboard


  • Страница документации;
  • Репозиторий (8000+ звёзд GitHub);
  • Лицензия: Apache 2.0;
  • Вкратце: «Универсальный веб-интерфейс для кластеров Kubernetes. Он позволяет пользователям управлять приложениями, работающими в кластере, и устранять их неполадки, а также управлять самим кластером».


256-ogsj0h0jm0wrm745ovh2bhs.png

Это панель общего назначения, рассматриваемая авторами Kubernetes в официальной документации (хотя и не разворачиваемая по умолчанию). Она предназначена для нужд повседневной эксплуатации и отладки приложений в кластере. У себя мы её используем как полноценное легковесное визуальное средство, позволяющее предоставить разработчикам необходимый и достаточный доступ к кластеру. Её возможности покрывают все их потребности, что возникают в процессе использования кластера (в этой статье мы демонстрировали некоторые фичи панели). Как легко догадаться, это означает, что она удовлетворяет всем нашим требованиям, перечисленным выше.

Среди основных возможностей Kubernetes Dashboard:

  • Навигация: просмотр основных объектов K8s в разрезе пространств имен.
  • При наличии прав администратора панель показывает узлы, пространства имен и Persistent Volumes. По узлам доступна статистика по использованию памяти, процессора, выделение ресурсов, метрики, статус, события и т.п.
  • Просмотр приложений, развёрнутых в пространстве имен, по их типу (Deployment, StatefulSet и др.), связей между ними (ReplicaSet, Horizontal Pod Autoscaler), общей и персонализированной статистики и информации.
  • Просмотр сервисов и Ingress«ов, а также их связей с pod«ами и endpoint«ами.
  • Просмотр файловых объектов и хранилищ: Persistent Volume и Persistent Volume Claim.
  • Просмотр и редактирование ConfigMap и Secret.
  • Просмотр логов.
  • Доступ к командной строке в контейнерах.


Значимый недостаток (впрочем, не для нас)— нет поддержки мультикластерной работы. Проект активно развивается сообществом и поддерживает актуальные функции с выходом новых версий и спецификаций Kubernetes API: последняя версия панели — v2.0.1 от 22 мая 2020 г. — протестирована на совместимость с Kubernetes 1.18.

2. Lens


sdrjmgmx-kghokzdvcb38n6w4i0.png

Проект позиционируется как полноценная интегрированная среда разработки (IDE) для Kubernetes. Причем она оптимизирована для работы со множеством кластеров и большим количеством запущенных в них pod«ов (протестировано на 25 тысячах pod«ов).

Основные особенности/возможности Lens:

  • Автономное приложение, не требующее установки чего-либо внутри кластера (точнее, для получения всех метрик потребуется Prometheus, но для этого можно использовать и уже существующую инсталляцию). «Основная» же инсталляция производится на персональный компьютер под управлением Linux, macOS или Windows.
  • Мультикластерное управление (поддерживаются сотни кластеров).
  • Визуализация состояния кластера в реальном времени.
  • Графики использования ресурсов и тенденции с историей на основе встроенного Prometheus.
  • Доступ к командной строке контейнеров и на узлах кластера.
  • Полная поддержка Kubernetes RBAC.


Актуальный релиз — 3.5.0 от 16 июня 2020 г. Изначальная версия была создана в компании Kontena, а на сегодняшний день вся интеллектуальная собственность передана в специальную организацию Lakend Labs, называемую «объединением cloud native-гиков и технологов», что отвечают за «сохранение и доступность Open Source-ПО и продуктов Kontena».

Lens — второй по популярности проект на GitHub из категории GUI для Kubernetes, «проигрывающий» только собственно Kubernets Dashboard. Все остальные Open Source-решения не из категории CLI* значительно уступают в популярности.

* См. про K9s в бонусной части обзора.

3. Kubernetic


ysud_hhsu6fczplbl3mckcrekre.png

Это проприетарное приложение, которое устанавливается на персональный компьютер (поддерживаются Linux, macOS, Windows). Его авторы обещают полную замену утилиты командной строки, а вместе с ним — отсутствие необходимости запоминать команды и даже десятикратное увеличение скорости работы.

Одной из интересных особенностей инструмента является встроенная поддержка Helm-чартов, а одним из недостатков — отсутствие метрик производительности приложений.

Главные фичи Kubernetic:

  • Удобное отображение состояния кластера. Один экран для просмотра всех связанных объектов кластера и их зависимостей; красное/зеленое состояние готовности для всех объектов; режим просмотра состояния кластера с обновлением статуса в реальном времени.
  • Кнопки быстрого действия для удаления и масштабирования приложения.
  • Поддержка мультикластерной работы.
  • Простая работа с пространствами имен.
  • Поддержка Helm-чартов и репозиториев Helm (в том числе, приватных). Установка и управление чартами в веб-интерфейсе.


Актуальная стоимость продукта — разовый платеж в размере 30 евро за его использование одним человеком для любого числа пространств имён и кластеров.

4. Kubevious


  • Сайт;
  • Презентация;
  • Репозиторий (~500 звёзд GitHub);
  • Лицензия: Apache 2.0
  • Вкратце: «Kubevious делает кластеры Kubernetes, конфигурацию приложений и просмотр их состояния безопасным и простым для понимания».


8s-ikwlic4u10ye5n0uriyo7cuk.png

Идея проекта в создании инструмента, предназначенного для анализа и отладки конфигураций приложений, развёрнутых в кластере. Авторы сосредоточились в первую очередь на реализации этих фич, оставив более общие вещи на потом.

Основные особенности и функции Kubevious:

  • Визуализация кластера способом, ориентированным на приложения: взаимосвязанные объекты в интерфейсе группируются, выстраиваясь в иерархию.
  • Наглядное отображение зависимостей в конфигурациях и каскадных последствий их изменений.
  • Отображение ошибок конфигурирования кластера: неправильное использование меток, пропущенные порты и т.п. (К слову, если вам интересна эта фича, обратите внимание на Polaris, о котором мы уже писали.)
  • В дополнение к предыдущему пункту — доступно обнаружение потенциально опасных контейнеров, т.е. имеющих слишком большие привилегии (атрибуты hostPID, hostNetwork, hostIPC, монтирование docker.sock и тому подобное).
  • Продвинутая система поиска по кластеру (не только по названиям объектов, но и по их свойствам).
  • Инструменты для планирования мощностей и оптимизации ресурсов.
  • Встроенная «машина времени» (возможность видеть произошедшие ранее изменения конфигурации объектов).
  • Управление RBAC при помощи сводной взаимосвязанной таблицы из Roles, RoleBindings, ServiceAccounts.
  • Работает только с одним кластером.


У проекта совсем короткая история (первый релиз состоялся 11 февраля 2020 г.) и как будто бы наметился период то ли стабилизации, то ли замедления в развитии. Если предыдущие версии выпускались часто, то последний релиз (v0.5 от 15 апреля 2020 г.) отстал от начального темпа разработки. Наверное, это связано с небольшим числом контрибьюторов: в истории репозитория их всего 4, а вся фактическая работа ведётся одним человеком.

5. Kubewise


  • Страница проекта;
  • Лицензия: проприетарная (станет Open Source);
  • Вкратце: «Простой мультиплатформенный клиент для Kubernetes».


th9cxl2vqar0uesttwboycg6k00.png

Новый продукт от компании VMware, изначально созданный в рамках внутреннего хакатона (в июне 2019 года). Устанавливается на персональный компьютер, работает на базе Electron (поддерживаются Linux, macOS и Windows) и требует kubectl не ниже v1.14.0.

Основные возможности Kubewise:

  • Взаимодействие в интерфейсе с самыми часто используемыми сущностями Kubernetes: узлами, пространствами имен и т.п.
  • Поддержка нескольких файлов kubeconfig для разных кластеров.
  • Терминал с возможностью установки переменной окружения KUBECONFIG.
  • Генерация кастомных файлов kubeconfig для заданного пространства имен.
  • Расширенные возможности безопасности (RBAC, пароли, service accounts).


Пока что у проекта всего один релиз — версия 1.1.0 от 26 ноября 2019 года. Причем авторы планировали сразу выпустить его как Open Source, однако из-за внутренних проблем (не связанных с техническими вопросами) не смогли этого сделать. По состоянию на май 2020, авторы работают над следующим релизом и одновременно с ним должны инициировать процесс открытия кода.

Бонус


1. Portainer on Kubernetes в бета-версии

Проект от команды Portainer, разработавшей одноимённый популярный интерфейс для работы с Docker. Поскольку проект находится на ранней стадии разработки (первая и единственная бета-версия вышла 16 апреля 2020 г.), мы не стали оценивать его функции. Однако, возможно, он многих заинтересует: если это про вас — следите за развитием.

2. IcePanel


  • Сайт;
  • Лицензия: проприетарная;
  • Вкратце: «Визуальный редактор Kubernetes».


lotgv6prizlquwrg1wl4n8sj0s4.png

Это молодое десктоп-приложение призвано визуализировать ресурсы Kubernetes в реальном времени и управлять ими с простым интерфейсом в духе drag & drop. Из объектов в настоящий момент поддерживаются Pod, Service, Deployment, StatefulSet, PersistentVolume, PersistentVolumeClaim, ConfigMap и Secret. В скором времени обещают добавить поддержку Helm. Главные недостатки — закрытость кода (ожидается его открытие «в каком-то виде») и отсутствие поддержки Linux (пока доступны только версии для Windows и macOS, хотя это тоже скорее всего лишь вопрос времени).

3. k9s


  • Сайт;
  • Демонстрация;
  • Репозиторий (~7700 звёзд GitHub);
  • Лицензия: Apache 2.0;
  • Вкратце: «Консольный интерфейс для Kubernetes, позволяющий стильно управлять кластером».


btyuqplfdeaqswfpvufzupc7xfg.png

Утилита оказалась лишь в бонусной части обзора по той причине, что предлагает консольный GUI. Однако авторы буквально выжали максимум из терминала, предлагая не только удобный интерфейс, но и 6 предопределённых тем оформления, и развитую систему клавиатурных сочетаний, и алиасов для команд. Их основательный подход не ограничился внешним видом: возможности k9s приятно впечатляют: управление ресурсами, отображение состояния кластера, вывод ресурсов в иерархическом представлении с зависимостями, просмотр логов, поддержка RBAC, расширение возможностей через плагины… Всё это пришлось по нраву широкому K8s-сообществу: количество GitHub-звёзд проекта практически не уступает официальному Kubernetes Dashboard!

4. Панели управления приложениями


И в завершении обзора — отдельная мини-категория. В неё попали два веб-интерфейса, предназначенные не для комплексного управления Kubernetes-кластерами, а для управления тем, что в них разворачивается.

Как известно, одним из самых зрелых и распространённых средств для деплоя комплексных приложений в Kubernetes является Helm. За период его существования накопилось множество пакетов (Helm charts) для простого развёртывания многих популярных приложений. Поэтому вполне логично и появление соответствующих визуальных средств, позволяющих управлять жизненным циклом чартов.

4.1. Monocular


  • Репозиторий (1300+ звёзд GitHub);
  • Лицензия: Apache 2.0;
  • Вкратце: «Веб-приложение для поиска и обнаружения Helm-чартов во множестве репозиториев. Служит основой для проекта Helm hub».


otvoxmvxgq3nfcj4wgbdgjfnlsk.gif

Эта разработка от авторов Helm устанавливается в Kubernetes и работает в пределах одного кластера, выполняя поставленную задачу. Однако в настоящее время проект не почти не развивается. Его основное предназначение — поддержка существования Helm Hub. Для других нужд авторы рекомендуют Kubeapps (см. дальше) или Red Hat Automation Broker (часть OpenShift, но уже тоже не развивается).

4.2. Kubeapps


wwcqau25uoals45gygzaba_0jw8.png

Продукт от Bitnami, который тоже устанавливается в кластер Kubernetes, но отличается от Monocular изначальным фокусом на работу с приватными репозиториями.

Ключевые функции и особенности Kubeapps:

  • Просмотр и установка Helm chart«ов из репозиториев.
  • Проверка, обновление и удаление приложений на базе Helm, установленных в кластере.
  • Поддержка работы с кастомными и частными репозиториями чартов (поддерживает ChartMuseum и JFrog Artifactory).
  • Просмотр и работа с внешними сервисами — из Service Catalog и Service Brokers.
  • Публикация установленных приложений при помощи механизма Service Catalog Bindings.
  • Поддержка аутентификации и разделения прав при помощи RBAC.


Завершая «бонусную» часть, стоит упомянуть о Kubernetes-дистрибутивы (например, известный всем OpenShift или куда менее популярный Kubesphere). Графический интерфейс в них может быть очень продвинутым, однако идёт как часть интегрированного стека большой системы. Поэтому рассматривать такие GUI-реализации в отдельности от самих дистрибутивов мы не стали.

Итоговая таблица


Ниже приведена сводная таблица, в которой мы постарались свести и агрегировать основные возможности существующих визуальных интерфейсов для облегчения сравнения:

3fprbgdgm8kmfi1popptmmzmupo.png
(Онлайн-версия таблицы доступна в Google Docs.)

Заключение


Графические интерфейсы для Kubernetes — довольно специфичная и молодая ниша. Однако она развиваюется весьма активно: уже можно найти как достаточно зрелые решения, так и совсем молодые, которым еще есть куда расти. Они ориентируются на разные варианты применения, предлагая функции и внешний вид практически на любой вкус. Надеемся, что этот обзор поможет подобрать инструмент, наилучшим образом покрывающий текущие потребности.

P.S.


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

© Habrahabr.ru