Kubernetes: o que é?

Postado por Paulo André Soares de Mendonça em November 01, 2019 · 6 minutos de leitura

O que é Kubernetes?

Kubernetes (κυβερνήτης, a palavra grega para “timoneiro” ou “piloto”) é um sistema de orquestração de containers open-source que elimina grande parte dos processos manuais necessários para implantar e escalar as aplicações em containers.

Inicialmente o Kubernetes foi criado pelo Google, que é um dos pioneiros na tecnologias de containers, com base no seu antecessor o Borg. As lições aprendidas durantes anos do desenvolvimento do Borg foram importantes para criação do Kubernetes. Ele foi originalmente projetado pelo Google e agora é mantido pela Cloud Native Computing Foundation.

Uma curiosidade sobre o Kubernets é que os sete raios do logotipo fazem referência ao nome original do projeto, “Project Seven of Nine” (Projeto Sete de Nove)uma referência a um personagem de Star Trek.

O que pode ser feito com o Kubernetes?

Com a orquestração do Kubernetes, é simples criar e gerenciar serviços de aplicativos abrangendo múltiplos containers, organizar como esses containers serão alocados no cluster, escalá-los e gerenciar a sua integridade no seu ciclo de vida. O Kubernetes também permite a integração com serviços de segurança, rede, armazenamento, monitoramento, medição e outros.

Dentre outras funcionalidades, o Kubernetes permite:

  • Orquestrar containers em vários hosts, em clouds públicas e privadas.
  • Otimizar o uso do hardware, maximizando a disponibilidade de recursos para execução dos aplicativos.
  • Automatizar as implantações e atualizações de aplicativos.
  • Garantir a integridade e autorrecuperação dos aplicativos em contêineres, com posicionamento, reinício, replicação e escalonamento automáticos.

Arquitetura Kubernetes

Como podemos ver na figura acima, há vários componentes associados a um cluster Kubernetes. O nó principal coloca as cargas de trabalho do contêiner nos pods do usuário nos nós do trabalhador ou em si próprio. Os outros componentes incluem:

Clusters
É um grupos de instâncias que executam o Kuberntes

Master
Quando você está rodando o kubernetes em cluster em mais de um nó ou mais de uma máquina, você precisa que um nó seja o manager(o master), ele é o encarregado para verificar qual o status de saúde dos PODs, quem tem mais recursos disponíveis. É o cara que vai gerenciar todo o cluster.

Nodes
É um nome dado para cada host do cluster

Kubelet
Agente que executa nos hosts do cluster.

Pod
É a menor unidade de um cluster, nada mais é que um container ou um conjunto de conteiners com a mesma função. Pode ser um container com Nginx, PHP, Apache.

Controller Manager: Esse componente assegura que o estado desejado dos clusters corresponda ao estado atual, dimensionando as cargas de trabalho para cima e para baixo.

kube-scheduler Atribui cargas de trabalho a nodes específicos no cluster é o agendador. Este serviço lê os requisitos operacionais da carga de trabalho, analisa o ambiente de infraestrutura e coloca o trabalho em um node ou nodes elegíveis.

kube-controller-manager O controller manager é um serviço geral que tem muitas responsabilidades. Primeiramente, ele gerencia diferentes controladores que regulam o estado do cluster, gerencia o ciclo de vida das cargas de trabalho, e realiza tarefas rotineiras.

Replication Controler ou RC
É uma forma de você conseguir quantificar ou escalar os seus pods dentro de um cluster de kubernets. Inclusive é o RC que vai garantir por exemplo o números mínimos de pods que você vai disponibilizar de determinada aplicação e que vai escalar o seu cluster caso necessário.

Services
OS pods não são imortais, eles tem um ciclo de vida. Quando o container for finalizado por qualquer problema, o RC vai subir outro em seu lugar. Quando o RC subir esse outro Pod, ele vai subir com um ip diferente. Imagina se você tem um conjunto de Web Servers, você terá problemas porque ele tem um ip diferente, não tá mapeado. É responsável por definir um faixa de ip para um determinado RC. Para que cada vez que o RC crie uma nova instancia de Pod o mesmo inicie com um ip determinado pelo service.

Namespace
É a segmentação do meu cluster. Com o namespace você pode dividir seu cluster de Kubernetes em dois ambientes, Produção e Teste, podendo limitar os recursos computacionais para ambos.

ETCD
É um banco de chave valor onde o Kubernetes utiliza o ETCD para guardar informações como ip, porta, configurações gerais do seu cluster.

Service proxy
É quem conhece os servições. Ele sabe o ip de determinado serviço e para qual container deve encaminhar essas requisições. Ele funciona como uma espécie de um proxy.

Outros conceitos poderão ser encontrados no site kubernetes.io

Vantagens em relação aos cloud providers

Além das possibilidades apresentadas nos tópicos anteriores, outro pronto que devemos ressaltar é que existem algumas soluções para orquestração de containers como por exemplo o oferecidos pela AWS (Amazon Elastic Container Service). Podemos citar algumas vantagens do Kubernetes em relação aos clouds providers:

  • Mantido pela comunidades OpenSource e CNCF;
  • Não temos lock-in no provider, ou seja não ficamos presos a único serviço cloud, sendo que o kubernetes é aceito pelos grandes provedores como Google Cloud, Azure, AWS e Digital Ocean;

Referências

https://www.redhat.com/pt-br/topics/containers/what-is-kubernetes
https://pt.wikipedia.org/wiki/Sete_de_Nove
https://pt.wikipedia.org/wiki/Kubernetes
https://www.digitalocean.com/community/tutorials/uma-introducao-ao-kubernetes-pt

Artigos relacionados

Minikube
Kubernetes: instalação e configuração