Visão geral do k9s - uma interface de terminal avançada para Kubernetes

Visão geral do k9s - uma interface de terminal avançada para Kubernetes

K9s fornece uma interface de usuário de terminal para interagir com clusters Kubernetes. O objetivo deste projeto de código aberto é facilitar a navegação, o monitoramento e o gerenciamento de aplicativos no K8s. O K9s monitora constantemente as mudanças no Kubernetes e oferece comandos rápidos para trabalhar com os recursos monitorados.

O projeto é escrito em Go e existe há mais de um ano e meio: o primeiro commit foi feito em 1º de fevereiro de 2019. No momento em que escrevo, existem mais de 9000 estrelas no GitHub e cerca de 80 colaboradores. Vamos ver o que k9s pode fazer?

Instalação e lançamento

Este é um aplicativo cliente (em relação ao cluster Kubernetes) que é mais fácil de executar como uma imagem do Docker:

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

Para algumas distribuições do Linux e outros sistemas operacionais, também há versões prontas para instalação пакеты. Em geral, para sistemas Linux, você pode instalar um arquivo binário:

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

Não há requisitos específicos para o próprio cluster K8s. A julgar pelos comentários, o aplicativo também funciona com versões mais antigas do Kubernetes, como 1.12.

O aplicativo é iniciado usando a configuração padrão .kube/config - semelhante a como ele faz kubectl.

Navegação

Por padrão, uma janela é aberta com o namespace padrão especificado para o contexto. Isto é, se você escreveu kubectl config set-context --current --namespace=test, então o namespace será aberto test. (Veja abaixo para alterar contextos/namespaces.)

Visão geral do k9s - uma interface de terminal avançada para Kubernetes

Vamos para modo de comando é feito pressionando ":". Depois disso, você pode controlar a operação do k9s usando comandos - por exemplo, para visualizar a lista de StatefulSets (no namespace atual), você pode inserir :sts.

Visão geral do k9s - uma interface de terminal avançada para Kubernetes

Para alguns outros recursos do Kubernetes:

  • :ns — espaços de nomes;
  • :deploy — Implantações;
  • :ing — Entradas;
  • :svc - Serviços.

Para exibir uma lista completa de tipos de recursos disponíveis para visualização, existe um comando :aliases.

Também é conveniente visualizar a lista de comandos disponíveis por combinações de teclas de atalho na janela atual: para isso, basta clicar em "?".

Visão geral do k9s - uma interface de terminal avançada para Kubernetes

Também em k9s há modo de busca, para ir para o qual basta digitar "/". Com ele, é realizada uma busca no conteúdo da "janela" atual. Digamos que se você inseriu anteriormente :ns, você tem uma lista de namespaces abertos. Se houver muitos deles, para não rolar para baixo por muito tempo, basta entrar na janela com namespaces /mynamespace.

Para pesquisar por rótulos, você pode selecionar todos os pods no namespace desejado e inserir, por exemplo, / -l app=whoami. Obteremos uma lista de pods com este rótulo:

Visão geral do k9s - uma interface de terminal avançada para Kubernetes

A pesquisa funciona em todos os tipos de janelas, incluindo logs, visualização de manifestos YAML e describe para recursos - veja abaixo para mais detalhes sobre esses recursos.

Como é o fluxo geral de navegação?

Com o comando :ctx você pode escolher um contexto:

Visão geral do k9s - uma interface de terminal avançada para Kubernetes

Para selecionar um namespace, existe o comando já mencionado :ns, e então você pode usar a busca pelo espaço desejado: /test.

Se agora selecionarmos o recurso que nos interessa (por exemplo, o mesmo StatefulSet), a informação correspondente aparecerá para ele: quantos pods estão rodando com uma breve informação sobre eles.

Visão geral do k9s - uma interface de terminal avançada para Kubernetes

Apenas pods podem ser de interesse - então é o suficiente para entrar :pod. No caso de ConfigMaps (:cm - para a lista desses recursos), você pode selecionar o objeto de interesse e clicar em "u", após o que o K9s informará quem especificamente o usa (este CM).

Outro recurso útil para visualizar recursos é o "raio-x" (visão de raio-x). Este modo é chamado pelo comando :xray RESOURCE e... é mais fácil mostrar como funciona do que explicar. Aqui está uma ilustração para StatefulSets:

Visão geral do k9s - uma interface de terminal avançada para Kubernetes
(Cada um desses recursos pode ser editado, alterado, feito describe.)

E aqui está a implantação com o Ingress:

Visão geral do k9s - uma interface de terminal avançada para Kubernetes

Trabalhando com recursos

Você pode obter informações sobre cada recurso em YAML ou seu describe pressionando os atalhos de teclado correspondentes (“y” e “d”, respectivamente). Claro, existem operações ainda mais básicas: sua lista e atalhos de teclado estão sempre visíveis graças a um conveniente “cabeçalho” na interface (oculto pressionando Ctrl + e).

Visão geral do k9s - uma interface de terminal avançada para Kubernetes

Ao editar qualquer recurso ("e" após sua seleção), é aberto o editor de texto definido nas variáveis ​​de ambiente (export EDITOR=vim).

E aqui está a descrição detalhada do recurso (describe):

Visão geral do k9s - uma interface de terminal avançada para Kubernetes

Essa saída (ou a saída da visualização do manifesto de recursos YAML) pode ser salva usando o conhecido atalho de teclado Ctrl + s. Onde será salvo será conhecido pela mensagem do K9s:

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

Você também pode restaurar recursos dos arquivos de backup criados, após remover os rótulos e anotações do sistema. Para fazer isso, você precisa ir ao diretório com eles (:dir /tmp), selecione o arquivo desejado e aplique apply.

A propósito, a qualquer momento você pode reverter para o ReplicaSet anterior se houver problemas com o atual. Para isso, selecione o RS desejado (:rs para sua lista):

Visão geral do k9s - uma interface de terminal avançada para Kubernetes

... e reverter com Ctrl + l. Devemos receber uma notificação de que tudo correu bem:

k9s/whoami-5cfbdbb469 successfully rolled back

E para escalar as réplicas, basta clicar no "s" (escala) e selecionar o número de instâncias desejado:

Visão geral do k9s - uma interface de terminal avançada para Kubernetes

Você pode entrar em qualquer um dos containers usando o shell: para isso, vá até o pod desejado, clique em "s" (shell) e selecione o container.

Outras características

Obviamente, a exibição de logs também é suportada ("l" para o recurso selecionado). E para assistir a novos logs, não há necessidade de pressionar Enter constantemente: basta marcar (“m”) e depois rastrear apenas novas mensagens.

Visão geral do k9s - uma interface de terminal avançada para Kubernetes

Também na mesma janela, você pode selecionar o intervalo de tempo para a saída dos logs:

  • tecla "1" - por 1 minuto;
  • "2 minutos;
  • "3 minutos;
  • "4 minutos;
  • "5" - 1 hora;
  • "0" - para toda a vida útil do pod.

Modo de operação especial Pulso (comando :pulse) mostra informações gerais sobre o cluster do Kubernetes:

Visão geral do k9s - uma interface de terminal avançada para Kubernetes

Nele você pode ver a quantidade de recursos e seus status (o verde mostra aqueles que possuem o status Running).

Outro recurso legal do K9s é chamado Popeye. Ele verifica todos os recursos para determinados critérios de correção e exibe a "classificação" resultante com explicações. Por exemplo, você pode ver que não há amostras ou limites suficientes e alguns contêineres podem ser executados como root...

Visão geral do k9s - uma interface de terminal avançada para Kubernetes

Há suporte básico ao Helm. Por exemplo, é assim que você pode ver os lançamentos implantados no cluster:

:helm all # все
:helm $namespace # в конкретном пространстве имен

referência

Mesmo embutido em K9s ei é um gerador de carga de servidor HTTP simples, uma alternativa ao ab mais conhecido (ApacheBench).

Para habilitá-lo, você precisa habilitar o encaminhamento de porta no pod. Para fazer isso, selecione o pod e pressione Shift + f, vá para o submenu de encaminhamento de porta usando o alias "pf".

Visão geral do k9s - uma interface de terminal avançada para Kubernetes

Depois de selecionar a porta e pressionar Ctrl + b, o próprio benchmark será iniciado. Os resultados de seu trabalho são armazenados em /tmp e estão disponíveis para visualização posterior em K9s.

Visão geral do k9s - uma interface de terminal avançada para Kubernetes
Visão geral do k9s - uma interface de terminal avançada para Kubernetes

Para alterar a configuração do benchmark, você precisa criar um arquivo $HOME/.k9s/bench-<my_context>.yml (determinado para cada cluster).

NB: É importante que a extensão de todos os arquivos YAML em um diretório .k9s foi exatamente .yml (.yaml não funciona corretamente).

Exemplo de configuração:

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 aparência das colunas para listas de recursos é modificada criando um arquivo $HOME/.k9s/views.yml. Um exemplo de seu conteúdo:

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

É verdade que não há coluna suficiente para rótulos, para os quais há problema no projeto.

A classificação por colunas é realizada por atalhos de teclado:

  • Shift + n - pelo nome;
  • Shift + o - por nós;
  • Shift + i - por IP;
  • Shift + a - pela vida útil do contêiner;
  • Shift + t - pelo número de reinicializações;
  • Shift + r - por status de prontidão;
  • Shift + c - por consumo de CPU;
  • Shift + m - pelo consumo de memória.

Se alguém não gostar do esquema de cores padrão, o K9s ainda suporta peles. Exemplos prontos (7 peças) estão disponíveis aqui. Aqui está um exemplo de uma dessas skins (na Marinha):

Visão geral do k9s - uma interface de terminal avançada para Kubernetes

plugins

Por fim, o plug-ins permitem que você expanda os recursos do K9s. Eu mesmo usei apenas um deles em meu trabalho - kubectl get all -n $namespace.

Se parece com isso. Criar um arquivo $HOME/.k9s/plugin.yml com conteúdo 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"

Agora você pode ir para o namespace e pressionar "g" para executar com o comando correspondente:

Visão geral do k9s - uma interface de terminal avançada para Kubernetes

Entre os plugins existem, por exemplo, integrações com kubectl-jq e um utilitário para visualização de logs popa.

Conclusão

Para o meu gosto, o K9s acabou sendo muito prático de se trabalhar: você se acostuma rapidamente a procurar tudo o que precisa sem usar. kubectl. Fiquei satisfeito com a visualização dos logs e seu salvamento, edição rápida de recursos, velocidade de trabalho em geral *, o modo Popeye acabou sendo útil. Uma menção especial é a capacidade de criar plugins e modificar o aplicativo para atender às suas necessidades.

* Embora, com um grande volume de logs, também notei a operação lenta dos K9s. Nesses momentos, o utilitário "comeu" 2 núcleos do Intel Xeon E312xx e pode até congelar.

O que está faltando no momento? Reversão rápida para a versão anterior (não estamos falando de RS) sem ir ao diretório. Além disso, a recuperação ocorre apenas para apenas recurso: se você excluir uma anotação ou rótulo, terá que excluir e restaurar todo o recurso (é aqui que você precisa ir para o diretório). Outra ninharia - não há data suficiente para esses "backups" salvos.

PS

Leia também em nosso blog:

Fonte: habr.com

Adicionar um comentário