Una descripción general de k9s: una interfaz de terminal avanzada para Kubernetes





K9s proporciona una interfaz de usuario de terminal para interactuar con los clústeres de Kubernetes. El objetivo de este proyecto de código abierto es facilitar la navegación, el monitoreo y la administración de aplicaciones en K8s. K9s monitorea constantemente los cambios en Kubernetes y ofrece comandos rápidos para trabajar con recursos monitoreados.



El proyecto está escrito en Go, existe desde hace más de un año y medio: el primer compromiso se realizó el 1 de febrero de 2019. En el momento de escribir este artículo, hay más de 9000 estrellas en GitHub y alrededor de 80 colaboradores. Veamos qué puede hacer k9s.



Instalación y lanzamiento



Esta es una aplicación cliente (en relación con el clúster de Kubernetes) y es más fácil de ejecutar como una imagen de Docker:



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


Para algunas distribuciones de Linux y otros sistemas operativos, también hay paquetes listos para instalar . En general, para sistemas Linux, puede instalar un archivo 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


No hay requisitos específicos para el clúster K8 en sí. Según las revisiones, la aplicación funciona con versiones anteriores de Kubernetes, como 1.12.



La aplicación se inicia utilizando la configuración estándar .kube/config, de la misma manera que lo hace kubectl.



Navegación



De forma predeterminada, se abre una ventana con el espacio de nombres estándar especificado para el contexto. Es decir, si se ha registrado kubectl config set-context --current --namespace=test, se abrirá el espacio de nombres test. (Consulte más abajo sobre cómo cambiar contextos / espacios de nombres). Puede







cambiar al modo de comando presionando ":". Luego puede controlar el funcionamiento de k9s usando comandos; por ejemplo, para ver una lista de StatefulSets (en el espacio de nombres actual), puede ingresar :sts.







Para algunos otros recursos de Kubernetes:



  • :ns - espacios de nombres;
  • :deploy - Despliegues;
  • :ing - Ingresses;
  • :svc - Servicios.


Para mostrar una lista completa de los tipos de recursos disponibles para su visualización, hay un comando :aliases.



También es conveniente ver la lista de comandos disponibles mediante combinaciones de teclas de acceso rápido dentro de la ventana actual: simplemente haga clic en "?"







También en k9s hay un modo de búsqueda , para cambiar al que basta con ingresar "/". Se utiliza para buscar el contenido de la "ventana" actual. Digamos que si ingresó antes :ns, tiene una lista de espacios de nombres abierta. Si hay demasiados, entonces, para no desplazarse hacia abajo durante mucho tiempo, es suficiente ingresar en la ventana con espacios de nombres /mynamespace.



Para buscar etiquetas, puede elegir todos los pod'y en el espacio de nombres correcto y luego ingresar, por ejemplo / -l app=whoami. Obtendremos una lista de vainas con esta etiqueta:







La búsqueda funciona en todo tipo de ventanas, incluidos registros, visualización de manifiestos YAML y describerecursos; consulte a continuación para obtener más información sobre estas funciones.



¿Cuál es la secuencia de navegación general?



Con el comando :ctx, puede seleccionar Contexto:







Para seleccionar namespace'a ya han mencionado el equipo :ns, y luego se puede buscar el espacio deseado: /test.



Si ahora seleccionamos el recurso que nos interesa (por ejemplo, el mismo StatefulSet), se mostrará la información correspondiente: cuántos pods se están ejecutando con información breve sobre ellos.







Solo las vainas pueden ser interesantes, luego ingrese :pod. En el caso de ConfigMaps (:cm- para obtener una lista de estos recursos), puede seleccionar el objeto de interés y hacer clic en "u", después de lo cual K9s le dirá exactamente quién lo está usando (este CM).



Otra característica muy útil para la visualización de los recursos es su visión de la radiografía . Este modo se invoca mediante un comando :xray RESOURCEy ... es más fácil mostrar cómo funciona que explicarlo. Aquí hay una ilustración para StatefulSets:





(Cada uno de estos recursos se puede editar, cambiar, hacer describe).



Y aquí hay una implementación con Ingress:







Trabajando con recursos



Puede obtener información sobre cada recurso en YAML o describepresionando los atajos de teclado correspondientes ("y" y "d", respectivamente). Hay, por supuesto, operaciones aún más básicas: su lista y atajos de teclado están siempre a la vista gracias a un conveniente "encabezado" en la interfaz (oculto al presionar Ctrl + e).







Al editar cualquier recurso ("e" después de su selección export EDITOR=vim), se abre el editor de texto, definido en las variables de entorno ( ).



Y así es como se ve la descripción detallada del recurso ( describe):







Tal salida (o la salida de ver el manifiesto YAML de un recurso) se puede guardar usando el atajo de teclado familiar Ctrl + s. El lugar donde se guardará se sabrá por el mensaje de K9s:



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


A partir de los archivos de respaldo creados, también puede restaurar recursos, después de eliminar las etiquetas y anotaciones del sistema. Para hacer esto, debe ir al directorio con ellos ( :dir /tmp), luego seleccionar el archivo deseado y aplicar apply.



