company_banner

Обзор графических интерфейсов для 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





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





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

    6. OpenShift Console





    Несмотря на то, что этот веб-интерфейс является частью дистрибутива 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, не хватает — дайте нам знать в комментариях.

    Бонус


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




    Проект от команды 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, работа с чартами Helm 3 (с версии v0.11.0), расширение возможностей через плагины… Всё это пришлось по нраву широкому 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





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

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

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

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


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


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

    Заключение


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

    P.S.


    Благодарим kvaps за данные по OpenShift Console для таблицы сравнения!

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

    Флант
    DevOps-as-a-Service, Kubernetes, обслуживание 24×7

    Комментарии 25

      +2

      Еще есть неплохой openshift-console (работает и в нативном кубе тоже).

        0

        В предыдущем обзоре я уже упомянал о ней, но видимо во фланте её существование решили просто игнорировать :)

          0

          Про OpenShift есть специальное примечание в тексте статьи. Если есть желание пополнить таблицу — welcome, можно мне в личку :-)

            +4

            Да, сорри, сразу не заметил:


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

            Да, она является частью OpenShift, но живёт и развивается как отдельный проект, кроме-того она отлично работает с ванильным Kuberentes, из коробки умеет Oauth2 и много другое перечисленное в статье, легко устанавливается и настраивается. Именно поэтому я считаю, что её незаслуженно обделили вниманием.


            PS: по табличке, отписал в ЛС.

              +1
              Большое спасибо! Добавили и в текст, и в таблицу.
          0
          Добавлен, спасибо!
          0
          А что можете сказать про Argo CD?
            0
            А как это связано с графическими интерфейсами?
            P.S. Надеемся в обозримом будущем сделать сравнение с werf, чтобы стало понятно, что можем сказать.
              0

              k9s тоже не очень GUI

                0

                Это terminal UI, поэтому идёт "бонусом" и отсутствует в таблице сравнения. Но это тоже интерфейс, в своем роде графический, тоже призванный упростить общие действия над кластером, а не специализированная утилита совершенно иного предназначения.

            +2
            А как на cчет Rancher?
              0
              Ранчер сейчас это скорее kubernetes-дистрибутив.
                +1

                нет. Rancher — в виде rke — это дистрибутив. Rancher 2.0 — это же консоль управления и все связанное с ней (включая ранчер-специфичные сущности). В принципе, не самый плохой, но очень opinionated вариант. Умеет и в мультикластер кому нужно.

                  0
                  Да, спасибо. Они даже в FAQ, оказывается, объявляют прямо вот такое: «Our goal is to run any upstream Kubernetes clusters».
              +1
              Kubernetic, с тех пор как автор стал брать за него деньги, активно развивается. Так что там сейчас есть и работа с CRD, и терминал для подов и ресурсы (только для nodes)
                0
                К сожалению, демо-версию попробовать не получилось, а документация очевидно сильно отстаёт от прогресса приложения.
                  0
                  Еще есть tilt.dev для локальной разработки, описан в этом подкасте.
                    0

                    Спасибо. Посмотрел ссылку. Понял, что у меня комп на их странице тормозит, быстро пробежал глазами доку. Оценил, что я не хочу учить еще один DSL, местечкового розлива. Шансы на то, что это станет более-менее стандартом — как мне кажется — в районе нуля. Лучше уж научиться ансибл плейбуки писать для деплоя в куб.


                    Можете пояснить, пожалуйста, какие преимущества у tilt? Ну, может кроме якобы быстрого применения изменений при локальной разработке?


                    Ну, и мне проще было бы разрабам "продать" https://github.com/dokku/dokku чем tilt (если вообще просто абстрагироваться от того, что я выше написал)ю

                      0
                      Мы, к сожалению, k8s в проекте не используем, точнее используем, но на несколько уровней ниже под нами (я думаю). Но из подкаста я вынес что это тул именно для локального развертывания всей среды и видимости ошибок.
                  0

                  Спасибо за обзор!


                  Чего не хватает — это блок-схемы выбора для нубов ))) Я бы начал с первого вопроса — нужно ли управлять несколькими кластерами из одного места, ну, и далее ) Примерно как в ru_sds был чарт по выбору хранилища (вроде kvaps автор?)

                    +2

                    Ну она скорее шуточная была, хоть и с заявкой на правдивость :)

                    0
                    k9s поддерживает чтение состояния чартов helm3
                    :charts
                    и через конфиги k9s можно попробовать интегрировать c helm напрямую
                      0
                      В текст добавили, спасибо!
                      P.S. На мой вкус, надо бы им это прямо в README написать…

                    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                    Самое читаемое