O Kubernetes se tornou rapidamente como o orquestrador de implantação para aplicações conteinerizadas mais utilizado em todo o mundo. Empresas gigantes como Globo, Netflix, Amazon e o Google possuem suas aplicações baseadas em contêineres e Kubernetes.
Já vi de perto pequenas startups desenvolvendo projetos e aplicações baseadas em Docker, depois migrando para Docker Swarm e finalmente chegando ao Kubernetes. Existem projetos que já iniciaram avançados, mas não é uma regra.
Em meio a todo esse cenário de Docker, Kubernetes e Contêineres, existem inúmeros modelos de aplicações que se beneficiam disso como: API de GPS, API de algum cloud provider, API governamentais e até mesmo relacionado a saúde.
Desenvolver uma aplicação visando microsserviços se tornou uma realidade para quase toda empresa de tecnologia e startup hoje em dia. Alguns dos principais motivos são:
- Velocidade
- Confiabilidade
- Escalabilidade
- Imutabilidade
- Abstração da Infraestrutura
Velocidade
Antigamente os lançamentos de softwares não eram tão rápidos, existia todo um processo e muitas vezes demorava bastante. Também não existia a cobrança de um público rigoroso, algo totalmente diferente nos dias atuais.
O público atual espera e cobra mudanças, espera que sua aplicação seja a melhor, detestam bugs, são impacientes, e de um outro lado você tem concorrentes que estão na disputa. Isso faz com que hoje em dia o lançamento de softwares e também de novas features seja algo constante e veloz. Tem empresas que deployam novos códigos várias vezes todos os dias.
E o Kubernetes também vem para te ajudar nisso, o objetivo dele é ser aquele parceiro que te ajuda ser veloz no lançamento de novas features e deploy do seu código. Em um ambiente de hospedagem de sites tradicional, se você alterar o código é bem provável que o usuário final irá ter problemas, seja de lentidão ou até mesmo ver erros.
No Kubernetes podemos criar um planejamento na entrega de software onde o usuário final não terá problemas de lentidão ou até mesmo problemas de uptime. E caso você tenha lançado uma feature com bugs, um rollback para o deploy anterior pode ser feito rapidamente. Mas na prática a velocidade é um fator positivo quando nos possibilita lançar novos códigos, manter a alta disponibilidade e ao mesmo tempo poder realizar rollback em caso de bugs.
Confiabilidade
Quando implementado corretamente o Kubernetes te entrega um nível de confiabilidade muito grande nas atividades que ele desempenha. Cada projeto possui seus requisitos e isso influencia completamente em como devemos implementar o Kubernetes, seja em cluster, em HA, separando workers, nodes, …
Mas imagine o cenário onde o Kubernetes está totalmente pronto e estável, a cada lançamento de código, a cada novo deploy, a cada rollback, a cada demanda que você precise ele responda com velocidade e sem problemas técnicos.
Isso é incrível, concorda? E é um cenário muito aclamado por aplicações que são extremamente críticas e precisam estar em um ambiente confiável para operação.
Escalabilidade
Na medida que sua aplicação cresce e tem mais demanda, você terá que escalar o time de desenvolvedores como também acaba escalando a infraestrutura da aplicação. E o Kubernetes não deixa a desejar, ele também te ajuda nesse cenário. O Kubernetes é totalmente capaz de atender a demanda favorecendo arquiteturas desacopladas.
O desacoplamento seria basicamente “separar” todas as peças da arquitetura em clusters. Isso nos possibilita trabalhar modos de escalabilidade, seja automático ou até mesmo manual. O escalamento da infraestrutura é muito útil para o Kubernetes trabalhar plenamente, e com isso conseguir realizar escalamentos da aplicação que você está em produção.
Já trabalhei com cenários onde o Kubernetes estava configurado em apenas um único servidor, e cada vez que o cliente tinha demandas ele escalava os recursos de hardware do servidor. E isso é bem bizarro, pois esse não é o escalamento correto.
Imutabilidade
Quando desenvolvemos software baseado em contêineres automaticamente tendemos a focar em construir software que obedeça a princípios de infraestrutura imutável. Desse modo, quando um artefato é criado dentro do Kubernetes, ele não pode ser modificado por ações do usuário.
No modelo tradicional onde hospedamos e colocamos uma aplicação em produção, normalmente trabalhamos com o modelo de infraestrutura mutável. Ou seja, estamos sempre atualizando e incrementando mudanças em cima da infraestrutura existente. Essas atualizações podem ser feitas todas de uma só vez, ou ao longo do tempo, um exemplo disso é quando rodamos o comando apt-get update para atualizar os nossos repositórios do servidor.
Em um ambiente imutável, sempre que realizarmos alguma modificação podemos criar uma nova imagem e simplesmente substituir a imagem anterior. Caso ocorra alguma falha não prevista, podemos utilizar a imagem anterior que noutrora funcionava bem.
Em suma, para cada mudança, para cada nova atualização, criamos uma nova imagem para ser deployada no ambiente do Kubernetes. E isso é algo muito bom, nos dá muita segurança em realizar mudanças e atualizações no PHP ou versão do MySQL por exemplo.
E vale ressaltar que também podemos ter todo o registro de imagens criadas e podemos saber as diferenças de uma imagem para a outra. Também podemos utilizar uma determinada imagem mesmo que muito antiga, a qualquer momento caso esteja no registry.
Abstração da Infraestrutura
Ainda existem equipes de desenvolvimento que trabalham a moda antiga. Colocar uma aplicação em ambientes de desenvolvimento e até mesmo homologação é uma dor de cabeça enorme. A aplicação funciona no notebook do dev mas não funciona nos ambientes da empresa, clássico isso.
Desenvolver aplicação em contêineres e usar o Kubernetes para gerenciar tudo isso se torna incrível, pois tudo é declarativo. Escrevemos o “manual” de como queremos que a aplicação seja implantada, escolhemos nossas imagens de contêineres e tudo funciona bem. Principalmente pelo fato de que os devs podem desenvolver em ambiente local também usando o Docker.
A abstração da infraestrutura fica tão nítidas quando notamos que a partir do momento que temos nossos arquivos de manifestos, podemos implantar nossas aplicações em qualquer ambiente que utilize o Kubernetes. A infraestrutura não é mais um problema, pois a aplicação irá ser deplorada sem nenhum problema.
Em alguns casos quando usamos um serviço de Kubernetes gerenciado como EKS, GKS, MKS, temos que ajustar algum ou outro arquivo de configuração para se alinhar a API da nuvem. Mas nada muito complexo, resolvemos rápido.
Desse modo é normal vermos equipes migrando as aplicações entre os mais diversos provedores que tenham Kubernetes, ou criando cenários multi-clusters ou até mesmo ambientes híbridos.
Conclusão
O Kubernetes revoluciona a entrega, a confiabilidade, a escalabilidade e velocidade que podemos empregar ao realizar deploy de nossa aplicação.
Desenvolver aplicações em contêineres é uma realidade e é algo que vai agregar muita performance e qualidade ao seu projeto. Pois no modelo tradicional onde implementamos uma aplicação, salvo quando exista automações, é algo muito demorado e complexo. Muitas vezes sem direito a erros, e o Kubernetes vem para colocar isso no esquecimento.
–> Precisa de ajuda? Conheça nossos serviços em DevOps. <–
https://alexjunio.com.br/consultoria-devops-automacoes/