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

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.


Для полноценной работы с системой важно знание утилит командной строки: в случае с 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. Он позволяет пользователям управлять приложениями, работающими в кластере, и устранять их неполадки, а также управлять самим кластером».



Это панель общего назначения, рассматриваемая авторами 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


  • Сайт;
  • Презентация;
  • Репозиторий (~4800 звёзд GitHub);
  • Лицензия: MIT;
  • Вкратце: «Kubernetes IDE».



Проект позиционируется как полноценная интегрированная среда разработки (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


  • Сайт;
  • Демонстрация;
  • Репозиторий (только документация) (200+ звёзд GitHub);
  • Лицензия: проприетарная;
  • Вкратце: «Управление кластером, сделанное просто».



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

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

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

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

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

4. Kubevious


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



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

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

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

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

5. Kubewise


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



Новый продукт от компании 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 в бета-версии


  • Сайт;
  • Репозиторий (~100 звёзд GitHub);
  • Лицензия: Zlib(?) (такая у родительского проекта).


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

2. IcePanel


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



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

3. k9s


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



Утилита оказалась лишь в бонусной части обзора по той причине, что предлагает консольный 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».



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

4.2. Kubeapps


  • Сайт;
  • Презентация;
  • Репозиторий (~2100 звёзд GitHub);
  • Лицензия: Apache 2.0
  • Вкратце: «Ваша панель приложений для Kubernetes».



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

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

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

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

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


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


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

Заключение


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

P.S.


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

  • «Анонс веб-интерфейса Kubernetes Web View (и краткий обзор других web UI для Kubernetes)»;
  • «Интеграция Kubernetes Dashboard и пользователей GitLab»;
  • «Представлен Polaris для поддержания кластеров Kubernetes в здоровом состоянии»;
  • «kubebox и другие консольные оболочки для Kubernetes».
Источник: https://habr.com/ru/company/flant/blog/506948/


Интересные статьи

Интересные статьи

Недавно на проекте интегрировал модуль CRM Битрикса c виртуальной АТС Ростелеком. Делал по стандартной инструкции, где пошагово показано, какие поля заполнять. Оказалось, следование ей не гаран...
Все чаще к нам обращаются клиенты с просьбой обеспечить доступ в Kubernetes-кластер для возможности обращения к сервисам внутри кластера: чтобы можно было напрямую подключиться к како...
Существует традиция, долго и дорого разрабатывать интернет-магазин. :-) Лакировать все детали, придумывать, внедрять и полировать «фишечки» и делать это все до открытия магазина.
Во времена, когда Kubernetes был ещё v1.0.0, существовали плагины для томов (volume plugins). Нужны они были для подключения к Kubernetes систем для хранения персистентных (постоянных) данных...
Я создал Kube Eagle — экспортер Prometheus. Оказалось, крутая штука, которая помогает лучше разбираться в ресурсах маленьких и средних кластеров. В итоге я сэкономил не одну сотню долларов, пот...