Entendendo kubernetes (Conceitos)

Entendendo kubernetes (Conceitos)

Kubernetes é uma ferramenta open source (palavrinha mágica para o pessoal de FinOps) usada para gerenciar containers. Assim, é possível garantir alta disponibilidade dos serviços, escalar automaticamente conforme o aumento da demanda da aplicação e simplificar o processo de recuperação de dados, permitindo rollback para o último backup salvo caso haja necessidade.

Entendendo um pouco a sua estrutura, temos:

Pod

É a menor unidade do kubernetes. Contém o que é necessário para o funcionamento da aplicação (código, bibliotecas, configurações...). Quando a aplicação precisa lidar com mais tráfego, podemos fazer o que chamamos de scaling: criamos vários pods para que eles suportem a execução da aplicação (scale up), bem como os destruímos quando a demanda diminui (scale down).

Cada pod possui seu próprio endereço IP. Então, quando os pods são destruídos ou até mesmo reiniciados, seus IPs mudam, o que é um problema para manter a comunicação entre eles ou com solicitações externas. Por esse motivo, usamos outros componentes do kubernetes que são...

Service e Ingress

O Service é como um IP permanente que pode ser atribuído a um pod. Então, mesmo que o pod seja destruído ou reiniciado, o Service continua existindo. Existem dois tipos de Services:

  1. External Service: Garante que a aplicação seja acessível a usuários externos através do browser. Quando um usuário tentar acessar a aplicação pelo navegador, ele é direcionado para o local correto dentro do Kubernetes, onde a aplicação está rodando.
  2. Internal Service: Conecta partes da aplicação entre si que estão em pods diferentes, permitindo que o serviço funcione na íntegra.

Já o Ingress "maqueia" a URL usada para acessar a aplicação. Normalmente, o formato de uma URL possui o protocolo de segurança, o IP e a porta. Configurando o Ingress, é possível criar um formato de URL mais amigável para o usuário, exibindo a URL como a conhecemos: "www.aplicacao.com".

ConfigMap e Secret

O ConfigMap é como um "atalho" para ajustes externos na aplicação. Sem ele, a alteração precisaria ser feita diretamente no código da aplicação, que teria de ser salva num repositório e a nova imagem atualizada no pod. Esse processo todo poderia ser bem trabalhoso.

O Secret tem a mesma finalidade do ConfigMap, mas voltado para informações externas sensíveis, como credenciais por exemplo. Por esse motivo, ele é codificado em Base64.

A conexão entre eles e os pods pode ser feita através das variáveis de ambiente (environment variables) ou properties files.

Volumes

Não são somente os IPs que são perdidos quando o pod reinicia. Tudo o que foi feito será apagado quando o pod reiniciar. Por isso o kubernetes usa uma outra componente chamada Volume, que nada mais é do que um espaço no hardware, que pode ser na máquina local ou remoto, onde todo o progresso pode ser salvo.

Deployment and Stateful Set

Para evitar a indisponibilidade dos serviços, especialmente se um pod que contém a aplicação cair, é importantíssimo pensar na replicação. Assim, caso um pod esteja reiniciando, outro pod com a mesma aplicação pode assumir rapidamente e o usuário final não será afetado.

Como dito anteriormente, o Service permite que os pods conversem entre si, mantendo um IP permanente, mas também pode atuar como um load balancer durante a replicação, distribui as solicitações entre os pods para que nenhum deles fique sobrecarregado.

Para que essa replicação seja feita, nós usamos os deployments. Aqui é possível inserir a quantidade de réplicas desejada, o que significa dizer que podemos realizar o scale UP e/ou DOWN mencionados anteriormente.

NOTA: Não podemos replicar bancos de dados via deployment. Bancos de dados são "stateful" (armazenam e mantêm dados), enquanto os pods são "stateless" (sem estado persistente). Isso significa que os pods podem perder dados importantes se removidos/reiniciados. Além disso, diferentes pods podem ter versões diferentes de um arquivo do banco de dados, acarretando inconsistência de dados.

É aí que entra o StatefulSet, outro componente do Kubernetes usado pra aplicações como banco de dados (MySQL, mongoDB, etc). Porém, pelo Stateful set ser complicado de gerenciar, é comum a prática de manter os bancos de dados fora do cluster kubernetes.

Conclusão

Esses são os componentes essenciais para estabelecer uma estrutura básica capaz de executar suas aplicações sem surpresas. Entender o funcionamento do Kubernetes é assegurar a entrega contínua das suas aplicações, minimizando o tempo de inatividade e garantindo a alta disponibilidade dos serviços.

Assim, o cliente fica feliz e a sua empresa também.

E por hoje, é isso.



Daniel Bessa

Cloud Solution Architect | MultiCloud | 3x AWS Certified | 4x OCI Certified

4 m

Parabéns pelo conteúdo, muito bem explicado.

Entre para ver ou adicionar um comentário

Outros artigos de Juliana Abreu

  • Estrutura do arquivo YAML

    Estrutura do arquivo YAML

    Bom, já temos um ambiente de pé onde sabemos comandos o suficiente pra criar pods, derrubar pods, aplicar…

  • Criação de um cluster com Minikube

    Criação de um cluster com Minikube

    Agora que já temos o ambiente pronto, vamos criar e iniciar um cluster, e ainda vamos ver os principais comandos do…

  • Minikube e kubectl - As peças chave do Kubernetes

    Minikube e kubectl - As peças chave do Kubernetes

    Pintamos a teoria do kubernetes nos dois últimos artigos. Agora, damos os primeiros passos rumo à parte prática, que…

  • Arquitetura do Kubernetes (Iniciantes)

    Arquitetura do Kubernetes (Iniciantes)

    A arquitetura básica do Kubernetes é formada de vários componentes, como mencionei no artigo anterior. É essa estrutura…

Outras pessoas também visualizaram

Conferir tópicos