Kui — «гибридное» CLI-GUI-приложение для работы с Kubernetes

в 6:31, , рубрики: cli, devops, kubernetes, open source, Блог компании Флант, системное администрирование

Не секрет, что большинство из нас, когда речь заходит о таких вещах, как управление сервером или кластером Kubernetes, в первую очередь думают не про какой-то GUI, а любимый терминал. Для многих это как езда на автомобиле с ручной коробкой передач: просто, удобно, гибко, более предсказуемо. Проект Kui представляет собой некий гибрид интерфейсов, который направлен на дополнение опыта использования классического терминала.

Kui — «гибридное» CLI-GUI-приложение для работы с Kubernetes - 1

Автор Kui описывает свое приложение как «CLI with a GUI twist». Утилита позиционируется как CLI-интерфейс, дополненный графическими возможностями для работы с Kubernetes. Несмотря на то, что разработка ведется одним человеком (Nick Mitchell), проект довольно активно развивается. В настоящий момент у него более 2000 звезд на GitHub. Кстати, если до недавнего времени разработка шла в репозитории организации IBM, то теперь он перешел под «крыло» K8s-сообщества — kubernetes-sigs.

Установка и первое знакомство с интерфейсом

Проект является кроссплатформенным приложением: сборки с Kui доступны под macOS, Linux и Windows, — а также есть возможность собрать его из исходного кода. Под капотом живет Electron, и приложение ставится как единый исполняемый файл. Более подробно об установке написано на странице приложения

При первом знакомстве Kui ничем не отличается от большинства терминалов. Сверху есть возможность переключаться между вкладками, а также кнопка разделения текущей вкладки на вертикальные и горизонтальные подокна.  В правом нижнем углу — текущая графическая тема и help. Там же  появится уведомление при необходимости обновить приложение.

А вот концептуальная особенность интерфейса Kui заключается в том, что каждая вводимая команда является не строкой, как в терминале, а панелью с полем для ввода команды: 

Kui — «гибридное» CLI-GUI-приложение для работы с Kubernetes - 2

При наведении на панель появляется меню с возможностью скопировать команду или ссылку на неё и результат её выполнения (к пользе этой фичи мы еще вернемся в описании ниже). 

Поддерживается открытие файлов внутри терминала — к примеру, картинки будут открыты в просмотрщике по умолчанию. Текстовые файлы тоже можно открывать и редактировать при помощи встроенного редактора. Этот редактор имеет минимально необходимый набор функционала для работы с текстовыми файлами. Есть нумерация строк, поддерживается перемещение курсора мышью. В правом верхнем углу есть иконки сохранения изменений, отмены последнего действия и очистки содержимого документа.

Разбиение вкладки на подокна происходит как вертикально, так и горизонтально в зависимости от их количества. По умолчанию изменять размер и компоновку подокон нельзя. Размер подокон изменяется пропорционально размеру главного окна. Справа вверху каждого подокна расположены кнопки инвертирования цвета заливки фона подокна, очистки содержимого и закрытия подокна. 

htop, cd, ls с открытием директории с картинками, работа с вкладками
htop, cd, ls с открытием директории с картинками, работа с вкладками

Работа Kui с Kubernetes

Теперь — о применении этого терминала для работы с Kubernetes. Запустить Kui можно как отдельным приложением, так и плагином kubectl kui — например, просто набрав kubectl kui get namespace в терминале. Подключение к кластеру Kubernetes осуществляется при помощи kubeconfig. Переключение контекста доступно в самом приложении.

Для знакомства с работой Kui c K8s нам понадобится кластер. Для этих целей я буду использовать minikube, в котором через Helm-чарт развернуто приложение WordPress. К слову, к Kui может быть одновременно подключено несколько Kubernetes-кластеров, и тогда переключение между ними осуществляется с помощью нижнего меню. Внизу слева расположены текущая директория и контекст в Kubernetes. Удобно переключаться можно и между namespace’ами.

