O que é arquitetura do Kubernetes? Importância + Melhores Práticas
Publicados: 2023-06-12O Kubernetes experimentou um tremendo crescimento em sua adoção desde 2014. Inspirado pela solução de gerenciamento de cluster interno do Google, Borg, o Kubernetes simplifica a implantação e a administração de seus aplicativos. Como todos os softwares de orquestração de contêineres , o Kubernetes está se tornando popular entre os profissionais de TI porque é seguro e direto. No entanto, como acontece com todas as ferramentas, reconhecer como sua arquitetura ajuda você a usá-la com mais eficiência.
Vamos aprender sobre os fundamentos da arquitetura do Kubernetes, começando com o que é, o que faz e por que é importante.
O que é a arquitetura do Kubernetes?
A arquitetura Kubernetes ou Kubernetes é uma plataforma de código aberto para gerenciamento e implantação de contêineres. Ele fornece descoberta de serviço, balanceamento de carga, mecanismos regenerativos, orquestração de contêineres, tempo de execução de contêineres e orquestração de infraestrutura focada em contêineres.
O Google criou o sistema adaptável de gerenciamento de contêineres Kubernetes, que lida com aplicativos em contêineres em várias configurações. Ele ajuda a automatizar a implantação de aplicativos em contêineres, fazer alterações e aumentar e diminuir a escala desses aplicativos.
No entanto, o Kubernetes não é apenas um orquestrador de contêineres . Da mesma forma, os aplicativos de desktop operam no MacOS, Windows ou Linux; é o sistema operacional para aplicativos nativos de nuvem porque serve como plataforma de nuvem para esses programas.
O que é um contêiner?
Os contêineres são uma abordagem padrão para empacotar aplicativos e suas dependências para que os aplicativos possam ser executados facilmente em ambientes de tempo de execução. Usando contêineres, você pode tomar medidas essenciais para reduzir o tempo de implantação e aumentar a confiabilidade do aplicativo empacotando o código, as dependências e as configurações de um aplicativo em um único bloco de construção fácil de usar.
O número de contêineres em aplicativos corporativos pode se tornar incontrolável. Para aproveitar ao máximo seus contêineres, o Kubernetes ajuda você a orquestrá-los.
Para que serve o Kubernetes?
O Kubernetes é uma plataforma incrivelmente adaptável e expansível para executar cargas de trabalho de contêiner. A plataforma Kubernetes não apenas fornece o ambiente para criar aplicativos nativos da nuvem, mas também ajuda a gerenciar e automatizar suas implantações.
O objetivo é aliviar os operadores e desenvolvedores de aplicativos do esforço de coordenar a infraestrutura subjacente de computação, rede e armazenamento, permitindo que eles se concentrem apenas em processos centrados em contêineres para operação de autoatendimento. Os desenvolvedores também podem criar procedimentos especializados de implantação e gerenciamento, juntamente com níveis mais altos de automação para aplicativos compostos por vários contêineres.
O Kubernetes pode lidar com todas as cargas de trabalho de back-end significativas, incluindo aplicativos monolíticos, programas sem estado ou com estado, microsserviços, serviços, trabalhos em lote e tudo mais.
O Kubernetes geralmente é escolhido pelos seguintes benefícios.
- A infraestrutura do Kubernetes é superior à de muitas tecnologias DevOps.
- O Kubernetes divide os contêineres em componentes menores para gerenciamento preciso.
- O Kubernetes implanta atualizações de software de forma rápida e regular.
- O Kubernetes fornece uma plataforma para desenvolver aplicativos nativos da nuvem.
Arquitetura e componentes do Kubernetes
A arquitetura básica do Kubernetes compreende muitos componentes, também conhecidos como componentes K8s, portanto, antes de começarmos, é importante lembrar os seguintes conceitos.
- A arquitetura básica do Kubernetes consiste em um plano de controle que gerencia nós e nós de trabalho que executam aplicativos em contêineres.
- Enquanto o plano de controle gerencia a execução e a comunicação, os nós de trabalho realmente executam esses contêineres.
- Um cluster Kubernetes é um grupo de nós e cada cluster tem pelo menos um nó de trabalho.
Diagrama de arquitetura do Kubernetes
Plano de controle do Kubernetes
O plano de controle é o centro do sistema nervoso central do design do cluster Kubernetes, que abriga os componentes de controle do cluster. Ele também registra a configuração e o status de todos os objetos do Kubernetes no cluster.
O plano de controle do Kubernetes mantém comunicação regular com as unidades de computação para garantir que o cluster opere conforme o esperado. Os controladores supervisionam os estados dos objetos e fazem com que o estado físico, observado ou o status atual dos objetos do sistema se ajustem ao estado ou especificação desejados em resposta às alterações do cluster.
O plano de controle é composto de vários elementos essenciais, incluindo o servidor de interface de programação de aplicativos (API), o agendador, o gerenciador do controlador e o etcd. Esses componentes fundamentais do Kubernetes garantem que os contêineres sejam executados com os recursos apropriados. Todos esses componentes podem funcionar em um único nó primário, mas muitas empresas os duplicam em vários nós para alta disponibilidade.
1. Servidor de API do Kubernetes
O servidor da API do Kubernetes é o front-end do plano de controle do Kubernetes. Ele facilita atualizações, dimensionamento, configuração de dados e outros tipos de orquestração de ciclo de vida, oferecendo gerenciamento de API para vários aplicativos. Como o servidor da API é o gateway, os usuários devem poder acessá-lo de fora do cluster. Nesse caso, o servidor de API é um túnel para pods, serviços e nós. Os usuários são autenticados por meio do servidor API.
2. Agendador do Kubernetes
O kube-scheduler registra estatísticas de utilização de recursos para cada nó de computação, avalia se um cluster está íntegro e decide se e onde novos contêineres devem ser implantados. O agendador avalia a integridade geral do cluster e as demandas de recursos do pod, como unidade central de processamento (CPU) ou memória. Em seguida, ele escolhe um nó de computação apropriado e agenda a tarefa, pod ou serviço, considerando restrições ou garantias de recursos, localidade de dados, requisitos de qualidade de serviço, antiafinidade ou padrões de afinidade.
3. Gerenciador do controlador Kubernetes
Em um ambiente Kubernetes, vários controladores controlam os estados de endpoints (pods e serviços), tokens e contas de serviço (namespaces), nós e replicação (escalonamento automático). O gerenciador do controlador kube, geralmente conhecido como gerenciador do controlador de nuvem ou apenas controlador, é um daemon que gerencia o cluster do Kubernetes executando várias tarefas do controlador.
O controlador monitora os objetos no cluster enquanto executa os loops de controle do núcleo do Kubernetes. Ele os monitora em busca de seus estados desejados e existentes por meio do servidor API. Se os estados atual e pretendido dos objetos gerenciados não corresponderem, o controlador executará uma ação corretiva para aproximar o status do objeto do estado desejado. O controlador Kubernetes também lida com tarefas essenciais do ciclo de vida.
4. etcd
O etcd é um banco de dados de armazenamento de chave-valor distribuído e tolerante a falhas que mantém os dados de configuração e as informações de status do cluster. Embora o etcd possa ser configurado independentemente, geralmente serve como parte do plano de controle do Kubernetes.
O algoritmo de consenso do raft é usado para manter o estado do cluster em etcd. Isso ajuda a lidar com um problema típico no contexto de máquinas de estado replicadas e exige que muitos servidores concordem com os valores. Raft estabelece três papéis: líder, candidato e seguidor, e cria consenso votando em um líder.
Como resultado, o etcd é a única fonte de verdade (SSOT) para todos os componentes de cluster do Kubernetes, respondendo a consultas do plano de controle e coletando informações diferentes sobre o estado de contêineres, nós e pods. O etcd também é usado para armazenar informações de configuração como ConfigMaps, sub-redes, segredos e dados de estado do cluster.
Nós de trabalho do Kubernetes
Nós de trabalho são sistemas que executam contêineres gerenciados pelo plano de controle. O kubelet – o principal controlador do Kubernetes – é executado em cada nó como um agente para interagir com o plano de controle. Além disso, cada nó executa um mecanismo de tempo de execução de contêiner, como Docker ou rkt. Outros componentes para monitoramento, criação de log, descoberta de serviço e extras opcionais também são executados no nó.
Alguns dos principais componentes da arquitetura de cluster do Kubernetes são os seguintes.
Nós
Um cluster Kubernetes deve ter pelo menos um nó de computação, mas pode ter muito mais, dependendo dos requisitos de capacidade. Como os pods são coordenados e programados para execução em nós, são necessários nós adicionais para aumentar a capacidade do cluster. Os nós fazem o trabalho de um cluster Kubernetes. Eles vinculam aplicativos, bem como recursos de rede, computação e armazenamento.
Os nós nos datacenters podem ser máquinas virtuais (VMs) nativas da nuvem ou servidores bare metal.
Mecanismo de tempo de execução do contêiner
Cada nó de computação usa um mecanismo de tempo de execução do contêiner para operar e gerenciar os ciclos de vida do contêiner. O Kubernetes oferece suporte a tempos de execução compatíveis com a iniciativa de contêiner aberto, como Docker, CRI-O e rkt.
Serviço Kubelet
Um kubelet é incluído em cada nó de computação. É um agente que se comunica com o plano de controle para garantir que os contêineres de um pod estejam operando. Quando o plano de controle exige que uma ação específica seja executada em um nó, o kubelet obtém as especificações do pod por meio do servidor API e opera. Em seguida, ele garante que os contêineres relacionados estejam em boas condições de funcionamento.
Serviço de proxy do Kube
Cada nó de computação tem um proxy de rede conhecido como kube-proxy, que auxilia os serviços de rede do Kubernetes. Para gerenciar conexões de rede dentro e fora do cluster, o kube-proxy encaminha o tráfego ou depende da camada de filtragem de pacotes do sistema operacional.
O processo kube-proxy opera em cada nó para garantir que os serviços estejam disponíveis para outras partes e para lidar com sub-redes de host específicas. Ele atua como um proxy de rede e balanceador de carga de serviço em seu nó, manipulando o roteamento de rede para o tráfego de protocolo de datagrama de usuário (UDP) e protocolo de controle de transmissão (TCP). O kube-proxy, na realidade, roteia o tráfego para todos os terminais de serviço.
cápsulas
Até agora, cobrimos ideias internas e relacionadas à infraestrutura. Os pods, no entanto, são cruciais para o Kubernetes, pois são os principais componentes externos com os quais os desenvolvedores interagem.
Um pod é a unidade mais simples no modelo de contêiner do Kubernetes, representando uma única instância de um aplicativo. Cada pod compreende um contêiner ou vários contêineres estreitamente relacionados que se encaixam logicamente e executam as regras que governam a função do contêiner.
Os pods têm uma vida útil finita e acabam morrendo após serem atualizados ou reduzidos. Embora efêmeros, eles executam aplicativos com estado conectando-se ao armazenamento persistente.
Os pods também podem ser dimensionados horizontalmente, o que significa que podem aumentar ou diminuir o número de instâncias em operação. Eles também são capazes de fazer atualizações contínuas e implantações canárias.
Os pods operam em nós juntos, portanto, eles compartilham conteúdo e armazenamento e podem se comunicar com outros pods por meio do localhost. Os contêineres podem abranger vários computadores, assim como os pods. Um único nó pode operar vários pods, cada um coletando vários contêineres.
O pod é a unidade central de gerenciamento no ecossistema Kubernetes, servindo como uma fronteira lógica para contêineres que compartilham recursos e contexto. O método de agrupamento de pods, que permite que vários processos dependentes operem simultaneamente, atenua as diferenças entre virtualização e conteinerização.
Tipos de cápsulas
Vários tipos de pods desempenham um papel vital no modelo de contêiner do Kubernetes.
- O tipo padrão, ReplicaSet , garante que o número especificado de pods esteja operacional.
- A implantação é um método declarativo de gerenciamento de pods baseados em ReplicaSets. Isso inclui mecanismos de reversão e atualização contínua.
- Daemonset garante que cada nó execute uma instância de um pod. Serviços de cluster, como monitoramento de integridade e encaminhamento de log, são usados.
- StatefulSet foi projetado para gerenciar pods que devem suportar ou preservar o estado.
- Job e CronJob executam trabalhos únicos ou agendados predefinidos.
Outros componentes da arquitetura do Kubernetes
O Kubernetes mantém os contêineres de um aplicativo, mas também pode gerenciar os dados do aplicativo associado em um cluster. Os usuários do Kubernetes podem solicitar recursos de armazenamento sem entender a infraestrutura de armazenamento subjacente.
Um volume Kubernetes é um diretório onde um pod pode acessar e armazenar dados. O tipo de volume determina o conteúdo do volume, como ele surgiu e a mídia que o suporta. Volumes persistentes (PVs) são recursos de armazenamento específicos do cluster geralmente fornecidos por um administrador. Os PVs também podem sobreviver a um determinado pod.
O Kubernetes depende de imagens de contêiner , que são armazenadas em um registro de contêiner . Pode ser um registro de terceiros ou criado pela organização.
Namespaces são clusters virtuais que existem dentro de um cluster físico. Eles são projetados para criar ambientes de trabalho independentes para vários usuários e equipes. Eles também evitam que as equipes interfiram umas nas outras, restringindo os objetos do Kubernetes que podem acessar. Os contêineres do Kubernetes em um pod podem se comunicar com outros pods por meio de localhost e compartilhar endereços IP e namespaces de rede.
Kubernetes x Docker Swarm
Tanto o Kubernetes quanto o Docker são plataformas que fornecem gerenciamento de contêineres e dimensionamento de aplicativos. O Kubernetes fornece uma solução eficaz de gerenciamento de contêineres, ideal para aplicativos de alta demanda com uma configuração complicada. Por outro lado, o Docker Swarm foi criado para oferecer simplicidade, o que o torna uma excelente opção para aplicativos essenciais que são rápidos de implantar e manter.
- O Docker Swarm é mais fácil de implantar e configurar do que o Kubernetes.
- O Kubernetes fornece escalabilidade completa com base no tráfego, enquanto o Docker Swarm prioriza o dimensionamento rápido.
- O balanceamento de carga automático está disponível no Docker Swarm, mas não no Kubernetes. No entanto, soluções de terceiros podem vincular um balanceador de carga externo ao Kubernetes.
As demandas de sua empresa determinam a ferramenta certa.
Soluções de orquestração de contêineres
Os sistemas de orquestração de contêiner permitem que os desenvolvedores iniciem vários contêineres para implantação de aplicativos. Os gerentes de TI podem usar essas plataformas para automatizar a administração de instâncias, fornecimento de hosts e conexão de contêineres.
A seguir estão algumas das melhores ferramentas de orquestração de contêineres que facilitam a implantação, identificam implementações de contêiner com falha e gerenciam configurações de aplicativos.
Os 5 principais softwares de orquestração de contêineres:
- Google Cloud Run
- Amazon Elastic Container Service (Amazon ECS)
- Mirantis Kubernetes Engine
- Google Kubernetes Engine
- Amazon Elastic Kubernetes Service (Amazon EKS)
*As cinco principais soluções de orquestração de contêineres do relatório de grade da primavera de 2023 da G2.
Práticas recomendadas de arquitetura e princípios de design do Kubernetes
É fundamental implementar uma estratégia de plataforma que considere segurança, governança, monitoramento, armazenamento, rede, gerenciamento do ciclo de vida do contêiner e orquestração. No entanto, o Kubernetes é amplamente desafiador para adotar e dimensionar, especialmente para empresas que gerenciam infraestrutura de nuvem local e pública. Para simplificar, discutimos abaixo algumas práticas recomendadas que devem ser consideradas ao arquitetar clusters kubernetes.
- Certifique-se de sempre ter a versão mais recente do Kubernetes.
- Investir em treinamento para as equipes de desenvolvimento e operação.
- Estabeleça governança em toda a empresa . Certifique-se de que suas ferramentas e provedores sejam compatíveis com a orquestração do Kubernetes.
- Aumente a segurança incluindo técnicas de digitalização de imagens em seu fluxo de trabalho de integração e entrega contínuas (CI/CD). O código-fonte aberto baixado de um repositório GitHub sempre deve ser tratado com cautela.
- Implemente o controle de acesso baseado em função (RBAC) em todo o cluster. Modelos baseados em privilégio mínimo e confiança zero devem ser a norma.
- Utilize apenas usuários não raiz e torne o sistema de arquivos somente leitura para proteger ainda mais os contêineres.
- Evite valores padrão, pois declarações simples são menos propensas a erros e comunicam melhor o propósito.
- Ao utilizar imagens básicas do Docker Hub, tenha cuidado porque elas podem incluir malware ou estar cheias de códigos desnecessários. Comece com um código enxuto e limpo e vá subindo. Imagens menores crescem mais rapidamente, ocupam menos espaço de armazenamento e extraem imagens mais rapidamente.
- Mantenha os recipientes o mais simples possível. Um processo por contêiner permite que o orquestrador relate se esse processo está íntegro ou não.
- Bater em caso de dúvida. Não reinicie em caso de falha, pois o Kubernetes reiniciará um contêiner com falha.
- Seja descritivo . Rótulos descritivos beneficiam desenvolvedores atuais e futuros.
- Quando se trata de microsserviços, não seja muito específico . Cada função dentro de um componente de código lógico não deve ser seu microsserviço.
- Sempre que possível, automatize . Você pode ignorar completamente as implantações manuais do Kubernetes automatizando seu fluxo de trabalho de CI/CD.
- Use os testes de vivacidade e prontidão para auxiliar no gerenciamento dos ciclos de vida do pod ; caso contrário, os pods podem ser encerrados ao inicializar ou receber solicitações do usuário antes de estarem prontos.
Dica: explore as soluções de gerenciamento de contêineres para melhores práticas de implantação.
Considere seus contêineres
O Kubernetes, o software de gerenciamento centrado em contêineres, tornou-se o padrão de fato para implantar e operar aplicativos em contêineres devido ao amplo uso de contêineres nas empresas. A arquitetura do Kubernetes é simples e intuitiva. Embora proporcione aos gerentes de TI maior controle sobre sua infraestrutura e desempenho de aplicativos, há muito a aprender para aproveitar ao máximo a tecnologia.
Ficou curioso para explorar mais o assunto? Saiba mais sobre a crescente relevância da conteinerização na computação em nuvem!