Nos últimos anos, Kubernetes se consolidou como a plataforma mais poderosa e flexível para o gerenciamento de containers, especialmente para empresas que trabalham em escala. Mas afinal, o que é Kubernetes?

black ship on calm sea during golden hour
Photo by Thais Morais / Unsplash

O que é Kubernetes?

Kubernetes é um sistema de orquestração de containers open-source. Ele automatiza o deployment, o dimensionamento e o gerenciamento de aplicações em containers.
Ele foi criado pela Google e, hoje, é mantido pela CNCF (Cloud Native Computing Foundation). O Kubernetes oferece um nível de abstração sobre a infraestrutura física ou virtual. Dessa forma ele permite que os times de desenvolvedores ou operações foquem mais nas aplicações do que nos detalhes da infraestrutura.

Não é apenas "executar containers", Kubernetes vai além. Ele oferece diversos mecanismos para manter as aplicações operantes. Tem controle de carga, escalabilidade, self-healing, mecanismos de rede e armazenamento.

Como o Kubernetes faz a abstração da infraestrutura, não importa onde ele está rodando, uma vez configurado, suas aplicações irão rodar nele. Isso significa que se você estiver utilizvando um Kubernetes no Azure e quiser migrar para a AWS, basta utilizar os mesmos arquivos e com algumas exceções, fazer alguns pequenos ajustes e você migrou de nuvem em menos de uma semana.

Qual é a diferença entre Docker e Kubernetes?

Docker e Kubernetes andam lado a lado, mas, tem objetivos e propositos diferentes, embora complementares. Eles desempenham papéis bem diferentes no desenvolvimento e na infraestrutura. Docker é uma plataforma de container, focada na criação e execução de containers. Nos posts relacionados há conteúdos especificos sobre Docker que publicamos. O Docker simplifica o processo de criação e execução de containers, ou seja, é ideal para desenvolvimento local e pequenas aplicações.

Já Kubernetes é uma plataforma de orquestração de containers, criada para gerenciar a executar múltiplos containers em um ambiente distribuído. Diferente do Docker, que trabalha no nível de um único container. O Kubernetes opera numa camada superior, gerenciando clusters inteiros de containers distribuídos por diversas VM's. E claro, isso também requer funcionalidades avançadas, como escalabilidade automática, balanceamento de carga, resiliência e self-healing. O foco do Kubernetes são ambientes de produção em empresas onde há muitos containers, especialmente em arquiteturas de microsserviços.

O que é um serviço Kubernetes?

Apesar do Kubernetes abstrair as complexidades da infra estrutura, não significa que é uma aplicação que a gente faz download, abre o instalador e aperta Next, Next e Finish. Configurar um cluster para produção é um conhecimento muito especifico que poucos profissionais no mercado estão apto a fazer e ainda assim, você assume todas as tarefas de manter ele em execução. É por isso que as soluções de Serviço de Kubernetes gerenciado são tão populares.

Em um ambiente de Kubernetes gerenciado, como AKS (Azure Kubernetes Service) e EKS (Elastic Kubernetes Service), o provedor de nuvem assume grande parte da complexidade operacional envolvida na criação e manutenção do cluster. Os provedores facilitam a adoção e utilização do Kubernetes, pois eles ficam responsáveis por gerenciar aspectos críticos, como provisionamento dos worker nodes, atualizações de versão, monitoramento e dimensionamento do cluster.

Ao escolher uma solução gerenciada, sua empresa "ganha" a experiencia dos engenheiros das empresas de Cloud e com isso irão ter uma experiência simplificada, pois o provedor será encarregado de aspectos como o setup inicial, atualizações e segurança do cluster etc.

Quanto custa um cluster Kubernetes?

A resposta é clássica: depende. O custo de um cluster Kubernetes vai variar bastante, depende do provedor (AWS ou Azure, por exemplo), da configuração do ambiente e do tamanho do projeto.

Em projetos pequenos, o Kubernetes é uma solução cara, e alternativas mais econômicas são melhores e mais viáveis, especialmente quando leva em conta o custo-benefício. Isso não significa que essas alternativas sejam tecnicamente superiores ao Kubernetes, mas sim que, para cenários menores, o investimento em Kubernetes não justifica em relação a outras opções de orquestração de containers.

Para ilustrar, o custo de um ambiente Kubernetes básico na AWS dificilmente sairá por menos de $150 mensais. Em reais, esse valor representa, no mínimo, R$ 800 por mês. E, mesmo que o painel da AWS mostre um custo de aproximadamente $73 para o Kubernetes, isso representa apenas uma fração do gasto total. Há custos adicionais como o uso da VPC, taxas de serviços, EC2, e o mesmo se aplica ao Azure. Embora o Azure informe que o serviço AKS (Azure Kubernetes Service) é gratuito, ainda é necessário pagar pelas máquinas virtuais, o que implica, na prática, uma configuração mínima de duas VMs — levando o custo a valores próximos dos mesmos $150 dólares mensais.

No entanto, à medida que o projeto cresce e a quantidade de aplicações hospedadas aumenta, o custo do Kubernetes se dilui e se torna quase irrelevante quando comparado a outras soluções. Nesse ponto, o Kubernetes oferece uma relação custo-benefício superior, pois sua escalabilidade e eficiência operam em um nível que poucas alternativas conseguem igualar em projetos maiores.

Para efeito de comparação, já administramos clusters Kubernetes com custos que chegavam a $200.000,00 mensais, e isso sem incluir ambientes de Disaster Recovery, homologação e desenvolvimento. Em outras palavras, a pergunta é: qual é o limite do cartão de crédito da sua empresa?

Quando usar Kubernetes?

Talvez essa seja uma das perguntas mais dificeis de responder, porém, é a mais importante. Kubernetes não é plug'n play. Você não vai arrastar e puxar containers para rodar ali. Kubernetes é incrivelmente complexo, ao mesmo tempo, que é incrivelmente simples. Um pouco contraditório num primeiro olhar. Kubernetes é um ecossistema robusto. Para começar a utilizá-lo, é preciso compreender objetos e conceitos como Pod, Deployment, Service, ReplicaSet, StatefulSet, ConfigMap, Secrets, HPA e Ingress. Cada um desses elementos possui comportamentos e particularidades específicos.

Isso implica que, ao adotar Kubernetes, você também assume essa complexidade. Mas, uma vez que domina esses conceitos e entende como eles se relacionam, percebe que ele é simples e oferece um nível de organização e possibilidade infinita para arquiteturas complexas.

Além do conhecimento técnico, o uso do Kubernetes geralmente requer que você tenha um profissional capacitado para gerenciar o cluster, realizar atualizações, fazer troublheshooting em produção e disseminar conhecimento na equipe. Isso é importante porque, em um cluster Kubernetes, um problema pode se tornar um grande desafio sem expertise. Portanto, não basta considerar o Kubernetes apenas pela sua capacidade de orquestração; o suporte e o conhecimento técnico são tão importante quanto.

Além disso, ao utilizar Kubernetes como serviço através de um provedor de cloud, como Azure (AKS) ou na AWS (EKS), você será praticamente obrigado a manter o cluster atualizado, pois é dessa maneira que você consegue garantir o suporte oficial e em casos mais críticos, o próprio provedor de cloud pode forçar a atualização. E se isso ocorrer, é muito provável que você terá surpresas desagradaveis. Diferente de muitos outros serviços, Kubernetes não é algo que configura uma vez e deixa lá rodando pra sempre.

Quais projetos podem usar Kubernetes ?

Qualquer projeto pode, em teoria, ser implementado com Kubernetes, mas ele se destaca especialmente em projetos que exigem alta disponibilidade, são formados por várias aplicações (como arquiteturas de microsserviços), demandam resiliência e capacidade de self-healing, ou que desejam evitar lock-in com um único provedor de cloud. Kubernetes habilita estratégias multicloud. Essas características fazem do Kubernetes uma excelente opção para organizações que buscam flexibilidade e automação em um ambiente distribuído.

Por outro lado, em projetos menores, Kubernetes é "demais", tanto por oferecer features que seu projeto não precisa ou que é oferecido também por soluções mais simples, além de ser uma opção extremamente cara em comparação aos concorrentes.

Para essas situações, soluções mais simples, como App Services do Azure ou ECS da AWS, são mais adequadas e não deixam a desejar em praticamente nada.

Kubernetes é indicado para empresas que precisam gerenciar arquiteturas complexas, com múltiplos containers, arquiteturas distribuidas ou de microsserviços. Empresas em que a automação não é um luxo, mas praticamente obrigatório.

Em resumo, Kubernetes é a escolha ideal para organizações que precisam escalar e gerenciar aplicações grandes e complexas. Nessas situações, Kubernetes deixa de ser uma complexidade adicional e se torna a solução que realmente simplifica o gerenciamento em comparação com outras opções. É em ambientes assim que Kubernetes passa de uma "complexidade desnecessária" para um papel de "tornar o ambiente simples".

Conclusão

Kubernetes é um projeto Open Source de orquestração de containers, mantido pela CNCF. Ele é inquestionável em relação a suas possibilidade e capacidade, nenhum outro produto do mercado faz frente a ele. Ideal para ambientes complexos, que necessitam de alta disponibilidade, elasticidade e features como self-healing, deployment gradativo entre outras boas práticas de software. Kubernetes permite todas elas.

Empresas utilizam Kubernetes em produção pela flexibilidade, suporte a estratégias de multicloud, arquiteturas distribuida, especialmente para microsserviços.

No entanto suas capacidades tem custo. Tanto financeiro, quanto técnico, não é um projeto que você vai colocar no ar e voltar daqui 2 anos e ele ainda está ali rodando.

Por isso alternativas mais simples podem ser melhores para projetos pequenos, pois o custo técnico e financeiro é alto em ambientes menores.

Referências