Преглед на k9s - усъвършенстван терминален интерфейс за Kubernetes
K9s предоставя терминален потребителски интерфейс за взаимодействие с клъстери на Kubernetes. Целта на този проект с отворен код е да улесни навигацията, наблюдението и управлението на приложения в K8s. K9s постоянно следи промените в Kubernetes и предлага бързи команди за работа с наблюдавани ресурси.
Проектът е написан на Go и съществува повече от година и половина: първият ангажимент беше направен на 1 февруари 2019 г. Към момента на писане има над 9000 звезди GitHub и около 80 сътрудници. Да видим какво може k9s?
Инсталиране и стартиране
Това е клиентско (по отношение на клъстера на Kubernetes) приложение, което е най-лесно за стартиране като Docker изображение:
docker run --rm -it -v $KUBECONFIG:/root/.kube/config quay.io/derailed/k9s
За някои Linux дистрибуции и други операционни системи също има готови за инсталиране пакети. По принцип за Linux системи можете да инсталирате двоичен файл:
Няма специфични изисквания за самия клъстер K8s. Съдейки по рецензиите, приложението работи и с по-стари версии на Kubernetes като 1.12.
Приложението се стартира с помощта на стандартната конфигурация .kube/config - подобно на това, което прави kubectl.
Навигация
По подразбиране се отваря прозорец със зададеното за контекста пространство от имена по подразбиране. Това е, ако сте писали kubectl config set-context --current --namespace=test, тогава пространството от имена ще се отвори test. (Вижте по-долу за промяна на контексти/именни пространства.)
Отидете на команден режим става с натискане на ":". След това можете да контролирате работата на k9s с помощта на команди - например, за да видите списъка с StatefulSets (в текущото пространство от имена), можете да въведете :sts.
За някои други ресурси на Kubernetes:
:ns — пространства от имена;
:deploy — внедрявания;
:ing — Ингреси;
:svc — услуги.
За да се покаже пълен списък с типове ресурси, налични за преглед, има команда :aliases.
Също така е удобно да видите списъка с команди, налични чрез комбинации от горещи клавиши в текущия прозорец: за да направите това, просто щракнете върху "?".
Също така в k9s има режим на търсене, за да отидете на който е достатъчно да въведете "/". С него се извършва търсене по съдържанието на текущия "прозорец". Да речем, ако сте въвели преди това :ns, имате отворен списък с пространства от имена. Ако има твърде много от тях, тогава, за да не превъртате надолу за дълго време, достатъчно е да въведете в прозореца с пространства от имена /mynamespace.
За да търсите по етикети, можете да изберете всички подове в желаното пространство от имена, след което да въведете, например, / -l app=whoami. Ще получим списък с подове с този етикет:
Търсенето работи във всички видове прозорци, включително регистрационни файлове, преглед на YAML манифести и describe за ресурси - вижте по-долу за повече подробности относно тези функции.
Как изглежда цялостният навигационен поток?
Използвайки командата :ctx можете да изберете контекст:
За да изберете пространство от имена, има вече споменатата команда :ns, след което можете да използвате търсенето на желаното място: /test.
Ако сега изберем ресурса, който ни интересува (например същия StatefulSet), за него ще се появи съответната информация: колко подове работят с кратка информация за тях.
Само шушулките могат да представляват интерес - тогава е достатъчно да влезете :pod. В случай на ConfigMaps (:cm - за списъка с тези ресурси), можете да изберете обекта на интерес и да кликнете върху "u", след което K9s ще ви каже кой конкретно го използва (този CM).
Друга удобна функция за преглед на ресурси е тяхната "рентген" (рентгенов изглед). Този режим се извиква от командата :xray RESOURCE и ... по-лесно е да покажеш как работи, отколкото да обясниш. Ето илюстрация за StatefulSets:
(Всеки от тези ресурси може да бъде редактиран, променен, направен describe.)
И ето разполагането с Ingress:
Работа с ресурси
Можете да получите информация за всеки ресурс в YAML или в него describe чрез натискане на съответните клавишни комбинации (съответно „y“ и „d“). Разбира се, има още по-основни операции: техният списък и клавишните комбинации са винаги видими благодарение на удобния „хедър“ в интерфейса (скрит чрез натискане на Ctrl + e).
При редактиране на който и да е ресурс ("e" след избора му) се отваря текстовият редактор, дефиниран в променливите на средата (export EDITOR=vim).
А ето как изглежда подробното описание на ресурса (describe):
Този изход (или изходът от преглед на манифеста на YAML ресурс) може да бъде записан с помощта на познатата клавишна комбинация Ctrl + s. Къде ще бъде записано ще се разбере от съобщението на K9s:
Можете също така да възстановите ресурси от създадените архивни файлове, след като премахнете системните етикети и анотации. За да направите това, трябва да отидете в директорията с тях (:dir /tmp), след това изберете желания файл и приложете apply.
Между другото, по всяко време можете да се върнете към предишния ReplicaSet, ако има проблеми с текущия. За да направите това, изберете желания RS (:rs за техния списък):
... и връщане назад с Ctrl + l. Трябва да получим известие, че всичко е минало добре:
k9s/whoami-5cfbdbb469 successfully rolled back
И за да мащабирате репликите, просто щракнете върху "s" (мащаб) и изберете желания брой екземпляри:
Можете да влезете във всеки от контейнерите, като използвате обвивката: за да направите това, отидете до желаната група, щракнете върху "s" (обвивка) и изберете контейнера.
Други функции
Разбира се, поддържа се и преглед на регистрационни файлове ("l" за избрания ресурс). И за да гледате нови регистрационни файлове, няма нужда постоянно да натискате Enter: достатъчно е да маркирате („m“) и след това да проследявате само нови съобщения.
Също така в същия прозорец можете да изберете времевия диапазон за извеждане на регистрационни файлове:
клавиш "1" - за 1 минута;
"2" - 5 минути;
"3" - 15 минути;
"4" - 30 минути;
"5" - 1 час;
"0" - за целия живот на подс.
Специален режим на работа Импулс (команд :pulse) показва обща информация за клъстера Kubernetes:
В него можете да видите броя на ресурсите и техния статус (зеленото показва тези, които имат статус Running).
Друга страхотна функция на K9s се нарича Попай. Той проверява всички ресурси за определени критерии за коректност и показва получения "рейтинг" с обяснения. Например, можете да видите, че няма достатъчно проби или ограничения и някои контейнери могат да работят като root ...
Има основна поддръжка на Helm. Например, ето как можете да видите версиите, внедрени в клъстера:
:helm all # все
:helm $namespace # в конкретном пространстве имен
репер
Дори вграден в K9s хей е прост генератор за натоварване на HTTP сървър, алтернатива на по-известния ab (ApacheBench).
За да го активирате, трябва да активирате пренасочване на порт в групата. За да направите това, изберете групата и натиснете Shift + f, отидете в подменюто за препращане на порт, като използвате псевдонима "pf".
След като изберете порта и натиснете Ctrl + b, самият бенчмарк ще започне. Резултатите от работата му се съхраняват в /tmp и са достъпни за по-късен преглед в K9s.
За да промените конфигурацията на бенчмарка, трябва да създадете файл $HOME/.k9s/bench-<my_context>.yml (определя се за всеки клъстер).
NB: Важно е разширението на всички YAML файлове в директория .k9s беше точно .yml (.yaml не работи правилно).
Пример за конфигурация:
benchmarks:
defaults:
# Количество потоков
concurrency: 2
# Количество запросов
requests: 1000
containers:
# Настройки для контейнера с бенчмарком
# Контейнер определяется как namespace/pod-name:container-name
default/nginx:nginx:
concurrency: 2
requests: 10000
http:
path: /
method: POST
body:
{"foo":"bar"}
header:
Accept:
- text/html
Content-Type:
- application/json
services:
# Можно проводить бенчмарк на сервисах типа NodePort и LoadBalancer
# Синтаксис: namespace/service-name
default/nginx:
concurrency: 5
requests: 500
http:
method: GET
path: /auth
auth:
user: flant
password: s3cr3tp455w0rd
интерфейс
Появата на колони за списъци с ресурси се променя чрез създаване на файл $HOME/.k9s/views.yml. Пример за съдържанието му:
k9s:
views:
v1/pods:
columns:
- AGE
- NAMESPACE
- NAME
- IP
- NODE
- STATUS
- READY
v1/services:
columns:
- AGE
- NAMESPACE
- NAME
- TYPE
- CLUSTER-IP
Вярно, че няма достатъчно колона за етикети, за които има проблем в проекта.
Сортирането по колони се извършва чрез клавишни комбинации:
Shift + n - по име;
Shift + o - по възли;
Shift + i - по IP;
Shift + a - според живота на контейнера;
Shift + t - според броя на рестартирането;
Shift + r - по състояние на готовност;
Shift + c - според потреблението на процесора;
Shift + m - според потреблението на паметта.
Ако някой не харесва цветовата схема по подразбиране, K9s дори поддържа кожи. Предлагат се готови примери (7 бр.). тук. Ето пример за една от тези кожи (във флота):
плъгини
И накрая, плъгини ви позволяват да разширите възможностите на K9s. Аз самият съм използвал само един от тях в работата си - kubectl get all -n $namespace.
Изглежда така. Създайте файл $HOME/.k9s/plugin.yml със съдържание като това:
plugin:
get-all:
shortCut: g
confirm: false
description: get all
scopes:
- all
command: sh
background: false
args:
- -c
- "kubectl -n $NAMESPACE get all -o wide | less"
Сега можете да отидете в пространството на имената и да натиснете "g", за да изпълните със съответната команда:
Сред плъгините има например интеграции с kubectl-jq и помощна програма за преглед на регистрационни файлове строг.
Заключение
За моя вкус K9s се оказа много удобен за работа: можете бързо да свикнете да търсите всичко, от което се нуждаете, без да го използвате. kubectl. Бях доволен от изгледа на регистрационните файлове и тяхното запазване, бързо редактиране на ресурси, скоростта на работа като цяло *, режимът Popeye се оказа полезен. Специално споменаване е възможността за създаване на добавки и модифициране на приложението, за да отговаря на вашите нужди.
* Въпреки че при голям обем от регистрационни файлове забелязах и бавната работа на K9s. В такива моменти помощната програма "изяде" 2 ядра от Intel Xeon E312xx и дори може да замръзне.
Какво липсва в момента? Бързо връщане към предишната версия (не говорим за RS), без да отивате в директорията. Освен това възстановяването става само за само ресурс: ако изтриете анотация или етикет, ще трябва да изтриете и възстановите целия ресурс (това е мястото, където трябва да отидете в директорията). Друга дреболия - няма достатъчно дата за такива запазени "резервни копия".