KubeHelper - упростите множество повседневных задач с Kubernetes через веб-интерфейс

KubeHelper — это продукт который упрощает решение многих ежедневных задач связанных с управлением Kubernetes через веб интерфейс. Поиск, анализ, запуск команд, «cron jobs», репорты, фильтры, git синхронизация и многое другое. 

KubeHelper это не ещё одна попытка отобразить Kubernetes API в графическом интерфейсе. Не попытка заменить Lens, официальный Dashboard или другие продукты. Это мой скромный вклад в Kubernetes Open Source сообщество. Проект не имеет какого-то узко специализированного направления и содержит довольно много различных функций которые будут полезны в ежедневной работе с Kubernetes.

Итак, го к описанию и возможностям.

Некоторые термины тяжело переводить, поэтому я вместо непонятного/корявого перевода буду писать английское слово.

Мотивация

Считаю Kubernetes замечательным и революционным продуктом. Много лет изучаю и пользуюсь, но очень часто возникала надобность иметь под рукой много различных функций и команд. Каждый раз набирать в командной строке длинные команды, искать в истории, прописывать aliases и так д. конечно же, можно, но очень часто нет возможности залогинится в консоль, или не сохранилась история, или новый хост. Или много других причин. 

На некоторых фирмах жёсткие правила и очень часто чтоб залогинится в консоль нужно пробрасывать несколько ssh тоннелей. Или вообще очень ограниченный доступ к консоли.

Многие десктопные клиенты требуют сертификата для коннекта к серверу. И держать сертификат от кластера на локальной машине, не 100% безопасно. 

А что если нет возможности проинсталлировать клиент на локальной машине, снова же надо создавать aliases или копировать команды из сниппетов. Очень часто вижу, что люди ищут те или иные команды, выходят статьи с несколькими различными командами, но их сотни, а вариаций тысячи. Конечно же все эти задачи можно автоматизировать и наверняка каждый пользователь/администратор кластера уже тем или иным образом решил для себя эти задачи, но я уверен что есть и такие которе ещё этого сделалась не успели.

Та же история и с поиском, иногда нужно знать где нужно искать, а если ресурсов много, то не так просто найти то что нужно. Писать огромную команду не хочется, поэтому и решил сделать поиск по многим часто используемым ресурсам. Как итог появился KubeHelper с идеями которые приходили во время разработки.

Также постарался на ресурсы посмотреть с другой стороны. Многие готовые решения показывают ресурсы по namespace, ещё несколько полезных функций и на этом гибкость веб интерфейсов заканчивается и чтоб сделать что-то отличное чем просто показать список ресурсов в namespace, снова же приходится обращаться к консоли. Например group labels, find selector, view RBACs и так д…

Тут у меня и возникла идея помочь сообществу организовать много команд в едином интерфейсе, установить kubectl, плагины, утилиты и сделать для пользования командной строкой графический web интерфейс. Внедрить другие функции которые будут полезны в ежедневной работе с Kubernetes кластером. Внести свой скромный вклад в Open Source сообщество. Ну и конечно же чтоб еще лучше познать и узнать Kubernetes. Вот что из этого получилось.

Общие принципы и понятия

На данный момент я подготовил 3 возможности инсталляции: kubectl, Helm, Terraform. Посмотреть инсталляции и настроить их можно здесь. Позже добавлю в публичный Helm Chart Repository и в Terraform Registry.

KubeHelper может быть очень мощным помощником в ежедневной работе с кластером, всё зависит от того сколько прав вы ему предоставите.

По умолчанию KubeHelper устанавливается с правами на чтение и просмотр. (get, list). Поэтому с уверенностью можно сказать, что вы ничего не поломаете используя его у себя в кластере. Но при инсталляции вы можете изменить ClusterRole под свои нужды, аж до статуса cluster-admin. Подробная настройка в Wiki.

Конфигурация и команды хранятся в формате TOML. Как по мне, этот формат очень удобен для такого рода задач. Снова же, подробное описание и как всё работает, вы можете почитать в Wiki.  

Возможности и интерфейс

Dashboard

Здесь собрана общая информация о кластере. Общее количество процессорного времени, хостов (нод), памяти и так д. Отображена общая техническая информация о хосте (ноде), количество, имена и размеры docker images.

e0edfc228e98acad5a8fce7163dcaefc.png

Search

Часто приходится искать что-то в кластере для этого нужно знать где искать и часто писать не тривиальные скрипты или команды. Поиск по всему кластеру или в определённой namespace по ключевому слову и выбранным ресурсам решает эту задачу.

Принцип довольно прост и интуитивен. Выбираем namespace (all = all namespaces) в котором мы хотим найти ресурсы по ключевому слову. Выбираем ресурсы нажимаем поиск, применяем фильтры. Также при нажатии на кнопку в столбце «Raws» можно посмотреть ресурс в различных форматах Java POJO, YAML или JSON.

