
Ao ler materiais no Kubernetes, você provavelmente já se deparou com exemplos de vários comandos kubectl e configurações YAML complicadas repetidamente. Para as pessoas que são bem versadas em K8s, essa abordagem, sem dúvida, não causa nenhuma rejeição. Mas na era da onipresença das interfaces da web, ele não pode ser considerado amigável para os usuários comuns. Isso complica o processo de aprendizagem para iniciantes e atua como uma barreira para aqueles que não estão muito familiarizados com o Kubernetes.
Claro, existem várias GUIs para K8s, incluindo o Kubernetes Dashboard , que faz parte do próprio upstream do Kubernetes. (Tradução da nota: já falamos sobre muitas das soluções existentes nesta comparação .) No entanto, explorando toda a variedade de opções, não conseguimos encontrar uma solução que nos atendesse totalmente. Eu queria a interface:
- era 100% Open Source;
- apoiado ativamente pela comunidade;
- era universal no sentido de que não estava vinculado à distribuição do Kubernetes de um fornecedor específico;
- era modular e extensível;
- tinha uma aparência elegante e moderna;
- foi implementado em uma pilha familiar para nossos desenvolvedores (Go, JavaScript / TypeScript, React);
- era interativo (ou seja, não apenas coletava dados, mas também permitia certas ações com o cluster);
- modo multicluster compatível.
Apesar da escolha bastante rica, nenhuma das soluções que testamos atendeu a todos os critérios listados acima (ou poderia funcionar como uma boa base para a criação de uma nova solução). Portanto, de acordo com uma tradição consagrada pelo tempo, decidimos fazê-lo nós mesmos ...
Apresentando Farol
Hoje, estou orgulhoso de anunciar a ampla disponibilidade de uma nova interface para Kubernetes chamado Farol .
Headlamp é uma interface de usuário do Kubernetes versátil e extensível que atende aos critérios acima. Claro, sendo uma ideia do Kinvolk, é 100% Open Source. Esperamos que muitos membros da comunidade Kubernetes não apenas apreciem o Headlamp, mas também contribuam com o projeto.
Vamos dar uma olhada rápida em suas principais características.
UI extensível
Nós nos esforçamos para garantir que o farol seja adequado para o maior número possível de casos de uso. O público-alvo do projeto não são apenas novatos no Kubernetes, mas também administradores experientes e fornecedores de K8s com necessidades muito diferentes. Freqüentemente (especialmente para projetos de IU), uma variedade de casos de uso é implementada criando um grande número de bifurcações, cada uma mantida por sua própria equipe downstream. Mas manter os garfos atualizados é mais difícil quanto maiores forem as alterações neles.
O sistema de plugins resolve esse problema. É por isso que o Headlamp suporta plug-ins de IU fora da árvore. Eles são arquivos JavaScript que são carregados pelo backend do Headlamp e passados para o cliente, que os carrega dinamicamente.
Essa abordagem abre grandes oportunidades de inovação, contribuindo para o surgimento de muitos novos recursos. Por exemplo, é fácil criar um botão no bloco de detalhes do pod que redirecionará o usuário a um serviço que mostra o custo financeiro desse pod.
O mecanismo do plugin Headlamp abre grandes oportunidades para a comunidade. E estamos prontos para cooperar com todos que desejam participar do desenvolvimento de novos plugins para Headlamp, e para desenvolver o próprio mecanismo, adaptando-o para novos casos de uso.
Traceloop
Para demonstrar o poder do mecanismo de plug-ins (e da própria ferramenta), desenvolvemos o plug-in Headlamp para traceloop de gadget , incluído no projeto Inspektor Gadget (conjunto de ferramentas para aplicativos de depuração e inspeção no Kubernetes - ca. Perevi ..) .
Depois de instalar o Inspektor Gadget e habilitar o traceloop gadget, ele começa a gravar todas as chamadas do sistema do pod em um buffer circular. Esse buffer pode ser visualizado em tempo real enquanto o pod está funcionando. Em outras palavras, o traceloop mostra o que o pod está fazendo no momento. Além disso, os dados no buffer são salvos para os pods que saíram. Dessa forma, você pode determinar a causa da falha após ela ter ocorrido - uma espécie de "caixa preta" para aplicativos Kubernetes.

UI seletiva
O problema com muitas interfaces de usuário CRUD é que elas não sabem nada sobre a organização interna do controle de acesso. Por exemplo, a presença de botões para edição / exclusão pode confundir o usuário se ele não tiver permissão para modificar o recurso. O farol verifica as configurações de RBAC para Kubernetes e mostra apenas os controles para as ações que estão disponíveis para o usuário. Por exemplo, se o usuário não tiver o direito de editar o recurso, o botão “editar” não será mostrado.
Tudo isso tem um efeito extremamente benéfico na experiência do usuário: afinal, o operador vê imediatamente quais ações estão à sua disposição, levando em consideração os direitos vigentes. Isso é ótimo para situações em que permissões por tempo limitado são concedidas (como permissão temporária para excluir um recurso).

Botões disponíveis para ações com o pod quando o usuário tem direitos de edição / exclusão

Botões disponíveis quando o usuário não tem direitos de edição / exclusão
Design / Interface do usuário
Nosso objetivo era tornar o design do farol o mais lacônico e moderno possível, ao mesmo tempo em que seguia a IU "tradicional" do Kubernetes ou o estilo do painel. Por exemplo, estamos convencidos de que a familiar visualização tabular é ótima para o trabalho e esperamos que outros tipos de visualização (por exemplo, a representação de um cluster na forma de gráficos) possam ser implementados usando plug-ins.
O frontend é implementado no React com a biblioteca Material UI (é moderno, organizado e com suporte de uma grande comunidade de usuários). Além disso, ele está incluído na pilha tecnológica de nosso outro projeto - Nebraska (gerenciador de atualização para Flatcar Container Linux - aprox. Transl.)permitindo-nos compartilhar experiências e recursos e garantir uma IU consistente em todos os produtos.
Localmente ou em um cluster
A maioria das IUs do Kubernetes se enquadra em dois grupos: remoto (o back-end geralmente está em um cluster) como Kubernetes Dashboard ou local (o aplicativo é instalado no computador) como Octant do VMware.
Cada uma dessas abordagens tem suas próprias vantagens e desvantagens. Por exemplo, no caso de uma aplicação remota, é muito fácil compartilhar a URL com outros usuários e implementar seu login via OIDC. Ele está disponível “em qualquer lugar” e é fácil de manter atualizado. Ao contrário, no caso da versão desktop, não há necessidade de pensar no posicionamento da IU. Essa abordagem fornece melhor isolamento, mas cabe ao usuário manter o aplicativo atualizado.
Com o Headlamp, você não precisa mais escolher entre essas duas abordagens: ambas são compatíveis. O farol pode ser facilmente agrupado usando nossos arquivos YAML (e personalizando-os) ou instalado localmente em uma máquina Linux, macOS ou Windows.
Modo multicluster
A maioria das implantações do Kubernetes consiste em vários clusters (pelo menos para separar os ambientes de desenvolvimento e produção). O farol fornece acesso a todos esses clusters: o método específico depende se você o executa local ou remotamente.
Quando executado localmente, o Headlamp lerá o kubeconfig e exibirá os contextos disponíveis, permitindo que o usuário os altere conforme necessário, simplesmente definindo a variável de ambiente local para o cluster apropriado.
O modo multicluster é muito simples: um proxy é criado para cada cluster configurado e as solicitações da IU (com chamadas para a API Kubernetes) são redirecionadas para o endereço do cluster desejado. O projeto K8dash deve ser mencionado aqui, módulos para gerenciamento de solicitações / API que usamos ao desenvolver o Headlamp.
Essa abordagem também pode ser combinada com a execução no cluster, no entanto, para isso, o cluster no qual o aplicativo está sendo executado precisará de acesso à API para os outros clusters especificados.

Conexão Lokomotive Kubernetes
Como você provavelmente sabe, também temos nossa própria distribuição do Kubernetes - Lokomotive . Usamos Farol na Lokomotive para o fim a que se destina, mas queremos enfatizar que se trata de projetos independentes e independentes. Não vamos vincular o Headlamp a nenhum provedor de serviços K8s e estamos projetando-o para funcionar em qualquer cluster Kubernetes típico.
Experimente o farol no seu cluster!
É muito fácil fazer isso: implante a implantação em seu cluster e vá para o endereço correspondente no navegador, ou baixe e instale a versão desktop para Windows, macOS ou Linux. Os detalhes estão na documentação .
Headlamp é uma ferramenta de código aberto totalmente liberada sob a licença Apache 2.0. Conforme mencionado acima, o tornamos independente dos provedores de serviços Kubernetes e versátil em termos de uso (cobrindo um grande número de casos de uso). Hoje convidamos a todos para participarem do desenvolvimento do projeto! Para fazer isso, leia as diretrizes relevantes .
Esperamos que você goste Farol!

PS do tradutor
Leia também em nosso blog: