Anúncio da interface web Kubernetes Web View (e uma breve revisão de outras UIs web para Kubernetes)

Nota do tradutor.: Autor do material original — Henning Jacobs da Zalando. Ele criou uma nova interface web para trabalhar com Kubernetes, que é posicionada como «kubectl para a web». Por que o novo projeto Open Source surgiu e quais critérios não foram atendidos pelas soluções já existentes — leia em seu artigo.

Anúncio da interface web Kubernetes Web View (e uma breve revisão de outras UIs web para Kubernetes)

Nesta publicação, analiso várias interfaces web de Kubernetes com código aberto, apresento minhas exigências para uma UI universal e explico por que desenvolvi Visualização Web do Kubernetes — uma interface destinada a facilitar o suporte e a resolução de problemas em múltiplos clusters ao mesmo tempo.

Casos de uso

Na Zalando, atendemos a um grande número de usuários do Kubernetes (mais de 900) e clusters (mais de 100). Existem alguns casos típicos de uso onde uma ferramenta web especializada seria muito útil:

  1. comunicação com colegas durante o suporte;
  2. resposta a incidentes e investigação de suas causas.

Suporte

Na minha experiência, a comunicação durante o suporte muitas vezes acontece da seguinte maneira:

— Ajude-me, nosso serviço XYZ está indisponível!
— O que você vê ao executar kubectl describe ingress ...?

Ou algo semelhante para CRD:

— Estou com algum problema com o serviço de autenticação...
— O que a equipe retorna quando utiliza kubectl describe platformcredentialsset ...?

Esse tipo de comunicação geralmente se resume a inserir várias variações do comando kubectl para tentar identificar o problema. Como resultado, ambas as partes da conversa são forçadas a ficar alternando entre o terminal e o chat web, além de presenciar situações diferentes.

Portanto, gostaria que o frontend web do Kubernetes permitisse o seguinte:

  • que os usuários pudessem trocar links e visualizar a mesma coisa;
  • ajudasse a evitar erros humanos no suporte: por exemplo, entrar no cluster errado no terminal, erros de digitação nos comandos da CLI, etc.;
  • permitisse gerar views personalizadas para enviar a colegas, ou seja, adicionar colunas de rótulos, exibir múltiplos tipos de recursos em uma única página;
  • idealmente, essa ferramenta web deveria permitir criar links "profundos" para seções específicas do YAML (por exemplo, indicar um parâmetro errado que está causando falhas).

Resposta a incidentes e análise

A reação a incidentes na infraestrutura requer consciência situacional, capacidade de avaliar impactos e a busca por padrões em clusters. Alguns exemplos da vida real:

  • um serviço de produção crítico está enfrentando problemas e você precisa encontrar todos os recursos Kubernetes pelo nome em todos os clusters, para solucionar as falhas;
  • os nós começam a falhar durante a escalabilidade, e você precisa encontrar todos os pods com o status 'Pending' em todos os clusters, para avaliar a extensão do problema;
  • usuários individuais relatam um problema com um DaemonSet implantado em todos os clusters, e é necessário descobrir se o problema é de caráter abrangente..

Minha solução padrão nesses casos é algo como for i in $clusters; do kubectl ...; done. É evidente que pode-se desenvolver uma ferramenta que forneça capacidades semelhantes.

As interfaces web existentes do Kubernetes

O mundo Open Source de interfaces web para Kubernetes não é muito grande*, então eu tentei coletar informações adicionais através de Twitter:

Anúncio da interface web Kubernetes Web View (e uma breve revisão de outras UIs web para Kubernetes)

* Minha explicação para o número limitado de interfaces web para Kubernetes: serviços em nuvem e fornecedores de Kubernetes geralmente oferecem seus próprios front-ends, portanto, o mercado para 'boas' interfaces Kubernetes gratuitas é relativamente pequeno.

Com um tweet eu fiquei sabendo de K8Dash, Kubernator e Octant. Vamos dar uma olhada neles e em outras soluções Open Source existentes, tentando entender o que eles representam.

K8Dash

"K8Dash é a maneira mais simples de gerenciar um cluster Kubernetes."

Anúncio da interface web Kubernetes Web View (e uma breve revisão de outras UIs web para Kubernetes)

K8Dash parece bom e tem um desempenho rápido, mas possui várias desvantagens para os cenários de uso mencionados:

  • Funciona somente dentro de um único cluster.
  • Classificação e filtragem são possíveis, mas não têm links permanentes.
  • Falta suporte a Custom Resource Definitions (CRDs).