Основной фичей KUI при работе с Kubernetes является то, что приложение предоставляет основные ресурсы Kubernetes в виде интерфейса с таблицами и вкладками. К примеру, попав на кластер, вы можете: при помощи команды kubectl get namespaces (вместо kubectl есть и сокращение k) увидеть окружения, которые есть на кластере, после чего уже через графический интерфейс продолжить работу с ресурсами кластера. Далее — напротив каждого namespace’а показан его статус в виде квадратика того или иного цвета: если удалить namespace, цвет его квадрата изменится с зеленого на синий.

Работа с namespace’ами в Kui
Работа с namespace’ами в Kui

Логика работы интерфейса KUI сделана с прицелом на drill-down, то есть на переход от общего к частному:

  • Когда выбран интересующий namespace (скажем, wp-kui), в том же окне автоматически открывается вкладка, а в ней — панель с полем команды kubectl get namespace wp-kui -o yaml.

  • Под данной панелью находится меню с вкладками:

    • Summary — имя пространства имен, его статус и время работы. 

    • Resources — основные ресурсы в namespace’е: Pod, Service, Deployment, ReplicaSet, StatefulSet и их количество. По сути это аналог вывода команды kubectl -n namespace get all;

    • Annotations (не во всех namespaсe’ах);

    • Labels;

    • Last Applied (тоже не во всех namespace’ах — ее не будет в системных);

    • YAML — конфигурация namespace’а в формате манифеста. Есть функция редактирования данного манифеста.

Вкладка Resources
Вкладка Resources
Вкладка YAML
Вкладка YAML

В целом работа с вкладками и их содержимым в Kui выглядит примерно так:

Kui — «гибридное» CLI-GUI-приложение для работы с Kubernetes - 7

Аналогичный drill-down работает и для других объектов. Например, перейдя на вкладку Resources и выбрав нужный ресурс (скажем, Pod), в этом же подокне получим панель с командой kubectl get Pod -n namespace и меню с Pod’ами в данном пространстве имен. Меню состоит из названия Pod’ов и их статуса, представлено в двух формах: в текстовом и графическом (сетка из квадратов разных цветов со статусами Pod’ов). 

Графическое представление Pod’ов удобно для отображения информации о пространствах имен с большим количеством Pod’ов или ресурсов, так как статусы компоненты представляются более компактно. Например, сразу заметно, что у нас есть Pod со статусом CrashLoopBackOff. При его выборе:

  • откроется панель с командой kubectl get pod nameOfPod -o yaml -n namespace и окно с меню;

  • в меню будут доступны такие вкладки, как:

    • Summary — основные параметры, такие как статус Ready, количество запущенных Pod’ов/Pod’ов в реплике, status, restarts, age, IP, node и другие;

    • Labels;

    • Logs — логи основного контейнера в Pod, что и является наиболее интересной для нас информацией, когда нужно диагностировать случившуюся проблему; 

    • Terminal — возможность «провалиться» в CLI контейнера Pod’а;

    • YAML с манифестом;

  • в самом низу меню есть также кнопки:

    • Show Events — события, относящиеся к этому ресурсу;

    • Show Owner Reference — в случае с Pod’ом это ReplicaSet, к которому он относится, а у ReplicaSet таковой будет сущность Deployment;

    • Show Node — информация о хосте, на котором в данный момент расположен Pod.

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

Работа с Pod’ами в Kui. Их строчное и графическое представление
Работа с Pod’ами в Kui. Их строчное и графическое представление

Notebooks

Ещё одна важная особенность Kui — все выполненные действия можно сохранить в виде notebook. При открытии такого notebook’а на отдельной вкладке откроются все панели команд, которые вы выполняли до сохранения. Окна меню вывода этих команд можно развернуть. Вкладки в окнах вывода команд не запоминаются.

С помощью notebook’ов можно, например, создавать обучающие руководства. Несколько таких гайдов по Kubernetes уже доступны в Kui после установки. К примеру, help по Kui оформлен в виде notebook.

Такие гайды могут быть интерактивными, потому что выполнение команд возможно прямо из notebook’а. Кроме того, в notebook’ах доступно разделение окна на несколько горизонтальных и вертикальных подокон, которым можно менять цвет фона. Если в панели ввода команды начать с строку с символа #, то Kui воспримет это как комментарий. Также можно вставлять ссылки kui-link, скопированные при помощи кнопки link в левой части панели ввода команды. Для большего удобства написания текстовых заметок предусмотрена возможность загружать комментарии из Markdown-файла — это делается командой commentary -f /path/to/file.

Другим способом применения notebook в Kui может стать полноценная dashboard для мониторинга или работы с кластером. В поставке с Kui уже есть пример такой панели. На ее основе можно создать настроенную под себя и адаптированную под ваш кластер:

Пример dashboard’а, созданного для Kui
Пример dashboard’а, созданного для Kui

Собери свой Kui

По умолчанию в Kui из настроек доступно только смена темы оформления и изменение размера шрифта. Это компенсируется возможностью сделать собственную сборку. Кастомизировать можно как визуальные параметры (размер шрифта, иконки, темы оформления), так и функциональные (здесь на помощь приходят плагины). На GitHub проекта кастомизации есть wiki.

Несмотря на то, что KUI активно развивается в сторону взаимодействия именно с Kubernetes, это не единственный вариант применения инструмента. Под капотом Kui — целая платформа, основой которой является CLI. Ввод определенных команд может вызывать реакцию, представленную графически. Например, как команда kubectl get ns показывает пространства имен в виде графической таблицы с квадратами разного цвета, отображающие состояния.

В статье подробно рассмотрен только плагин, устанавливаемый по умолчанию, — kubectl. Однако уже сейчас у Kui есть еще несколько готовых к использованию плагинов: s3, iter8, git.

Итоговые впечатления

В ходе написания статьи работа Kui была также протестирована на боевом кластере с множеством окружений и ресурсов. Отзывчивость выполнения команды kubectl get ns на кластере с ~80 namespace’ами немного ниже, чем через терминал, но довольно комфортная. Из того, что расстроило в целом, отмечу лишь малое количество настроек по умолчанию. 

На мой взгляд, Kui отлично подходит для начала погружения в мир Kubernetes. Структурированный интерфейс с логично расположенными вкладками меню дает понимание иерархии ресурсов кластера. Действия в UI, дублирующие консольные команды, позволяют быстрее вникнуть в синтаксис команд Kubernetes. Также нельзя не отметить полезные дополнения вроде графического отображения состояния ресурсов в виде квадратов того или иного цвета (в зависимости от их статуса). Такой подход позволяет нагляднее оценить состояния кластера и получить быстрее информацию для диагностики проблем.

Интересной особенностью Kui мне представляется возможность создания notebook и dashboards: виден огромный потенциал их применения в разных целях.

Kui, конечно, не первая утилита для облегчения работы с Kubernetes, даже в области консоли — к примеру, можно вспомнить k9s. Однако Kui отличается от других подобных инструментов тем, что не ограничивает себя классическими возможностями терминала. Эта утилита активно дополняет консольный интерфейс интересными графическими «фишками», расширяя привычный опыт в терминале. В то же время утилита остается консольной, не превращаясь в GUI-приложение вроде Lens. Плюс это или минус — дело вкуса.

Заключение

Всеми нами любимый терминал, конечно же, претерпел значительные изменения со времен первых телетайпов. Однако основные принципы работы остались прежними. Kui стремится дополнить опыт использования терминала графическими фишками, позволяя посмотреть с другой стороны на, казалось бы, давно известный интерфейс взаимодействия. Пожалуй, ему это удается. 

За время написания данной статьи утилита несколько раз уведомила о наличии обновлений. Активное развитие проекта добавляет веру в то, что недостатки будут устранены, а концепции, заложенные в гибридный интерфейс, будут развиваться и совершенствоваться. 

P.S.

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

Автор:
ruslangr

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js