Revisión de k9s: interfaz de terminal avanzada para Kubernetes

Revisión de k9s: interfaz de terminal avanzada para Kubernetes

K9s ofrece una interfaz de terminal para la interacción con clústeres de Kubernetes. El objetivo de este proyecto de código abierto es facilitar la navegación en las aplicaciones en K8s, su monitoreo y gestión. K9s monitorea constantemente los cambios en Kubernetes y sugiere comandos rápidos para trabajar con los recursos observados.

El proyecto está escrito en Go y existe desde hace más de un año y medio: el primer commit se realizó el 1 de febrero de 2019. Al momento de redactar este artículo, cuenta con más de 9000 estrellas en GitHub y alrededor de 80 contribuyentes. ¿Veamos qué puede hacer k9s?

Instalación y ejecución

Es una aplicación cliente (en relación con el clúster de Kubernetes) que se puede iniciar más fácilmente como una imagen de Docker:

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

También hay paquetes listos para instalar para algunas distribuciones de Linux y otros sistemas operativos. preparadosEn general, para sistemas Linux se puede instalar el 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 K8s en sí. Según los comentarios, la aplicación funciona incluso con versiones antiguas de Kubernetes, como la 1.12.

La aplicación se inicia utilizando la configuración estándar .kube/config — de manera similar a como lo hace kubectl.

Navegación

Por defecto, se abre una ventana con el namespace estándar que está configurado para el contexto. Es decir, si has especificado kubectl config set-context --current --namespace=test, se abrirá el namespace test. (Sobre el cambio de contextos/namespaces, ver más abajo.)

Revisión de k9s: interfaz de terminal avanzada para Kubernetes

El cambio a modo comando se realiza presionando «:». A partir de ahí, se puede gestionar la operación de k9s mediante comandos; por ejemplo, para ver la lista de StatefulSets (en el namespace actual), se puede ingresar :sts.

Revisión de k9s: interfaz de terminal avanzada para Kubernetes

Para algunos otros recursos de Kubernetes:

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

Para mostrar una lista completa de tipos de recursos disponibles para ver, existe el comando :aliases.

Es conveniente ver también la lista de comandos disponibles mediante combinaciones de teclas rápidas en la ventana actual: simplemente presiona «?».

Revisión de k9s: interfaz de terminal avanzada para Kubernetes

Además, k9s tiene modo de búsqueda, al que se puede acceder simplemente ingresando «/». Con esto, se busca dentro del contenido de la ventana actual. Supongamos que has ingresado :ns, tienes abierta la lista de namespaces. Si hay demasiados, para no desplazarte demasiado hacia abajo, basta con ingresar en la ventana de namespaces. /mynamespace.

Para buscar por etiquetas, se pueden seleccionar todos los pods en el espacio de nombres deseado y luego ingresar, por ejemplo, / -l app=whoami. Obtendremos una lista de pods con esa etiqueta:

Revisión de k9s: interfaz de terminal avanzada para Kubernetes

La búsqueda funciona en todos los tipos de ventanas, incluyendo logs, visualización de manifiestos YAML y describe para recursos — más detalles sobre estas capacidades, véase abajo.

¿Cómo se ve en general la secuencia de acciones para la navegación?

Con el comando :ctx se puede seleccionar el contexto:

Revisión de k9s: interfaz de terminal avanzada para Kubernetes

Para seleccionar el namespace, ya existe el comando mencionado anteriormente :ns, y luego se puede utilizar la búsqueda para el espacio deseado: /test.

Si ahora seleccionamos el recurso que nos interesa (por ejemplo, el mismo StatefulSet), aparecerá la información correspondiente: cuántos pods están en ejecución con un resumen de los mismos.

Revisión de k9s: interfaz de terminal avanzada para Kubernetes

Quizás solo nos interesen los pods — entonces es suficiente con ingresar :pod. En el caso de ConfigMaps (:cm — para la lista de estos recursos) se puede seleccionar el objeto que interesa y presionar «u», después de lo cual K9s indicará quién lo está utilizando (este CM).

