Kubernetes (kube ou K8) é uma plataforma open source projetada para automatização e orquestração de operações de contêineres Linux, como o Docker. Como toda automação, a ideia é eliminar processos manuais e, assim, simplificar o desenvolvimento e a implantação de aplicações em um contêiner.
Em um mercado onde as empresas se inclinam cada vez mais à análise de dados e a aplicações de rápida escalabilidade — tecnologias como IoT e 5G impulsionarão um enorme crescimento de dispositivos conectados à web –, utilizar Kubernetes não é uma questão de “se”, mas de “quando”.
Isso acontece porque o gerenciamento manual de contêineres tende a gerar prejuízo e ineficiência conforme o crescimento das demandas de acesso e da própria necessidade de evoluir a aplicação. Exemplos:
- engenheiros dedicam tempo demais em gerenciar uma quantidade cada vez maior de contêineres, gerando custos de homem-hora;
- desenvolvedores dependem de ambientes próprios para realização de testes, passando a depender de outras áreas para executar a tarefa;
- mecanismos de cibersegurança de aplicações se tornam difíceis de gerenciar, uma vez que se tenha muitos contêineres podem ser implementados em múltiplos hosts;
- dificuldades para gerenciamento de contêineres podem elevar os custos de infraestrutura; e
- migração para arquiteturas modernas, como microsserviços, são prejudicadas — ou mesmo inviabilizadas financeiramente — sem Kubernetes.
Já percebemos que Kubernetes desempenham papel importante em fluxos de desenvolvimento, não é mesmo? Neste artigo, exploramos mais a fundo a origem, o conceito, o funcionamento e alguns casos de uso que elucidam os benefícios dessa tecnologia.
A origem do Kubernetes
Projetado por engenheiros do Google, Kubernetes surgiu em 2014 como sucessor de sua plataforma, o Borg, que gera bilhões de implantações de contêineres a cada semana relacionadas a produtos como Google Cloud, GMail e Youtube.
Logo, quando pensamos nas qualidades do Kubernetes, precisamos ter em mente que muito disso se deve aos anos de experiência que os criadores adquiriram com o desenvolvimento do Borg.
Diferentemente do Borg, escrito em C++, Kubernetes foi construído utilizando a linguagem Go. Após o lançamento da versão 1.0, o Google firmou parceria com a Linux Foundation, o que deu origem à Cloud Native Computing Foundation (CNCF).
Nessa parceria, o Google doou o projeto Kubernetes para a CNCF, de modo que a Linux Foundation passou a conduzir o seu desenvolvimento e distribuição como plataforma aberta em parceria com outras diversas empresas, organizações e institutos, como Cisco, IBM, Red Hat, Docker, VMware, AT&T, entre outras.
Por que Kubernetes?
A palavra de origem grega significa “governador” e está também relacionada a “piloto” e “timoneiro”. Liderado por Joe Beda, Brendan Burns e Craig McLuckie, o projeto teve o codinome 7, em homenagem à personagem Seven of Nine, da série Star Trek — por isso, o timão no logotipo do Kubernetes tem sete raios.
Conceito e componentes-chave do Kubernetes
Tecnicamente, Kubernetes é um conjunto de blocos de construção que coletivamente fornecem mecanismos que realizam deploy, manutenção e escala de aplicações com base em CPU, RAM ou métricas personalizadas.
A sua versatilidade permite que diferentes tipos de workloads sejam integrados à plataforma via API, então é muito fácil gerenciar contêineres de vários hosts. Mas por onde eles são implementados, executados e orquestrados? Vamos conhecer os componentes.
Cluster
Cluster é o primeiro item essencial para implementar Kubernetes. Um cluster é composto por um conjunto de máquinas e equipamentos — “nodes”, que conheceremos mais adiante — e uma camada de orquestração chamada control plane, pela qual são gerenciados nodes e pods — que também conheceremos neste tópico.
Componentes do control plane
Não podemos deixar de fornecer mais detalhes acerca do control plane, dadas os processos e decisões analíticos e estratégicos importantes executados por meio deste. Por isso, vamos conhecer os seus componentes.
etcd
Segundo o Google Kubernetes Engine (GKE), trata-se do “armazenamento de valores-chave consistente e altamente disponível usado como armazenamento de apoio do Kubernetes para todos os dados do cluster”.
O etcd foi projetado para armazenar de maneira confiável dados atualizados com pouca frequência e fornecer consultas para analistas de dados, como snapshots de eventos e histórico de consultas.
kube-apiserver
O kube-apiserver faz parte do servidor de API que expõe a API do Kubernetes, atuando como front-end do control plane, e é projetado para escalonamento horizontal, ou seja, de acordo com a implantação de instâncias, as quais podem ser executadas em grande escala e balancear tráfego entre elas.
kube-scheduler
Item crucial para a orquestração do Kubernetes. A sua função é acompanhar novos pods criados sem um node associado e, então, selecionar os melhores nodes para que eles sejam executados de acordo com requisitos de hardware / software, localidade de dados, entre outros.
kube-controller-manager
Executa processos chamados controladores (controllers), um loop de controle que acompanha os estados do cluster compartilhados por meio do API server e faz mudanças com objetivo de mover o estado atual para o estado desejado. Tais processos se dividem em vários tipos no Kubernetes, podendo ser um node controller, job controller, endpoints controller etc.
cloud-controller-manager
Permite que o cluster seja vinculado (ou “linkado”, se preferir) à API de um provedor de cloud e execute apenas os controladores específicos da plataforma de cloud, separando-os dos componentes que somente interagem com o cluster, mas não fazem parte dela.
Nodes
Todos os contêineres gerenciados via Kubernetes são implantados e executados em nodes (nós de computação), que são equipamentos — físicos ou virtuais — ligados ao cluster para processar e / ou transmitir dados, por meio dos componentes:
- kubelet: agente que roda em cada node atrelado ao cluster, assegurando que contêineres estejam sendo executados em um pod;
- kube-proxy: rede proxy executado em cada node do cluster, mantendo regras de rede nos nodes de modo a permitir a comunicação dos pods a partir de sessões de rede dentro e fora do cluster; e
- container runtime: software responsável por executar contêineres, como Docker, containerd, CRI-O, bem como qualquer implementação que siga as especificações CRI (Container Runtime Interface).
Vale frisar que cada cluster tem pelo menos um node para execução de aplicações em contêiner.
Pods
Pod são objetos de implantação no Kubernetes que contêm um ou mais contêineres que são gerenciados e executados como entidades únicas, as quais compartilham de seus recursos, que podem ser de:
- rede: portas de rede e endereços de IP exclusivos que permitem a comunicação entre os contêineres existentes no pod a partir de um mesmo localhost; e
- armazenamento: de acordo com o GKE, “os pods podem especificar um conjunto de volumes de armazenamento compartilhado que pode ser distribuído entre contêineres”.
Os pods são executados em nodes, onde podem ser mantidos por tempo indeterminado, mediante a conclusão de processo, exclusão, remoção automática por incapacidade ou falhas no node.
Addons
Existem vários addons que podem ser utilizados para implementar funcionalidades ao cluster usando os recursos do Kubernetes. Tais features estão disponíveis em categorias, como Redes e Política de Rede, Visualização e Controle, Descoberta de Serviço e Infraestrutura.
Funcionamento básico do Kubernetes
O Kubernetes utiliza padrões abertos que o tornam capaz de receber diversas configurações e extensão de funcionalidades. Em outras palavras, você pode customizar o Kubernetes para o seu projeto. Porém, tornando as coisas mais simples, vejamos a lógica de funcionamento de um contêiner Docker no Kubernetes.
Supondo-se que um pod tenha sido programado para um node do Kubernetes. Quando isso acontece, o kubelet integrado ao node chamará o Docker e o instruirá a iniciar os contêineres solicitados na configuração. Durante o processo, o Docker fornece continuamente os status dos contêineres ao kubelet, que alimenta o cluster com as informações.
Em seguida, o node no qual foi programado o pod passa a armazenar os contêineres do Docker. O gerenciamento destes, teoricamente, é feito manualmente; porém, com Kubernetes, existe a possibilidade de automatizar as ações (inicialização e interrupção, por exemplo) para todos os nodes de todos os contêineres, poupando muito trabalho do administrador.
Casos de uso do Kubernetes no mundo corporativo
Casos de uso são úteis para compreendermos como uma tecnologia pode ser aplicada em um cenário real, onde as empresas enfrentam sérios desafios que são solucionados com a sua utilização. Para Kubernetes, elencamos alguns entre muitos casos interessantes.
Huawei
A multinacional chinesa tinha o desafio de gerenciar mais de oito data centers reservados para operações internas, pelos quais são executadas mais de 800 aplicações em mais de 100 mil máquinas virtuais para atender cerca de 180 mil usuários.
Com o uso de contêineres, a Huawei moveu aproximadamente 70% de suas aplicações para Kubernetes, transferindo o restante para a infraestrutura de cloud.
O impacto disso foi o gerenciamento de mais de 4 mil nodes com dezenas de milhares de contêineres usando uma solução PaaS baseada em Kubernetes, fazendo em minutos operações que antes demandavam semanas e tornando-as até 30% mais baratas.
Spotify
Se você é um dos mais de 200 milhões de usuários do Spotify e está curtindo a experiência, saiba que muitas melhorias vêm sendo feitas com microsserviços construídos em contêineres Docker.
Antes de adotar Kubernetes, a orquestração desses microsserviços era feita em um sistema interno. Com a migração, os custos operacionais foram reduzidos, enquanto a criação de novos serviços passou a demorar entre segundos em minutos em vez de horas.
Nokia
O desafio da Nokia se resumia a entregar software a operadoras telecom e colocá-lo em suas infraestruturas — que se diferem entre uma empresa e outra imprevisivelmente — bare metal e virtuais, via VMware Cloud e OpenStack Cloud. Logo, o objetivo era não ter de adaptar o seu produto em função da infraestrutura do cliente.
Ao utilizar Kubernetes, o sistema de orquestração simplificou o desenvolvimento de produtos com separação das camadas de infraestrutura e aplicação, reduzindo consideravelmente as dependências na hora de implantar. Além disso, o Kubernetes possibilita à Nokia construir aplicações preparadas para o 5G.
Esperamos que este artigo tenha sido suficiente para esclarecer o básico dessa poderosa tecnologia chamada Kubernetes. Também acompanhamos o quanto empresas globais têm se beneficiado do Kubernetes — além delas, outras milhares de empresas e startups estão inovando com mais eficiência e velocidade.
Quer aprender a implementar contêineres do Docker no Kubernetes e outras coisas legais que podemos fazer no Linux? Dê uma olhada neste curso online que promete fazer de você um expert em Linux para expandir suas oportunidades no mercado!