KUBERNETES SERIES: Clusters, História e Terminologia

Talvez a segunda tecnologia mais “hypada” dos últimos tempos, e que tem tudo a ver com a série passada, esse é o KUBERNETES. Sem papo furado, floreios ou rodeios, e antes das perguntas triviais (o que, como, aonde, por que) vamos pular direto para a sua história e importância, tanto na indústria quanto na comunidade de desenvolvedores mundo afora. Sigam-me os bons! 😅

ORIGEM E CRONOLOGIA … Before “kubernetes” There Was “Borg”

Fundada em 1998, com a premissa de ser um buscador da Internet, a Google vem ampliando seu portfólio de produtos e serviços, culminando em umas das empresas mais valiosas de todo o globo. Porém, um fato curioso é que nem todo projeto chega ao grande público, já que muitos deles são de uso interno e restrito aos funcionários. Esse é o caso do Borg, um gerenciador de cluster que precedeu o Kubernetes. Por lidar com cargas de trabalhos altíssimas e pesadas, ao longo dos anos a Google acabou ganhando bastante experiência com containers Linux (LXC). Além disso, em um segundo momento, com a chegada do DOCKER no mercado e sua rápida adoção pela comunidade, três engenheiros da própria empresa viram a oportunidade de criar algo novo e aberto a qualquer pessoa. São eles: Joe Beda, Brendan Burns e Craig McLuckie. Baseando-se no que o Borg era para a infraestrutura da Google, bem como sua enorme importância, eles decidiram arriscar algo parecido mas agora focado em ambientes e aplicações containerizados.

Foi daí que surgiu, em 2014, o Kubernetes propriamente dito. Uma plataforma de orquestração de containers de código aberto. Logo em seguida, em 2015, a Google doou o projeto à Cloud Native Computing Foundation (CNCF), sendo esta última um braço da Linux Foundation. Hoje em dia, diversos voluntários e empresas contribuem para o desenvolvimento do Kubernetes, como por exemplo, a Red Hat.

À título de curiosidade, algumas semelhanças que o Borg e o Kubernetes partilham:

  • São capazes de alocar recursos automaticamente para as aplicações com base nas necessidades de CPU, memória e outras métricas.
  • Podem detectar falhas de hardware ou software e recuperar automaticamente as aplicações afetadas.
  • Gerenciam a configuração de aplicativos em larga escala e garantem que todas as aplicações sejam executadas com a mesma configuração.
  • Monitoram o armazenamento de dados em larga escala e garantem que as informações sejam seguras e confiáveis.

MAS AFINAL … O que é Kubernetes?

Tecnicamente falando, a palavra vem do grego e pode ser traduzida como “timoneiro” ou “capitão”. Pela internet afora é comumente abreviada para K8s, devido ao número de letras (excluindo o “K” e o “s”) 🙂 O engraçado é que seu codinome original era “Project 7“, uma pequena alusão ao personagem Sete de Nove da série Star Trek (uma Borg “amigável” interpretada pela atriz Jeri Ryan)

Figura 01. haha!

Quanto ao seu logotipo, os sete raios emergindo da roda fazem referência ao timão de um navio (entidade para transporte de containers) bem como ao personagem BORG já citado anteriormente 😉

Figura 02. K8s logo

Agora sim, formalmente o mesmo é definido como é um sistema de código aberto para implantar, escalonar e gerenciar aplicativos “containerizados” de qualquer lugar. Em outras palavras, ele automatiza grande parte dos processos manuais necessários para o ciclo de vida de um ou mais containers.

Suas vantagens vão desde a possibilidade de executá-lo em hosts físicos, máquinas virtuais ou nuvens públicas/privadas/híbridas, passando por hospedagem de aplicações cloudnative (aquelas que exigem velocidade e transmissão em tempo real), chegando até o gerenciamento de containers em diferentes hosts, mas atuando como um único e sólido cluster.

CERTO … E os outros termos?

Além da palavra KUBERNETES, em sentido generalista e por vezes ambíguo, nos deparamos também com outras nomenclaturas mais específicas. Igualmente importantes para o pleno entendimento, cabe aqui explicá-las melhor. Vamos uma a uma:

>_ Cluster Um conjunto de máquinas individualmente referidas como nós, usados para executar aplicativos em container gerenciados pelo Kubernetes.

>_ Uma máquina virtual ou física. Um cluster consiste em um nó principal e vários nós de trabalho.

>_ Pod Um ou mais containers agrupados que estão em execução em determinado nó.

>_ Control plane Conjunto de processos que controlam os nós do Kubernetes. É aqui que todas as atribuições de tarefas se originam.

>_ Replicaset Garante que um número especificado de réplicas de pod esteja em execução ao mesmo tempo (em versões mais antigas o nome era Replication Controller).

>_ Serviço Descreve como acessar aplicativos representados por um conjunto de pods. Os serviços geralmente descrevem portas e balanceadores de carga e podem ser usados para controlar o acesso interno e externo a um cluster.

>_ Kubelet Um agente que verifica se os contêineres estão sendo executados em um pod.

>_ Kubectl A ferramenta de configuração da linha de comando do Kubernetes.

COMO? … Arquitetura e funcionamento

Em linhas gerais, os principais componentes do Kubernetes são: clusters, nós, pods e o plano de controle. Os clusters sempre irão conter pelo menos um, o que chamamos de nó. Por vezes dito como máquina de computação ou máquina operária, cada nó possui seu próprio ambiente Linux, podendo ser do tipo físico ou máquina virtual. Os nós servem como hospedeiros para os pods. Na prática, os nós executam pods, sendo esses últimos nada mais que containers. Acima de tudo está o plano de controle, gerenciando nós, pods e o próprio cluster, geralmente segmentados em vários computadores, para alta disponibilidade.

O Kubernetes busca a todo momento manter o estado desejado do cluster. A ideia é bastante interessante porque no mundo real existem dois estados para qualquer aplicação/infraestrutura: o atual e o desejado. O primeiro descreve a realidade, ou seja, como as coisas estão. E o segundo denota como as coisas deverão ser. Por exemplo: quantas réplicas, qual versão, quais imagens, etc.

Já em pormenores, o que temos são elementos representados na seguinte figura:

Figura 03. https://www.redhat.com/rhdc/managed-files/kubernetes_diagram-v3-770x717_0_0_v2.svg
  • kube-apiserver: fornece a interface de programação (API) para controlar o Kubernetes
  • kube-scheduler: combina novos pods com nós disponíveis
  • kube-controller-manager: executa uma série de processos para gerenciar falha de nós, cópias de controle, unir serviços e pods via endpoints, controlar contas e tokens de acesso
  • etcd: um armazenamento do tipo chave-valor para dados do cluster
  • kubelet: um agente que verifica se os contêineres estão sendo executados em um pod
  • kube-proxy: gerencia as regras de rede
  • container-runtime: Docker, containerd ou similares para execução de container

ALTERNATIVAS? … Sim, nós temos!

1. Play With Kubernetes

Play with K8s fornece um cluster Kubernetes acessível via navegador. A ideia é que você possa brincar por até 4 horas. Ao final, o ambiente é totalmente destruído e perdido! Mas é claro que sempre podemos criar um novo.

2. Docker Desktop (Windows e Mac)

Instale o Docker seguindo as instruções do seu sistema. Depois clique com o botão direito sobre o ícone e selecione Preferências. Localize a opção chamada Kubernetes e ative a mesma.

Figura 04. docker desktop

3. Kubernetes Gerenciado

Escolha um entre os principais serviços oferecidos por provedores de nuvem. Hoje em dia, os mais requisitados são:

CURTA, COMPARTILHE, COMENTE

Referências:

https://cloud.google.com/learn/what-is-kubernetes?hl=pt-br

https://www.redhat.com/pt-br/topics/containers/what-is-kubernetes

https://aws.amazon.com/pt/kubernetes/

https://www.oracle.com/br/cloud/cloud-native/container-engine-kubernetes/what-is-kubernetes/

https://kubernetes.io/blog/2015/04/borg-predecessor-to-kubernetes/

https://containerjournal.com/features/the-fathers-of-kubernetes-where-are-they-now/

1 Comment

Deixe uma resposta

Este site utiliza o Akismet para reduzir spam. Saiba como seus dados em comentários são processados.