Kubernator

"Kubernator é uma interface alternativa para Kubernetes. Ao contrário do painel de alto nível do Kubernetes Dashboard, ele proporciona controle de baixo nível e uma excelente visão de todos os objetos no cluster, permitindo a criação de novos, edição deles e resolução de conflitos. Sendo uma aplicação totalmente cliente (como kubectl), não requer backend além do próprio servidor API do Kubernetes, e também considera as regras de acesso ao cluster."

Anúncio da interface web Kubernetes Web View (e uma breve revisão de outras UIs web para Kubernetes)

É uma descrição bastante precisa do Kubernator.Infelizmente, ele carece de algumas funcionalidades:

  • Gerencia somente um cluster.
  • Não há modo de visualização em lista (ou seja, não é possível exibir todos os pods com status "Pending").

Kubernetes Dashboard

"O Kubernetes Dashboard é uma interface web universal para clusters Kubernetes. Ele permite aos usuários gerenciar aplicativos em execução no cluster e solucionar problemas, assim como gerenciar o próprio cluster."

Anúncio da interface web Kubernetes Web View (e uma breve revisão de outras UIs web para Kubernetes)

Infelizmente, Kubernetes Dashboard isso não ajuda muito nas minhas atividades de suporte e resposta a incidentes, porque ele:

  • não possui links permanentes, por exemplo, quando filtro recursos ou mudo a ordem de classificação;
  • não há uma forma fácil de filtrar por status — por exemplo, ver todos os pods com status "Pending";
  • suporta apenas um cluster;
  • não suporta CRD (essa função está em desenvolvimento);
  • não há colunas personalizadas (por exemplo, colunas com rótulos como kubectl -L).

Kubernetes Operational View (kube-ops-view)

"Uma painel de monitoramento para espaços de clusters K8s."

Anúncio da interface web Kubernetes Web View (e uma breve revisão de outras UIs web para Kubernetes)

Na Kubernetes Operational View tem uma abordagem completamente diferente: esta ferramenta apenas exibe os nós do cluster e os pods usando WebGL, sem detalhes textuais dos objetos. É excelente para uma visão operacional do estado do cluster ("os pods estão caindo?")*, mas não é adequada para os casos de uso descritos acima em suporte e resposta a incidentes.

* Nota do tradutor.: Nesse sentido, você também pode se interessar pelo nosso plugin grafana-statusmap, que discutimos mais detalhadamente em este artigo.

Kubernetes Resource Report (kube-resource-report)

"Coletar informações sobre as solicitações de recursos dos pods e do cluster Kubernetes, compará-las com o uso de recursos e gerar HTML estático."

Anúncio da interface web Kubernetes Web View (e uma breve revisão de outras UIs web para Kubernetes)

Kubernetes Resource Report gera relatórios HTML estáticos sobre o uso de recursos e a distribuição de custos por equipes/aplicativos em clusters. O relatório é em certa medida útil para suporte e resposta a incidentes, pois permite encontrar mais rapidamente o cluster onde o aplicativo está implantado.

Nota do tradutor.: Na visualização das informações sobre a distribuição de recursos e seus custos, pode também ser útil o serviço e ferramenta Kubecost, cuja visão geral nós publicamos recentemente.

Octant

"Uma plataforma web extensível para desenvolvedores, destinada a proporcionar uma melhor compreensão da complexidade dos clusters Kubernetes."

Anúncio da interface web Kubernetes Web View (e uma breve revisão de outras UIs web para Kubernetes)

Octant, criado no VMware, é um novo produto que conheci recentemente. Com ele, é fácil explorar o cluster na máquina local (inclusive com visualizações), no entanto, ele aborda a questão do suporte e resposta a incidentes apenas de forma limitada. Desvantagens do Octant:

  • Não há busca nos clusters.
  • Funciona apenas na máquina local (não é implantado no cluster).
  • Não é possível classificar/filtrar objetos (apenas o seletor de rótulos é suportado).
  • Não é possível definir colunas personalizadas.
  • Não é possível exibir a lista de objetos por namespaces.

Eu também tive problemas com a estabilidade do Octant em clusters Zalando: em alguns CRD, ele falhou..

Apresento o Kubernetes Web View

o 'kubectl para a web'.

Anúncio da interface web Kubernetes Web View (e uma breve revisão de outras UIs web para Kubernetes)

