Visió general de k9s: una interfície de terminal avançada per a Kubernetes

Visió general de k9s: una interfície de terminal avançada per a Kubernetes

K9 proporciona una interfície d'usuari de terminal per interactuar amb clústers de Kubernetes. L'objectiu d'aquest projecte de codi obert és facilitar la navegació, el seguiment i la gestió d'aplicacions al K8s. K9s supervisa constantment els canvis a Kubernetes i ofereix ordres ràpides per treballar amb recursos supervisats.

El projecte està escrit a Go i fa més d'un any i mig que hi ha: el primer compromís es va fer l'1 de febrer de 2019. En el moment d'escriure, hi ha més de 9000 estrelles activades GitHub i uns 80 col·laboradors. Vegem què poden fer els k9s?

Instal·lació i llançament

Aquesta és una aplicació client (en relació amb el clúster de Kubernetes) que és més fàcil d'executar com a imatge de Docker:

docker run --rm -it -v $KUBECONFIG:/root/.kube/config quay.io/derailed/k9s

Per a algunes distribucions de Linux i altres sistemes operatius, també n'hi ha llestos per instal·lar paquets. En general, per als sistemes Linux, podeu instal·lar un fitxer binari:

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

No hi ha requisits específics per al propi clúster K8s. A jutjar per les ressenyes, l'aplicació també funciona amb versions anteriors de Kubernetes, com ara 1.12.

L'aplicació s'inicia mitjançant la configuració estàndard .kube/config - semblant a com ho fa kubectl.

Навигация

De manera predeterminada, s'obre una finestra amb l'espai de noms predeterminat especificat per al context. És a dir, si has escrit kubectl config set-context --current --namespace=test, llavors s'obrirà l'espai de noms test. (Vegeu més avall per canviar els contextos/espais de noms.)

Visió general de k9s: una interfície de terminal avançada per a Kubernetes

Anar a mode de comandament es fa prement ":". Després d'això, podeu controlar el funcionament de k9s mitjançant ordres; per exemple, per veure la llista de StatefulSets (a l'espai de noms actual), podeu introduir :sts.

Visió general de k9s: una interfície de terminal avançada per a Kubernetes

Per a alguns altres recursos de Kubernetes:

  • :ns — espais de noms;
  • :deploy — Desplegaments;
  • :ing — Ingressos;
  • :svc - Serveis.

Per mostrar una llista completa dels tipus de recursos disponibles per a la visualització, hi ha una ordre :aliases.

També és convenient veure la llista d'ordres disponibles per combinacions de tecles d'accés ràpid dins de la finestra actual: per fer-ho, només cal que feu clic a "?".

Visió general de k9s: una interfície de terminal avançada per a Kubernetes

També en k9s n'hi ha mode de cerca, per anar a la qual n'hi ha prou amb introduir "/". Amb ella, es realitza una cerca sobre el contingut de la "finestra" actual. Diguem que si hi vau entrar anteriorment :ns, teniu una llista d'espais de noms oberta. Si n'hi ha massa, per no desplaçar-se cap avall durant molt de temps, n'hi ha prou amb entrar a la finestra amb espais de noms /mynamespace.

Per cercar per etiquetes, podeu seleccionar tots els pods a l'espai de noms desitjat i, a continuació, introduir, per exemple, / -l app=whoami. Tindrem una llista de beines amb aquesta etiqueta:

Visió general de k9s: una interfície de terminal avançada per a Kubernetes

La cerca funciona en tot tipus de finestres, inclosos els registres, la visualització de manifests YAML i describe per obtenir recursos: consulteu a continuació per obtenir més detalls sobre aquestes funcions.

Com és el flux global de navegació?

Utilitzant l’ordre :ctx pots triar un context:

Visió general de k9s: una interfície de terminal avançada per a Kubernetes

Per seleccionar un espai de noms, hi ha l'ordre ja esmentada :ns, i després podeu utilitzar la cerca de l'espai desitjat: /test.

Si ara seleccionem el recurs que ens interessa (per exemple, el mateix StatefulSet), apareixerà la informació corresponent: quants pods s'estan executant amb informació breu sobre ells.

Visió general de k9s: una interfície de terminal avançada per a Kubernetes

Només les beines poden ser d'interès; llavors n'hi ha prou amb entrar :pod. En el cas de ConfigMaps (:cm - per a la llista d'aquests recursos), podeu seleccionar l'objecte d'interès i fer clic a "u", després del qual K9s us indicarà qui l'utilitza específicament (aquest CM).

Una altra característica útil per visualitzar recursos és el seu "raigs X" (vista de raigs X). Aquest mode és cridat per l'ordre :xray RESOURCE i... és més fàcil mostrar com funciona que explicar. Aquí hi ha una il·lustració per StatefulSets:

Visió general de k9s: una interfície de terminal avançada per a Kubernetes
(Cada un d'aquests recursos es pot editar, canviar, fer describe.)

I aquí teniu el desplegament amb Ingress:

Visió general de k9s: una interfície de terminal avançada per a Kubernetes

Treballant amb recursos

Podeu obtenir informació sobre cada recurs a YAML o al seu describe prement les tecles de drecera corresponents (“y” i “d”, respectivament). Per descomptat, hi ha operacions encara més bàsiques: la seva llista i les dreceres de teclat sempre són visibles gràcies a una còmoda "capçalera" a la interfície (amagada prement Ctrl + e).

Visió general de k9s: una interfície de terminal avançada per a Kubernetes

En editar qualsevol recurs ("e" després de la seva selecció), s'obre l'editor de text definit a les variables d'entorn (export EDITOR=vim).

I aquí és com sembla la descripció detallada del recurs (describe):

Visió general de k9s: una interfície de terminal avançada per a Kubernetes

Aquesta sortida (o la sortida de la visualització del manifest YAML del recurs) es pot desar utilitzant la drecera de teclat Ctrl + s familiar. El missatge K9s sabrà on es desarà:

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

També podeu restaurar els recursos dels fitxers de còpia de seguretat creats després d'eliminar les etiquetes i anotacions del sistema. Per fer-ho, heu d'anar al directori amb ells (:dir /tmp), a continuació, seleccioneu el fitxer desitjat i apliqueu-lo apply.

Per cert, en qualsevol moment podeu tornar al ReplicaSet anterior si hi ha problemes amb l'actual. Per fer-ho, seleccioneu el RS desitjat (:rs per a la seva llista):

Visió general de k9s: una interfície de terminal avançada per a Kubernetes

... i retrocedir amb Ctrl + l. Hauríem de rebre una notificació que tot ha anat bé:

k9s/whoami-5cfbdbb469 successfully rolled back

I per escalar les rèpliques, només cal que feu clic a la "s" (escala) i seleccioneu el nombre desitjat d'instàncies:

Visió general de k9s: una interfície de terminal avançada per a Kubernetes

Podeu introduir qualsevol dels contenidors mitjançant l'intèrpret: per fer-ho, aneu a la beina desitjada, feu clic a "s" (shell) i seleccioneu el contenidor.

Altres característiques

Per descomptat, també s'admet la visualització de registres ("l" per al recurs seleccionat). I per veure els registres nous, no cal prémer Intro constantment: n'hi ha prou amb marcar ("m") i després només fer un seguiment dels missatges nous.

Visió general de k9s: una interfície de terminal avançada per a Kubernetes

També a la mateixa finestra, podeu seleccionar l'interval de temps per a la sortida dels registres:

  • tecla "1" - durant 1 minut;
  • "2" - 5 minuts;
  • "3" - 15 minuts;
  • "4" - 30 minuts;
  • "5" - 1 hora;
  • "0" - durant tota la vida útil del pod.

Mode de funcionament especial Pols (ordre :pulse) mostra informació general sobre el clúster de Kubernetes:

Visió general de k9s: una interfície de terminal avançada per a Kubernetes

En ell es pot veure el nombre de recursos i el seu estat (el verd mostra els que tenen l'estat Running).

Una altra característica interessant de K9s es diu Popeye. Comprova tots els recursos per certs criteris de correcció i mostra la "puntuació" resultant amb explicacions. Per exemple, podeu veure que no hi ha prou mostres o límits, i algun contenidor pot executar-se com a root...

Visió general de k9s: una interfície de terminal avançada per a Kubernetes

Hi ha suport bàsic per a Helm. Per exemple, així és com podeu veure les versions desplegades al clúster:

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

Punt de referència

Fins i tot van incorporar els K9 hey és un simple generador de càrrega de servidor HTTP, una alternativa al més conegut ab (ApacheBench).

Per activar-lo, heu d'activar el port-forward al pod. Per fer-ho, seleccioneu el pod i premeu Maj + f, aneu al submenú de port-forward utilitzant l'àlies "pf".

Visió general de k9s: una interfície de terminal avançada per a Kubernetes

Després de seleccionar el port i prémer Ctrl + b, s'iniciarà el punt de referència. Els resultats del seu treball s'emmagatzemen a /tmp i estan disponibles per a una visualització posterior a K9s.

Visió general de k9s: una interfície de terminal avançada per a Kubernetes
Visió general de k9s: una interfície de terminal avançada per a Kubernetes

Per canviar la configuració del punt de referència, heu de crear un fitxer $HOME/.k9s/bench-<my_context>.yml (determinat per a cada clúster).

NB: És important que l'extensió de tots els fitxers YAML en un directori .k9s era exactament .yml (.yaml no funciona correctament).

Exemple de configuració:

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

interfície

L'aspecte de les columnes de les llistes de recursos es modifica mitjançant la creació d'un fitxer $HOME/.k9s/views.yml. Un exemple del seu contingut:

k9s:
 views:
   v1/pods:
     columns:
       - AGE
       - NAMESPACE
       - NAME
       - IP
       - NODE
       - STATUS
       - READY
   v1/services:
     columns:
       - AGE
       - NAMESPACE
       - NAME
       - TYPE
       - CLUSTER-IP

És cert que no hi ha prou columna per a les etiquetes, per a les quals n'hi ha tema en el projecte.

L'ordenació per columnes es realitza mitjançant tecles de drecera:

  • Maj + n - pel nom;
  • Maj + o - per nodes;
  • Maj + i - per IP;
  • Shift + a - per la vida útil del contenidor;
  • Maj + t - pel nombre de reinicis;
  • Maj + r - per estat de preparació;
  • Maj + c - per consum de CPU;
  • Maj + m - per consum de memòria.

Si a algú no li agrada l'esquema de colors predeterminat, K9s fins i tot és compatible pells. Hi ha exemples ja fets (7 peces). aquí. Aquí teniu un exemple d'una d'aquestes pells (a la marina):

Visió general de k9s: una interfície de terminal avançada per a Kubernetes

Connectors

Finalment connectors us permeten ampliar les capacitats del K9. Jo mateix només he utilitzat un d'ells en el meu treball - kubectl get all -n $namespace.

Es veu així. Creeu un fitxer $HOME/.k9s/plugin.yml amb contingut com aquest:

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"

Ara podeu anar a l'espai de noms i prémer "g" per executar-lo amb l'ordre corresponent:

Visió general de k9s: una interfície de terminal avançada per a Kubernetes

Entre els connectors hi ha, per exemple, integracions amb kubectl-jq i una utilitat per visualitzar els registres popa.

Conclusió

Per al meu gust, K9s va resultar ser molt còmode per treballar: us podeu acostumar ràpidament a buscar tot el que necessiteu sense utilitzar-lo. kubectl. Em va satisfer la vista dels registres i el seu estalvi, l'edició ràpida dels recursos, la velocitat de treball en general *, el mode Popeye va resultar útil. Una menció especial és la possibilitat de crear connectors i modificar l'aplicació per adaptar-se a les vostres necessitats.

* Encara que, amb un gran volum de registres, també vaig notar el funcionament lent dels K9. En aquests moments, la utilitat "va menjar" 2 nuclis de l'Intel Xeon E312xx i fins i tot es podria congelar.

Què hi falta en aquests moments? Retrocés ràpid a la versió anterior (no estem parlant de RS) sense anar al directori. A més, la recuperació es produeix només per només recurs: si suprimeixes una anotació o una etiqueta, hauràs d'esborrar i restaurar tot el recurs (aquí és on has d'anar al directori). Una altra cosa: no hi ha prou data per a aquestes "còpies de seguretat".

PS

Llegeix també al nostre blog:

Font: www.habr.com

Afegeix comentari