Подробное описание всех функций и принцип работы вы можете почитать в Wiki.

53503341b018e34c4d7cc428cc8f98be.png

Ips and Ports

Название говорит само за себя, поиск IP и портов в подах и сервисах по всему кластеру. При клике на найденный ресурс будет показана детальная информация о ресурсе.

8c937dbc50d52909e02fff5258aaac4f.png

Security

Этот раздел состоит из 6 секций. Каждая секция имеет одни и те же кнопки для выбора namespace и поиска соответственных ресурсов в ней.

Также при нажатии на кнопку в столбце «Raws» можно посмотреть ресурс в различных форматах Java POJO, YAML или JSON.

Секция «Roles»: Поиск ролей в отдельном namespace или во всех namespaces. Просмотр subjects и role rules для каждого verb. Фильтр и группировка результатов.

Секция «RBAC»: Построение матрицы доступа к ресурсам на основании ролей и правил. Фильтр и группировка результатов.

Секция «Pod Security Contexts»: Показать PodSecurityContext объекты в отдельной namespace или во всех namespaces.

Секция «Container Security Contexts»: Показать ContainerSecurityContext объекты в отдельной namespace или во всех namespaces.

Секция «Service Accounts»: Показать «Service Accounts» в отдельном namespace или во всех namespaces.

Секция «Pod Security Policies»: Показать «Pod Security Policies» в отдельном namespace или во всех namespaces.

292d4eec0d0e263ea987da4ed1f4594a.png

Labels Annotations Selectors

Поиск labels, selectors и annotations по выделенным ресурсам. Фильтр и группирование результатов.

Вкладка Grouped: На основании поиска labels, selectors и annotations будут сагрегированы и сгруппированы 

a0b7da05e04ee70a767106e8c516e4f5.png

Commands

Идея секции «Commands» сделать KubeHelper гибко настраиваемый для каждого пользователя. Каждый пользователь может исполнять свои kubectl и shell команды с различных консолей. Просматривать результаты исполнения. Экспортировать свои подборки команд с git репозитория и многое другое. KubeHelper уже имеет много готовых к использованию команд.

Секция «Commands»: Окно разделено на 3 части, команды которые можно фильтровать и искать. Окно редактирования выделенной команды и окно вывода результатов исполнения.

Секция «Management»: В этой секции вы имеете возможность редактировать и создавать свои команды, а также просматривать уже имеющиеся команды.

Секция «History»: В этой секции вы можете посмотреть все исполненные команды и результат их исполнения. Для удобности, история сохраняется по дням. Присутствует несколько удобных фильтров. 

15613e9affff9fdba300200103ace17f.png

Cron Jobs

Идея секции «Cron Jobs»: сделать исполнение регулярных задач, проверки безопасности, построение и просмотр репортов исполнения команд — более простым и тривиальным заданием.

Секция «Jobs»: Окно разделено на 3 части, команды которые можно фильтровать и искать. Окно редактирования выделенной команды и поля для создания новой «cron job». Таблица со списком активных и остановленных «cron jobs», кнопки управления.

Секция «Reports»: Для каждой «cron job» создаётся папка в которую по дням будут сохраняться выполнения «cron jobs». Присутствует несколько удобных фильтров.

78b95ae7c0aec3368bca3d7cd497a06f.png

Configurations

Идея секции «Configurations» дать возможность пользователю синхронизировать свой конфигурационный файл с git также быстрее определить или изменить нужные cron jobs. Здесь же находятся функции для управление пользовательским репозиторием. Подробное описане можно почитать в Wiki.

49fea11ebe70ded04f0c1773a4ce0abb.png

Versions

В KubeHelper уже предустановлен kubectl, огромное количество плагинов, утилит, командных оболочек и так д. Эта вкладка отображает весь список предустановленных программ, их версии и другую информацию.

0340d9b3fae7568b464595787a738de7.png

Вопрос к дочитавшим:

Какие новые функции вы бы добавили в первую очередь? Какая новая функция сделает вашу ежедневную работу легче?

Я составил небольшой список возможных новых функций, буду рад вашим мнениям и видению.

Достаточно оставить комментарий с приоритетом в виде номеров или своё предложение.

Для предложения новой функции есть соответствующий Issue.

P.S.1 Буду рад репосту, звёздочке на GitHub. Пользуйтесь, делитесь информацией с коллегами, друзьями, знакомыми.

P.S.2 Буду рад желающим помогать развивать проект. На начальных стадиях особенно людям которые помогут сделать дизайн красивее. В первую очередь я работал над функциональностью.

Всем спасибо!

© Habrahabr.ru