Visión xeral de k9s: unha interface de terminal avanzada para Kubernetes

Visión xeral de k9s: unha interface de terminal avanzada para Kubernetes

K9 proporciona unha interface de usuario de terminal para interactuar cos clústeres de Kubernetes. O obxectivo deste proxecto de código aberto é facilitar a navegación, o seguimento e a xestión das aplicacións en K8s. K9s supervisa constantemente os cambios en Kubernetes e ofrece comandos rápidos para traballar con recursos supervisados.

O proxecto está escrito en Go e leva máis de ano e medio: o primeiro compromiso realizouse o 1 de febreiro de 2019. No momento de escribir este artigo, hai máis de 9000 estrelas activadas GitHub e uns 80 colaboradores. A ver que pode facer os k9s?

Instalación e lanzamento

Esta é unha aplicación cliente (en relación co clúster de Kubernetes) que é máis fácil de executar como imaxe de Docker:

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

Para algunhas distribucións de Linux e outros sistemas operativos, tamén hai listos para instalar paquetes. En xeral, para sistemas Linux, pode instalar un ficheiro binario:

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

Non hai requisitos específicos para o propio clúster K8s. A xulgar polas críticas, a aplicación tamén funciona con versións antigas de Kubernetes como a 1.12.

A aplicación lánzase usando a configuración estándar .kube/config - semellante a como fai kubectl.

Navegación

Por defecto, ábrese unha xanela co espazo de nomes predeterminado especificado para o contexto. É dicir, se escribiu kubectl config set-context --current --namespace=test, entón abrirase o espazo de nomes test. (Consulte a continuación para cambiar os contextos/espazos de nomes).

Visión xeral de k9s: unha interface de terminal avanzada para Kubernetes

Ir a modo de comando faise premendo ":". Despois diso, pode controlar o funcionamento de k9s mediante comandos; por exemplo, para ver a lista de StatefulSets (no espazo de nomes actual), pode introducir :sts.

Visión xeral de k9s: unha interface de terminal avanzada para Kubernetes

Para algúns outros recursos de Kubernetes:

  • :ns - espazos de nomes;
  • :deploy - Despregamentos;
  • :ing - Ingresos;
  • :svc - Servizos.

Para mostrar unha lista completa dos tipos de recursos dispoñibles para a súa visualización, hai un comando :aliases.

Tamén é conveniente ver a lista de comandos dispoñibles mediante combinacións de teclas rápidas dentro da xanela actual: para facelo, basta con premer en "?".

Visión xeral de k9s: unha interface de terminal avanzada para Kubernetes

Tamén en k9s hai modo de busca, para ir ao que abonda con introducir "/". Con el, realízase unha busca sobre o contido da "xanela" actual. Digamos que se entrou anteriormente :ns, tes unha lista de espazos de nomes aberta. Se hai demasiados, para non desprazarse cara abaixo durante moito tempo, abonda con entrar na xanela con espazos de nomes /mynamespace.

Para buscar por etiquetas, pode seleccionar todos os pods no espazo de nomes desexado e, por exemplo, introducir: / -l app=whoami. Teremos unha lista de vainas con esta etiqueta:

Visión xeral de k9s: unha interface de terminal avanzada para Kubernetes

A busca funciona en todo tipo de ventás, incluíndo rexistros, visualización de manifestos YAML e describe para recursos: consulte a continuación para obter máis detalles sobre estas características.

Como é o fluxo xeral de navegación?

Co comando :ctx podes escoller un contexto:

Visión xeral de k9s: unha interface de terminal avanzada para Kubernetes

Para seleccionar un espazo de nomes, existe o comando xa mencionado :ns, e despois podes usar a busca do espazo desexado: /test.

Se agora seleccionamos o recurso que nos interesa (por exemplo, o mesmo StatefulSet), aparecerá a información correspondente para el: cantos pods se están executando con información breve sobre eles.

