
предоставя терминален потребителски интерфейс за взаимодействие с клъстери на Kubernetes. Целта на този проект с отворен код е да улесни навигацията, наблюдението и управлението на приложения в K8s. K9s постоянно следи промените в Kubernetes и предлага бързи команди за работа с наблюдавани ресурси.
Проектът е написан на Go и съществува повече от година и половина: първият ангажимент беше направен на 1 февруари 2019 г. Към момента на писане има над 9000 звезди и около 80 сътрудници. Да видим какво може k9s?
Инсталиране и стартиране
Това е клиентско (по отношение на клъстера на Kubernetes) приложение, което е най-лесно за стартиране като Docker изображение:
docker run --rm -it -v $KUBECONFIG:/root/.kube/config quay.io/derailed/k9sЗа някои Linux дистрибуции и други операционни системи също има готови за инсталиране . По принцип за Linux системи можете да инсталирате двоичен файл:
sudo wget -qO- https://github.com/derailed/k9s/releases/download/v0.22.0/k9s_Linux_x86_64.tar.gz | tar zxvf - -C /tmp/
sudo mv /tmp/k9s /usr/local/binНяма специфични изисквания за самия клъстер 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:
Log /tmp/k9s-screens-root/kubernetes/Describe-1601244920104133900.yml saved successfully! Можете също така да възстановите ресурси от създадените архивни файлове, след като премахнете системните етикети и анотации. За да направите това, трябва да отидете в директорията с тях (: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), без да отивате в директорията. Освен това възстановяването става само за само ресурс: ако изтриете анотация или етикет, ще трябва да изтриете и възстановите целия ресурс (това е мястото, където трябва да отидете в директорията). Друга дреболия - няма достатъчно дата за такива запазени "резервни копия".
PS
Прочетете също в нашия блог:
- «»;
- «»;
- «".
Източник: www.habr.com
