Assine a nossa newsletter | Receba insights sobre Transformação Digital

Entenda tudo sobre Kubernetes: um guia completo

Kubernetes

Se você costuma ler conteúdos sobre Cloud Computing, já deve ter esbarrado na palavra Kubernetes. Então vamos falar um pouco sobre Kubernetes, esse sistema fantástico de gerenciamento, desde a sua criação até a sua importância.

Como surgiu o Kubernetes

O Kubernetes foi criado pela Google, uma das maiores empresas no desenvolvimento de tecnologia para contêineres. A própria empresa afirma que utiliza os contêineres para rodar alguns de seus serviços como o Google Docs e o Gmail.

Depois de um tempo, a Google doou o Kubernetes, tornando-o um serviço Open Source, de código aberto.

Kubernetes e os contêineres

Como contêineres de navios, eles isolam. Só que neste caso, os dados de um SO (Sistema Operacional) dentro de um único hospedeiro. Serve para quando você quer executar várias instâncias dentro de uma única VM.

Você pode executar aplicativos isoladamente em um único host de VM, já que ele agrupa também suas dependências. Como os containers são protegidos e isolados você não precisa separar VMs para cada aplicativo.

Quais são as utilidades dos contêineres?

São usados, na maioria das vezes, em soluções que utilizam microsserviços. Para resumir, os contêineres virtualizam o Sistema Operacional.

E o que o Kubernetes tem a ver com tudo isso?

Os contêineres são uma solução cada vez mais adotada por organizações, pois são extremamente práticos e ágeis, isso cria uma tendência simples: uma vez que você utiliza contêineres, eles se multiplicam em uma velocidade assombrosa!

E é neste momento que o Kubernetes entra.
Para você começar com uma base, o Kubernetes faz a automação de gerenciamento de containers.

À primeira vista, o Kubernetes não é muito amigável para marinheiros de primeira viagem. Ele possui uma estrutura complexa já que existem vários componentes responsáveis por seu funcionamento.

No seu núcleo, ocorre o gerenciamento da posição dos pods em um nó de cluster.

O cluster é a combinação de vários computadores para que eles trabalhem juntos, nele contém os Masters e os nós Workers.

E os pods representam um conjunto de containers em execução no cluster. Ele cria uma camada extra de abstração permitindo solucionar parte dos problemas relacionados a sua proliferação.

Principais componentes do Kubernetes

Os componentes principais que fornecem o controle do cluster, além de serem responsáveis por executar decisões globais sobre o cluster (por exemplo, agendamento), também detectam e respondem por eventos do cluster.

Os componentes principais podem ser rodados em qualquer máquina no cluster. Para simplificar, os scripts de configuração normalmente iniciam todos os componentes principais na mesma máquina e não rodam contêineres de usuários nesta máquina.

ETCD

ETCD é o armazenamento de alta disponibilidade de informações chamadas de consistentes. Ele é utilizado como armazenamento de apoio para todos os dados de clusters do Kubernetes. Se o seu cluster de Kubernetes usa o ETCD como seu repositório de apoio, é importante você se certificar de que tem um plano de backup para esses dados.

Kube-scheduler

Kube-scheduler é o componente do master, ele observa os novos pods criados, que não possuem nenhum nó atribuído e permite que seja selecionado um nó para eles conseguirem rodar.

Os fatores levados em conta para decisões de agendamento são: requisitos individuais e coletivos de recurso, hardware/software/contratos de política, especificações de afinidade e anti-afinidade, dados locais e interferência entre cargas de trabalho e prazos.

Kube-controller-manager

Kube-controller-manager é o componente do master que roda os controladores. Pensando pela lógica, cada controle tem um processo diferente, mas para reduzir a complexidade, eles são compilados em um único binário e rodam em um único processo.

Esses controladores incluem:

  • Node controller: são responsáveis por noticiar e responder quando os nós caem.
  • Replication controller: é responsável por manter o número correto de pods para cada objeto do controlador de replicação no sistema.
  • Endpoints: preenche o objeto Endpoints (isso é, junta serviços e pods)
  • Service Account & Token Controllers: cria contas padrão e tokens de acesso à API para novos ingressantes.

Cloud Controller Manager

São controladores que interagem com os provedores de cloud. O binário cloud-controller-manager é um recurso introduzido no Kubernetes versão 1.6.

O Cloud Controller Manager executa somente loops de controlador específicos do provedor de cloud. Você pode desabilitar os loops do controlador definindo o sinalizador- cloud-provider como external ao iniciar o kube-controller-manager.

O Cloud Controller Manager permite também que o código do fornecedor de cloud e o código de Kubernetes possa evoluir independentemente um do outro. Em versões anteriores, o código principal do Kubernetes era dependente de um código específico do provedor de cloud para funcionalidade. 

Os seguintes controladores que dependem de um servidor cloud:

  • Node Controller: serve para checagem do provedor de cloud, para determinar se um nó foi deletado na cloud depois de parar de responder.
  • Route Controller: serve para definir rotas na estrutura de cloud.
  • Service Controller: para criar, atualizar e deletar balanceadores de carga do provedor de cloud.
  • Volume Controller: para criar, anexar, volumes de montagem e interagir com o provedor de cloud para orquestrar volumes.

Componentes dos nós

Os componentes dos nós rodam em qualquer nó. O mantendo e rodando os pods e fornecendo o ambiente de tempo de execução do Kubernetes.

As APIs do Kubernetes

O Kubernetes é construído em torno de uma robusta API RESTful. Cada ação realizada no Kubernetes, seja comunicação entre componentes ou comando do usuário, interage de alguma forma com a API do Kubernetes. O objetivo da API é ajudar a facilitar o estado desejado do cluster do Kubernetes.

A API do Kubernetes é um “modelo declarativo”, o que significa que se concentra no que, e não no como. Você diz o que você quer realizar e faz. Isso pode envolver a criação ou a destruição de recursos, mas você não precisa se preocupar com esses detalhes. Para criar esse estado desejado, crie objetos, que normalmente são representados por arquivos YAML chamados manifestos, e aplique-os por meio da linha de comando com a ferramenta kubectl .

Principais ferramentas de linha de comando do Kubernetes

Kubelet

Kubelet é um agente que roda em cada nó no cluster. Ele leva um conjunto de PodSpecs que são fornecidos por vários mecanismos e garantem que os containers descritos nesses PodSpecs estejam funcionando e sejam saudáveis. O kubelet só gerencia containers que foram criados pelo Kubernetes.

Kube-proxy

O Kube-proxy é um proxy de rede que roda em cada nó do cluster. Ele permite a abstração do serviço Kubernetes, mantendo as regras de rede no host e realizando o encaminhamento de conexões.

O Kube-proxy permite o encaminhamento de fluxo TCP, UDP ou round-robin TCP e encaminhamento UDP em um conjunto de funções de back-end.

Addons do Kubernetes

Addons usam os recursos do Kubernetes (DaemoSet, Desenvolvimento, etc) para implementar características do cluster. Como eles fornecem recursos no nível do cluster, os recursos com namespaces para os addons pertencem ao namespace do sistema kube. Como selecionar addons:

DNS

O Cluster DNS é um servidor DNS, além de outros servidores DNS em seu ambiente, que serve para registrar DNS nos serviços do Kubernetes.

Enquanto os outros addons não são obrigatoriamente necessários, todos os clusters do Kubernetes devem ter o cluster DNS.

Web UI (Dashboard)

O Web UI Dashboard é uma interface de usuário, baseada em web, usada para clusters de Kubernetes. Ela permite que os usuários gerenciem e solucionem problemas de aplicativos em execução no cluster, bem como o próprio cluster.

Container Resource Monitoring

Container Resource Monitoring é o processo de rastrear a operação de um aplicativo em contêiner. Ele grava métricas genéricas de séries temporais sobre contêineres em um banco de dados central e fornece uma interface para o usuário navegar nesses dados.

Cluster-level Logging

Cluster-Level-Logging é responsável por salvar os logs de container em um armazenamento de log central, que funciona com interface de pesquisa/navegação.

Case de uma empresa que usa Kubernetes

Spotify

O serviço de streaming mais popular do mundo está migrando toda a sua orquestração de containers para o Kubernetes

Criada em 2008, o Spotify, é a plataforma de streaming mais popular do mundo, que, nos últimos 10 anos, cresceu mais de 200 milhões de usuários ativos mensais em todo o mundo.

O desafio

“Nosso objetivo é capacitar criadores de conteúdo e possibilitar uma real experiência imersiva auditiva nos consumidores que temos hoje – e esperamos também, que isto aconteça com os consumidores que teremos no futuro”, diz Jai Chakrabarti, Diretor de Engenharia, Infraestrutura e Operações da Spotify.

Ao iniciar a adoção dos microsserviços e Docker, o Spotify tinha microsserviços em contêineres dentro de todas as suas VMs, usando um sistema de orquestração de containers caseiro, chamado Helios.

A solução

“Nós vimos uma incrível comunidade crescendo a cerca do Kubernetes e queríamos muito fazer parte dela”, diz Chakrabarti.

“Kubernetes é mais rico em recursos do que o Helios e mais, “Queríamos nos beneficiar da velocidade adicional e do custo reduzido, além de nos alinharmos com o restante do setor nas melhores práticas e ferramentas”. Ao mesmo tempo, o time queria contribuir com a sua experiência e influência no crescimento da comunidade Kubernetes. “A migração, que pode acontecer em paralelo com o Helios rodando, acontece sem problemas já que o “Kubernetes se encaixa muito bem como um complemento e agora como um substituto do Helios”, diz Chakrabarti.

Os resultados

O time de cloud passou a maior parte do tempo de 2018 abordando os principais problemas tecnológicos, necessários para uma migração que, segundo Chakrabarti, começou tarde naquele ano, mas que está sendo o foco principal agora em 2019.

“Uma pequena porcentagem da nossa frota foi migrada para o Kubernetes, e algumas das coisas que estamos ouvindo dos nossos times, são que eles estão tendo menos necessidade de se focar no provisionamento de capacidade manual, e mais tempo focando na entrega de recursos para o Spotify”, diz Chakrabarti.

“O maior serviço atualmente em execução no Kubernetes recebe cerca de 10 milhões de solicitações por segundo como um serviço agregado e beneficia muito no autoescalonamento” diz o Engenheiro de Confiabilidade do Site, James Wen.

Ele acrescenta, “Antes, os times tinham que esperar uma hora para criar um novo serviço e obter um host operacional para executá-lo na produção, mas com o Kubernetes, eles podem fazer isso em minutos”. Além do mais, com os recursos de empacotamento de lixo e multilocação do Kubernetes, a utilização da CPU melhorou em média de duas até três vezes.”

E você, se interessou pelo uso de Kubernetes?

Entre em contato com a nossa equipe da Kumulus e traga essa solução para a sua empresa.