Kubernetes Básico

Lucas Konrath Damaceno
CWI Software
Published in
4 min readSep 5, 2019

O que é Kubernetes (k8s) e como funciona?

Aplicações monolíticas ainda existem, mas containers estão tomando conta das soluções novas. Containers são muito mais eficientes utilizando a infraestrutura à sua disposição, tornam o código agnóstico à onde está sendo executado (write once, run anywhere de fato), podem ser facilmente escalados, além de inúmeros outros benefícios.

Os containers são incríveis! Mas imaginando um ambiente corporativo, que tem centenas, milhares ou milhões (como no caso da Google) de containers rodando ao mesmo tempo, em diversos hosts, fica claro que apenas os runtimes de containers não suprem estas necessidades.

Containers precisam ser gerenciados e conectados ao mundo externo, e a outros containers, com diversas tarefas, como scheduling, load balancing, precisam ter seus ciclos de vida gerenciados, precisam ser monitoráveis, precisam ter suas versões atualizadas sem impacto no ambiente de produção, precisam ter acesso a variáveis diferentes em diferentes ambientes, precisam de acesso a dados persistentes, acesso a credenciais, e diversas outras coisas que são possíveis utilizando o Kubernetes, que é uma ferramenta de orquestração de containers.

O Kubernetes iniciou como um projeto no Google, e virou um projeto open source em 2014. A ideia por trás disto é incentivar o uso de suas plataformas cloud, visto que k8s facilita muito o trabalho com ambientes na nuvem, o que é de seu sumo interesse. Atualmente é mantido pela Cloud Native Computing Foundation (CNCF).

Legal. Mas como funciona?

A arquitetura do Kubernetes utiliza diversos conceitos próprios, bem como abstrações mais comuns e familiares para o pessoal de T.I.

Clusters

A mais alto nível, nós temos o cluster. Refere-se a todas as máquinas que rodam o Kubernetes e os containers orquestrados pelo mesmo. Um cluster de k8s tem sempre um mestre, que comanda as demais máquinas no cluster.

Nodos e Pods

Cada cluster de k8s contém nodos. Cada nodo roda um ou vários pods. Cada pod representa uma instância de processo ou aplicação, e pode ser composto de um ou diversos containers. Todos os containers associados a um pod são iniciados ou parados em conjunto.

Pods rodando no k8s são criados e destruídos muitas vezes, de acordo com a demanda em cima dos sistemas.

Controllers

Controllers são os workers que verificam qual é o estado atual do cluster e dos nodos, checando se está condizente com o esperado, e solicitando mudanças para que fiquem de acordo com o esperado.

Embora existam diversos tipos, o mais popular é o deployment, utilizado para upscaling/downscaling de pods, e updates/rollbacks de versões.

Services

Pods vivem e morrem muitas vezes em um cluster de k8s, mas nós precisamos que nossas aplicações continuem rodando sem ser afetadas por estas tragédias, por isto foram criadas abstrações chamadas Services. Cada pod em um cluster do Kubernetes tem um IP específico, mas estes endereços não são expostos para fora do cluster sem uma Service, que basicamente define como um conjunto de pods podem ser acessados pela rede. Assim, as chamadas são feitas para esta service, que irá distribuir a carga através dos pods que tem à sua disposição, garantindo desacoplamento entre os sistemas.

Scheduler

O scheduler é o responsável por distribuir os pods necessários nos nodos que têm à disposição, otimizando recursos nos nodos e garantindo que o número de pods rodando é apropriado.

Tráfego externo

Por padrão, o cluster de k8s não é exposto ao mundo exterior. É possível adotar diversas estratégias para expor o cluster, mas um exemplo simples é o LoadBalancer.

O LoadBalancer vai, basicamente, expor a Service em uma porta especificada. Todo tráfego direcionado a esta porta será repassado para a service, que irá repassar para os pods específicos.

Espero que, ao chegar ao fim deste artigo, eu tenha te convencido que vale a pena aprender Kubernetes, e te explicado o básico. Sua curva de aprendizado não é das mais fáceis, mas uma das grandes vantagens de ser uma ferramenta tão bem difundida e open source é que existe muita documentação na internet. Alguns links que eu recomendo:

Kubernetes Documentation

Kubernetes Tutorials

Kubernetes Examples

--

--