- PVSM.RU - https://www.pvsm.ru -
В прошлый раз я писал [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 начнут показываться графики потребления ресурсов:
Если в кластере уже используется Prometheus для сборка метрик, то Lens автоматически попробует к нему подключиться. А если этого не произошло, то придется поработать напильником, инструкцию по применению которого — см. в репозитории проекта [11].
Всё рабочее пространство можно разделить на три области:
меню выбора элементов (Cluster, Nodes, Workloads...);
основное рабочее пространство;
терминал/текстовый редактор.
Через Lens можно управлять всеми сущностями кластера, а для удобства ресурсы сгруппированы в меню. Для человека, работавшего с Kubernetes, расположение элементов в этом меню является интуитивно понятным и не требует дополнительных пояснений. Например, в блоке Workloads содержатся разделы для доступа к Pod’ам, Deployment’ам, STS и т.д. При переходе в нужный раздел мы получаем возможность поиска по имени или сортировки элемента по нужному столбцу:
При нажатии на конкретный элемент раскрывается дополнительное окно со всей информацией об этом элементе (а-ля describe
), в том числе: графики потребления, лейблы, пробы, volumes и т.д. При этом связанные дочерние элементы кликабельны, что позволяет, например, быстро переходить из Pod’а в окно с информацией о его томах, секретах или ConfigMap’ах.
К слову, при работе с последними в Lens также не возникает неудобств. Например, в ConfigMap’ах и секретах (помимо удобного отображения сводной информации) мы получаем быстрый доступ к изменению содержимого:
По нажатию на контекстное меню — «⋮» — у каждого элемента открываются дополнительные функции. Например, при работе с узлами так появится возможность shell-доступа к выбранному узлу (откроется встроенный в Lens терминал, о котором расскажу чуть ниже), вызов команд cordon
и drain
, внесение изменений через встроенный текстовый редактор:
При работе с Pod’ами удобно смотреть их логи, по которым можно также искать и которые легко сразу скачать. Однако важный нюанс в том, что сами логи обновляются не в режиме реального времени, а с некоторой задержкой — это может добавить неудобств:
В блоке Events доступны события в кластере — с возможностью их поиска по ключевым словам и фильтрации по пространствам имен. События с типом Warning по умолчанию подсвечиваются красным, что помогает не пропустить что-то важное. Здесь есть очевидная недоработка интерфейса: отсутствует горизонтальный скролл или возможность изменения ширины столбцов. Поэтому для удобства приходилось либо полностью убирать некоторые столбцы, либо регулировать общий масштаб всего интерфейса:
Несмотря на то, что Lens предлагает модель управления кластером через веб-интерфейс, среди возможностей этого приложения нашлось место и терминалу — Smart terminal, вкладки которого можно раскрыть в нижней части интерфейса. В терминале предустановлена CLI-утилита kubectl
(а также Helm 3), особенностью которой является «синхронизированность» её версии с версией Kubernetes API для выбранного кластера. Такой подход позволяет забыть о необходимости ставить различные версии kubectl
при работе с разными K8s-кластерами на одном устройстве:
Впрочем, показалось странным, что несмотря на наличие «smart» в названии этого терминала, автодополнение через <Tab> в нём по умолчанию не работает. Лечится это стандартным добавлением:
echo 'source <(kubectl completion bash)' >>~/.bashrc
В той же, нижней, части интерфейса Lens можно создать вкладку для простого текстового редактора. Он предназначен для редактирования/применения YAML-манифестов в кластере. В редактор встроена проверка структуры YAML-файла, не позволяющая сохранить изменения, если обнаружены ошибки в отступах.
Размер рабочих окон терминала или текстового редактора можно регулировать — вплоть до полноэкранного режима. При этом размер шрифта изменить штатными средствами не удастся: здесь поможет только общее масштабирование всех элементов (что неудобно). Об этом даже есть соответствующий issue [12], к сожалению, не нашедший своей реализации с августа прошлого года.
В блоке меню Apps можно произвести инсталляцию Helm-чартов в кластер. Наиболее популярные Helm-репозитории уже добавлены в Lens: остается только активировать их или добавить новые через настройки.
При выборе желаемого чарта открывается дополнительное окно с подробной информацией о нём и ссылкой на GitHub:
После ознакомления и нажатия на Install открывается текстовый редактор содержимого values.yaml
для корректировки значений, подставляемых в чарт. Там же можно указать имя релиза или выбрать нужный namespace:
После этих несложных манипуляций производится установка чарта с последующим сообщением о результате.
Начиная с версии 4.0 в Lens присутствует система расширений, которая позволяет добавить в меню свои элементы. Некоторые расширения уже появились — познакомиться с ними можно в репозитории [13] проекта. Например, Lens Resource Map [14] отображает ресурсы Kubernetes и их отношения в виде интерактивного графа в реальном времени (это лучше «потрогать» вживую):
Starboard extension [15] добавляет отдельный пункт в меню для удобства взаимодействия с отчетом аудита безопасности, который формируется одноименным сервисом — Starboard [16] от Aqua Security.
Можно найти даже расширение Space Invaders [17], которое запускает одноименную мини-игру с одной особенностью: противниками являются Pod’ы кластера, а при их уничтожении происходит delete
соответствующего Pod’а:
В общем, не рекомендую использовать это расширение в 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-я версия принесет новшества, способные повлиять на приоритеты в выборе утилиты?
Читайте также в нашем блоге:
Автор: 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
Нажмите здесь для печати.