Header Ads

Como funciona o Kubernetes?

Kubernetes é uma plataforma de orquestração de contêineres que automatiza a implantação e o escalonamento de cargas de trabalho em contêineres. O Kubernetes ganhou a reputação de ser complexo e pesado. Veja como componentes individuais se combinam para formar um cluster.

Definindo o cluster

Uma única instalação do Kubernetes é chamada de “ cluster. ” Dentro do cluster, há um ou mais nós disponíveis para executar seus contêineres. Um Nó é uma representação de uma máquina física que foi unida ao cluster.

O Kubernetes também tem uma superfície de plano de controle. Isso funciona independentemente dos nós de trabalho. O plano de controle é o que você interage. Ele expõe a API Kubernetes e é responsável por gerenciar os nós de trabalho. Normalmente, você não manipula diretamente os nós e suas cargas de trabalho.

A instrução do Kubernetes para criar uma carga de trabalho começa com uma chamada de API para o plano de controle. O plano de controle determina os nós para os quais seus contêineres devem ser programados. Não importa quantos nós você tenha, sempre haverá um plano de controle dentro do seu cluster.

Função do plano de controle

De forma mais ampla, o Control Plane é responsável pelo gerenciamento global de seu cluster. Qualquer operação que possa afetar vários nós ou a infraestrutura do cluster será gerenciada pelo plano de controle.

O plano de controle consiste em vários componentes independentes. Juntos, eles são responsáveis ​​por gerenciar a configuração do cluster, executar e dimensionar cargas de trabalho e reagir a eventos dentro do cluster (como um Node ficando sem memória).

O núcleo do plano de controle é o kube-apiserver. Este componente fornece a API HTTP Kubernetes que você consome por meio de ferramentas como Kubectl e Helm. A API é como você interage com seu cluster. Ele também é usado por outros componentes do cluster, como processos de trabalho do Node, para retransmitir informações para o plano de controle.

Os recursos em seu cluster — como pods, serviços e trabalhos — são gerenciados por controladores “ individuais ” Os controladores monitoram seus recursos quanto à integridade e prontidão. Eles também identificam as alterações que foram solicitadas e, em seguida, tomam medidas para migrar do estado atual para o novo estado desejado.

Os controladores são gerenciados em conjunto pelo kube-controller-manager. Este componente do plano de controle inicia e executa os controladores individuais. Este processo estará sempre em execução. Caso parasse, as alterações feitas por meio do servidor de API não seriam identificadas e nenhuma mudança de estado ocorreria.

Outro componente crítico do plano de controle é o programador de kube. O planejador é responsável por atribuir pods a nós. A programação geralmente requer a consideração de vários parâmetros diferentes, como o uso atual de recursos de cada nó e quaisquer restrições que você aplicou em seu manifesto.

O agendador avaliará a adequação de cada nó e, em seguida, delegará o pod para ser executado no nó mais apropriado. Se a disponibilidade do nó for alterada ou mais réplicas de um pod forem solicitadas, o programador tomará medidas para reprogramar a carga de trabalho de acordo.

O plano de controle inteiro geralmente é executado em um único nó dentro do cluster. É tecnicamente possível estender o plano de controle em vários nós. Isso ajuda a maximizar sua disponibilidade.

Normalmente, a perda do plano de controle deixa você incapaz de gerenciar seu cluster, pois a API e as funções de programação ficam offline. Os pods nos nós de trabalho continuarão em execução, embora — eles &’ periodicamente tentem se reconectar ao plano de controle.

Comunicação entre os nós e o plano de controle

O Kubernetes mantém um canal de comunicação bidirecional entre os nós e o plano de controle.

A comunicação é necessária para que o plano de controle possa instruir os nós a criar novos contêineres. Na direção oposta, os nós precisam alimentar dados sobre sua disponibilidade (como estatísticas de uso de recursos) de volta para o plano de controle. Isso garante que o Kubernetes possa tomar decisões informadas ao programar contêineres.

Todos os nós de trabalho executam uma instância do kubelet. Este é um utilitário do agente responsável por manter a comunicação com o plano de controle do Kubernetes. O Kubelet também monitora continuamente os contêineres que o Node está executando. Ele notificará o plano de controle se um contêiner cair em um estado insalubre.

Quando um nó precisa enviar dados para o plano de controle, o Kubelet se conecta ao servidor API do plano de controle. Ele usa a mesma interface HTTPS à qual você se conecta por meio de ferramentas como kubectl. O Kubelet é pré-configurado com credenciais que permitem a autenticação no Kubernetes.

O tráfego do plano de controle para os nós é novamente tratado com o kubelet. O Kubelet expõe seu próprio endpoint HTTPS que o Control Plane pode acessar. Este endpoint aceita novos manifestos de contêiner, que o kubelet usa para ajustar os contêineres em execução.

O que mais os nós executam?

O Kubelet não é o único binário que um nó do Kubernetes deve executar. Você também encontrará uma instância do kube-proxy em cada nó. Ele é responsável por configurar o sistema de rede do Node para atender aos requisitos de suas cargas de trabalho de contêiner.

O Kubernetes tem o conceito de “ serviços ” que expõe vários pods como uma única identidade de rede. É o kube-proxy que converte as definições de serviço em regras de rede que fornecem o acesso que você solicitou.

kube-proxy configura a infraestrutura de rede do sistema operacional para expor os serviços criados pelo kubelet. O encaminhamento de tráfego é controlado pela camada de filtragem de pacotes no nível do sistema operacional ou pelo próprio kube-proxy.

Além do kubelet e do kube-proxy, os Nodes também precisam ter um tempo de execução do contêiner disponível. O tempo de execução do contêiner é responsável por extrair imagens e realmente executar seus contêineres. O Kubernetes oferece suporte a qualquer tempo de execução que implemente sua especificação de interface de tempo de execução do contêiner. Os exemplos incluem containerd e CRI-O.

Conclusão

O Kubernetes envolve muita terminologia. Dividir os clusters em suas partes constituintes pode ajudá-lo a avaliar como os componentes individuais se interligam.

O plano de controle fica acima de todos os nós e é responsável por gerenciar as operações do cluster. Os nós são melhor visualizados como iguais diretamente abaixo do plano de controle. Há uma comunicação contínua de ida e volta entre os nós e o plano de controle. Você, como usuário, só interage com o plano de controle por meio do servidor API.

O plano de controle é, portanto, o centro do seu cluster. Normalmente, você não se envolve diretamente com os nós. Em vez disso, você envia instruções para o Plano de Controle, que cria programações apropriadas para atender a sua solicitação. As cargas de trabalho só são agendadas para nós quando o plano de controle envia um manifesto de contêiner para uma das instâncias kubelet disponíveis.

Quando um Node recebe um novo manifesto, ele usa o tempo de execução do contêiner para obter a imagem apropriada e iniciar uma nova instância do contêiner. O kube-proxy irá então modificar a configuração de rede para configurar serviços e tornar sua carga de trabalho acessível. O Kubelet retransmite os dados sobre a integridade do Node de volta para o Kubernetes, permitindo que ele tome medidas para reagendar os pods se os recursos do Node forem limitados.

Nenhum comentário