O que é Kubernetes?

Uma plataforma DevOps que facilita a implementação e o gerenciamento de sistemas distribuídos

Max Rehkopf Max Rehkopf

O Kubernetes é uma plataforma de código aberto que orquestra sistemas de tempo de período de execução do contêiner em um cluster de recursos de hardware em rede. Foi originalmente desenvolvido pelo Google, que precisava de uma nova maneira de executar bilhões de contêineres por semana em escala. O Google desenvolveu três diferentes sistemas de gerenciamento de contêineres com essa função ao longo dos anos, sendo o mais recente o sistema de código aberto Kubernetes.

A palavra Kubernetes é originária do grego e significa timoneiro ou piloto. O Kubernetes agora é líder de mercado e ferramenta de orquestração padrão do setor para contêineres e implementação de aplicativos distribuídos. O Kubernetes é um ápice de evolução de ferramentas e sistemas anteriores que os desenvolvedores vêm combinando para orquestrar sistemas distribuídos.

A evolução do DevOps começou a gerenciar máquinas físicas em salas de rack de servidor. Estas máquinas físicas ainda existem, mas são menos interativas. Máquinas virtuais e hardware virtual foram a próxima camada de abstração que é executada por meio de hipervisores nas máquinas físicas. Os desenvolvedores ainda estavam fazendo esforços excessivos para gerenciar a infraestrutura e as máquinas virtuais em toda a infraestrutura. Os contêineres foram desenvolvidos para permitir que os desenvolvedores se concentrassem mais no desenvolvimento de aplicativos de alto nível e menos na infraestrutura. O Kubernetes foi então introduzido para ajudar a automatizar e gerenciar contêineres em toda a infraestrutura de nuvem.

O Kubernetes ajuda os desenvolvedores a escrever aplicativos executados em um cluster, pois ele é usado para orquestração de sistemas de tempo de execução de contêiner em um cluster de recursos de hardware em rede. Como observa o Google, o “principal objetivo de design do Kubernetes é facilitar a implementação e o gerenciamento de sistemas distribuídos complexos, enquanto ainda se beneficia da utilização aprimorada que os contêineres permitem.”

O Kubernetes às vezes é chamado de K8s ou kube e agora é mantido pela Cloud Native Computing Foundation.

Para que é utilizado o Kubernetes?

O Kubernetes é usado para implementar e gerenciar um cluster de aplicativos em contêiner e pode ser usado para estabelecer sua própria plataforma de CaaS. Ele ajuda a gerenciar arquiteturas de aplicativos de microsserviços e agora é uma ferramenta essencial para a construção de pipelines de CI/CD de DevOps modernos e robustos.

Para entender melhor a relação entre Kubernetes e contêineres, é importante entender os contêineres. O Kubernetes agrupa um conjunto de contêineres. Um exemplo de conjunto de contêineres pode ser um servidor de aplicativos, cache de Redis, banco de dados SQL. Os contêineres do Docker são um processo por contêiner. O Kubernetes coloca esses contêineres em um grupo que gerencia na mesma máquina para reduzir a sobrecarga de rede e aumentar a eficiência do uso de recursos.

O Kubernetes vai provisionar e gerenciar recursos de hardware subjacentes designados em sua configuração. Em seguida, ele vai proliferar e distribuir contêineres de aplicativos pelos recursos de hardware. Assim o Kubernetes pode orquestrar contêineres entre máquinas ou na mesma máquina.

O Kubernetes também ajuda a otimizar o desenvolvimento de aplicativos para a nuvem. A maioria dos aplicativos não triviais modernos são compostos por várias responsabilidades diferentes de casos de negócios, como gerenciamento de contas, pagamentos e conteúdo. Essas responsabilidades separadas são adequadas para uma arquitetura de microsserviço. Ao usar o Kubernetes no início do desenvolvimento de um novo projeto, o design e a implementação de microsserviços muitas vezes vão produzir um forte retorno sobre o investimento. À medida que o projeto cresce, ele vai ter os benefícios da escalabilidade automática, do monitoramento e da facilidade dos recursos de implementação oferecidos pelo Kubernetes.

