Migração de Plataforma
Kubernetes, uma palavra da moda?
Depois de passarmos anos a analisar a nossa plataforma, a estudar as práticas de Site Reliability Engineering da Google e a experimentar as suas ferramentas, decidimos que o Kubernetes, baseado na arquitetura de distribuição Borg da Google, era o mais adequado para a próxima iteração da nossa plataforma Lighthouse.
O que é o Kubernetes?
O Kubernetes é uma tecnologia de código aberto baseada na arquitetura interna Borg da Google, que usaram internamente durante muitos anos e que mais tarde foi disponibilizada publicamente. É tecnologia de ponta que aproveita o poder da orquestração de contentores.
A orquestração de contentores é um termo carregado mas, embora seja complexo, não é complicado de entender.
Comecemos pelos blocos de construção:
Um contentor contém apenas o software e as dependências de que precisas para pôr a tua aplicação a funcionar. Isto significa que o teu software corre no seu próprio ambiente sem necessidade de descarregar ou importar dependências externas. É semelhante a uma máquina virtual, exceto que contém apenas aquilo de que precisa e é, por isso, leve e simples.
Em resumo, se funciona no meu computador então funciona no teu computador, pois o contentor fornece de forma independente tudo o que é necessário.
Onde é que corremos os nossos contentores?
Normalmente, os contentores precisam dos seus próprios ambientes para correr. Se estiveres a desenvolver numa única máquina, então normalmente a aplicação vai correr em algo como o Docker. Se, no entanto, quiseres correr várias imagens em vários nós ou num cluster, então o Kubernetes é a opção preferida.
O Kubernetes é a opção mais flexível porque toda a configuração (não só os contentores), o ambiente, as configurações da aplicação e as configurações da rede podem ser definidos como código.
Porque é que isto é bom?
Ao guardar as nossas configurações em código, podemos ter uma única fonte de verdade e guardar as nossas configurações no Git. Isto permite-nos implementar alterações com muito mais facilidade, segurança, rapidez e eficiência.
São muitas as vantagens que isto nos dá:
Escalabilidade: podemos escalar facilmente e a nossa carga pode ser distribuída por muitos nós, o que melhora o desempenho
Disponibilidade: isto também está relacionado com a fiabilidade porque, se um pod ou contentor não estiver a funcionar ou o nó morrer, então há outros contentores que ficam para assumir a carga
Simplicidade: encaixa na perfeição no nosso modelo de trabalho de extreme programming e continuous delivery, que se foca em pequenas alterações iterativas
Controlo: ter tudo em código torna fácil controlar como corre e onde corre
Observabilidade: temos mais insights sobre como corre e onde corre e, como o nosso negócio é fornecer insights, a informação que reunimos é passada ao nosso produto e enriquece a informação que fornecemos
Tecnologia: como temos melhor acesso e está tudo simplificado, será mais fácil para nós integrar com novas tecnologias disruptivas, tais como machine learning, big data, IA e o que quer que esteja a caminho.
Isto não é exaustivo, mas ilustra de forma modesta o poder que ficará disponível ao adotar esta tecnologia à medida que crescemos juntos rumo a um futuro mais fiável.