Для полноценной работы с системой важно знание утилит командной строки: в случае с 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) включены в финальную таблицу.
Вкратце: «Универсальный веб-интерфейс для кластеров 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.
Проект позиционируется как полноценная интегрированная среда разработки (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* значительно уступают в популярности.
Это проприетарное приложение, которое устанавливается на персональный компьютер (поддерживаются Linux, macOS, Windows). Его авторы обещают полную замену утилиты командной строки, а вместе с ним — отсутствие необходимости запоминать команды и даже десятикратное увеличение скорости работы.
Одной из интересных особенностей инструмента является встроенная поддержка Helm-чартов, а одним из недостатков — отсутствие метрик производительности приложений.
Главные фичи Kubernetic:
Удобное отображение состояния кластера. Один экран для просмотра всех связанных объектов кластера и их зависимостей; красное/зеленое состояние готовности для всех объектов; режим просмотра состояния кластера с обновлением статуса в реальном времени.
Кнопки быстрого действия для удаления и масштабирования приложения.
Поддержка мультикластерной работы.
Простая работа с пространствами имен.
Поддержка Helm-чартов и репозиториев Helm (в том числе, приватных). Установка и управление чартами в веб-интерфейсе.
Актуальная стоимость продукта — разовый платеж в размере 30 евро за его использование одним человеком для любого числа пространств имён и кластеров.
Вкратце: «Kubevious делает кластеры Kubernetes, конфигурацию приложений и просмотр их состояния безопасным и простым для понимания».
Идея проекта в создании инструмента, предназначенного для анализа и отладки конфигураций приложений, развёрнутых в кластере. Авторы сосредоточились в первую очередь на реализации этих фич, оставив более общие вещи на потом.
Основные особенности и функции Kubevious:
Визуализация кластера способом, ориентированным на приложения: взаимосвязанные объекты в интерфейсе группируются, выстраиваясь в иерархию.
Наглядное отображение зависимостей в конфигурациях и каскадных последствий их изменений.
Отображение ошибок конфигурирования кластера: неправильное использование меток, пропущенные порты и т.п. (К слову, если вам интересна эта фича, обратите внимание на Polaris, о котором мы уже писали.)
В дополнение к предыдущему пункту — доступно обнаружение потенциально опасных контейнеров, т.е. имеющих слишком большие привилегии (атрибуты hostPID, hostNetwork, hostIPC, монтирование docker.sock и тому подобное).
Продвинутая система поиска по кластеру (не только по названиям объектов, но и по их свойствам).
Инструменты для планирования мощностей и оптимизации ресурсов.
Встроенная «машина времени» (возможность видеть произошедшие ранее изменения конфигурации объектов).
Управление RBAC при помощи сводной взаимосвязанной таблицы из Roles, RoleBindings, ServiceAccounts.
Работает только с одним кластером.
У проекта совсем короткая история (первый релиз состоялся 11 февраля 2020 г.) и как будто бы наметился период то ли стабилизации, то ли замедления в развитии. Если предыдущие версии выпускались часто, то последний релиз (v0.5 от 15 апреля 2020 г.) отстал от начального темпа разработки. Наверное, это связано с небольшим числом контрибьюторов: в истории репозитория их всего 4, а вся фактическая работа ведётся одним человеком.
Вкратце: «Простой мультиплатформенный клиент для 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, авторы работают над следующим релизом и одновременно с ним должны инициировать процесс открытия кода.
Несмотря на то, что этот веб-интерфейс является частью дистрибутива OpenShift (там он ставится с помощью специального оператора), авторы предусмотрели возможность его установки/использования и в обычных (vanilla) инсталляциях Kubernetes.
OpenShift Console развивается уже долгое время, поэтому вобрал в себя множество функций. Упомянем основные из них:
Разделяемый подход к интерфейсу — две «перспективы» доступных в Console возможностей: для администраторов и для разработчиков. Режим Developer perspective группирует объекты в более понятном разработчикам виде (по приложениям) и ориентирует интерфейс на решение таких типовых задач, как деплой приложений, отслеживание статуса сборки/деплоя и даже редактирование кода через Eclipse Che.
Управление рабочими нагрузками, сетью, хранилищами, правами доступа.
Логическое разделение для рабочих нагрузок на проекты и приложения. В одном из последних релизов — v4.3 — появился специальный Project dashboard, отображающий привычные данные (количество и статусы deployment’ов, pod’ов и т.п.; потребление ресурсов и прочие метрики) в срезе проектов.
Обновляемое в реальном времени отображение состояния кластера, произошедших в нем изменений (событий); просмотр логов.
Просмотр данных мониторинга, основанного на Prometheus, Alertmanager и Grafana.
Управление операторами, представленными в OperatorHub.
Управление сборками, которые выполняются через Docker (из указанного репозитория с Dockerfile), S2I или произвольные внешние утилиты.
NB: Мы не стали добавлять в сравнение другие Kubernetes-дистрибутивы (например, куда менее известный Kubesphere): несмотря на то, что графический интерфейс в них может быть очень продвинутым, обычно идёт как часть интегрированного стека большой системы. Однако если вы считаете, что каких-то решений, полноценно функционирующих и в vanilla-инсталляция K8s, не хватает — дайте нам знать в комментариях.
Лицензия: Zlib(?) (такая у родительского проекта).
Проект от команды Portainer, разработавшей одноимённый популярный интерфейс для работы с Docker. Поскольку проект находится на ранней стадии разработки (первая и единственная бета-версия вышла 16 апреля 2020 г.), мы не стали оценивать его функции. Однако, возможно, он многих заинтересует: если это про вас — следите за развитием.
Это молодое десктоп-приложение призвано визуализировать ресурсы Kubernetes в реальном времени и управлять ими с простым интерфейсом в духе drag & drop. Из объектов в настоящий момент поддерживаются Pod, Service, Deployment, StatefulSet, PersistentVolume, PersistentVolumeClaim, ConfigMap и Secret. В скором времени обещают добавить поддержку Helm. Главные недостатки — закрытость кода (ожидается его открытие «в каком-то виде») и отсутствие поддержки Linux (пока доступны только версии для Windows и macOS, хотя это тоже скорее всего лишь вопрос времени).
Вкратце: «Консольный интерфейс для Kubernetes, позволяющий стильно управлять кластером».
Утилита оказалась лишь в бонусной части обзора по той причине, что предлагает консольный GUI. Однако авторы буквально выжали максимум из терминала, предлагая не только удобный интерфейс, но и 6 предопределённых тем оформления, и развитую систему клавиатурных сочетаний, и алиасов для команд. Их основательный подход не ограничился внешним видом: возможности k9s приятно впечатляют: управление ресурсами, отображение состояния кластера, вывод ресурсов в иерархическом представлении с зависимостями, просмотр логов, поддержка RBAC, расширение возможностей через плагины… Всё это пришлось по нраву широкому K8s-сообществу: количество GitHub-звёзд проекта практически не уступает официальному Kubernetes Dashboard!
4. Панели управления приложениями
И в завершении обзора — отдельная мини-категория. В неё попали два веб-интерфейса, предназначенные не для комплексного управления Kubernetes-кластерами, а для управления тем, что в них разворачивается.
Как известно, одним из самых зрелых и распространённых средств для деплоя комплексных приложений в Kubernetes является Helm. За период его существования накопилось множество пакетов (Helm charts) для простого развёртывания многих популярных приложений. Поэтому вполне логично и появление соответствующих визуальных средств, позволяющих управлять жизненным циклом чартов.
Вкратце: «Веб-приложение для поиска и обнаружения Helm-чартов во множестве репозиториев. Служит основой для проекта Helm hub».
Эта разработка от авторов Helm устанавливается в Kubernetes и работает в пределах одного кластера, выполняя поставленную задачу. Однако в настоящее время проект не почти не развивается. Его основное предназначение — поддержка существования Helm Hub. Для других нужд авторы рекомендуют Kubeapps (см. дальше) или Red Hat Automation Broker (часть OpenShift, но уже тоже не развивается).
Продукт от Bitnami, который тоже устанавливается в кластер Kubernetes, но отличается от Monocular изначальным фокусом на работу с приватными репозиториями.
Ключевые функции и особенности Kubeapps:
Просмотр и установка Helm chart’ов из репозиториев.
Проверка, обновление и удаление приложений на базе Helm, установленных в кластере.
Поддержка работы с кастомными и частными репозиториями чартов (поддерживает ChartMuseum и JFrog Artifactory).
Просмотр и работа с внешними сервисами — из Service Catalog и Service Brokers.
Публикация установленных приложений при помощи механизма Service Catalog Bindings.
Поддержка аутентификации и разделения прав при помощи RBAC.
Итоговая таблица
Ниже приведена сводная таблица, в которой мы постарались свести и агрегировать основные возможности существующих визуальных интерфейсов для облегчения сравнения:
Графические интерфейсы для Kubernetes — довольно специфичная и молодая ниша. Однако она развиваюется весьма активно: уже можно найти как достаточно зрелые решения, так и совсем молодые, которым еще есть куда расти. Они ориентируются на разные варианты применения, предлагая функции и внешний вид практически на любой вкус. Надеемся, что этот обзор поможет подобрать инструмент, наилучшим образом покрывающий текущие потребности.
P.S.
Благодарим kvaps за данные по OpenShift Console для таблицы сравнения!