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:
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.
Recomendados pelo LinkedIn
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.
Cloud Solution Architect | MultiCloud | 3x AWS Certified | 4x OCI Certified
4 mParabéns pelo conteúdo, muito bem explicado.