Преглед на 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.
За некои други ресурси на Кубернетес:
: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:
Можете исто така да ги вратите ресурсите од креираните резервни датотеки со прво отстранување на системските етикети и прибелешки. За да го направите ова, ќе треба да отидете во директориумот со нив (: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) без да одите во директориумот. Покрај тоа, реставрацијата се јавува само за само ресурс: ако сте избришале прибелешка или етикета, ќе мора да го избришете и вратите целиот ресурс (ова е местото каде што ќе треба да отидете во директориумот). Друга мала работа е дека датумот на таквите зачувани „резервни копии“ недостасува.