
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 y existe desde hace más de un año y medio: el primer compromiso se realizó el 1 de febrero de 2019. Al momento de escribir, hay más de 9000 estrellas en y unos 80 colaboradores. Veamos qué puede hacer k9s.
Instalación y lanzamiento
Esta es una aplicación de cliente (en relación con el clúster de Kubernetes) que es más fácil de ejecutar como una imagen de Docker:
docker run --rm -it -v $KUBECONFIG:/root/.kube/config quay.io/derailed/k9sPara algunas distribuciones de Linux y otros sistemas operativos, también hay listas 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/binNo hay requisitos específicos para el clúster K8s en sí. A juzgar por las reseñas, la aplicación también funciona con versiones anteriores de Kubernetes como la 1.12.
La aplicación se inicia utilizando la configuración estándar. .kube/config - similar a como lo hace kubectl.
Navegación
De forma predeterminada, se abre una ventana con el espacio de nombres predeterminado especificado para el contexto. Es decir, si escribiste kubectl config set-context --current --namespace=test, luego se abrirá el espacio de nombres test. (Consulte a continuación para cambiar contextos/espacios de nombres).

Ir a modo de comando se hace presionando ":". Después de eso, puede controlar la operación de k9s usando comandos; por ejemplo, para ver la 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— Ingresos; -
: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: para hacer esto, simplemente haga clic en "?".

También en k9s hay modo de búsqueda, para ir a lo que basta con introducir "/". Con él, se realiza una búsqueda sobre el contenido de la "ventana" actual. Digamos que si ingresaste previamente :ns, tiene una lista de espacios de nombres abierta. Si hay demasiados, para no desplazarse hacia abajo durante mucho tiempo, basta con ingresar en la ventana con espacios de nombres /mynamespace.
Para buscar por etiquetas, puede seleccionar todos los pods en el espacio de nombres deseado y luego ingresar, por ejemplo, / -l app=whoami. Obtendremos una lista de pods con esta etiqueta:
![]()
La búsqueda funciona en todo tipo de ventanas, incluidos registros, visualización de manifiestos YAML y describe para obtener recursos, consulte a continuación para obtener más detalles sobre estas funciones.
¿Cómo es el flujo de navegación general?
Usando el comando :ctx Puedes elegir un contexto:

Para seleccionar un espacio de nombres, existe el comando ya mencionado :ns, y luego puede usar la búsqueda del espacio deseado: /test.
Si ahora seleccionamos el recurso que nos interesa (por ejemplo, el mismo StatefulSet), aparecerá la información correspondiente al mismo: cuántos pods se están ejecutando con una breve información sobre ellos.
![]()
Solo los pods pueden ser de interés; entonces es suficiente para ingresar :pod. En el caso de ConfigMaps (:cm - para la lista de estos recursos), puede seleccionar el objeto de interés y hacer clic en "u", después de lo cual K9s le dirá quién lo usa específicamente (este CM).
Otra característica útil para ver los recursos es su "radiografía" (vista de rayos X). Este modo es llamado por el comando :xray RESOURCE y... es más fácil mostrar cómo funciona que explicar. Aquí hay una ilustración para StatefulSets:

(Cada uno de estos recursos se puede editar, cambiar, hacer describe.)
Y aquí está la implementación con ingreso:

Trabajar con recursos
Puede obtener información sobre cada recurso en YAML o su describe presionando los atajos de teclado correspondientes (“y” y “d”, respectivamente). Por supuesto, hay operaciones aún más básicas: su lista y los atajos de teclado siempre están visibles gracias a un conveniente "encabezado" en la interfaz (oculto presionando Ctrl + e).

Al editar cualquier recurso ("e" después de su selección), se abre el editor de texto definido en las variables de entorno (export EDITOR=vim).
Y así es como se ve la descripción detallada del recurso (describe):

Este resultado (o el resultado de ver el manifiesto YAML del recurso) se puede guardar con el conocido método abreviado de teclado Ctrl + s. El lugar donde se guardará se sabrá por el mensaje de K9:
Log /tmp/k9s-screens-root/kubernetes/Describe-1601244920104133900.yml saved successfully! También puede restaurar recursos de los archivos de copia de seguridad creados, después de eliminar las etiquetas y anotaciones del sistema. Para hacer esto, debe ir al directorio con ellos (:dir /tmp), luego seleccione el archivo deseado y aplique apply.
Por cierto, en cualquier momento puede retroceder al ReplicaSet anterior si hay problemas con el actual. Para ello, seleccione el RS deseado (:rs para su lista):

