Обзор Lens — IDE для Kubernetes
![](https://webcf.waybackmachine.org/web/20210625044343im_/https://habrastorage.org/getpro/habr/upload_files/801/8f8/711/8018f8711b6d5142576d9b7b384b4415.png)
В прошлый раз я писал о том, как можно улучшить утилиту kubectl, дополнив и расширив ее функционал, а сегодня зайду с другой стороны: познакомимся с решением, которое позволит забыть о консольных командах и управлять Kubernetes-кластером в графическом интерфейсе. Речь пойдёт про Lens — бесплатное приложение с открытым кодом, которое позиционируется как полноценная Kubernetes IDE. Мы уже кратко рассматривали Lens в сравнительном обзоре GUI для K8s, а теперь попробуем это решение в деталях. Что ж, поехали!
Сам проект является кроссплатформенным приложением (работает на Linux, macOS, Windows) на базе фреймворка Electron и ставится как отдельное приложение на вашем устройстве. Изначально разработкой Lens занималась компания Kontena, но после ее поглощения в середине 2020-го года проект перешел в руки Mirantis. Благо, последняя продолжила развивать продукт как Open Source и весьма активно: с мая последней стабильной версией является v.4.2.4, однако уже на подходе v5.0.0 (пока можно попробовать ее beta-релизы). На текущий момент проект имеет более 14 тысяч звёзд на GitHub и большое количество активных пользователей и участников, которые помогают в развитии проекта.
В своем описании Lens обещает как снизить входной барьер для тех, кто только начинает работать с Kubernetes, так и существенно повысить продуктивность пользователям с большим опытом.
Установка и первый запуск
Все, что требуется для установки приложения, — это скачать и поставить нужный пакет для своего дистрибутива. Подробности описаны на странице Getting Started.
После запуска приложения понадобится добавить kubeconfig требуемого Kubernetes-кластера. Согласно информации с официального сайта, Lens поддерживает не только «ванильный» Kubernetes, но и любую платформу: EKS, AKS, GKE, Minikube, Rancher, k0s, k3s, OpenShift и т.д. Параллельно можно добавить несколько конфигурационных файлов и потом переключаться между кластерами через боковое меню приложения.
При первом знакомстве с Lens я решил использовать Minikube и, когда соответствующий kubeconfig
был добавлен, меня встретила панель с уведомлением, что Prometheus-метрики в текущем кластере не собираются. Для устранения этого недостатка Lens предлагает установить свой Prometheus stack, чем я и воспользовался. Делается это одной кнопкой в настройках кластера: Features -> Metrics Stack - Install (кстати, в 5-й версии Lens такой кнопки уже нет — прим.). После небольшого количества времени в Lens начнут показываться графики потребления ресурсов:
![](https://webcf.waybackmachine.org/web/20210625044343im_/https://habrastorage.org/getpro/habr/upload_files/d15/b27/e9d/d15b27e9d34244937f8df843f139006f.png)
Если в кластере уже используется Prometheus для сборка метрик, то Lens автоматически попробует к нему подключиться. А если этого не произошло, то придется поработать напильником, инструкцию по применению которого — см. в репозитории проекта.
Знакомство с интерфейсом
Всё рабочее пространство можно разделить на три области:
меню выбора элементов (Cluster, Nodes, Workloads...);
основное рабочее пространство;
терминал/текстовый редактор.
Через Lens можно управлять всеми сущностями кластера, а для удобства ресурсы сгруппированы в меню. Для человека, работавшего с Kubernetes, расположение элементов в этом меню является интуитивно понятным и не требует дополнительных пояснений. Например, в блоке Workloads содержатся разделы для доступа к Pod’ам, Deployment’ам, STS и т.д. При переходе в нужный раздел мы получаем возможность поиска по имени или сортировки элемента по нужному столбцу:
![](https://webcf.waybackmachine.org/web/20210625044343im_/https://habrastorage.org/getpro/habr/upload_files/932/04a/026/93204a026a50c587f446c14d9ab44b34.png)
При нажатии на конкретный элемент раскрывается дополнительное окно со всей информацией об этом элементе (а-ля describe
), в том числе: графики потребления, лейблы, пробы, volumes и т.д. При этом связанные дочерние элементы кликабельны, что позволяет, например, быстро переходить из Pod’а в окно с информацией о его томах, секретах или ConfigMap’ах.
К слову, при работе с последними в Lens также не возникает неудобств. Например, в ConfigMap’ах и секретах (помимо удобного отображения сводной информации) мы получаем быстрый доступ к изменению содержимого:
![](https://webcf.waybackmachine.org/web/20210625044343im_/https://habrastorage.org/getpro/habr/upload_files/8bb/420/b93/8bb420b9300d3cbad65ff4fc6feb21b6.png)
По нажатию на контекстное меню — «⋮» — у каждого элемента открываются дополнительные функции. Например, при работе с узлами так появится возможность shell-доступа к выбранному узлу (откроется встроенный в Lens терминал, о котором расскажу чуть ниже), вызов команд cordon
и drain
, внесение изменений через встроенный текстовый редактор:
![](https://webcf.waybackmachine.org/web/20210625044343im_/https://habrastorage.org/getpro/habr/upload_files/dd8/202/a60/dd8202a6068f66ab0143b429f8175f72.png)
При работе с Pod’ами удобно смотреть их логи, по которым можно также искать и которые легко сразу скачать. Однако важный нюанс в том, что сами логи обновляются не в режиме реального времени, а с некоторой задержкой — это может добавить неудобств:
![](https://webcf.waybackmachine.org/web/20210625044343im_/https://habrastorage.org/getpro/habr/upload_files/ad3/02d/f7d/ad302df7d6ae62db8bd0f4ed1a05fd81.png)
В блоке Events доступны события в кластере — с возможностью их поиска по ключевым словам и фильтрации по пространствам имен. События с типом Warning по умолчанию подсвечиваются красным, что помогает не пропустить что-то важное. Здесь есть очевидная недоработка интерфейса: отсутствует горизонтальный скролл или возможность изменения ширины столбцов. Поэтому для удобства приходилось либо полностью убирать некоторые столбцы, либо регулировать общий масштаб всего интерфейса:
![](https://webcf.waybackmachine.org/web/20210625044343im_/https://habrastorage.org/getpro/habr/upload_files/67e/6a6/1c1/67e6a61c1f06e660da9b92613ccab2cb.png)
Терминал
Несмотря на то, что Lens предлагает модель управления кластером через веб-интерфейс, среди возможностей этого приложения нашлось место и терминалу — Smart terminal, вкладки которого можно раскрыть в нижней части интерфейса. В терминале предустановлена CLI-утилита kubectl
(а также Helm 3), особенностью которой является «синхронизированность» её версии с версией Kubernetes API для выбранного кластера. Такой подход позволяет забыть о необходимости ставить различные версии kubectl
при работе с разными K8s-кластерами на одном устройстве:
![](https://webcf.waybackmachine.org/web/20210625044343im_/https://habrastorage.org/getpro/habr/upload_files/d7c/da3/b1a/d7cda3b1a96199816390019e7e3e2787.png)
Впрочем, показалось странным, что несмотря на наличие «smart» в названии этого терминала, автодополнение через <Tab> в нём по умолчанию не работает. Лечится это стандартным добавлением:
echo 'source <(kubectl completion bash)' >>~/.bashrc
В той же, нижней, части интерфейса Lens можно создать вкладку для простого текстового редактора. Он предназначен для редактирования/применения YAML-манифестов в кластере. В редактор встроена проверка структуры YAML-файла, не позволяющая сохранить изменения, если обнаружены ошибки в отступах.
Размер рабочих окон терминала или текстового редактора можно регулировать — вплоть до полноэкранного режима. При этом размер шрифта изменить штатными средствами не удастся: здесь поможет только общее масштабирование всех элементов (что неудобно). Об этом даже есть соответствующий issue, к сожалению, не нашедший своей реализации с августа прошлого года.
Чарты
В блоке меню Apps можно произвести инсталляцию Helm-чартов в кластер. Наиболее популярные Helm-репозитории уже добавлены в Lens: остается только активировать их или добавить новые через настройки.
При выборе желаемого чарта открывается дополнительное окно с подробной информацией о нём и ссылкой на GitHub:
![](https://webcf.waybackmachine.org/web/20210625044343im_/https://habrastorage.org/getpro/habr/upload_files/4fe/ccc/c5c/4fecccc5cc856a2906aeda8c02b6248e.png)
После ознакомления и нажатия на Install открывается текстовый редактор содержимого values.yaml
для корректировки значений, подставляемых в чарт. Там же можно указать имя релиза или выбрать нужный namespace:
![](https://webcf.waybackmachine.org/web/20210625044343im_/https://habrastorage.org/getpro/habr/upload_files/ef1/e8b/c2b/ef1e8bc2bb11f330c5de9d17b98bab29.png)
После этих несложных манипуляций производится установка чарта с последующим сообщением о результате.
Расширения
Начиная с версии 4.0 в Lens присутствует система расширений, которая позволяет добавить в меню свои элементы. Некоторые расширения уже появились — познакомиться с ними можно в репозитории проекта. Например, Lens Resource Map отображает ресурсы Kubernetes и их отношения в виде интерактивного графа в реальном времени (это лучше «потрогать» вживую):
![](https://webcf.waybackmachine.org/web/20210625044343im_/https://habrastorage.org/getpro/habr/upload_files/d6c/8dd/2f2/d6c8dd2f2a0bd7ea802ddbd7565e01d4.png)
Starboard extension добавляет отдельный пункт в меню для удобства взаимодействия с отчетом аудита безопасности, который формируется одноименным сервисом — Starboard от Aqua Security.
Можно найти даже расширение Space Invaders, которое запускает одноименную мини-игру с одной особенностью: противниками являются Pod’ы кластера, а при их уничтожении происходит delete
соответствующего Pod’а:
![](https://webcf.waybackmachine.org/web/20210625044343im_/https://habrastorage.org/getpro/habr/upload_files/e45/2b0/18c/e452b018c8d383fa55aedef3b5aefccf.png)
В общем, не рекомендую использовать это расширение в production… И тут всплывает еще один недочет Lens: все устанавливаемые расширения автоматически распространяются на все добавленные кластеры. Возможности точечного отключения расширений нет.
А сам сценарий установки расширений обычно сводится к скачиванию архива и указанию пути его расположения в соответствующем меню Lens. Однако в некоторых случаях (например, для Starboard) может потребоваться выполнение дополнительных действий для установки сопутствующих элементов.
Заключение
Зачастую Lens ставят в один ряд вместе с k9s (см. её обзор здесь), т.к. оба проекта стараются решить одну и ту же потребность: многофункциональный UI для K8s-кластеров. Несмотря на большую популярность консольной утилиты, на мой взгляд, Lens в этом сравнении выглядит более привлекательным, потому что в нём удачно сочетаются как функциональные возможности, так и простота использования. К тому же, стоит упомянуть, что k9s обзавелась платной версией, что ставит под вопрос будущие обновления Open Source-редакции. С другой стороны, что касается повседневного выбора между консолью и графическим IDE, лично я склоняюсь к терминалу.
Опустив потенциальные риски, связанные с использованием дополнительной прослойки взаимодействия с K8s, Lens, пожалуй, покрывает 90% типовых задач по управлению кластером, а оставшиеся 10% — это какие-то недоработки интерфейса или баги, которые активно устраняются командой разработки (достаточно взглянуть на статистику активности репозитория в GitHub). В то же время отсутствие горячих клавиш сказывается на производительности работы с Lens, а интегрированный в него текстовый редактор не покрывает все желаемые возможности. В конечном счете это приводит к необходимости использовать для таких целей стороннее ПО, что нарушает главный замысел IDE: заменить несколько «узких» инструментов одним общим.
В любом случае здорово, что такой проект активно развивается и поддерживается сообществом: это подтверждает его востребованность среди пользователей. А мне будет интересно следить за его развитием: может быть, уже 5-я версия принесет новшества, способные повлиять на приоритеты в выборе утилиты?
P.S.
Читайте также в нашем блоге:
Комментарии 2
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.