Преглед на k9s - усъвършенстван терминален интерфейс за Kubernetes

Преглед на 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 системи можете да инсталирате двоичен файл:

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 - усъвършенстван терминален интерфейс за Kubernetes

Отидете на команден режим става с натискане на ":". След това можете да контролирате работата на k9s с помощта на команди - например, за да видите списъка с StatefulSets (в текущото пространство от имена), можете да въведете :sts.

Преглед на k9s - усъвършенстван терминален интерфейс за Kubernetes

За някои други ресурси на Kubernetes:

  • :ns — пространства от имена;
  • :deploy — внедрявания;
  • :ing — Ингреси;
  • :svc — услуги.

За да се покаже пълен списък с типове ресурси, налични за преглед, има команда :aliases.

Също така е удобно да видите списъка с команди, налични чрез комбинации от горещи клавиши в текущия прозорец: за да направите това, просто щракнете върху "?".

Преглед на k9s - усъвършенстван терминален интерфейс за Kubernetes

Също така в k9s има режим на търсене, за да отидете на който е достатъчно да въведете "/". С него се извършва търсене по съдържанието на текущия "прозорец". Да речем, ако сте въвели преди това :ns, имате отворен списък с пространства от имена. Ако има твърде много от тях, тогава, за да не превъртате надолу за дълго време, достатъчно е да въведете в прозореца с пространства от имена /mynamespace.

За да търсите по етикети, можете да изберете всички подове в желаното пространство от имена, след което да въведете, например, / -l app=whoami. Ще получим списък с подове с този етикет:

Преглед на k9s - усъвършенстван терминален интерфейс за Kubernetes

Търсенето работи във всички видове прозорци, включително регистрационни файлове, преглед на YAML манифести и describe за ресурси - вижте по-долу за повече подробности относно тези функции.

Как изглежда цялостният навигационен поток?

Използвайки командата :ctx можете да изберете контекст:

Преглед на k9s - усъвършенстван терминален интерфейс за Kubernetes

За да изберете пространство от имена, има вече споменатата команда :ns, след което можете да използвате търсенето на желаното място: /test.

Ако сега изберем ресурса, който ни интересува (например същия StatefulSet), за него ще се появи съответната информация: колко подове работят с кратка информация за тях.

Преглед на k9s - усъвършенстван терминален интерфейс за Kubernetes

Само шушулките могат да представляват интерес - тогава е достатъчно да влезете :pod. В случай на ConfigMaps (:cm - за списъка с тези ресурси), можете да изберете обекта на интерес и да кликнете върху "u", след което K9s ще ви каже кой конкретно го използва (този CM).

Друга удобна функция за преглед на ресурси е тяхната "рентген" (рентгенов изглед). Този режим се извиква от командата :xray RESOURCE и ... по-лесно е да покажеш как работи, отколкото да обясниш. Ето илюстрация за StatefulSets:

Преглед на k9s - усъвършенстван терминален интерфейс за Kubernetes
(Всеки от тези ресурси може да бъде редактиран, променен, направен describe.)

И ето разполагането с Ingress:

Преглед на k9s - усъвършенстван терминален интерфейс за Kubernetes

Работа с ресурси

Можете да получите информация за всеки ресурс в YAML или в него describe чрез натискане на съответните клавишни комбинации (съответно „y“ и „d“). Разбира се, има още по-основни операции: техният списък и клавишните комбинации са винаги видими благодарение на удобния „хедър“ в интерфейса (скрит чрез натискане на Ctrl + e).

Преглед на k9s - усъвършенстван терминален интерфейс за Kubernetes

При редактиране на който и да е ресурс ("e" след избора му) се отваря текстовият редактор, дефиниран в променливите на средата (export EDITOR=vim).

А ето как изглежда подробното описание на ресурса (describe):

Преглед на k9s - усъвършенстван терминален интерфейс за Kubernetes

Този изход (или изходът от преглед на манифеста на YAML ресурс) може да бъде записан с помощта на познатата клавишна комбинация Ctrl + s. Къде ще бъде записано ще се разбере от съобщението на K9s:

Log /tmp/k9s-screens-root/kubernetes/Describe-1601244920104133900.yml saved successfully!

Можете също така да възстановите ресурси от създадените архивни файлове, след като премахнете системните етикети и анотации. За да направите това, трябва да отидете в директорията с тях (:dir /tmp), след това изберете желания файл и приложете apply.

Между другото, по всяко време можете да се върнете към предишния ReplicaSet, ако има проблеми с текущия. За да направите това, изберете желания RS (:rs за техния списък):

Преглед на k9s - усъвършенстван терминален интерфейс за Kubernetes

... и връщане назад с Ctrl + l. Трябва да получим известие, че всичко е минало добре:

k9s/whoami-5cfbdbb469 successfully rolled back

И за да мащабирате репликите, просто щракнете върху "s" (мащаб) и изберете желания брой екземпляри:

Преглед на k9s - усъвършенстван терминален интерфейс за Kubernetes

Можете да влезете във всеки от контейнерите, като използвате обвивката: за да направите това, отидете до желаната група, щракнете върху "s" (обвивка) и изберете контейнера.

Други функции

Разбира се, поддържа се и преглед на регистрационни файлове ("l" за избрания ресурс). И за да гледате нови регистрационни файлове, няма нужда постоянно да натискате Enter: достатъчно е да маркирате („m“) и след това да проследявате само нови съобщения.

Преглед на k9s - усъвършенстван терминален интерфейс за Kubernetes

Също така в същия прозорец можете да изберете времевия диапазон за извеждане на регистрационни файлове:

  • клавиш "1" - за 1 минута;
  • "2" - 5 минути;
  • "3" - 15 минути;
  • "4" - 30 минути;
  • "5" - 1 час;
  • "0" - за целия живот на подс.

Специален режим на работа Импулс (команд :pulse) показва обща информация за клъстера Kubernetes:

Преглед на k9s - усъвършенстван терминален интерфейс за Kubernetes

В него можете да видите броя на ресурсите и техния статус (зеленото показва тези, които имат статус Running).

Друга страхотна функция на K9s се нарича Попай. Той проверява всички ресурси за определени критерии за коректност и показва получения "рейтинг" с обяснения. Например, можете да видите, че няма достатъчно проби или ограничения и някои контейнери могат да работят като root ...

Преглед на k9s - усъвършенстван терминален интерфейс за Kubernetes

Има основна поддръжка на Helm. Например, ето как можете да видите версиите, внедрени в клъстера:

:helm all # все
:helm $namespace # в конкретном пространстве имен

репер

Дори вграден в K9s хей е прост генератор за натоварване на HTTP сървър, алтернатива на по-известния ab (ApacheBench).

За да го активирате, трябва да активирате пренасочване на порт в групата. За да направите това, изберете групата и натиснете Shift + f, отидете в подменюто за препращане на порт, като използвате псевдонима "pf".

Преглед на k9s - усъвършенстван терминален интерфейс за Kubernetes

След като изберете порта и натиснете Ctrl + b, самият бенчмарк ще започне. Резултатите от работата му се съхраняват в /tmp и са достъпни за по-късен преглед в K9s.

Преглед на k9s - усъвършенстван терминален интерфейс за Kubernetes
Преглед на k9s - усъвършенстван терминален интерфейс за Kubernetes

За да промените конфигурацията на бенчмарка, трябва да създадете файл $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 - усъвършенстван терминален интерфейс за Kubernetes

плъгини

И накрая, плъгини ви позволяват да разширите възможностите на 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", за да изпълните със съответната команда:

Преглед на k9s - усъвършенстван терминален интерфейс за Kubernetes

Сред плъгините има например интеграции с kubectl-jq и помощна програма за преглед на регистрационни файлове строг.

Заключение

За моя вкус K9s се оказа много удобен за работа: можете бързо да свикнете да търсите всичко, от което се нуждаете, без да го използвате. kubectl. Бях доволен от изгледа на регистрационните файлове и тяхното запазване, бързо редактиране на ресурси, скоростта на работа като цяло *, режимът Popeye се оказа полезен. Специално споменаване е възможността за създаване на добавки и модифициране на приложението, за да отговаря на вашите нужди.

* Въпреки че при голям обем от регистрационни файлове забелязах и бавната работа на K9s. В такива моменти помощната програма "изяде" 2 ядра от Intel Xeon E312xx и дори може да замръзне.

Какво липсва в момента? Бързо връщане към предишната версия (не говорим за RS), без да отивате в директорията. Освен това възстановяването става само за само ресурс: ако изтриете анотация или етикет, ще трябва да изтриете и възстановите целия ресурс (това е мястото, където трябва да отидете в директорията). Друга дреболия - няма достатъчно дата за такива запазени "резервни копия".

PS

Прочетете също в нашия блог:

Източник: www.habr.com

Добавяне на нов коментар