... y revertir con Ctrl + l. Deberíamos recibir una notificación de que todo salió bien:
k9s/whoami-5cfbdbb469 successfully rolled backY para escalar las réplicas, simplemente haga clic en la "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 características
Por supuesto, también se admite la visualización de registros ("l" para el recurso seleccionado). Y para ver nuevos registros, no es necesario presionar Enter constantemente: basta con marcar ("m") y luego solo rastrear nuevos mensajes.

También en la misma ventana, puede seleccionar el rango de tiempo para la salida de registros:
- tecla "1" - durante 1 minuto;
- "2 minutos;
- "3 minutos;
- "4 minutos;
- "5" - 1 hora;
- "0": durante toda la vida útil del pod.
Modo de funcionamiento especial Pulso (comando :pulse) muestra información general sobre el clúster de Kubernetes:

En él se puede ver la cantidad de recursos y su estado (en verde se muestran los que tienen el estado Running).
Otra característica interesante de K9s se llama Popeye. Comprueba todos los recursos para ciertos criterios de corrección y muestra la "calificación" resultante con explicaciones. Por ejemplo, puede ver que no hay suficientes pruebas o límites, y algunos contenedores pueden ejecutarse como root...

Hay soporte básico para Helm. Por ejemplo, así es como puede ver los lanzamientos implementados en el clúster:
:helm all # все
:helm $namespace # в конкретном пространстве имен
Incluso integrado en K9 es un generador de carga de servidor HTTP simple, una alternativa al más conocido ab (ApacheBench).
Para habilitarlo, debe habilitar el reenvío de puertos en el pod. Para hacer esto, seleccione el pod y presione Shift + f, vaya al submenú de reenvío de puerto usando el alias "pf".

Después de seleccionar el puerto y presionar Ctrl + b, se iniciará el punto de referencia. Los resultados de su trabajo se almacenan en /tmp y están disponibles para verlos más tarde en K9s.


Para cambiar la configuración del banco de pruebas, debe crear un archivo $HOME/.k9s/bench-<my_context>.yml (determinado para cada clúster).
NB: Es importante que la extensión de todos los archivos YAML en un directorio .k9s fue exactamente .yml (.yaml no 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
Se modifica la apariencia de las columnas para las listas de recursos 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
Cierto, no hay suficiente columna para las etiquetas, para lo cual hay .
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 . Hay ejemplos listos para usar (7 piezas) disponibles . Aquí hay un ejemplo de una de estas máscaras. (en la Marina):

plugins
Por último, la le permite expandir las capacidades de K9s. Yo mismo he usado solo uno de ellos en mi trabajo: kubectl get all -n $namespace.
Se parece a esto. crear un archivo $HOME/.k9s/plugin.yml con contenido como 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"Ahora puedes ir al espacio de nombres y presionar "g" para ejecutar con el comando correspondiente:

Entre los complementos hay, por ejemplo, integraciones con kubectl-jq y una utilidad para ver registros .
Conclusión
Para mi gusto, K9 resultó ser muy conveniente para trabajar: puedes acostumbrarte rápidamente a buscar todo lo que necesitas sin usarlo. kubectl. Estaba satisfecho con la vista de los registros y su guardado, la edición rápida de recursos, la velocidad de trabajo en general *, el modo Popeye resultó ser útil. Una mención especial es 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 funcionamiento lento de K9. En esos momentos, la utilidad "comió" 2 núcleos del Intel Xeon E312xx e incluso podría congelarse.
¿Qué falta en este momento? Retroceso rápido a la versión anterior (no estamos hablando de RS) sin ir al directorio. Además, la recuperación se produce sólo para solamente recurso: si elimina una anotación o etiqueta, deberá eliminar y restaurar todo el recurso (aquí es donde debe ir al directorio). Otra bagatela: no hay suficiente fecha para tales "copias de seguridad" guardadas.
PS
Lea también en nuestro blog:
- «";
- «";
- «".
Fuente: habr.com
