- PVSM.RU - https://www.pvsm.ru -
Мы уже писали [1] о «консольных помощниках» для Kubernetes год назад, а ещё раньше делали обзор [2] других полезных утилит. Однако с развитием K8s и его сообщества претерпевает изменения и сопутствующая экосистема. Поэтому нам снова есть о чём рассказать любителям консоли. Поехали!
Этот проект и послужил поводом для написания обзора. С одной стороны он является ярким представителем софта категории «гики делают для гиков», но с другой — дорос до того состояния, когда не только радует глаз, но и приносит практическую пользу…
Итак, предназначение kubebox — полноценная работа с Kubernetes в рамках удобного консольного интерфейса, представленного в стиле псевдографики:
Под работой подразумеваются такие возможности, как навигация по подам через пространства имён, просмотр логов и даже графиков потребления ключевых ресурсов (CPU, память, сеть), удалённое исполнение команд в контейнерах. Настройки для подключения к кластерам могут забираться из переменной окружения KUBECONFIG
или конфигов в $HOME/.kube
.
В дальнейших планах разработчиков — поддержка редактирования конфигураций и выполнения CRUD-операций, а также значительная переработка интерфейса [4] для поддержки новых видов примитивов (Services, Deployments и др.) и удобной навигации по ним с выводом дополнительных сведений (в частности, kubectl describe pod
).
Важная особенность — наличие онлайн-версии [5] (для подключения к API-серверу Kubernetes потребуются разрешенные cors-allowed-origins
). Кроме того, kubebox может запускаться как отдельный исполняемый файл, как клиент in-cluster (через kubectl), а также из сервиса, развёрнутого в кластере Kubernetes или OpenShift (для эмуляции терминала используется Xterm.js [6]).
Разработкой kubebox уже почти 2 года занимается сотрудник Red Hat из Франции (если быть совсем точным, то ещё менее 10 % коммитов сделаны его коллегой). Достаточно широкую огласку проект получил только в прошлом месяце (на Reddit [7] и ряде других ресурсов), так что можно ожидать, что это придаст новый импульс его развитию.
(Внимание, эта GIF'ка на ~2 Мб!)
Про эти проекты мы уже писали [1] год назад, и на то время они были безоговорочными фаворитами среди полноценных консольных оболочек для работы с Kubernetes. Оба позиционируются как улучшенные (более удобные в работе) интерфейсы к kubectl. В kube-shell для этого используют библиотеку prompt-toolkit [10] для Python, а для kube-prompt взяли и разработали схожую библиотеку на Go (go-prompt [11]).
Если сравнивать их с kubebox, то здесь уже основой интерфейса служит не псевдографика, а привычная консоль для ввода команд (см.скриншоты выше), которую, впрочем, сопровождают весьма интересные «спецэффекты»: всплывающие подсказки с помощью по командам, удобным автоматическим дополнением и т.п.
Несмотря на широкий спектр поддерживаемых возможностей (включая уже упомянутую развитую систему подсказок и автодополнений, поиск по истории команд и vi-подобный режим редактирования), история коммитов [12] в kube-shell говорит о явном замедлении темпов развития проекта. В этом году зафиксировано всего семь коммитов, два из которых — модификации README
. Хотя были и полезные — например, долгожданная [13] поддержка [14] переменной KUBECONFIG
. Так или иначе, продолжительное отсутствие реакции разработчиков на актуальные для пользователей запросы (см. issues [15]) не внушает должных перспектив.
Ситуация с развитием kube-prompt выглядит незначительно лучше. Хотя этот проект набрал меньше звёздочек на GitHub (если год назад он немного опережал своего Python-конкурента, то теперь заметно отстаёт), коммиты появляются более-менее регулярно, а последний релиз (1.0.5 [16]) датируется 18 октября. Однако значимых изменений за последний год не так много — отметим поддержку Kubernetes версии 1.11 и возможность автодополнения для пространства имён. Главное же в том, что сам автор признаёт [17] невозможность уделять развитию kube-prompt достаточное время и ищет себе помощников.
Подводя итоги по этим двум проектам, можно сказать, что kube-shell сохранил лидерство в плане поддерживаемых возможностей и вышел вперёд по популярности, но вот с перспективами у обоих оболочек не всё ясно. Впрочем, если вас устраивает то, как они работают сейчас, нет причин не взять их на вооружение, т.к. иных альтернатив в аналогичном исполнении не появилось.
Click — довольно молодой проект: в виде бета-версии он был представлен [19] в конце марта — и очень по-своему интересный. Его концепция сводится к тому, чтобы использовать kubectl в цикле REPL [20], который упрощает жизнь тем, что поддерживает постоянное окружение. Последнее заключается в том, что Click «помнит» текущий контекст, namespace, под и т.п., предлагая пользователю выполнить нужную команду для данного ресурса без необходимости повторно указывать весь этот «путь».
Идея проекта зародилась в компании Databricks, где активно используют Kubernetes и устали наблюдать однотипный сценарий работы с kubectl, требующий постоянного введения предшествующих данных. При этом саму утилиту kubectl — как и консоль вообще — инженеры очень любят. Так и появилась эта надстройка, не претендующая на замену kubectl, а лишь помогающая в работе с ним. Примерный сценарий использования Click таков:
pods // запросить список подов для текущего контекста и пространства имён
2 // выбрать второй под из списка
describe // вывести описание этого пода
events // посмотреть недавние события
logs -c foo > /tmp/podfoo.log // сохранить логи в файл
delete // удалить под (с запросом на подтверждение операции)
Если заинтересовались — смотрите также небольшой скринкаст [21], демонстрирующий работу Click с текстовыми комментариями.
Как бонус — не оболочки, но консольные инструменты для работы с логами в Kubernetes. Ещё год назад в качестве таковых мы упоминали лишь k8stail [22], но прошедшее время показало, что проблема актуальна, и для её решения есть другие достойные внимания решения.
Stern — безусловный фаворит категории «tail для подов в Kubernetes». Для наглядности при выводе логов используются разные цветовые обозначения:
Другой его важной особенностью является использование регулярных выражений для удобной фильтрации подов без потребности знать конкретные ID (например, отобрать все с названием web-w+
). Аналогично (т.е. регэкспами) можно фильтровать и определённые контейнеры для запрашиваемых подов. Среди прочих возможностей stern:
--since
и/или заданным количеством строк;Схожее решение, написанное на обычном Bash и чуть более активно развиваемое в последний год. Как и stern, поддерживает выделение цветом названия подов (или же всей строки, что настраивается):
Тоже позволяет фильтровать поды и контейнеры как по полным названиям, так и по регулярным выражениям, а также использовать селекторы, ограничивать вывод временем и количеством строк, поддерживает автодополнение для Bash, zsh и fish. Среди других возможностей:
--follow
для обновления данных из логов в реальном времени (как в tail -f
);--dry-run
для вывода списка подходящих подов и контейнеров без выполнения каких-либо других действий;Ещё одна реализация, у которой за последний год наблюдается наименьшая активность в кодовой базе. Тем не менее, у неё есть интересные функциональные особенности, отличающие от своих конкурентов, а именно:
--log-level
).
Но есть и минусы: kail не выделяет поды цветами, не поддерживает регулярные выражения для фильтров.
Спасибо за интерес и, конечно же, будем рады информации о ваших находках в комментариях!
Читайте также в нашем блоге:
Автор: Дмитрий Шурупов
Источник [29]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/open-source/298597
Ссылки в тексте:
[1] писали: https://habr.com/company/flant/blog/341606/
[2] делали обзор: https://habr.com/company/flant/blog/330198/
[3] GitHub: https://github.com/astefanutti/kubebox
[4] переработка интерфейса: https://github.com/astefanutti/kubebox/issues/20#issuecomment-426909880
[5] онлайн-версии: https://kube.sh/
[6] Xterm.js: https://github.com/xtermjs/xterm.js
[7] Reddit: https://www.reddit.com/r/kubernetes/comments/9oz91h/kubebox_terminal_and_web_console_for_kubernetes/
[8] GitHub: https://github.com/cloudnativelabs/kube-shell
[9] GitHub: https://github.com/c-bata/kube-prompt
[10] prompt-toolkit: https://github.com/prompt-toolkit/python-prompt-toolkit
[11] go-prompt: https://github.com/c-bata/go-prompt
[12] история коммитов: https://github.com/cloudnativelabs/kube-shell/commits/master
[13] долгожданная: https://github.com/cloudnativelabs/kube-shell/issues/50
[14] поддержка: https://github.com/cloudnativelabs/kube-shell/pull/57
[15] issues: https://github.com/cloudnativelabs/kube-shell/issues
[16] 1.0.5: https://github.com/c-bata/kube-prompt/releases/tag/v1.0.5
[17] признаёт: https://github.com/c-bata/kube-prompt/issues/28
[18] GitHub: https://github.com/databricks/click
[19] представлен: https://databricks.com/blog/2018/03/27/introducing-click-the-command-line-interactive-controller-for-kubernetes.html
[20] цикле REPL: https://ru.wikipedia.org/wiki/REPL
[21] небольшой скринкаст: https://camo.githubusercontent.com/5530b1aad49711e3899be326c169ca16cff726fd/68747470733a2f2f696d6775722e636f6d2f6674345748634c2e676966
[22] k8stail: https://github.com/dtan4/k8stail
[23] GitHub: https://github.com/wercker/stern
[24] GitHub: https://github.com/johanhaleby/kubetail
[25] GitHub: https://github.com/boz/kail
[26] Знакомство с kube-spawn — утилитой для создания локальных Kubernetes-кластеров: https://habr.com/company/flant/blog/338132/
[27] Awless — мощная альтернативная CLI-утилита для работы с сервисами AWS: https://habr.com/company/flant/blog/330398/
[28] Обзор GUI-интерфейсов для управления Docker-контейнерами: https://habr.com/company/flant/blog/338332/
[29] Источник: https://habr.com/post/426985/?utm_source=habrahabr&utm_medium=rss&utm_campaign=426985
Нажмите здесь для печати.