Por cierto, en cualquier momento puede volver al ReplicaSet anterior si hay problemas con el actual. Para hacer esto, seleccione el RS requerido ( :rspara su lista):







… y retroceda con Ctrl + l. Deberíamos recibir una notificación de que todo salió bien:



k9s/whoami-5cfbdbb469 successfully rolled back


Y para escalar réplicas, simplemente haga clic en "s" (escala) y seleccione el número deseado de instancias:







Puede ingresar a cualquiera de los contenedores usando el shell: para hacer esto, vaya al pod deseado, haga clic en "s" (shell) y seleccione el contenedor ...



Otras posibilidades



Por supuesto, también se admite la visualización de los registros ("l" para el recurso seleccionado). Y para ver nuevos registros, no es necesario presionar constantemente Enter: basta con marcar ("m") y luego rastrear solo los mensajes nuevos.







Además, en la misma ventana, puede seleccionar el rango de tiempo para mostrar los registros:



  • tecla "1" - en 1 minuto;
  • "25 minutos;
  • "3" - 15 minutos;
  • "4" - 30 minutos;
  • "5" - 1 hora;
  • "0": durante toda la vida útil del módulo.


El modo de operación especial Pulse (comando :pulse) muestra información general sobre el clúster de Kubernetes:







puede ver la cantidad de recursos y su estado en él (los que tienen un estado se muestran en verde Running).



Otra característica interesante de los K9 se llama Popeye . Comprueba todos los recursos en busca de ciertos criterios de corrección y muestra la "calificación" resultante con explicaciones. Por ejemplo, puede ver que no hay suficientes sondeos o límites, y algún contenedor puede ejecutarse como root ...







Hay soporte básico de Helm. Por ejemplo, así es como puede ver las versiones implementadas en el clúster:



:helm all # 
:helm $namespace #    


Punto de referencia



Incluso está integrado en K9s : es un simple generador de carga de servidor HTTP, una alternativa al más famoso ab (ApacheBench).



Para habilitarlo, necesita la activación de reenvío de puertos en el pod. Para hacer esto, seleccione pod y presione Shift + f, vaya al submenú port-forward con el alias "pf".







Después de seleccionar un puerto y presionar Ctrl + b, se iniciará el punto de referencia. Los resultados de su trabajo se guardan /tmpy están disponibles para su posterior visualización en K9s.









Para cambiar la configuración del banco de pruebas, debe crear un archivo $HOME/.k9s/bench-<my_context>.yml(definido para cada clúster).



NB: Es importante que la extensión de todos los archivos YAML en el directorio sea .k9sexactamente .yml( .yamlno funciona correctamente).



Ejemplo 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


Interfaz



La vista de columna para las listas de recursos se modifica creando un archivo $HOME/.k9s/views.yml. Un ejemplo de su contenido:



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


Es cierto que falta una columna para etiquetas, por lo que existe un problema en el proyecto .



La clasificación por columnas se realiza mediante atajos de teclado:



  • Shift + n - por nombre;
  • Shift + o - por nodos;
  • Shift + i - por IP;
  • Shift + a - por la vida útil del contenedor;
  • Shift + t - por el número de reinicios;
  • Shift + r - por estado de preparación;
  • Shift + c - por consumo de CPU;
  • Shift + m - por consumo de memoria.


Si a alguien no le gusta el esquema de color predeterminado, K9s incluso admite máscaras . Los ejemplos listos (7 piezas) están disponibles aquí . Aquí hay un ejemplo de una de estas máscaras (en la marina) :







Complementos



Finalmente, los complementos le permiten ampliar las capacidades de K9s. Yo mismo usé solo uno de ellos en mi trabajo - kubectl get all -n $namespace.



Se parece a esto. Cree un archivo $HOME/.k9s/plugin.ymlcon el siguiente contenido:



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"


Ahora puedes ir al espacio de nombres y presionar "g" para ejecutar con el comando apropiado:







Entre los complementos están, por ejemplo, la integración con kubectl-jq y la utilidad para ver logs stern .



Conclusión



Para mi gusto, el K9 resultó ser muy conveniente para trabajar: con él es bastante rápido acostumbrarse a buscar todo lo que necesita sin usarlo kubectl. Me complació la visualización de los registros y su almacenamiento, la edición rápida de recursos, la velocidad del trabajo en general *, el modo Popeye resultó ser útil. Se hace mención especial a la capacidad de crear complementos y modificar la aplicación para que se ajuste a sus necesidades.



* Aunque con un gran volumen de registros, también noté el lento trabajo de los K9. En esos momentos, la utilidad "se comió" 2 núcleos de Intel Xeon E312xx e incluso podría congelar.



¿Qué falta en este momento? Retroceso rápido a la versión anterior (no sobre RS) sin ir al directorio. Además, la recuperación solo ocurre para todo.recurso: si eliminó la anotación o la etiqueta, deberá eliminar y restaurar todo el recurso (aquí deberá ir al directorio). Otro detalle es que no hay suficiente fecha para esas "copias de seguridad" guardadas.



PD



Lea también en nuestro blog:






All Articles