Visión xeral de k9s: unha interface de terminal avanzada para Kubernetes

Só as vainas poden ser de interese; entón é suficiente para entrar :pod. No caso de ConfigMaps (:cm - para a lista destes recursos), pode seleccionar o obxecto de interese e facer clic en "u", despois de que K9s dirá quen o usa especificamente (este CM).

Outra característica útil para ver recursos é a súa "raios X" (vista de raios X). Este modo é chamado polo comando :xray RESOURCE e... é máis doado mostrar como funciona que explicalo. Aquí tes unha ilustración para StatefulSets:

Visión xeral de k9s: unha interface de terminal avanzada para Kubernetes
(Cada un destes recursos pódese editar, cambiar, facer describe.)

E aquí está a implementación con Ingress:

Visión xeral de k9s: unha interface de terminal avanzada para Kubernetes

Traballando con recursos

Podes obter información sobre cada recurso en YAML ou o seu describe premendo os atallos de teclado correspondentes ("y" e "d", respectivamente). Por suposto, hai aínda máis operacións básicas: a súa lista e os atallos de teclado sempre están visibles grazas a un cómodo "encabezado" na interface (oculto ao premer Ctrl + e).

Visión xeral de k9s: unha interface de terminal avanzada para Kubernetes

Ao editar calquera recurso ("e" despois da súa selección), ábrese o editor de texto definido nas variables de ambiente (export EDITOR=vim).

E aquí está a descrición detallada do recurso (describe):

Visión xeral de k9s: unha interface de terminal avanzada para Kubernetes

Esta saída (ou a saída de ver o manifesto do recurso YAML) pódese gardar usando o atallo de teclado coñecido Ctrl + s. O lugar onde se gardará saberase a partir da mensaxe do K9s:

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

Tamén pode restaurar os recursos dos ficheiros de copia de seguranza creados despois de eliminar as etiquetas e anotacións do sistema. Para iso, cómpre ir ao directorio con eles (:dir /tmp), seleccione o ficheiro desexado e aplique apply.

Por certo, en calquera momento podes volver ao ReplicaSet anterior se hai problemas co actual. Para iso, seleccione o RS desexado (:rs para a súa lista):

Visión xeral de k9s: unha interface de terminal avanzada para Kubernetes

... e retrocede con Ctrl + l. Deberíamos recibir unha notificación de que todo foi ben:

k9s/whoami-5cfbdbb469 successfully rolled back

E para escalar as réplicas, basta con facer clic na "s" (escala) e seleccionar o número de instancias desexado:

Visión xeral de k9s: unha interface de terminal avanzada para Kubernetes

Podes introducir calquera dos contedores mediante o shell: para facelo, vai ao pod desexado, fai clic en "s" (shell) e selecciona o recipiente.

Outras características

Por suposto, tamén se admite a visualización de rexistros ("l" para o recurso seleccionado). E para ver novos rexistros, non é necesario premer constantemente Intro: basta con marcar ("m") e despois só rastrexar as novas mensaxes.

Visión xeral de k9s: unha interface de terminal avanzada para Kubernetes

Tamén na mesma xanela, pode seleccionar o intervalo de tempo para a saída dos rexistros:

  • tecla "1" - durante 1 minuto;
  • "2" - 5 minutos;
  • "3" - 15 minutos;
  • "4" - 30 minutos;
  • "5" - 1 hora;
  • "0" - durante toda a vida útil do pod.

Modo de funcionamento especial Pulso (comando :pulse) mostra información xeral sobre o clúster de Kubernetes:

Visión xeral de k9s: unha interface de terminal avanzada para Kubernetes

Nel pódese ver o número de recursos e o seu estado (o verde mostra os que teñen o estado Running).

Outra característica interesante de K9s chámase Popeye. Comproba todos os recursos para determinados criterios de corrección e mostra a "valoración" resultante con explicacións. Por exemplo, podes ver que non hai mostras ou límites suficientes e que algún contedor pode executarse como root...

Visión xeral de k9s: unha interface de terminal avanzada para Kubernetes

Hai soporte básico de Helm. Por exemplo, así podes ver as versións implantadas no clúster:

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

Referencia

Incluso incorporado en K9 ei é un xerador de carga de servidor HTTP simple, unha alternativa ao máis coñecido ab (ApacheBench).

Para activalo, cómpre activar o reenvío de portos no pod. Para iso, seleccione o pod e prema Maiús + f, vai ao submenú de reenvío de porto usando o alias "pf".

Visión xeral de k9s: unha interface de terminal avanzada para Kubernetes

Despois de seleccionar o porto e premer Ctrl + b, comezará o propio benchmark. Os resultados do seu traballo gárdanse en /tmp e están dispoñibles para a súa visualización posterior en K9s.

Visión xeral de k9s: unha interface de terminal avanzada para Kubernetes
Visión xeral de k9s: unha interface de terminal avanzada para Kubernetes

Para cambiar a configuración do benchmark, cómpre crear un ficheiro $HOME/.k9s/bench-<my_context>.yml (determinado para cada cluster).

NB: É importante que a extensión de todos os ficheiros YAML nun directorio .k9s foi exactamente .yml (.yaml non funciona correctamente).

Exemplo de configuración:

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

interface

A aparencia das columnas das listas de recursos modifícase creando un ficheiro $HOME/.k9s/views.yml. Un exemplo do seu contido:

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

É certo que non hai columnas suficientes para as etiquetas, para as que hai cuestión no proxecto.

A clasificación por columnas realízase mediante atallos de teclado:

  • Maiúsculas + n - polo nome;
  • Maiúsculas + o - por nós;
  • Maiús + i - por IP;
  • Shift + a - pola vida útil do recipiente;
  • Shift + t - polo número de reinicios;
  • Shift + r - polo estado de preparación;
  • Shift + c - por consumo de CPU;
  • Maiúsculas + m - por consumo de memoria.

Se a alguén non lle gusta o esquema de cores predeterminado, K9s incluso é compatible peles. Existen exemplos preparados (7 pezas). aquí. Aquí tes un exemplo dunha destas peles (na mariña):

Visión xeral de k9s: unha interface de terminal avanzada para Kubernetes

Complementos

Finalmente complementos permítelle ampliar as capacidades de K9s. Eu mesmo usei só un deles no meu traballo - kubectl get all -n $namespace.

Parece así. Crear un ficheiro $HOME/.k9s/plugin.yml con contido coma este:

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"

Agora podes ir ao espazo de nomes e premer "g" para executar co comando correspondente:

Visión xeral de k9s: unha interface de terminal avanzada para Kubernetes

Entre os complementos hai, por exemplo, integracións con kubectl-jq e unha utilidade para ver rexistros estrela.

Conclusión

Para o meu gusto, K9s resultou moi cómodo para traballar: podes acostumarte rapidamente a buscar todo o que necesitas sen usalo. kubectl. Quedei satisfeito coa vista dos rexistros e o seu aforro, a edición rápida dos recursos, a velocidade de traballo en xeral *, o modo Popeye resultou útil. Unha mención especial é a posibilidade de crear complementos e modificar a aplicación para que se adapte ás túas necesidades.

* Aínda que, cun gran volume de rexistros, tamén notei o lento funcionamento dos K9. Nestes momentos, a utilidade "comía" 2 núcleos do Intel Xeon E312xx e ata podía conxelarse.

Que falta neste momento? Retroceso rápido á versión anterior (non falamos de RS) sen ir ao directorio. Ademais, a recuperación ocorre só para recurso: se eliminas unha anotación ou etiqueta, terás que eliminar e restaurar todo o recurso (aquí é onde tes que ir ao directorio). Outra bagatela: non hai data suficiente para tales "copias de seguridade".

PS

Lea tamén no noso blog:

Fonte: www.habr.com

Engadir un comentario