- PVSM.RU - https://www.pvsm.ru -

Обзор Lens — IDE для Kubernetes

Обзор Lens — IDE для Kubernetes - 1

В прошлый раз я писал [1] о том, как можно улучшить утилиту kubectl, дополнив и расширив ее функционал, а сегодня зайду с другой стороны: познакомимся с решением, которое позволит забыть о консольных командах и управлять Kubernetes-кластером в графическом интерфейсе. Речь пойдёт про Lens [2] — бесплатное приложение с открытым кодом, которое позиционируется как полноценная Kubernetes IDE. Мы уже кратко рассматривали Lens в сравнительном обзоре GUI для K8s [3], а теперь попробуем это решение в деталях. Что ж, поехали!

Сам проект является кроссплатформенным приложением (работает на Linux, macOS, Windows) на базе фреймворка Electron [4] и ставится как отдельное приложение на вашем устройстве. Изначально разработкой Lens занималась компания Kontena, но после ее поглощения [5] в середине 2020-го года проект перешел в руки Mirantis. Благо, последняя продолжила развивать продукт как Open Source и весьма активно: с мая последней стабильной версией является v.4.2.4, однако уже на подходе v5.0.0 [6] (пока можно попробовать ее beta-релизы). На текущий момент проект имеет более 14 тысяч звёзд на GitHub и большое количество активных пользователей и участников, которые помогают в развитии проекта.

В своем описании Lens обещает как снизить входной барьер для тех, кто только начинает работать с Kubernetes, так и существенно повысить продуктивность пользователям с большим опытом.

Установка и первый запуск

Все, что требуется для установки приложения, — это скачать [7] и поставить нужный пакет для своего дистрибутива. Подробности описаны на странице Getting Started [8].

После запуска приложения понадобится добавить kubeconfig требуемого Kubernetes-кластера. Согласно информации с официального сайта [2], Lens поддерживает не только «ванильный» Kubernetes, но и любую платформу: EKS, AKS, GKE, Minikube, Rancher, k0s, k3s, OpenShift и т.д. Параллельно можно добавить несколько конфигурационных файлов и потом переключаться между кластерами через боковое меню приложения. 

При первом знакомстве с Lens я решил использовать Minikube [9] и, когда соответствующий kubeconfig был добавлен, меня встретила панель с уведомлением, что Prometheus-метрики в текущем кластере не собираются. Для устранения этого недостатка Lens предлагает установить свой Prometheus stack [10], чем я и воспользовался. Делается это одной кнопкой в настройках кластера: Features -> Metrics Stack - Install (кстати, в 5-й версии Lens такой кнопки уже нет — прим.). После небольшого количества времени в Lens начнут показываться графики потребления ресурсов:

Обзор Lens — IDE для Kubernetes - 2

Если в кластере уже используется Prometheus для сборка метрик, то Lens автоматически попробует к нему подключиться. А если этого не произошло, то придется поработать напильником, инструкцию по применению которого — см. в репозитории проекта [11].

Знакомство с интерфейсом

Всё рабочее пространство можно разделить на три области:

  • меню выбора элементов (Cluster, Nodes, Workloads...);

  • основное рабочее пространство;

  • терминал/текстовый редактор.

Через Lens можно управлять всеми сущностями кластера, а для удобства ресурсы сгруппированы в меню. Для человека, работавшего с Kubernetes, расположение элементов в этом меню является интуитивно понятным и не требует дополнительных пояснений. Например, в блоке Workloads содержатся разделы для доступа к Pod’ам, Deployment’ам, STS и т.д. При переходе в нужный раздел мы получаем возможность поиска по имени или сортировки элемента по нужному столбцу:

Обзор Lens — IDE для Kubernetes - 3

При нажатии на конкретный элемент раскрывается дополнительное окно со всей информацией об этом элементе (а-ля describe), в том числе: графики потребления, лейблы, пробы, volumes и т.д. При этом связанные дочерние элементы кликабельны, что позволяет, например, быстро переходить из Pod’а в окно с информацией о его томах, секретах или ConfigMap’ах. 

К слову, при работе с последними в Lens также не возникает неудобств. Например, в ConfigMap’ах и секретах (помимо удобного отображения сводной информации) мы получаем быстрый доступ к изменению содержимого:

Обзор Lens — IDE для Kubernetes - 4

По нажатию на контекстное меню — «⋮» — у каждого элемента открываются дополнительные функции. Например, при работе с узлами так появится возможность shell-доступа к выбранному узлу (откроется встроенный в Lens терминал, о котором расскажу чуть ниже), вызов команд cordon и drain, внесение изменений через встроенный текстовый редактор:

Обзор Lens — IDE для Kubernetes - 5

При работе с Pod’ами удобно смотреть их логи, по которым можно также искать и которые легко сразу скачать. Однако важный нюанс в том, что сами логи обновляются не в режиме реального времени, а с некоторой задержкой — это может добавить неудобств:

Обзор Lens — IDE для Kubernetes - 6

В блоке Events доступны события в кластере — с возможностью их поиска по ключевым словам и фильтрации по пространствам имен. События с типом Warning по умолчанию подсвечиваются красным, что помогает не пропустить что-то важное. Здесь есть очевидная недоработка интерфейса: отсутствует горизонтальный скролл или возможность изменения ширины столбцов. Поэтому для удобства приходилось либо полностью убирать некоторые столбцы, либо регулировать общий масштаб всего интерфейса:

Обзор Lens — IDE для Kubernetes - 7

Терминал 

Несмотря на то, что Lens предлагает модель управления кластером через веб-интерфейс, среди возможностей этого приложения нашлось место и терминалу — Smart terminal, вкладки которого можно раскрыть в нижней части интерфейса. В терминале предустановлена CLI-утилита kubectl (а также Helm 3), особенностью которой является «синхронизированность» её версии с версией Kubernetes API для выбранного кластера. Такой подход позволяет забыть о необходимости ставить различные версии kubectl при работе с разными K8s-кластерами на одном устройстве:

Обзор Lens — IDE для Kubernetes - 8

Впрочем, показалось странным, что несмотря на наличие «smart» в названии этого терминала, автодополнение через <Tab> в нём по умолчанию не работает. Лечится это стандартным добавлением: 

 echo 'source <(kubectl completion bash)' >>~/.bashrc

В той же, нижней, части интерфейса Lens можно создать вкладку для простого текстового редактора. Он предназначен для редактирования/применения YAML-манифестов в кластере. В редактор встроена проверка структуры YAML-файла, не позволяющая сохранить изменения, если обнаружены ошибки в отступах.

Размер рабочих окон терминала или текстового редактора можно регулировать — вплоть до полноэкранного режима. При этом размер шрифта изменить штатными средствами не удастся: здесь поможет только общее масштабирование всех элементов (что неудобно). Об этом даже есть соответствующий issue [12], к сожалению, не нашедший своей реализации с августа прошлого года.

Чарты

В блоке меню Apps можно произвести инсталляцию Helm-чартов в кластер. Наиболее популярные Helm-репозитории уже добавлены в Lens: остается только активировать их или добавить новые через настройки.

При выборе желаемого чарта открывается дополнительное окно с подробной информацией о нём и ссылкой на GitHub:

Обзор Lens — IDE для Kubernetes - 9

После ознакомления и нажатия на Install открывается текстовый редактор содержимого values.yaml для корректировки значений, подставляемых в чарт. Там же можно указать имя релиза или выбрать нужный namespace:

Обзор Lens — IDE для Kubernetes - 10

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

Расширения

Начиная с версии 4.0 в Lens присутствует система расширений, которая позволяет добавить в меню свои элементы. Некоторые расширения уже появились — познакомиться с ними можно в репозитории [13] проекта. Например, Lens Resource Map [14] отображает ресурсы Kubernetes и их отношения в виде интерактивного графа в реальном времени (это лучше «потрогать» вживую):

Обзор Lens — IDE для Kubernetes - 11

Starboard extension [15] добавляет отдельный пункт в меню для удобства взаимодействия с отчетом аудита безопасности, который формируется одноименным сервисом — Starboard [16] от Aqua Security.

Можно найти даже расширение Space Invaders [17], которое запускает одноименную мини-игру с одной особенностью: противниками являются Pod’ы кластера, а при их уничтожении происходит delete соответствующего Pod’а:

Обзор Lens — IDE для Kubernetes - 12

В общем, не рекомендую использовать это расширение в production… И тут всплывает еще один недочет Lens: все устанавливаемые расширения автоматически распространяются на все добавленные кластеры. Возможности точечного отключения расширений нет.

А сам сценарий установки расширений обычно сводится к скачиванию архива и указанию пути его расположения в соответствующем меню Lens. Однако в некоторых случаях (например, для Starboard) может потребоваться выполнение дополнительных действий для установки [18] сопутствующих элементов.

Заключение

Зачастую Lens ставят в один ряд вместе с k9s (см. её обзор здесь [19]), т.к. оба проекта стараются решить одну и ту же потребность: многофункциональный UI для K8s-кластеров. Несмотря на большую популярность консольной утилиты, на мой взгляд, Lens в этом сравнении выглядит более привлекательным, потому что в нём удачно сочетаются как функциональные возможности, так и простота использования. К тому же, стоит упомянуть, что k9s обзавелась платной версией [20], что ставит под вопрос будущие обновления Open Source-редакции. С другой стороны, что касается повседневного выбора между консолью и графическим IDE, лично я склоняюсь к терминалу. 

Опустив потенциальные риски, связанные с использованием дополнительной прослойки взаимодействия с K8s, Lens, пожалуй, покрывает 90% типовых задач по управлению кластером, а оставшиеся 10% — это какие-то недоработки интерфейса или баги, которые активно устраняются командой разработки (достаточно взглянуть на статистику активности [21] репозитория в GitHub). В то же время отсутствие горячих клавиш сказывается на производительности работы с Lens, а интегрированный в него текстовый редактор не покрывает все желаемые возможности. В конечном счете это приводит к необходимости использовать для таких целей стороннее ПО, что нарушает главный замысел IDE: заменить несколько «узких» инструментов одним общим. 

В любом случае здорово, что такой проект активно развивается и поддерживается сообществом: это подтверждает его востребованность среди пользователей. А мне будет интересно следить за его развитием: может быть, уже 5-я версия принесет новшества, способные повлиять на приоритеты в выборе утилиты?

P.S.

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

Автор: Sprait

Источник [23]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/open-source/365497

Ссылки в тексте:

[1] писал: https://habr.com/ru/company/flant/blog/551182/

[2] Lens: https://k8slens.dev/

[3] сравнительном обзоре GUI для K8s: https://habr.com/ru/company/flant/blog/506948/

[4] Electron: https://www.electronjs.org/

[5] поглощения: https://techcrunch.com/2020/08/13/mirantis-acquires-lens-an-ide-for-kubernetes/

[6] v5.0.0: https://github.com/lensapp/lens/releases/tag/v5.0.0-beta.10

[7] скачать: https://github.com/lensapp/lens/releases

[8] Getting Started: https://docs.k8slens.dev/latest/getting-started/

[9] Minikube: https://kubernetes.io/ru/docs/tasks/tools/install-minikube/

[10] Prometheus stack: https://github.com/lensapp/lens/tree/master/extensions/metrics-cluster-feature/resources

[11] репозитории проекта: https://github.com/lensapp/lens/blob/master/troubleshooting/custom-prometheus.md

[12] issue: https://github.com/lensapp/lens/issues/642

[13] репозитории: https://github.com/lensapp/lens-extensions

[14] Lens Resource Map: https://github.com/nevalla/lens-resource-map-extension

[15] Starboard extension: https://github.com/aquasecurity/starboard-lens-extension

[16] Starboard: https://github.com/aquasecurity/starboard

[17] Space Invaders: https://github.com/chenhunghan/lens-ext-invaders

[18] установки: https://aquasecurity.github.io/starboard/v0.10.1/operator/

[19] здесь: https://habr.com/ru/company/flant/blog/524196/

[20] платной версией: https://k9salpha.io/

[21] статистику активности: https://github.com/lensapp/lens/pulse/monthly

[22] Headlamp — новый GUI для работы с Kubernetes: https://habr.com/ru/company/flant/blog/534564/

[23] Источник: https://habr.com/ru/post/563422/?utm_source=habrahabr&utm_medium=rss&utm_campaign=563422