Прим. перев.: месяц назад компания Kinvolk выпустила свой интерфейс для управления Kubernetes-кластерами. Новый Open Source-проект, пополнив уже немалочисленные ряды подобных решений, сочетает в себе классический подход к дизайну интерфейсов, возможность запуска локально и внутри кластера, а также высокую расширяемость, что — вместе с достаточно богатым набором функций — делает его интересным хотя бы для первичного знакомства. В этом анонсе его авторы рассказывают, почему Headlamp стал именно таким.
![](https://habrastorage.org/r/w1560/webt/ix/r-/xp/ixr-xpimpfmw7djkf9rjhlqywzi.png)
Читая материалы по Kubernetes, вы наверняка неоднократно сталкивались с примерами различных kubectl-команд и хитрых конфигов на YAML. У людей, хорошо разбирающихся в K8s, такой подход, без сомнения, не вызывает никакого отторжения. Но в век повсеместного распространения веб-интерфейсов его нельзя назвать дружественным к обычным пользователям. Он усложняет процесс познания для новичков и выступает барьером для тех, кто не особо хорошо знаком с Kubernetes.
Конечно, существуют различные графические интерфейсы для K8s, в том числе Kubernetes Dashboard, являющийся частью самого upstream Kubernetes. (Прим. перев.: О многих из существующих решений мы уже рассказывали в этом сравнении.) Однако, исследуя все многообразие вариантов, мы не сумели подобрать решение, которое бы полностью нас устраивало. Хотелось, чтобы интерфейс:
Несмотря на довольно богатый выбор, ни одно из решений, опробованных нами, не отвечало всем перечисленным выше критериям (или могло выступить хорошей базой для создания нового решения). Поэтому, по освященной веками традиции, мы решили сделать его сами…
Сегодня я с гордостью объявляю о широкой доступности нового пользовательского интерфейса для Kubernetes под названием Headlamp.
Headlamp — универсальный и расширяемый пользовательский интерфейс к Kubernetes, удовлетворяющий критериям выше. Конечно же, являясь детищем Kinvolk, он на 100% Open Source. Мы надеемся, что многие участники сообщества Kubernetes не только по достоинству оценят Headlamp, но и внесут свой вклад в проект.
Давайте вкратце рассмотрим его основные характеристики.
Мы стремимся к тому, чтобы Headlamp подходил для как можно большего числа сценариев использования. Целевой аудиторией проекта являются не только новички в Kubernetes, но и опытные администраторы, а также вендоры K8s с весьма различными потребностями. Часто (особенно это касается UI-проектов) подобное разнообразие сценариев применения реализуется за счет создания большого числа форков, каждое из которых обслуживается своей downstream-командой. Но поддерживать форки в актуальном состоянии тем сложнее, чем масштабнее в них изменения.
Система плагинов позволяет решить эту проблему. Именно поэтому Headlamp поддерживает out-of-tree плагины к UI. Они представляют собой JavaScript-файлы, подгружаемые бэкендом Headlamp и передаваемые клиенту, который динамически их загружает.
Подобный подход открывает широкие возможности для инноваций, способствуя появлению множества новых функций. Например, легко сделать кнопку в блоке подробностей о pod'е, которая будет перенаправлять пользователя на сервис, показывающий финансовые затраты на этот pod.
Механизм плагинов Headlamp открывает широкие возможности для сообщества. И мы готовы сотрудничать со всеми, кто желает поучаствовать в разработке новых плагинов для Headlamp, и развивать сам механизм, приспосабливая его для новых сценариев использования.
Чтобы продемонстрировать всю мощь механизма плагинов (да и самого инструмента), мы разработали Headlamp-плагин для гаджета traceloop, входящего в проект Inspektor Gadget (набор инструментов для инспекции и отладки приложений в Kubernetes — прим. перев.).
После установки Inspektor Gadget и включения гаджета traceloop тот начинает записывать все системные вызовы из pod'а в кольцевой буфер. Этот буфер можно просматривать в реальном времени в процессе работы pod'а. Другими словами, traceloop позволяет заглянуть в то, что pod делает прямо сейчас. Кроме того, данные в буфере сохраняются для pod'ов, завершивших работу. Так можно установить причину сбоя уже после того, как он произошел, — этакий «черный ящик» для приложений Kubernetes.
![](https://habrastorage.org/webt/ra/rg/oa/rargoadb4xnekbvmqphxvj08yri.gif)
Проблема со многими пользовательскими CRUD-интерфейсами состоит в том, что они ничего не знают о внутренней организации контроля доступа. Например, присутствие кнопок для редактирования/удаления вводит пользователя в заблуждение, если у него на самом деле нет прав на изменение ресурса. Headlamp проверяет RBAC-настройки Kubernetes и показывает только элементы управления для тех действий, которые доступны пользователю. Например, если у пользователя нет права редактировать ресурс, то и кнопка «редактировать» не будет показана.
Все это чрезвычайно благоприятно сказывается на пользовательском опыте: ведь оператор сразу видит, какие действия ему доступны с учетом текущих прав. Это отлично подходит для ситуаций, когда предоставляются ограниченные по времени полномочия (например, временное разрешение на удаление ресурса).
![](https://habrastorage.org/r/w1560/webt/s2/uz/2s/s2uz2suouztzb3yqirctgminauw.png)
Доступные кнопки для действий с pod'ом, когда у пользователя есть права на изменение/удаление
![](https://habrastorage.org/r/w1560/webt/q6/h2/rs/q6h2rsza5lra3bg-bjoiiqawicq.png)
Доступные кнопки, когда у пользователя нет прав на изменение/удаление
Мы стремились сделать дизайн Headlamp максимально лаконичным и современным, при этом придерживаясь «традиционного» Kubernetes UI или стиля панели управления. Например, мы убеждены, что привычный табличный вид отлично подходит для работы, и надеемся, что другие типы визуализации (например, представление кластера в виде графов) могут быть реализованы с помощью плагинов.
Фронтенд реализован на React с библиотекой Material UI (она современна, аккуратна и поддерживается обширным сообществом пользователей). Плюс ко всему, она входит в технологический стек другого нашего проекта — Nebraska (менеджер обновлений для Flatcar Container Linux — прим. перев.), позволяя нам обмениваться опытом и ресурсами и обеспечивая единообразие UI во всех продуктах.
Большинство пользовательских интерфейсов для Kubernetes делятся на две группы: удаленные (бэкенд часто находится в кластере) вроде Kubernetes Dashboard или локальные (приложение установлено на компьютер) как Octant от VMware.
У каждого из этих подходов имеются свои преимущества и недостатки. Например, в случае удаленного приложения очень просто поделиться URL с другими пользователями и реализовать их вход через OIDC. Оно доступно «везде», и его легко поддерживать в актуальном состоянии. Наоборот, в случае десктоп-версии нет необходимости задумываться о размещении UI. Этот подход обеспечивает лучшую изоляцию, однако забота о поддержании приложения в актуальном состоянии ложится на плечи пользователей.
С Headlamp больше не нужно выбирать между этими двумя подходами: они оба поддерживаются. Headlamp можно легко разместить в кластере, воспользовавшись нашими YAML-файлами (и адаптировав их под себя), или установить локально на машину под управлением Linux, macOS или Windows.
Большинство Kubernetes deployment'ов состоят из нескольких кластеров (хотя бы для того, чтобы разделить dev- и prod-окружения). Headlamp обеспечивает доступ во все эти кластеры: конкретный метод зависит от того, запускаете ли вы его локально или удаленно.
При локальном запуске Headlamp будет считывать kubeconfig'и и отображать доступные там контексты, позволяя пользователю изменять их при необходимости, просто устанавливая локальную переменную среды на соответствующий кластер.
Мульти-кластерный режим устроен очень просто: для каждого настроенного кластера создается прокси, и запросы от UI (с вызовами к Kubernetes API) перенаправляются на адрес нужного кластера. Здесь следует упомянуть проект K8dash, модули для управления запросами/API которого мы использовали при разработке Headlamp.
Этот подход также можно совместить с запуском in-cluster, однако для этого кластеру, в котором работает приложение, потребуется API-доступ к другим заданным кластерам.
![](https://habrastorage.org/r/w1560/webt/6n/el/fz/6nelfz_ozjltdhmicsgk5u8i47w.png)
Как вам, вероятно, известно, у нас также есть свой дистрибутив Kubernetes — Lokomotive. Мы используем Headlamp в Lokomotive по его прямому назначению, но хотим подчеркнуть, что это самостоятельные и независимые проекты. Мы не собираемся привязывать Headlamp к какому-либо поставщику услуг K8s, и разрабатываем его так, чтобы он работал в любом типичном кластере Kubernetes.
Сделать это очень просто: разверните deployment в своем кластере и перейдите в браузере по соответствующему адресу, или скачайте и установите десктоп-версию для Windows, macOS или Linux. Подробности — в документации.
Headlamp — инструмент с полностью открытым исходным кодом, выпущенный на условиях лицензии Apache 2.0. Как упоминалось выше, мы сделали его независимым от поставщиков услуг Kubernetes и универсальным в плане применения (охватывающим большое число сценариев использования). Сегодня мы приглашаем всех желающих принять участие в развитии проекта! Для этого, пожалуйста, ознакомьтесь с соответствующими рекомендациями.
Надеемся, Headlamp вам понравится!
![](https://habrastorage.org/r/w1560/webt/at/_y/bn/at_ybnzbtje3cwfnxb__fpfd6ru.png)
Читайте также в нашем блоге:
![](https://habrastorage.org/webt/ix/r-/xp/ixr-xpimpfmw7djkf9rjhlqywzi.png)
Читая материалы по Kubernetes, вы наверняка неоднократно сталкивались с примерами различных kubectl-команд и хитрых конфигов на YAML. У людей, хорошо разбирающихся в K8s, такой подход, без сомнения, не вызывает никакого отторжения. Но в век повсеместного распространения веб-интерфейсов его нельзя назвать дружественным к обычным пользователям. Он усложняет процесс познания для новичков и выступает барьером для тех, кто не особо хорошо знаком с Kubernetes.
Конечно, существуют различные графические интерфейсы для K8s, в том числе Kubernetes Dashboard, являющийся частью самого upstream Kubernetes. (Прим. перев.: О многих из существующих решений мы уже рассказывали в этом сравнении.) Однако, исследуя все многообразие вариантов, мы не сумели подобрать решение, которое бы полностью нас устраивало. Хотелось, чтобы интерфейс:
- был на 100% Open Source;
- активно поддерживался сообществом;
- являлся универсальным в том смысле, что не был привязан к дистрибутиву Kubernetes конкретного поставщика;
- был модульным и расширяемым;
- имел опрятный и современный внешний вид;
- был реализован на стеке, хорошо знакомом нашим разработчикам (Go, JavaScript/TypeScript, React);
- являлся интерактивным (т.е. не только собирал данные, но и позволял проводить определенные действия с кластером);
- поддерживал мульти-кластерный режим.
Несмотря на довольно богатый выбор, ни одно из решений, опробованных нами, не отвечало всем перечисленным выше критериям (или могло выступить хорошей базой для создания нового решения). Поэтому, по освященной веками традиции, мы решили сделать его сами…
Представляем Headlamp
Сегодня я с гордостью объявляю о широкой доступности нового пользовательского интерфейса для Kubernetes под названием Headlamp.
Headlamp — универсальный и расширяемый пользовательский интерфейс к Kubernetes, удовлетворяющий критериям выше. Конечно же, являясь детищем Kinvolk, он на 100% Open Source. Мы надеемся, что многие участники сообщества Kubernetes не только по достоинству оценят Headlamp, но и внесут свой вклад в проект.
Давайте вкратце рассмотрим его основные характеристики.
Расширяемый UI
Мы стремимся к тому, чтобы Headlamp подходил для как можно большего числа сценариев использования. Целевой аудиторией проекта являются не только новички в Kubernetes, но и опытные администраторы, а также вендоры K8s с весьма различными потребностями. Часто (особенно это касается UI-проектов) подобное разнообразие сценариев применения реализуется за счет создания большого числа форков, каждое из которых обслуживается своей downstream-командой. Но поддерживать форки в актуальном состоянии тем сложнее, чем масштабнее в них изменения.
Система плагинов позволяет решить эту проблему. Именно поэтому Headlamp поддерживает out-of-tree плагины к UI. Они представляют собой JavaScript-файлы, подгружаемые бэкендом Headlamp и передаваемые клиенту, который динамически их загружает.
Подобный подход открывает широкие возможности для инноваций, способствуя появлению множества новых функций. Например, легко сделать кнопку в блоке подробностей о pod'е, которая будет перенаправлять пользователя на сервис, показывающий финансовые затраты на этот pod.
Механизм плагинов Headlamp открывает широкие возможности для сообщества. И мы готовы сотрудничать со всеми, кто желает поучаствовать в разработке новых плагинов для Headlamp, и развивать сам механизм, приспосабливая его для новых сценариев использования.
Traceloop
Чтобы продемонстрировать всю мощь механизма плагинов (да и самого инструмента), мы разработали Headlamp-плагин для гаджета traceloop, входящего в проект Inspektor Gadget (набор инструментов для инспекции и отладки приложений в Kubernetes — прим. перев.).
После установки Inspektor Gadget и включения гаджета traceloop тот начинает записывать все системные вызовы из pod'а в кольцевой буфер. Этот буфер можно просматривать в реальном времени в процессе работы pod'а. Другими словами, traceloop позволяет заглянуть в то, что pod делает прямо сейчас. Кроме того, данные в буфере сохраняются для pod'ов, завершивших работу. Так можно установить причину сбоя уже после того, как он произошел, — этакий «черный ящик» для приложений Kubernetes.
![](https://habrastorage.org/webt/ra/rg/oa/rargoadb4xnekbvmqphxvj08yri.gif)
Избирательный UI
Проблема со многими пользовательскими CRUD-интерфейсами состоит в том, что они ничего не знают о внутренней организации контроля доступа. Например, присутствие кнопок для редактирования/удаления вводит пользователя в заблуждение, если у него на самом деле нет прав на изменение ресурса. Headlamp проверяет RBAC-настройки Kubernetes и показывает только элементы управления для тех действий, которые доступны пользователю. Например, если у пользователя нет права редактировать ресурс, то и кнопка «редактировать» не будет показана.
Все это чрезвычайно благоприятно сказывается на пользовательском опыте: ведь оператор сразу видит, какие действия ему доступны с учетом текущих прав. Это отлично подходит для ситуаций, когда предоставляются ограниченные по времени полномочия (например, временное разрешение на удаление ресурса).
![](https://habrastorage.org/webt/s2/uz/2s/s2uz2suouztzb3yqirctgminauw.png)
Доступные кнопки для действий с pod'ом, когда у пользователя есть права на изменение/удаление
![](https://habrastorage.org/webt/q6/h2/rs/q6h2rsza5lra3bg-bjoiiqawicq.png)
Доступные кнопки, когда у пользователя нет прав на изменение/удаление
Дизайн / Пользовательский интерфейс
Мы стремились сделать дизайн Headlamp максимально лаконичным и современным, при этом придерживаясь «традиционного» Kubernetes UI или стиля панели управления. Например, мы убеждены, что привычный табличный вид отлично подходит для работы, и надеемся, что другие типы визуализации (например, представление кластера в виде графов) могут быть реализованы с помощью плагинов.
Фронтенд реализован на React с библиотекой Material UI (она современна, аккуратна и поддерживается обширным сообществом пользователей). Плюс ко всему, она входит в технологический стек другого нашего проекта — Nebraska (менеджер обновлений для Flatcar Container Linux — прим. перев.), позволяя нам обмениваться опытом и ресурсами и обеспечивая единообразие UI во всех продуктах.
Локально или в кластере
Большинство пользовательских интерфейсов для Kubernetes делятся на две группы: удаленные (бэкенд часто находится в кластере) вроде Kubernetes Dashboard или локальные (приложение установлено на компьютер) как Octant от VMware.
У каждого из этих подходов имеются свои преимущества и недостатки. Например, в случае удаленного приложения очень просто поделиться URL с другими пользователями и реализовать их вход через OIDC. Оно доступно «везде», и его легко поддерживать в актуальном состоянии. Наоборот, в случае десктоп-версии нет необходимости задумываться о размещении UI. Этот подход обеспечивает лучшую изоляцию, однако забота о поддержании приложения в актуальном состоянии ложится на плечи пользователей.
С Headlamp больше не нужно выбирать между этими двумя подходами: они оба поддерживаются. Headlamp можно легко разместить в кластере, воспользовавшись нашими YAML-файлами (и адаптировав их под себя), или установить локально на машину под управлением Linux, macOS или Windows.
Мульти-кластерный режим
Большинство Kubernetes deployment'ов состоят из нескольких кластеров (хотя бы для того, чтобы разделить dev- и prod-окружения). Headlamp обеспечивает доступ во все эти кластеры: конкретный метод зависит от того, запускаете ли вы его локально или удаленно.
При локальном запуске Headlamp будет считывать kubeconfig'и и отображать доступные там контексты, позволяя пользователю изменять их при необходимости, просто устанавливая локальную переменную среды на соответствующий кластер.
Мульти-кластерный режим устроен очень просто: для каждого настроенного кластера создается прокси, и запросы от UI (с вызовами к Kubernetes API) перенаправляются на адрес нужного кластера. Здесь следует упомянуть проект K8dash, модули для управления запросами/API которого мы использовали при разработке Headlamp.
Этот подход также можно совместить с запуском in-cluster, однако для этого кластеру, в котором работает приложение, потребуется API-доступ к другим заданным кластерам.
![](https://habrastorage.org/webt/6n/el/fz/6nelfz_ozjltdhmicsgk5u8i47w.png)
Связь с Lokomotive Kubernetes
Как вам, вероятно, известно, у нас также есть свой дистрибутив Kubernetes — Lokomotive. Мы используем Headlamp в Lokomotive по его прямому назначению, но хотим подчеркнуть, что это самостоятельные и независимые проекты. Мы не собираемся привязывать Headlamp к какому-либо поставщику услуг K8s, и разрабатываем его так, чтобы он работал в любом типичном кластере Kubernetes.
Попробуйте Headlamp в своем кластере!
Сделать это очень просто: разверните deployment в своем кластере и перейдите в браузере по соответствующему адресу, или скачайте и установите десктоп-версию для Windows, macOS или Linux. Подробности — в документации.
Headlamp — инструмент с полностью открытым исходным кодом, выпущенный на условиях лицензии Apache 2.0. Как упоминалось выше, мы сделали его независимым от поставщиков услуг Kubernetes и универсальным в плане применения (охватывающим большое число сценариев использования). Сегодня мы приглашаем всех желающих принять участие в развитии проекта! Для этого, пожалуйста, ознакомьтесь с соответствующими рекомендациями.
Надеемся, Headlamp вам понравится!
![](https://habrastorage.org/webt/at/_y/bn/at_ybnzbtje3cwfnxb__fpfd6ru.png)
P.S. от переводчика
Читайте также в нашем блоге: