Агляд k9s – прасунутага тэрмінальнага інтэрфейсу для Kubernetes

Агляд k9s – прасунутага тэрмінальнага інтэрфейсу для Kubernetes

К9с дае карыстацкі інтэрфейс тэрмінала для ўзаемадзеяння з кластарамі Kubernetes. Мэта гэтага Open Source-праекта – палегчыць зручную навігацыю па прыкладаннях у 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.

Навігацыя

Па змаўчанні адчыняецца акно са стандартным namespace, які паказаны для кантэксту. Гэта значыць, калі вы прапісалі kubectl config set-context --current --namespace=test, то і адкрыецца namespace test. (Пра змену кантэкстаў/прастор імёнаў гл. ніжэй.)

Агляд k9s – прасунутага тэрмінальнага інтэрфейсу для Kubernetes

Пераход у рэжым каманд ажыццяўляецца націскам на ":". Пасля гэтага можна кіраваць працай k9s з дапамогай каманд - напрыклад, для прагляду спісу StatefulSets (у бягучай прасторы імёнаў) можна ўвесці :sts.

Агляд k9s – прасунутага тэрмінальнага інтэрфейсу для Kubernetes

Для некаторых іншых рэсурсаў Kubernetes:

  • :ns - Namespaces;
  • :deploy - Deployments;
  • :ing - Ingresses;
  • :svc - Services.

Каб вывесці поўны спіс тыпаў рэсурсаў, даступных для прагляду, ёсць каманда :aliases.

Зручна праглядаць і спіс каманд, даступных па гарачых камбінацыях клавіш у рамках бягучага акна: для гэтага дастаткова націснуць на "?".

Агляд k9s – прасунутага тэрмінальнага інтэрфейсу для Kubernetes

Таксама ў k9s ёсць рэжым пошуку, для пераходу ў які дастаткова ўвесці «/». З ім ажыццяўляецца пошук па змесце бягучага «акна». Дапусцім, калі вы да гэтага ўвялі :ns, у вас адкрыты спіс прастор імёнаў. Калі іх занадта шмат, то, каб не скроліць доўга ўніз, дастаткова ў акне з namespaces ўвесці /mynamespace.

Для пошуку па лэйблах можна абраць усе pod'ы ў патрэбнай прасторы імёнаў, пасля чаго ўвесці, напрыклад, / -l app=whoami. Мы атрымаем спіс pod'аў з гэтым лэйблам:

Агляд k9s – прасунутага тэрмінальнага інтэрфейсу для Kubernetes

Пошук працуе ва ўсіх відах вокнаў, у тым ліку логі, прагляд YAML-маніфестаў і describe для рэсурсаў - падрабязней аб гэтых магчымасцях гл. ніжэй.

Як у цэлым выглядае паслядоўнасць дзеянняў для навігацыі?

З дапамогай каманды :ctx можна абраць кантэкст:

Агляд k9s – прасунутага тэрмінальнага інтэрфейсу для Kubernetes

Для выбару namespace'а ёсць ужо згаданая каманда :ns, а далей можна скарыстацца пошукам для патрэбнай прасторы: /test.

Калі зараз абраць які цікавіць нас рэсурс (напрыклад, усё той жа StatefulSet), для яго здасца адпаведная інфармацыя: колькі запушчана pod'ов з кароткімі звесткамі пра іх.

Агляд k9s – прасунутага тэрмінальнага інтэрфейсу для Kubernetes

Могуць быць цікавыя толькі pod'ы - тады дастаткова ўвесці :pod. У выпадку з ConfigMap'амі (:cm - для спісу гэтых рэсурсаў) можна абраць які цікавіць аб'ект і націснуць на "u", пасля чаго K9s падкажа, хто пэўна яго (гэты CM) выкарыстае.

Яшчэ адна зручная фіча для прагляду рэсурсаў - іх "рэнтген" (XRay view). Такі рэжым выклікаецца камандай :xray RESOURCE і… прасцей паказаць, як ён працуе, чым тлумачыць. Вось ілюстрацыя для StatefulSets:

Агляд k9s – прасунутага тэрмінальнага інтэрфейсу для Kubernetes
(Кожны з гэтых рэсурсаў можна рэдагаваць, змяняць, рабіць describe.)

А вось Deployment з 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

… і выканаць rollback з дапамогай Ctrl+l. Мы павінны атрымаць апавяшчэнне, што ўсё прайшло паспяхова:

k9s/whoami-5cfbdbb469 successfully rolled back

А каб маштабаваць рэплікі, дастаткова націснуць на s (scale) і выбраць патрэбную колькасць асобнікаў:

Агляд k9s – прасунутага тэрмінальнага інтэрфейсу для Kubernetes

У любы з кантэйнераў можна зайсці з дапамогай shell: для гэтага перайдзіце да патрэбнага pod'у, націсніце на "s" (shell) і абярыце кантэйнер.

іншыя магчымасці

Вядома, падтрымліваецца і прагляд логаў ("l" для абранага рэсурсу). А каб глядзець новыя логі, няма неабходнасці ўвесь час націскаць Enter: дастаткова зрабіць маркіроўку («m»), пасля чаго адсочваць толькі новыя паведамленні.

Агляд k9s – прасунутага тэрмінальнага інтэрфейсу для Kubernetes

Таксама ў гэтым жа акне можна абраць часавы дыяпазон для высновы логаў:

  • клавіша "1" - за 1 хвіліну;
  • «2» - 5 хвілін;
  • «3» - 15 хвілін;
  • «4» - 30 хвілін;
  • «5» - 1 гадзіна;
  • "0" - за ўвесь час жыцця pod'а.

Спецыяльны рэжым працы Pulse (каманда :pulse) паказвае агульныя звесткі пра Kubernetes-кластар:

Агляд k9s – прасунутага тэрмінальнага інтэрфейсу для Kubernetes

У ім можна ўбачыць колькасць рэсурсаў і іх стан (зялёным паказваюцца тыя, што маюць статус. Running).

Яшчэ адна цікавая функцыя K9s называецца Popeye. Яна правярае ўсе рэсурсы на пэўныя крытэрыі карэктнасці і выводзіць «рэйтынг» з тлумачэннямі. Напрыклад, можна ўбачыць, што не хапае спроб або лімітаў, а нейкі кантэйнер можа запускацца пад root…

Агляд k9s – прасунутага тэрмінальнага інтэрфейсу для Kubernetes

Маецца базавая падтрымка Helm. Напрыклад, так можна паглядзець рэлізы, задэплоеныя ў кластар:

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

Стандарт

У K9s убудавалі нават эй - гэта просты генератар нагрузкі на HTTP-сервер, альтэрнатыва больш вядомаму ab (ApacheBench).

Каб уключыць яго, запатрабуецца актывацыя port-forward у pod'е. Для гэтага выбіраемы pod і націскаем на Shift + f, пераходзім у падменю port-forward з дапамогай аліяса "pf".

Агляд k9s – прасунутага тэрмінальнага інтэрфейсу для Kubernetes

Пасля выбару порта і націску на Ctrl + b запусціцца сам benchmark. Вынікі яго працы захоўваюцца ў /tmp і даступныя для наступнага прагляду ў K9s.

Агляд k9s – прасунутага тэрмінальнага інтэрфейсу для Kubernetes
Агляд k9s – прасунутага тэрмінальнага інтэрфейсу для Kubernetes

Для змены канфігурацыі benchmark'а трэба стварыць файл $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

Праўда, не хапае калонкі па лэйблах, на што ёсць issue у праекце.

Сартаванне па слупках ажыццяўляецца клавіятурнымі спалучэннямі:

  • Shift + n - па імені;
  • Shift + o - па вузлах;
  • Shift + i - па IP;
  • Shift + a - па часе жыцця кантэйнера;
  • Shift + t - па колькасці рэстартаў;
  • Shift + r - па статусе гатоўнасці;
  • Shift + c - па спажыванні CPU;
  • Shift + m - па спажыванні памяці.

Калі ж камусьці не падабаецца каляровае афармленне па змаўчанні, у K9s нават падтрымліваюцца. скіны. Гатовыя прыклады (7 штук) даступныя тут. Вось прыклад аднаго з такіх скінаў (in the navy):

Агляд 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

Чытайце таксама ў нашым блогу:

Крыніца: habr.com

Дадаць каментар