{"id":97736,"date":"2020-10-21T14:42:17","date_gmt":"2020-10-21T12:42:17","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/obzor-k9s-prodvinutogo-terminalnogo-interfejsa-dlya-kubernetes"},"modified":"2020-10-21T14:42:17","modified_gmt":"2020-10-21T12:42:17","slug":"obzor-k9s-prodvinutogo-terminalnogo-interfejsa-dlya-kubernetes","status":"publish","type":"post","link":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/obzor-k9s-prodvinutogo-terminalnogo-interfejsa-dlya-kubernetes","title":{"rendered":"Revisi\u00f3n de k9s: interfaz de terminal avanzada para Kubernetes","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Revisi\u00f3n de k9s: interfaz de terminal avanzada para Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/11274841ee84b0e2c3ac74c9c738faba.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/k9scli.io\/\">K9s<\/a><\/noindex> ofrece una interfaz de terminal para la interacci\u00f3n con cl\u00fasteres de Kubernetes. El objetivo de este proyecto de c\u00f3digo abierto es facilitar la navegaci\u00f3n en las aplicaciones en K8s, su monitoreo y gesti\u00f3n. K9s monitorea constantemente los cambios en Kubernetes y sugiere comandos r\u00e1pidos para trabajar con los recursos observados.<\/p>\n<p>El proyecto est\u00e1 escrito en Go y existe desde hace m\u00e1s de un a\u00f1o y medio: el primer commit se realiz\u00f3 el 1 de febrero de 2019. Al momento de redactar este art\u00edculo, cuenta con m\u00e1s de 9000 estrellas en <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/derailed\/k9s\">GitHub<\/a><\/noindex> y alrededor de 80 contribuyentes. \u00bfVeamos qu\u00e9 puede hacer k9s?<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Instalaci\u00f3n y ejecuci\u00f3n<\/h2>\n<p>\nEs una aplicaci\u00f3n cliente (en relaci\u00f3n con el cl\u00faster de Kubernetes) que se puede iniciar m\u00e1s f\u00e1cilmente como una imagen de Docker:<\/p>\n<pre><code class=\"bash\">docker run --rm -it -v $KUBECONFIG:\/root\/.kube\/config quay.io\/derailed\/k9s<\/code><\/pre>\n<p>\nTambi\u00e9n hay paquetes listos para instalar para algunas distribuciones de Linux y otros sistemas operativos. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/derailed\/k9s#installation\">preparados<\/a><\/noindex>En general, para sistemas Linux se puede instalar el archivo binario:<\/p>\n<pre><code class=\"bash\">sudo wget -qO- https:\/\/github.com\/derailed\/k9s\/releases\/download\/v0.22.0\/k9s_Linux_x86_64.tar.gz | tar zxvf - -C \/tmp\/\nsudo mv \/tmp\/k9s \/usr\/local\/bin<\/code><\/pre>\n<p>\nNo hay requisitos espec\u00edficos para el cl\u00faster K8s en s\u00ed. Seg\u00fan los comentarios, la aplicaci\u00f3n funciona incluso con versiones antiguas de Kubernetes, como la 1.12.<\/p>\n<p>La aplicaci\u00f3n se inicia utilizando la configuraci\u00f3n est\u00e1ndar <code>.kube\/config<\/code> \u2014 de manera similar a como lo hace <code>kubectl<\/code>.<\/p>\n<h2>Navegaci\u00f3n<\/h2>\n<p>\nPor defecto, se abre una ventana con el namespace est\u00e1ndar que est\u00e1 configurado para el contexto. Es decir, si has especificado <code>kubectl config set-context --current --namespace=test<\/code>, se abrir\u00e1 el namespace <code>test<\/code>. <i>(Sobre el cambio de contextos\/namespaces, ver m\u00e1s abajo.) <\/i><\/p>\n<p><img decoding=\"async\" alt=\"Revisi\u00f3n de k9s: interfaz de terminal avanzada para Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/820fcbdd376abc95d67bf202f34c880c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEl cambio a <b>modo comando<\/b> se realiza presionando \u00ab:\u00bb. A partir de ah\u00ed, se puede gestionar la operaci\u00f3n de k9s mediante comandos; por ejemplo, para ver la lista de StatefulSets (en el namespace actual), se puede ingresar <code>:sts<\/code>.<\/p>\n<p><img decoding=\"async\" alt=\"Revisi\u00f3n de k9s: interfaz de terminal avanzada para Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/840724fc656b22e67519c53983065862.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPara algunos otros recursos de Kubernetes:<\/p>\n<ul>\n<li> <code>:ns<\/code> \u2014 Namespaces;<\/li>\n<li> <code>:deploy<\/code> \u2014 Deployments;<\/li>\n<li> <code>:ing<\/code> \u2014 Ingresses;<\/li>\n<li> <code>:svc<\/code> \u2014 Services.<\/li>\n<\/ul>\n<p>\nPara mostrar una lista completa de tipos de recursos disponibles para ver, existe el comando <code>:aliases<\/code>.<\/p>\n<p>Es conveniente ver tambi\u00e9n la lista de comandos disponibles mediante combinaciones de teclas r\u00e1pidas en la ventana actual: simplemente presiona \u00ab?\u00bb.<\/p>\n<p><img decoding=\"async\" alt=\"Revisi\u00f3n de k9s: interfaz de terminal avanzada para Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/54d329f9eeda2424f457aef6b977ae63.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAdem\u00e1s, k9s tiene <b>modo de b\u00fasqueda<\/b>, al que se puede acceder simplemente ingresando \u00ab\/\u00bb. Con esto, se busca dentro del contenido de la ventana actual. Supongamos que has ingresado <code>:ns<\/code>, tienes abierta la lista de namespaces. Si hay demasiados, para no desplazarte demasiado hacia abajo, basta con ingresar en la ventana de namespaces. <code>\/mynamespace<\/code>.<\/p>\n<p>Para buscar por etiquetas, se pueden seleccionar todos los pods en el espacio de nombres deseado, luego se puede introducir, por ejemplo, <code>\/ -l app=whoami<\/code>. Obtendremos una lista de pods con esa etiqueta:<\/p>\n<p><img decoding=\"async\" alt=\"Revisi\u00f3n de k9s: interfaz de terminal avanzada para Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/88b8e09a5b7819bcf49334bf351b040b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLa b\u00fasqueda funciona en todos los tipos de ventanas, incluyendo logs, visualizaci\u00f3n de manifiestos YAML y <code>describe<\/code> para recursos \u2014 m\u00e1s detalles sobre estas capacidades, v\u00e9ase abajo.<\/p>\n<p>\u00bfC\u00f3mo se ve en general la secuencia de acciones para la navegaci\u00f3n?<\/p>\n<p>Con el comando <code>:ctx<\/code> se puede seleccionar el contexto:<\/p>\n<p><img decoding=\"async\" alt=\"Revisi\u00f3n de k9s: interfaz de terminal avanzada para Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/a5e780a3fc98961913c966222e167d51.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPara seleccionar el namespace, ya existe el comando mencionado anteriormente <code>:ns<\/code>, y luego se puede utilizar la b\u00fasqueda para el espacio deseado: <code>\/test<\/code>.<\/p>\n<p>Si ahora seleccionamos el recurso que nos interesa (por ejemplo, el mismo StatefulSet), aparecer\u00e1 la informaci\u00f3n correspondiente: cu\u00e1ntos pods est\u00e1n en ejecuci\u00f3n con un resumen de los mismos.<\/p>\n<p><img decoding=\"async\" alt=\"Revisi\u00f3n de k9s: interfaz de terminal avanzada para Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/8e0d8c41b8673b7c29f2605d3ae59503.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nQuiz\u00e1s solo nos interesen los pods \u2014 entonces es suficiente con ingresar <code>:pod<\/code>. En el caso de los ConfigMaps (<code>:cm<\/code> \u2014 para la lista de estos recursos) se puede seleccionar el objeto que interesa y presionar \u00abu\u00bb, despu\u00e9s de lo cual K9s indicar\u00e1 qui\u00e9n lo est\u00e1 utilizando (este CM).<\/p>\n<p>Otra caracter\u00edstica conveniente para visualizar recursos es su <b>\u00abrayos X\u00bb (XRay view)<\/b>. Este modo se activa con el comando <code>:xray RESOURCE<\/code> y\u2026 es m\u00e1s f\u00e1cil mostrar c\u00f3mo funciona que explicarlo. Aqu\u00ed hay una ilustraci\u00f3n para StatefulSets:<\/p>\n<p><img decoding=\"async\" alt=\"Revisi\u00f3n de k9s: interfaz de terminal avanzada para Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/de40ebfe06ca935d2bc36323b3f16f3e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>(Cada uno de estos recursos se puede editar, modificar, realizar) <code>describe<\/code>.)<\/i><\/p>\n<p>Y aqu\u00ed est\u00e1 el Deployment con Ingress:<\/p>\n<p><img decoding=\"async\" alt=\"Revisi\u00f3n de k9s: interfaz de terminal avanzada para Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/598c1b25b787dcb1cf9660fa730d74c5.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Trabajando con recursos<\/h2>\n<p>\nSe puede obtener informaci\u00f3n sobre cada recurso en YAML o su <code>describe<\/code> presionando las combinaciones de teclas correspondientes (\u00aby\u00bb y \u00abd\u00bb, respectivamente). Por supuesto, hay a\u00fan m\u00e1s operaciones b\u00e1sicas: su lista y combinaciones de teclas est\u00e1n siempre a la vista gracias a la conveniente \u00abcabecera\u00bb en la interfaz (se oculta presionando Ctrl + e).<\/p>\n<p><img decoding=\"async\" alt=\"Revisi\u00f3n de k9s: interfaz de terminal avanzada para Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/6bbe4ca07442e1e14a462586d14ef98d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAl editar cualquier recurso (\u00abe\u00bb despu\u00e9s de seleccionarlo) se abre el editor de texto que se ha definido en las variables de entorno (<code>export EDITOR=vim<\/code>).<\/p>\n<p>As\u00ed es como se ve la descripci\u00f3n detallada de un recurso (<code>describe<\/code>):<\/p>\n<p><img decoding=\"async\" alt=\"Revisi\u00f3n de k9s: interfaz de terminal avanzada para Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/05fdb57e3b85d1b81c9bfc6414aca117.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTal salida (o la salida que muestra el manifiesto YAML del recurso) se puede guardar con la combinaci\u00f3n de teclas habitual Ctrl + s. D\u00f3nde se guardar\u00e1, se sabr\u00e1 a trav\u00e9s del mensaje de K9s:<\/p>\n<pre><code class=\"plaintext\">Log \/tmp\/k9s-screens-root\/kubernetes\/Describe-1601244920104133900.yml guardado exitosamente!<\/code><\/pre>\n<p>\nDe los archivos de respaldo creados, tambi\u00e9n se pueden restaurar recursos, eliminando antes las etiquetas y anotaciones del sistema. Para esto, ser\u00e1 necesario ir al directorio con ellos (<code>:dir \/tmp<\/code>), despu\u00e9s de lo cual se seleccionar\u00e1 el archivo necesario y se aplicar\u00e1. <code>aplicar<\/code>.<\/p>\n<p>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 (<code>:rs<\/code> de su lista):<\/p>\n<p><img decoding=\"async\" alt=\"Revisi\u00f3n de k9s: interfaz de terminal avanzada para Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/de0ea37d970c51514559288661bdc6f2.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u2026 y ejecutar rollback mediante Ctrl + l. Debemos recibir una notificaci\u00f3n de que todo ha salido bien:<\/p>\n<pre><code class=\"plaintext\">k9s\/whoami-5cfbdbb469 se ha revertido correctamente<\/code><\/pre>\n<p>\nY para escalar r\u00e9plicas, solo hay que presionar \u00abs\u00bb (scale) y seleccionar el n\u00famero deseado de instancias:<\/p>\n<p><img decoding=\"async\" alt=\"Revisi\u00f3n de k9s: interfaz de terminal avanzada para Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/145093030db754c9ef85810cbba3ed5c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSe puede acceder a cualquiera de los contenedores mediante shell: para ello, navega al pod deseado, presiona \u00abs\u00bb (shell) y selecciona el contenedor.<\/p>\n<h2>Otras capacidades<\/h2>\n<p>\nPor supuesto, tambi\u00e9n se admite la visualizaci\u00f3n de logs (\u00abl\u00bb para el recurso seleccionado). Para ver nuevos logs, no es necesario presionar Enter constantemente: basta con marcar (\u00abm\u00bb), y luego se rastrear\u00e1n solo los nuevos mensajes.<\/p>\n<p><img decoding=\"async\" alt=\"Revisi\u00f3n de k9s: interfaz de terminal avanzada para Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/05aa9657f744b9e3d09034862e1befe7.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTambi\u00e9n en esta ventana se puede seleccionar el rango de tiempo para mostrar los logs:<\/p>\n<ul>\n<li> la tecla \u00ab1\u00bb \u2014 por 1 minuto;<\/li>\n<li> \u00ab2\u00bb \u2014 5 minutos;<\/li>\n<li> \u00ab3\u00bb \u2014 15 minutos;<\/li>\n<li> \u00ab4\u00bb \u2014 30 minutos;<\/li>\n<li> \u00ab5\u00bb \u2014 1 hora;<\/li>\n<li> \u00ab0\u00bb \u2014 durante toda la vida del pod.<\/li>\n<\/ul>\n<p>\nUn modo especial de funcionamiento de Pulse (el comando <code>:pulse<\/code>) muestra informaci\u00f3n general sobre el cl\u00faster de Kubernetes:<\/p>\n<p><img decoding=\"async\" alt=\"Revisi\u00f3n de k9s: interfaz de terminal avanzada para Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/413d241ad7518f49c523fa59f51702a6.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEn \u00e9l se puede ver la cantidad de recursos y su estado (los que est\u00e1n en verde tienen estado <code>En ejecuci\u00f3n<\/code>).<\/p>\n<p>Otra funci\u00f3n interesante de K9s se llama <b>Popeye<\/b>. Esta verifica todos los recursos seg\u00fan ciertos criterios de validez y muestra un \u00abranking\u00bb resultante con explicaciones. Por ejemplo, se puede observar que faltan l\u00edmites o requests, o que alg\u00fan contenedor puede ejecutarse como root...<\/p>\n<p><img decoding=\"async\" alt=\"Revisi\u00f3n de k9s: interfaz de terminal avanzada para Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/a6bc5ea45b5749fb4e1038b82374b3c4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHay soporte b\u00e1sico para Helm. Por ejemplo, as\u00ed se pueden ver los releases desplegados en el cl\u00faster:<\/p>\n<pre><code class=\"bash\">:helm all # todos\n:helm $namespace # en un espacio de nombres espec\u00edfico\n<\/code><\/pre>\n<p><\/p>\n<h2>Benchmark<\/h2>\n<p>\nEn K9s incluso han integrado <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/rakyll\/hey\">hey<\/a><\/noindex> \u2014 es un generador de carga sencillo para servidores HTTP, alternativa al m\u00e1s conocido ab (ApacheBench).<\/p>\n<p>Para activarlo, ser\u00e1 necesario habilitar port-forward en el pod. Para ello, selecciona el pod y presiona Shift + f, accede al submen\u00fa port-forward usando el alias \u00abpf\u00bb.<\/p>\n<p><img decoding=\"async\" alt=\"Revisi\u00f3n de k9s: interfaz de terminal avanzada para Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/651f25269c0998c716ab9c0c4b5e0455.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDespu\u00e9s de seleccionar el puerto y presionar Ctrl + b, se iniciar\u00e1 el benchmark. Los resultados se guardan en <code>\/tmp<\/code> y est\u00e1n disponibles para una visualizaci\u00f3n posterior en K9s. <\/p>\n<p><img decoding=\"async\" alt=\"Revisi\u00f3n de k9s: interfaz de terminal avanzada para Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/57b2fe1d078e9aca1c6afccd318094da.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<img decoding=\"async\" alt=\"Revisi\u00f3n de k9s: interfaz de terminal avanzada para Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/3b2bf031e8442e47eb3482187ac5b64d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPara cambiar la configuraci\u00f3n del benchmark, hay que crear el archivo <code>$HOME\/.k9s\/bench-.yml<\/code> (se determina para cada cl\u00faster).<\/p>\n<p><i>NB: Es importante que la extensi\u00f3n de todos los archivos YAML en el directorio <code>.k9s<\/code> sea exactamente <code>.yml<\/code> (<code>.yaml<\/code> no funciona correctamente).<\/i><\/p>\n<p>Ejemplo de configuraci\u00f3n:<\/p>\n<pre><code class=\"bash\">benchmarks:\n  defaults:\n    # N\u00famero de hilos\n    concurrency: 2\n    # N\u00famero de solicitudes\n    requests: 1000\n  containers:\n    # Configuraci\u00f3n para el contenedor del benchmark\n    # El contenedor se define como namespace\/pod-name:container-name\n    default\/nginx:nginx:\n      concurrency: 2\n      requests: 10000\n      http:\n        path: \/\n        method: POST\n        body:\n          {\"foo\":\"bar\"}\n        header:\n          Accept:\n            - text\/html\n          Content-Type:\n            - application\/json\n services:\n    # Se puede realizar benchmarks en servicios de tipo NodePort y LoadBalancer\n    # Sintaxis: namespace\/service-name\n    default\/nginx:\n      concurrency: 5\n      requests: 500\n      http:\n        method: GET\n        path: \/auth\n      auth:\n        user: flant\n        password: s3cr3tp455w0rd\n<\/code><\/pre>\n<p><\/p>\n<h2>Interfaz<\/h2>\n<p>\nEl tipo de columnas para las listas de recursos se modifica creando un archivo <code>$HOME\/.k9s\/views.yml<\/code>. Ejemplo de su contenido:<\/p>\n<pre><code class=\"plaintext\">k9s:\n vistas:\n   v1\/pods:\n     columnas:\n       - EDAD\n       - NAMESPACE\n       - NOMBRE\n       - IP\n       - NODO\n       - ESTADO\n       - LISTO\n   v1\/services:\n     columnas:\n       - EDAD\n       - NAMESPACE\n       - NOMBRE\n       - TIPO\n       - CLUSTER-IP\n<\/code><\/pre>\n<p>\n<i>Sin embargo, falta una columna de etiquetas, lo cual hay <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/derailed\/k9s\/issues\/605\">un problema en el proyecto<\/a><\/noindex>.<\/i><\/p>\n<p>La clasificaci\u00f3n por columnas se realiza con combinaciones de teclas:<\/p>\n<ul>\n<li> Shift + n \u2014 por nombre;<\/li>\n<li> Shift + o \u2014 por nodos;<\/li>\n<li> Shift + i \u2014 por IP;<\/li>\n<li> Shift + a \u2014 por tiempo de vida del contenedor;<\/li>\n<li> Shift + t \u2014 por n\u00famero de reinicios;<\/li>\n<li> Shift + r \u2014 por estado de preparaci\u00f3n;<\/li>\n<li> Shift + c \u2014 por consumo de CPU;<\/li>\n<li> Shift + m \u2014 por consumo de memoria.<\/li>\n<\/ul>\n<p>\nSi a alguien no le gusta el esquema de color por defecto, en K9s incluso se soportan <noindex><a rel=\"nofollow\" href=\"https:\/\/k9scli.io\/topics\/skins\/\">temas<\/a><\/noindex>. Ejemplos listos (7 en total) est\u00e1n disponibles <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/derailed\/k9s\/tree\/master\/skins\">aqu\u00ed<\/a><\/noindex>. Aqu\u00ed hay un ejemplo de uno de esos temas <i>(en la marina)<\/i>:<\/p>\n<p><img decoding=\"async\" alt=\"Revisi\u00f3n de k9s: interfaz de terminal avanzada para Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/4a4378f2c2d36eb3985e2b71d733c444.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Plugins<\/h2>\n<p>\nFinalmente, <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/derailed\/k9s\/tree\/master\/plugins\">complementos<\/a><\/noindex> permiten expandir las capacidades de K9s. Personalmente, en mi trabajo us\u00e9 solo uno de ellos \u2014 <code>kubectl get all -n $namespace<\/code>.<\/p>\n<p>Esto se ver\u00eda de la siguiente manera. Creamos un archivo <code>$HOME\/.k9s\/plugin.yml<\/code> con este contenido:<\/p>\n<pre><code class=\"bash\">plugin:\n get-all:\n   shortCut: g    \n   confirm: false    \n   description: obtener todo\n   scopes:\n   - all\n   command: sh\n   background: false\n   args:\n   - -c\n   - \"kubectl -n $NAMESPACE get all -o wide | less\"<\/code><\/pre>\n<p>\nAhora puedes cambiar al espacio de nombres y presionar \"g\" para ejecutar con el comando correspondiente:<\/p>\n<p><img decoding=\"async\" alt=\"Revisi\u00f3n de k9s: interfaz de terminal avanzada para Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/c79bbf26b6c321a97cedabf22f1699b9.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEntre los plugins hay, por ejemplo, integraciones con kubectl-jq y la herramienta para ver los registros <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/wercker\/stern\">stern<\/a><\/noindex>.<\/p>\n<h2>Conclusi\u00f3n<\/h2>\n<p>\nA mi parecer, K9s ha resultado muy conveniente de usar: es bastante r\u00e1pido acostumbrarse a buscar todo lo necesario sin utilizar <code>kubectl<\/code>. Me impresion\u00f3 la visualizaci\u00f3n de registros y su guardado, la edici\u00f3n r\u00e1pida de recursos, la velocidad general de funcionamiento*, y el modo Popeye result\u00f3 \u00fatil. Mencionan tambi\u00e9n las capacidades de crear plugins y personalizar la aplicaci\u00f3n seg\u00fan tus necesidades.<\/p>\n<p><i>* Aunque con un gran volumen de registros tambi\u00e9n not\u00e9 un funcionamiento lento de K9s. En esos momentos, la utilidad consum\u00eda 2 n\u00facleos de Intel Xeon E312xx y a veces pod\u00eda llegar a bloquearse.<\/i><\/p>\n<p>\u00bfQu\u00e9 falta en este momento? Un retroceso r\u00e1pido a la versi\u00f3n anterior (no hablo de RS) sin necesidad de cambiar de directorio. Adem\u00e1s, la recuperaci\u00f3n solo se realiza para <i>durante<\/i> el recurso: si eliminaste una anotaci\u00f3n o una etiqueta, tendr\u00e1s que eliminar y restaurar todo el recurso (aqu\u00ed es donde se necesita cambiar de directorio). Otro peque\u00f1o detalle: falta la fecha de estas 'copias de seguridad' guardadas.<\/p>\n<h2>P.D.<\/h2>\n<p>\nTambi\u00e9n puedes leer en nuestro blog:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/506948\/\">Revisi\u00f3n de interfaces gr\u00e1ficas para Kubernetes<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/468041\/\">Anuncio de la interfaz web Kubernetes Web View (y una breve rese\u00f1a de otras UI web para Kubernetes)<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/426985\/\">kubebox y otras consolas para Kubernetes<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p>Fuente: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/524196\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>K9s \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430 \u0434\u043b\u044f \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430\u043c\u0438 Kubernetes. \u0426\u0435\u043b\u044c \u044d\u0442\u043e\u0433\u043e Open Source-\u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u2014 \u043e\u0431\u043b\u0435\u0433\u0447\u0438\u0442\u044c \u0443\u0434\u043e\u0431\u043d\u0443\u044e \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044e \u043f\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c \u0432 K8s, \u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u0435 \u0437\u0430 \u043d\u0438\u043c\u0438 \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0438\u043c\u0438. K9s \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0441\u043b\u0435\u0434\u0438\u0442 \u0437\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u043c\u0438 \u0432 Kubernetes \u0438 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c\u044b\u043c\u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c\u0438. \u041f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043d\u0430 Go, \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0443\u0436\u0435 \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043b\u0443\u0442\u043e\u0440\u0430 \u043b\u0435\u0442: \u043f\u0435\u0440\u0432\u044b\u0439 \u043a\u043e\u043c\u043c\u0438\u0442 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":97737,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-97736","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/obzor-k9s-prodvinutogo-terminalnogo-interfejsa-dlya-kubernetes\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"es_ES\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041e\u0431\u0437\u043e\u0440 k9s \u2014 \u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u043e\u0433\u043e \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0434\u043b\u044f Kubernetes | ProHoster\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/obzor-k9s-prodvinutogo-terminalnogo-interfejsa-dlya-kubernetes\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-10-21T12:42:17+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-10-21T12:42:17+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Revisi\u00f3n de k9s \u2014 una interfaz de terminal avanzada para Kubernetes | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/obzor-k9s-prodvinutogo-terminalnogo-interfejsa-dlya-kubernetes","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"es_ES","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041e\u0431\u0437\u043e\u0440 k9s \u2014 \u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u043e\u0433\u043e \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0434\u043b\u044f Kubernetes | ProHoster","og:url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/obzor-k9s-prodvinutogo-terminalnogo-interfejsa-dlya-kubernetes","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-10-21T12:42:17+00:00","article:modified_time":"2020-10-21T12:42:17+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"97736","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 10:14:39","updated":"2022-10-03 07:12:05","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/97736","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/comments?post=97736"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/97736\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media\/97737"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media?parent=97736"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/categories?post=97736"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/tags?post=97736"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}