O Kubernetes pode ser usado para agendar trabalhos computacionais com uso intensivo de recursos. Alguns projetos podem exigir cargas de trabalho intensivas que usam recursos da máquina por um longo período. Imagine um projeto que executa uma simulação complexa como dobramento de proteínas, análise genética ou renderização gráfica 3D. Esses tipos de projetos geralmente têm um cluster dedicado de recursos computacionais para executar a simulação assíncrona. O Kubernetes é uma ferramenta ideal para gerenciar esses clusters.

O provisionamento eficiente de recursos em um cluster pode ser uma tarefa desafiadora. A necessidade de CPU e contêineres de memória pode variar com o uso. O Kubernetes tem mecanismos de escalabilidade automática horizontal e vertical. Existem 2 tipos de escalabilidade horizontal. O Kubernetes pode adicionar e remover mais pods em um ponto central ou adicionar e remover novas máquinas ao cluster. No entanto, a escalabilidade vertical vai aumentar ou diminuir os recursos da máquina local que um contêiner usa. O Kubernetes tem monitoramento integrado e um conjunto de regras configuráveis que ele analisa para determinar se a escalabilidade vai ser crescente ou decrescente.

O Kubernetes pode ser usado em conjunto com algumas ferramentas modernas de pipeline de DevOps para criar um pipeline de CI/CD, pois ele controla e automatiza implementações e atualizações de aplicativos. Essa automação de implementação, junto com um conjunto de testes automatizado robusto, engloba um pipeline completo de CI/CD.

Quem deve usar o Kubernetes?

O Kubernetes é ótimo para projetos modernos de software de alto desempenho. No entanto, há um custo de comutação caro e demorado ao mover um projeto existente para o Kubernetes. Pensando nisso, muitas vezes é mais adequado para projetos de estágio inicial. No entanto, o retorno sobre o investimento para migrar um sistema antigo e estabelecido para o Kubernetes pode valer o custo. Esta é uma decisão de custo de negócios de engenharia que deve ser cuidadosamente revisada.

Kubernetes vs. Docker

O Docker é um período de execução do contêiner, enquanto o Kubernetes é uma plataforma para executar e gerenciar contêineres de muitos períodos de execução de contêineres. O Docker é um dos muitos períodos de execução de contêineres compatíveis com o Kubernetes. Você quase pode pensar no Kubernetes como um “sistema operacional” e os contêineres do Docker como “aplicativos” que você instala no “sistema operacional”.

Por conta própria, o Docker é muito benéfico para o desenvolvimento de aplicativos modernos. Ele resolve o problema clássico de “funciona na minha máquina”, mas em nenhum outro lugar. O Docker autônomo é bastante capaz de lidar com uma implementação de alguns contêineres. Quando um sistema cresce e precisa adicionar muitos contêineres em rede entre si, o Docker autônomo pode enfrentar alguns problemas crescentes que o Kubernetes ajuda a lidar.

Noções básicas do Kubernetes

O Kubernetes é composto por muitos componentes e tem alguns conceitos a serem entendidos. Uma instalação geral do Kubernetes é conhecida como cluster. Todos os clusters do Kubernetes têm uma instância principal. Ela é responsável por gerenciar o cluster. O principal é um processo de daemon que coordena todas as atividades no cluster, como distribuições de implementação, escalonamento automático e monitoramento de integridade.

Um diagrama mostrando como o Kubernetes funciona, mostrando a instância mestre, um ponto central, kubelet e pod.

O cluster é composto por pontos centrais. Um ponto central é uma entidade de máquina como uma VM ou hardware físico que atua como uma instância de trabalho no cluster do Kubernetes. Todos os pontos centrais contêm um Kubelet, que é um processo cliente que se comunica com o processo principal usando o Kubernetes AP. Os pontos centrais também abrigam um sistema período de execução do contêiner como o Docker.

Cada ponto central contém um Kubelet. O Kubelet é o processo primordial responsável por gerenciar o ponto central e se comunicar com o principal. O Kubelet também digere um PodSpec que define o ciclo de vida e a manutenção dos contêineres nos pods aos quais é atribuído.

Os pontos centrais contêm pods, que são a menor unidade do Kubernetes. Um pod é uma abstração sobre um contêiner. Um pod em geral inclui muitos contêineres por aplicativo. Há também um contêiner oculto em cada pod conhecido como um contêiner de “pausa” que contém o namespace de rede que outros contêineres no pod usam para conversar com localhost.

Os serviços são ponteiros estáticos para pods. Como os pods são efêmeros, eles têm IPs dinâmicos que podem ser reatribuídos se o pod for reiniciado ou recriado. Pode ser inconveniente se tentar conectar a um pod por endereço IP. Os serviços ajudam garantindo que um pod tenha um endereço IP estático.

O ReplicationController é um mecanismo que garante que um determinado número de pods esteja sendo executado a qualquer momento. O ReplicationController é uma peça-chave da funcionalidade de escalonamento automático do Kubernetes. Se houver muitos pods, o controlador de replicação vai fazer a remoção deles e, se houver muito poucos, o controlador de replicação vai criar novos pods. ReplicationSets são os sucessores do ReplicationController, eles fazem basicamente a mesma coisa, mas os ReplicationSets têm utilitários que facilitam o direcionamento de um conjunto de pods.

Kubectl é a interface de linha de comando para executar comandos em um cluster do Kubernetes. O Kubectl tem uma extensa lista de comandos e opções disponíveis para gerenciar o Kubernetes.

O Kubernetes pode ser implementado em hardware físico ou virtual. MiniKube é uma versão leve do Kubernetes que é usada para desenvolvimento e vai criar uma VM em sua máquina local que implementa um cluster simples com apenas um ponto central.

Como funciona o Kubernetes?

O Kubernetes opera em um ciclo trifásico de verificações e saldos. As três fases de um ciclo do Kubernetes são as seguintes:

Observar
Durante a fase de observação, o Kubernetes agrega um instantâneo do estado atual do cluster. Os Kubelets coletam informações de estado sobre os respectivos pontos centrais e alimentam esse estado de volta ao processo principal, dando a ele uma visão holística do estado atual dos clusters.

Verificar diferenças
O instantâneo de estado da fase de observação é então comparado aos parâmetros esperados do cluster estático especificados na configuração do Kubernetes. Quaisquer discrepâncias entre o estado atual e o estado de cluster esperado são identificadas e programadas para ação.

Tome medidas
O principal então emite comandos para trazer o cluster de volta ao estado esperado. Pode ser remoção ou criação de pods, escalabilidade horizontal ou vertical entre pontos centrais e muito mais.

As três fases acima foram descrições gerais do ciclo do Kubernetes. No entanto, um cluster do Kubernetes pode na verdade ter muitos ciclos diferentes. Esses ciclos são executados por controladores. O ReplicationController segue as fases de ciclos. Durante a fase de ação, o RC é o único responsável por selecionar ou criar novos pods gerenciados pelo conjunto de réplicas.

Resumo

Como o Kubernetes é de código aberto, ele permite a liberdade de aproveitar as infraestruturas de nuvem local, híbrida ou pública. E permite que você mova cargas de trabalho sem esforço para onde for importante para você. O Kubernetes pode ser combinado com ferramentas modernas de pipeline, como o Jenkins X, para criar sistemas de CI/CD altamente ágeis e enxutos e deve ser utilizado por qualquer equipe de DevOps moderna e de alto desempenho.