Depois de analisar as opções de interfaces disponíveis para Kubernetes, decidi criar uma nova: Visualização Web do Kubernetes. Afinal, eu só precisava de todo o poder kubectl na web, ou seja:

  • disponibilidade de todas as operações (somente leitura) nas quais os usuários preferem usar o kubectl;
  • todos os URLs devem ser permanentes e representar a página na forma original, para que os colegas possam compartilhá-los e usá-los em outras ferramentas;
  • suporte a todos os objetos Kubernetes, o que permitirá resolver problemas de qualquer tipo;
  • as listas de recursos devem ser baixáveis para trabalho posterior (em planilhas, ferramentas de CLI como grep) e armazenamento (por exemplo, para análises posteriores);
  • suporte à filtragem de recursos por rótulos (semelhante a kubectl get .. -l);
  • capacidade de criar listas combinadas de diferentes tipos de recursos (semelhante a kubectl get all) para obter uma visão operacional geral entre os colegas (por exemplo, durante a resposta a incidentes);
  • capacidade de adicionar 'deep links' personalizáveis e inteligentes a outras ferramentas, como painéis de monitoramento, registradores, repositórios de aplicativos, etc., para facilitar a busca/resolução de erros e a resposta a incidentes;
  • o frontend deve ser o mais simples possível (HTML limpo), para evitar problemas acidentais, como JavaScript travado;
  • suporte a múltiplos clusters para facilitar a interação durante consultorias remotas (por exemplo, para memorizar apenas uma URL);
  • sempre que possível, a análise situacional deve ser facilitada (por exemplo, com links para download de recursos em todos os clusters/namespaces);
  • recursos adicionais para a criação de links flexíveis e extração de informações textuais, por exemplo, para que se possa indicar a colegas uma seção específica na descrição do recurso (linha em YAML);
  • capacidade de ajuste às necessidades de um cliente específico, como permitir a criação de templates personalizados de exibição para CRD, suas próprias visualizações tabulares, alteração de estilos CSS;
  • ferramentas para estudo adicional no terminal (por exemplo, mostrando comandos completos kubectl, prontos para cópia);

Fora das tarefas abordadas no Kubernetes Web View (não objetivos) permaneceram:

  • abstração de objetos do Kubernetes;
  • gerenciamento de aplicativos (por exemplo, gerenciamento de deployments, charts do Helm, etc.);
  • operações de gravação (devem ser realizadas através de ferramentas seguras de CI/CD e/ou GitOps);
  • interface bonita (JavaScript, temas, etc.);
  • visualizações (veja kube-ops-view);
  • análise de custos (veja kube-resource-report).

Como o Kubernetes Web View ajuda na manutenção e resposta a incidentes?

Suporte

  • Todos os links são permanentes, facilitando a troca de informações com colegas.
  • É possível criar suas próprias visualizações, por exemplo, listar todos os Deployments e Pods com um determinado rótulo em dois clusters específicos (vários nomes de clusters e tipos de recursos podem ser definidos no link, separados por vírgulas).
  • É possível referenciar linhas específicas em um arquivo YAML de um objeto, apontando para potenciais problemas na especificação do objeto.

Anúncio da interface web Kubernetes Web View (e uma breve revisão de outras UIs web para Kubernetes)
Busca por clusters no Kubernetes Web View

Resposta a incidentes

  • Busca global (global search) permite pesquisar objetos em todos os clusters.
  • Visualizações em formato de lista podem exibir todos os objetos com um determinado estado/coluna em todos os clusters (por exemplo, precisamos encontrar todos os pods com o status "Pending").
  • Listas de objetos podem ser baixadas no formato de valores separados por tabulação (TSV) para análise posterior.
  • Links externos personalizáveis permitem alternar para painéis de monitoramento correspondentes e outras ferramentas.

Anúncio da interface web Kubernetes Web View (e uma breve revisão de outras UIs web para Kubernetes)
Kubernetes Web View: lista de pods com status "Pending" em todos os clusters

Se deseja experimentar o Kubernetes Web View, recomendo conferir documentação ou assistir à versão demo ao vivo.

Claro, a interface poderia ser melhor, mas enquanto isso, o Kubernetes Web View é uma ferramenta para "usuários avançados" que não têm medo de manipular os caminhos de URL manualmente, se necessário. Se você tiver comentários/adicionais/sugestões, por favor, entre em contato comigo no Twitter!

Este artigo é um breve relato sobre as premissas que levaram à criação do Kubernetes Web View. Outros artigos seguirão! (Nota do tradutor.: Eles devem ser esperados em o blog do autor.)

P.S. do tradutor

Confira também em nosso blog:

Fonte: habr.com

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster