Для полноценной работы с системой важно знание утилит командной строки: в случае с 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».
Автор: Oleg Voznesensky