
обезбедува терминален кориснички интерфејс за интеракција со кластерите на 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.
![]()
За некои други ресурси на Кубернетес:
-
:ns- Простори со имиња; -
:deploy— Распоредувања; -
:ing- Влез; -
:svc- Услуги.
За да се прикаже комплетна листа на видови ресурси достапни за прегледување, постои команда :aliases.
Исто така е погодно да се прегледа списокот на команди достапни преку комбинации на копчиња во тековниот прозорец: за да го направите ова, само кликнете на „?“.

Исто така во k9s има режим на пребарување, за да отидете на која треба само да внесете „/“. Пребарува низ содржината на тековниот „прозорец“. На пример, ако претходно сте внеле :ns, имате отворена листа со именски простори. Ако има премногу од нив, тогаш за да не скролувате надолу долго време, само внесете во прозорецот со именски простори /mynamespace.
За да пребарувате по етикети, можете да ги изберете сите подлоги во саканиот именски простор, а потоа да внесете, на пример, / -l app=whoami. Ќе добиеме список на мешунки со оваа ознака:
![]()
Пребарувањето работи во сите типови на прозорци, вклучително и дневници, прегледување на манифестации на YAML и describe за ресурси - видете подолу за повеќе информации за овие способности.
Како изгледа целокупниот тек на навигација?
Со командата :ctx можете да го изберете контекстот:

За да изберете именски простор, постои веќе споменатата команда :ns, а потоа можете да го користите пребарувањето за саканиот простор: /test.
Ако сега го одбереме ресурсот за кој нè интересира (на пример, истиот StatefulSet), ќе се појават соодветните информации за него: колку подови работат со кратки информации за нив.
![]()
Само мешунките може да бидат од интерес - тогаш само внесете :pod. Во случај на ConfigMaps (:cm - за список на овие ресурси) можете да го изберете предметот на интерес и да кликнете на „u“, по што K9 ќе ви каже кој точно (овој CM) го користи.
Друга погодна карактеристика за гледање ресурси е нивната „Х-зраци“ (поглед на XRay). Овој режим се повикува со командата :xray RESOURCE и... полесно е да се покаже како функционира отколку да се објасни. Еве илустрација за StatefulSets:

(Секој од овие ресурси може да се уредува, менува, прави describe.)
И тука е распоредување со Ingress:

Работа со ресурси
Информациите за секој ресурс може да се добијат во YAML или во него describe со притискање на соодветните кратенки на тастатурата („y“ и „d“ соодветно). Се разбира, има уште поосновни операции: нивната листа и кратенки на тастатурата се секогаш видливи благодарение на пригодниот „заглавие“ во интерфејсот (скриен со притискање на Ctrl + 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).
Друга интересна карактеристика на K9 се нарекува Попај. Ги проверува сите ресурси за одредени критериуми за точност и го прикажува добиениот „рејтинг“ со објаснувања. На пример, можете да видите дека нема доволно примероци или ограничувања, а некој контејнер може да се користи како root...

Постои основна поддршка на Helm. На пример, вака можете да ги видите изданијата распоредени во кластерот:
:helm all # все
:helm $namespace # в конкретном пространстве имен
Репер
Дури и го вградија во K9 е едноставен генератор на оптоварување за HTTP сервер, алтернатива на попознатиот ab (ApacheBench).
За да го овозможите, ќе треба да овозможите порта-напред во подлогата. За да го направите ова, изберете pod и притиснете Shift + f, одете во подменито за порта-напред користејќи го алијасот „pf“.

Откако ќе ја изберете портата и ќе притиснете Ctrl + b, самиот репер ќе се стартува. Резултатите од неговата работа се чуваат во /tmp и се достапни за подоцнежно гледање во K9s.


За да ја промените конфигурацијата на репер, треба да креирате датотека $HOME/.k9s/bench-<my_context>.yml (дефинирано за секој кластер).
Забелешка: Важно е проширувањето на сите датотеки 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. Бев задоволен од прегледувањето на дневниците и нивното зачувување, брзото уредување на ресурсите, брзината на работа воопшто*, режимот Попај се покажа како корисен. Посебно треба да се спомене можноста за креирање додатоци и прилагодување на апликацијата за да одговара на вашите потреби.
* Иако, со голем обем на логови, забележав и бавна работа на K9s. Во такви моменти, алатката „изеде“ 2 јадра од Intel Xeon E312xx и можеше дури и да замрзне.
Што недостасува во моментот? Брзо враќање на претходната верзија (не зборуваме за RS) без да одите во директориумот. Покрај тоа, реставрацијата се јавува само за само ресурс: ако сте избришале прибелешка или етикета, ќе мора да го избришете и вратите целиот ресурс (ова е местото каде што ќе треба да отидете во директориумот). Друга мала работа е дека датумот на таквите зачувани „резервни копии“ недостасува.
PS
Прочитајте и на нашиот блог:
- «";
- «";
- «".
Извор: www.habr.com
