Kubernetes - basedosdados/iac GitHub Wiki

Dentre os benefícios ao utilizar o Kubernetes, podemos listar os principais:

  • Velocidade do deploy;
  • Habilidade para absorver mudanças rapidamente;
  • Habilidade para restaurar o serviço em caso de falha;
  • Abstrair a complexidade no cluster;

Os princípios do Kubernetes são:

  • Estado Desejado / Configuração Declarativa: Estágio onde declaramos como o serviço deve ser.
  • Controladores: Possuem a responsabilidade de gerenciar o estado do serviço, garantindo que o mesmo esteja em um estado desejado.
  • API: Interface de comunicação entre o cliente e o serviço. k8s proporciona uma API RESTful das coleções de objetos que podemos utilizar para gerenciar os serviços.

Um olhar sobre k8s API

Nos bastidores, você descobrirá que eles são uma coleção de objetos de API. A única maneira de interagir com o cluster. Os dados são serializados em JSON e persistidos no armazenamento de dados do cluster.

Esses objetos são primitivos que representam o estado do sistema. Permitem que você gerencie o estado do sistema, tanto declarativo como imperativo.

Objetos primitivos da API:

Pods

É um ou mais containers que são executados em um mesmo ambiente. Essencialmente, é um container que pode ser executado em um ambiente Docker.

Para o k8s, este é o menor objeto que pode ser criado. Eles são de estado efêmero, ou seja, não são persistentes.

Controllers

Responsáveis por gerenciar o estado de cada serviço do cluster.

ReplicaSet

Nos permite definir um número de pods que serão criados, o seu trabalho é garantir que o número de pods seja o esperado.

Caso algum pode fique fora do controle, ou seja, seu estado não seja o esperado, o ReplicaSet irá criar novos pods para substituir os que ficaram fora do controle.

Ao realizar o deploy de uma aplicação no cluster, você geralmente não criará conjuntos de réplicas diretamente, você criará um conjunto de Deployments.

Na criação de um Deployment, você pode definir um número de replicas que será criado.

Deployment

O deployment gerencia o estado do ReplicaSet, então, coisas como qual imagem será utilizada, o número de pods, o número de replicas, etc.

Mais interessante é que o deployment gerencia a transição entre os estados do ReplicaSet. Um exemplo prático é a atualização da versão de uma aplicação.

Services

Responsáveis por proporcionar persistência para todos os objetos efêmeros. Abstração de rede para o acesso aos pods, o k8s aloca um IP e DNS para a aplicação com uma atualização dinâmica baseada no ciclo de vida do pod.

Também provém o balanceamento de carga para os pods, conforme a escalabilidade dos mesmos.

Storage

Volumes
Persistent Volume
Persistent Volume Claims

Um olhar sobre k8s Architecture

Control Plane Node

Também conhecido como master node é o responsável por implementar as principais funções de controle de um cluster. Ele coordena as operações, monitoramento e é o acesso primário para a administração do cluster.

Worker Node

Onde as aplicações (pods) são executadas, responsável por gerenciar os pods e seus containers. Cada nó contribui para a capacidade computacional do cluster, o cluster geralmente é composto por dois ou mais nós.