Pull to refresh

Свой клиент для логов kubernetes на Python

KubernetesPython
Awaiting invitation

Привет всем!

Хочу поделиться кейсом: как я реализовал свой мини-проект.

На работе для деплоя мы используем kubernetes. Сам кубер - шикарный инструмент, но вот с фронта его панель управления работала, мягко говоря, медленно. Помимо этого, нашему тестировщику нужен был способ программно получать логи сервисов, развернутых на кубере. Я начал искать всякие библиотеки для того, чтобы решить эту задачу. В итоге пришел к тому, что у кубера есть API, с которой можно легко и очень быстро взаимодействовать. И мне захотелось реализовать простой клиент на Python, который бы общался с этой API. Для начала – чтобы просто доставать логи сервисов.

Немного покопавшись в документации, я нашел все нужные end-point-ы, параметры, и начал писать своего рода ядро клиента. Добавил авторизацию, всякие вспомогательные методы. Потом я загорелся идеей сделать GUI для этого клиента на PyQt.

Так на свет появился kubick – клиент для просмотра логов. Рассказал коллегам про свою разработку, показал в действии. Они заинтересовались и тоже захотели попользоваться.

Все это дело я завернул в один бинарник через PyInstaller и скинул коллегам. Через некоторое время от них посыпались фидбеки и фич-реквесты. Добавил темную тему GUI. Добавил возможность выбора конкретного контейнера. Оказалось, что в кубере у одного пода внутри бывает несколько контейнеров. Я про это не знал, и клиент крашился на таких подах.

Клиент зависал, когда пытался считать все логи сервиса, который очень долго жил. Начал забирать только последние 300 строк логов.

Клиент хардкодно настраивался на один кластер kubernetes. Добавил возможность добавлять и быстро переключаться между кластерами. Реализовал фичу для просмотра Config Maps, то есть переменных среды сервисов. Добавил поиск через regex и подсветку уровней логов, типа INFO, WARNING, ERROR.

Вот так выглядит GUI клиента.
Вот так выглядит GUI клиента.

В итоге я так увлекся этим мини-проектом, что начал учиться оборачивать в deb-пакеты. Потом еще проверял, правильно ли все собралось, с помощью утилиты Lintian. Хотелось, чтобы все было прям как с коробки. Задизайнил иконки, и добавил сплеш-скрин с индикатором загрузки.

Иконка и сплеш-скрин клиента.
Иконка и сплеш-скрин клиента.

Каждый новый апдейт я скидывал уже в виде deb-пакета. Для некоторых коллег пришлось билдить exe для windows. Но там все ограничилось PyInstaller-ом.

Сейчас и я, и коллеги пользуемся кубиком, многие привыкли к нему. Потом я узнал, что это был велосипед - но это был мой велосипед, собственной сборки.

Tags:kubernetespythonclientlogs
Hubs:KubernetesPython
You can’t comment this post because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.