ProHoster > Blog > Administración > 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:
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).
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.
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 "?".
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:
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:
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.
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:
(Cada un destes recursos pódese editar, cambiar, facer describe.)
E aquí está a implementación con Ingress:
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).
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):
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:
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):
... 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:
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.
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:
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...
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".
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.
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):
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:
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 só 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".