Conheça o Kubernetes — Orquestração de aplicações em Contêiner
- Por Rox Partner
O Kubernetes – também conhecido como K8s (com o 8 representando o número de letras entre o “K” e o “S”) – é um produto Open Source para implantar, escalonar e gerenciar aplicativos dentro de contêineres em qualquer lugar.
Um pouco da história
O projeto se baseia em 15 anos de experiência em execução de contêineres com a Borg – uma plataforma interna da Google. A plataforma Borg foi a predecessora do Kubernetes. As lições aprendidas com ela ao longo dos anos se tornaram a principal influência por trás de grande parte da tecnologia do Kubernetes.
Voltando no tempo para explicar a arquitetura
- Implantação Tradicional: Se trata da execução de aplicações em servidores físicos. Com o tempo, essa arquitetura apresentou dificuldade de escalabilidade, pois a única forma de separar as aplicações e evitar problemas de concorrência de recursos seria executar cada aplicação em um servidor físico diferente. Na implantação tradicional, não havia como definir limites de recursos para aplicações; por isso existia a necessidade de manter muitos servidores, gastando muito mais dinheiro.
- Implantação Virtualizada: A solução de virtualização foi introduzida como alternativa para a Implantação Tradicional. Nesse modelo, podemos executar diversas máquinas virtuais (VMs) em uma única CPU de um servidor físico. A virtualização permite isolar as aplicações entre as VMs – o que fornece segurança, pois não há compartilhamento livre de dados entre as aplicações. Também podemos aproveitar melhor os recursos de um servidor físico, solucionar o problema de escalabilidade, reduzir custos de hardware e muito mais – isso tudo porque cada VM é uma máquina completa, que possui o seu próprio sistema operacional, e executa todos os componentes necessários.
- Implantação de Contêineres: Os contêineres trabalham em uma arquitetura semelhante ao modelo de máquinas virtuais, mas com um detalhe importante: eles permitem compartilhar o sistema operacional (SO) entre as aplicações, por isso são considerados “leves”. Um contêiner tem seu próprio sistema de arquivos e compartilhamento de memória CPU. Além disso, os contêineres são portáveis entre nuvens e distribuições de sistema operacional, pois na arquitetura eles estão separados da infraestrutura subjacente.
O que faz o Kubernetes?
O Kubernetes é o “capitão” que irá controlar (gerenciar) os contêineres, garantindo que o sistema continue funcionando como foi planejado. É responsável por transportar e entregar os contêineres com segurança para os locais onde possam ser usados. A plataforma agrupa os contêineres que compõem uma aplicação para facilitar o gerenciamento e escalonamento. Além disso, é possível definir o estado completo de um sistema, seguindo boas práticas de infraestrutura (como código), permitindo alta disponibilidade, balanceamento de carga, atualizações em lote, “rollbacks” e muito mais.
Vale ressaltar que existe um orquestrador concorrente chamado Docker Swarm, que também tem a proposta de gerenciar contêineres dentro de um cluster – mas, neste artigo, o nosso foco será o Kubernetes.
O que você precisa saber para começar a trabalhar com Kubernetes:
- POD — É a unidade de contêiner dentro de um cluster Kubernetes. Um POD é um grupo de um ou mais contêineres, com recursos de armazenamento e de rede compartilhados.
- Deployment (réplica) — É o que garante que os PODs/Contêineres funcionem. Permite identificar o estado desejado em uma implantação e o controlador altera do estado real, para o estado desejado da aplicação naquele momento.
- Service — Fornece os endereços IP de cada POD e um único nome (DNS) para um conjunto de PODs. Este objeto é importante para viabilizar acesso externo e fazer o balanceamento de carga entre os PODs.
Alguns benefícios da plataforma:
- Aumento da velocidade de desenvolvimento.
- No mundo DevOps, o Kubernetes permite a separação de interesses entre Desenvolvimento e Operações.
- Orquestramento os contêineres com aplicações através dos PODs, mantendo controle e o gerenciamento dos clusters de forma automatizada.
- Flexibilidade para implantar aplicativos em qualquer lugar, permitindo implantações On-Premise, Cloud Pública ou até Cloud Híbrida.
- Execução serviços eficientes, ajustando automaticamente o tamanho e/ou quantidade de Nós do cluster, permitindo escalonamento com base na demanda.
- Monitoramento do funcionamento do serviço, executando verificações contínuas de integridade e reiniciando os contêineres que falharam.
- Disponibilização dos serviços aos usuários quando a plataforma confirma que eles estão em execução.
Obs: O monitoramento automático da plataforma não é baseado apenas nas informações e métricas no nível do sistema operacional, mas também na integridade da aplicação e outros sinais.
Breve demonstração dos componentes
Nesta etapa, vamos explicar de forma superficial alguns componentes da infraestrutura do Kubernetes.
Um cluster Kubernetes é um conjunto de máquinas chamadas de Nós (nodes), que executam os contêineres. Cada cluster tem, no mínimo, um Nó – também conhecido como “worker node”.
- Os Nós hospedam os PODs, que são os componentes da carga de trabalho do aplicativo.
- O plano de controle gerencia os Nós e os PODs no cluster.
- O plano de controle normalmente é executado em vários computadores. Geralmente, um cluster executa vários Nós, fornecendo tolerância a falhas e alta disponibilidade.
Mas, afinal, qual a diferença entre Kubernetes e Docker?
As dúvidas surgem quando começamos a estudar contêineres e nos deparamos com tecnologias diferentes, mas com algo em comum. Portanto, neste artigo, vamos esclarecer uma das principais dúvidas sobre esse tema.
Algumas vezes interpretados como uma escolha entre um ou outro, o fato é que Kubernetes e Docker são tecnologias diferentes, mas complementares. A principal diferença é que o Kubernetes deve ser executado em um cluster, enquanto o Docker é executado em um único Nó.
Ok, mas isso eu já sabia! E quando usar um ou outro?
Vamos começar falando um pouco sobre o Docker. Podemos dizer que o Docker é a ferramenta padrão para implantar uma aplicação usando contêineres. Com a capacidade de empacotar uma aplicação, é a engine mais utilizada atualmente. O Docker permite empacotar todas as dependências necessárias para execução, como bibliotecas e o código da aplicação, em uma imagem que pode ser facilmente “versionada”. Depois de começar a empacotar os aplicativos, precisamos encontrar uma maneira de gerenciá-los, e é isso que o Kubernetes veio fazer.
Kubernetes como serviço em Cloud Computing
Os principais provedores de computação em nuvem fornecem o Kubernetes como serviço, também conhecido como CaaS (Container as a Service).
No formato CaaS, o objetivo é eliminar a necessidade de instalar e operar seu próprio plano de controle ou Nós de cluster, bem como os servidores de API e a camada de back-end.
O desenho acima demonstra que as camadas de Hardware, Virtualização e Sistema Operacional são gerenciadas pelo provedor do serviço. Ou seja: o cliente começa a operar a partir do contêiner. Na concorrência entre os provedores deste tipo de serviço, alguns fornecem facilidades e/ou diferenças dentro de cada ambiente – por isso vale um estudo específico antes de iniciar a implantação.
Alguns provedores que fornecem CaaS baseado em Kubernetes
- Amazon Elastic Kubernetes Service (EKS)
- Google Kubernetes Engine (GKE)
- Azure Kubernetes Service (AKS)
Conclusão
Neste artigo, esclarecemos o funcionamento do Kubernetes, sem aprofundar muito na parte técnica da plataforma. Explicamos a importância do Kubernetes para a “Era” de implantação de contêineres, e como ele trabalha em conjunto com o Docker, que é fundamental para começar a trabalhar com essa tecnologia.
O Kubernetes pode ser útil para diversas soluções dentro de uma empresa, vem sendo muito utilizado para solucionar problemas de integração entre aplicações, viabilizar execução de aplicativos de micro serviços, automatizar captura de dados com robôs que são executados em contêineres e muito mais. Tudo isso utilizando os recursos computacionais de forma eficiente, para evitar gastos desnecessários com infraestrutura de TI.
Escrito por Kaique Vitiello, Engenheiro de Dados na Rox Partner.
Conheça a Rox School
Somos especialistas em cuidar dos seus dados, oferecendo soluções inovadoras e parcerias com os maiores nomes da tecnologia para manter você sempre à frente.