Você já ouviu falar em Kubernetes?

O Kubernetes é um sistema de código aberto que orquestra e automatiza implantação, dimensionamento e gerenciamento de aplicações em contêiners. Seu uso pode se dar em várias plataformas, laptop, VMs em nuvem e servidores bare metal, além de vários sistemas Linux, os clusters podem atender hospedeiros em nuvens públicas, híbridas ou privadas. Também tem alta disponibilidade e é escalável, maximizando o uso de contêiners e sendo recomendado para ambientes de larga escala.

Originalmente surgiu no Google para rodar cargas de trabalho de produção, serviços como Google Docs e Gmail são executados em contêiners e ocorrem mais de 2 bilhões de implantações por semana na empresa, mas a tecnologia agora é mantida pela Cloud Native Computing Foundation e Linux Foundation, combinando com as melhores ideias e práticas criadas pela comunidade.

Esse sistema de cluster trabalha principalmente com o Docker, engine mais usada para provisionar contêiners nos hospedeiros do cluster, mas atende outros sistemas de contêiner, como o Rocket. Com o Docker, o Kubernetes cria contêiners nos nós do aglomerado, gerenciando, controlando e monitorando o estado dessas criações. Há diversos casos em que programadores e responsáveis por departamentos de TI considerem a ferramenta muito complexa, entretanto, a comunidade Kubernetes oferece muitas contribuições, sendo inclusive disponibilizados diversos tutoriais no site oficial (em inglês), e os benefícios obtidos pelo uso da tecnologia são imensos.

Recursos e possibilidades

Os principais recursos encontrados no Kubernetes são:

  • Classificação automática: os contêiners são automaticamente alocados de acordo com seus requisitos e outros critérios, sem sacrificar a disponibilidade;
  • Dimensionamento horizontal: escalonamento se torna fácil com um simples comando ou baseado automaticamente no uso de CPU;
  • Adiantamento e reversão automáticos: Kubernetes progressivamente atribui mudanças à sua aplicação ou suas configurações, enquanto monitora a saúde para garantir que as instâncias não sejam excluídas ao mesmo tempo. Se algo dá errado, as mudanças são automaticamente revertidas;
  • Orquestração de armazenamento: automaticamente monta o sistema de armazenamento que você escolheu, seja local, nuvem pública ou sistema de armazenamento em rede (NFS, iSCSI);
  • Auto-recuperação: reinicia contêiners que caem, os substitui e reagenda contêiners quando os nódulos caem, também encerra contêiners que não respondem aos critérios de checagem de saúde definidos;
  • Descoberta de serviço e balanceamento de carga: Kubernetes dá aos contêiners seus próprios endereços IP e um nome DNS único para um conjunto destes, podendo balancear a carga através deles;
  • Gerenciamento da configuração e segredos: instale e atualize segredos e configurações de aplicativos sem precisar reconstruir a imagem ou expôr segredos na configuração da pilha;
  • Execução de lote: em adição aos serviços, pode-se gerenciar o lote e cargas de trabalho CI, substituindo contêiners que caiam, se desejado.

Com o Kubernetes é possível implementar e confiar plenamente em uma infraestrutura baseada em contêiners para os ambientes de produção. Como seu propósito é automatizar completamente tarefas operacionais, permite que os contêiners realizem muitas das tarefas possibilitadas por outros sistemas de gerenciamento ou plataformas de aplicações. Ele possibilita:

  • Orquestrar contêiners em vários hospedeiros;
  • Aproveitar melhor o hardware para maximizar os recursos necessários na execução das aplicações corporativas;
  • Controlar e automatizar as implantações e atualizações de aplicações;
  • Montar e adicionar armazenamento para executar aplicações com monitoração de estado;
  • Escalar rapidamente as aplicações em contêiners e recursos relacionados;
  • Gerenciar serviços de forma declarativa, garantindo que as aplicações sejam executadas sempre da mesma maneira como foram implantadas.;
  • Verificar a integridade e autorrecuperação das aplicações com posicionamento, reinício, replicação e escalonamento automáticos.

Kubernetes

Como funciona?

A estrutura do cluster tem Masters e Workers, No Master são criadas todas as tarefas do cluster, sendo formado por quatro componentes (ou serviços):

  • API Server: Fornecedor de API Kubernetes utilizando Jason, os estados de objetos da API são salvos no ETCD e o Kubectl usa o API Server para trocar informações com o cluster;
  • Controller Manager: monitoramento dos controles de replicação e criação de pods para manutenção do estado ideal;
  • ETCD: base de dados de chave de valor, armazena os dados de configuração do cluster e de seu estado;
  • Scheduler: execução de tarefas de agendamento, de acordo com disponibilidade de recursos por exemplo.

O Kubectl é uma linha de comando que se conecta ao servidor API, utilizado para criação de pods, instalações e serviços. É utilizado no gerenciamento do cluster.

Já os Workers, nome dado para cada hospedeiro do cluster, realizam as tarefas definidas nos Masters, seus componentes são:

  • Docker (ou Rocket por exemplo): responsável pela rodagem e execução dos contêiners, de acordo com a solicitação do Kubernetes;
  • Kubelet: agente executado em cada worker, conectando-se ao Docker (na maioria das vezes) e sendo responsável pela criação, execução e exclusão de contêiners;
  • Kube-Proxy: encaminhamento de tráfego para os contêiners apropriados, de acordo com IP e número da porta da solicitação recebida.

Embora a orquestração aprovisionando automaticamente a infraestrutura necessária para as solicitações das aplicações seja feita pelo Kubernetes, ainda assim é preciso uma tecnologia de contêiners que permita rodar processos, serviços e aplicativos de maneira isolada, por isso deve-se utilizar o Docker (ou semelhante), que com sua imagem executa instâncias e empacota aplicações em contêiners.

Uso doméstico

O Minikube é um facilitador para laboratório e estudos da tecnologia Kubernetes, desenvolvido pela comunidade, ele cria um ambiente no qual é possível ver o sistema funcionando, com uma VM do Minikube simulando um cluster real de um único nó, com todas as funções operando.

Abaixo você acompanha um tutorial descontraído em que o canal LinuxTips instrui como instalar o Minikube, além de explicar um pouco mais sobre o Kubernetes.

Termos

Como o tema contêiners e clusters ainda é relativamente novo, alguns termos do meio não são conhecidos. São eles:

  • Contêiners: mais leves que máquinas virtuais, não precisam simular hardware ou carregar um OS completa, além de serem isolados entre si;
  • Kubelet: serviço executado nos nós que garante que os contêiners definidos foram iniciados e estão em execução;
  • Kubectl: ferramenta de configuração da linha de comando do Kubernetes;
  • Namespace: possibilita a divisão do cluster em dois ambientes, produção e teste, com a possibilidade de limitação de recursos para qualquer um dos dois;
  • Pod: grupo de contêiners presente em um único nó de trabalho, a menor unidade dentro de um cluster de Kubernetes, podem haver vários contêiners em um só pod e vários pods em um único nó. O contêiner pode rodar nginx, php, apache, e outros;
  • Replication Controller: responsável pela manutenção dos pods que estão em execução. Aqui se determina o número de contêineres responsáveis por determinado serviço;
  • Services: associação de determinada faixa de IP a um Replication Controller, atua como o ponto de entrada dos serviços.

Ver referência

Leia também...