Otra característica conveniente para visualizar recursos es su «rayos X» (XRay view). Este modo se activa con el comando :xray RESOURCE y… es más fácil mostrar cómo funciona que explicarlo. Aquí hay una ilustración para StatefulSets:

Revisión de k9s: interfaz de terminal avanzada para Kubernetes
(Cada uno de estos recursos se puede editar, modificar, realizar) describe.)

Y aquí está el Deployment con Ingress:

Revisión de k9s: interfaz de terminal avanzada para Kubernetes

Trabajando con recursos

Se puede obtener información sobre cada recurso en YAML o su describe presionando las combinaciones de teclas correspondientes («y» y «d», respectivamente). Por supuesto, hay aún más operaciones básicas: su lista y combinaciones de teclas están siempre a la vista gracias a la conveniente «cabecera» en la interfaz (se oculta presionando Ctrl + e).

Revisión de k9s: interfaz de terminal avanzada para Kubernetes

Al editar cualquier recurso («e» después de seleccionarlo) se abre el editor de texto que se ha definido en las variables de entorno (export EDITOR=vim).

Así es como se ve la descripción detallada de un recurso (describe):

Revisión de k9s: interfaz de terminal avanzada para Kubernetes

Tal salida (o la salida que muestra el manifiesto YAML del recurso) se puede guardar con la combinación de teclas habitual Ctrl + s. Dónde se guardará, se sabrá a través del mensaje de K9s:

Log /tmp/k9s-screens-root/kubernetes/Describe-1601244920104133900.yml guardado exitosamente!

De los archivos de respaldo creados, también se pueden restaurar recursos, eliminando antes las etiquetas y anotaciones del sistema. Para esto, será necesario ir al directorio con ellos (:dir /tmp), después de lo cual se seleccionará el archivo necesario y se aplicará. aplicar.

Por cierto, en cualquier momento se puede regresar a un ReplicaSet anterior si hay problemas con el actual. Para ello, hay que seleccionar el RS necesario (:rs de su lista):

Revisión de k9s: interfaz de terminal avanzada para Kubernetes

… y ejecutar rollback mediante Ctrl + l. Debemos recibir una notificación de que todo ha salido bien:

k9s/whoami-5cfbdbb469 se ha revertido correctamente

Y para escalar réplicas, solo hay que presionar «s» (scale) y seleccionar el número deseado de instancias:

Revisión de k9s: interfaz de terminal avanzada para Kubernetes

Se puede acceder a cualquiera de los contenedores mediante shell: para ello, navega al pod deseado, presiona «s» (shell) y selecciona el contenedor.

Otras capacidades

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

Revisión de k9s: interfaz de terminal avanzada para Kubernetes

También en esta ventana se puede seleccionar el rango de tiempo para mostrar los logs:

  • la tecla «1» — por 1 minuto;
  • «2» — 5 minutos;
  • «3» — 15 minutos;
  • «4» — 30 minutos;
  • «5» — 1 hora;
  • «0» — por toda la duración de vida del pod.

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

Revisión de k9s: interfaz de terminal avanzada para Kubernetes

En él se puede ver la cantidad de recursos y su estado (los que están en verde tienen estado En ejecución).

Otra función interesante de K9s se llama Popeye. Esta verifica todos los recursos según ciertos criterios de validez y muestra un «ranking» resultante con explicaciones. Por ejemplo, se puede observar que faltan límites o requests, o que algún contenedor puede ejecutarse como root...

Revisión de k9s: interfaz de terminal avanzada para Kubernetes

Hay soporte básico para Helm. Por ejemplo, así se pueden ver los releases desplegados en el clúster:

:helm all # todos
:helm $namespace # en un espacio de nombres específico

Benchmark

En K9s incluso han integrado hey — es un generador de carga sencillo para servidores HTTP, alternativa al más conocido ab (ApacheBench).

Para activarlo, será necesario habilitar port-forward en el pod. Para ello, selecciona el pod y presiona Shift + f, accede al submenú port-forward usando el alias «pf».

Revisión de k9s: interfaz de terminal avanzada para Kubernetes

Después de seleccionar el puerto y presionar Ctrl + b, se iniciará el benchmark. Los resultados se guardan en /tmp y están disponibles para una visualización posterior en K9s.

Revisión de k9s: interfaz de terminal avanzada para Kubernetes
Revisión de k9s: interfaz de terminal avanzada para Kubernetes

Para cambiar la configuración del benchmark, hay que crear el archivo $HOME/.k9s/bench-.yml (se determina para cada clúster).

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

Ejemplo de configuración:

referencias:
  por defecto:
    # Número de hilos
    concurrencia: 2
    # Número de solicitudes
    solicitudes: 1000
  contenedores:
    # Configuraciones para el contenedor con la referencia
    # El contenedor se define como namespace/pod-name:container-name
    default/nginx:nginx:
      concurrencia: 2
      solicitudes: 10000
      http:
        ruta: /
        método: POST
        cuerpo:
          {"foo":"bar"}
        encabezado:
          Aceptar:
            - text/html
          Content-Type:
            - application/json
 servicios:
    # Se puede realizar referencia en servicios de tipo NodePort y LoadBalancer
    # Sintaxis: namespace/service-name
    default/nginx:
      concurrencia: 5
      solicitudes: 500
      http:
        método: GET
        ruta: /auth
      auth:
        usuario: flant
        contraseña: s3cr3tp455w0rd

Interfaz

El tipo de columnas para las listas de recursos se modifica creando un archivo $HOME/.k9s/views.yml. Ejemplo de su contenido:

k9s:
 vistas:
   v1/pods:
     columnas:
       - EDAD
       - NAMESPACE
       - NOMBRE
       - IP
       - NODO
       - ESTADO
       - LISTO
   v1/services:
     columnas:
       - EDAD
       - NAMESPACE
       - NOMBRE
       - TIPO
       - CLUSTER-IP

Sin embargo, falta una columna de etiquetas, lo cual hay un problema en el proyecto.

La clasificación por columnas se realiza con combinaciones de teclas:

  • Shift + n — por nombre;
  • Shift + o — por nodos;
  • Shift + i — por IP;
  • Shift + a — por tiempo de vida del contenedor;
  • Shift + t — por 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 por defecto, en K9s incluso se soportan temas. Ejemplos listos (7 en total) están disponibles aquí. Aquí hay un ejemplo de uno de esos temas (en la marina):

Revisión de k9s: interfaz de terminal avanzada para Kubernetes

Plugins

Finalmente, complementos permiten expandir las capacidades de K9s. Personalmente, en mi trabajo usé solo uno de ellos — kubectl get all -n $namespace.

Esto se vería de la siguiente manera. Creamos un archivo $HOME/.k9s/plugin.yml con este contenido:

plugin:
 get-all:
   atajo: g    
   confirmar: false    
   descripción: obtener todo
   ámbitos:
   - todo
   comando: sh
   fondo: false
   args:
   - -c
   - "kubectl -n $NAMESPACE get all -o wide | less"

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

Revisión de k9s: interfaz de terminal avanzada para Kubernetes

Entre los plugins hay, por ejemplo, integraciones con kubectl-jq y la herramienta para ver los registros stern.

Conclusión

A mi parecer, K9s ha resultado muy conveniente de usar: es bastante rápido acostumbrarse a buscar todo lo necesario sin utilizar kubectl. Me impresionó la visualización de registros y su guardado, la edición rápida de recursos, la velocidad general de funcionamiento*, y el modo Popeye resultó útil. Mencionan también las capacidades de crear plugins y personalizar la aplicación según tus necesidades.

* Aunque con un gran volumen de registros también noté un funcionamiento lento de K9s. En esos momentos, la utilidad consumía 2 núcleos de Intel Xeon E312xx y a veces podía llegar a bloquearse.

¿Qué falta en este momento? Un retroceso rápido a la versión anterior (no hablo de RS) sin necesidad de cambiar de directorio. Además, la recuperación solo se realiza para durante el recurso: si eliminaste una anotación o una etiqueta, tendrás que eliminar y restaurar todo el recurso (aquí es donde se necesita cambiar de directorio). Otro pequeño detalle: falta la fecha de estas 'copias de seguridad' guardadas.

P.D.

También puedes leer en nuestro blog:

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster