Um mergulho profundo de um arquiteto de soluções na arquitetura do Kubernetes e nos benefícios

by Raof Ahmed, Kubernetes Solution Architect, Rackspace Technology

Kubernetes Containers

 

Em 2021, 96% das organizações que participaram da pesquisa da Cloud Native Computing Foundation usavam ou avaliavam a tecnologia de contêiner. No Container Report de 2022, a Datadog descobriu que quase metade de todas as organizações que usam contêineres executavam o Kubernetes® (também conhecido como K8s) para implementar e gerenciar pelo menos alguns desses contêineres.

Apesar do crescimento generalizado de contêineres e Kubernetes, descobrimos que algumas organizações ainda não compreendem totalmente os recursos deles. Como resultado, elas não aproveitam todo o potencial dessa tecnologia. Alguns dos recursos que as organizações podem estar perdendo incluem automação, autocorreção, proteção de perda dos dados e um desempenho rentável em ambientes multinuvens e multilocatários.

Neste artigo do blog, procuro dar uma visão geral abrangente do Kubernetes e tirar algumas dúvidas para que a sua organização aproveite as oportunidades que essa excelente tecnologia de contêiner oferece.

Por que o Kubernetes?

Kubernetes é uma plataforma de código aberto para orquestração de contêineres que visa à gestão de serviços e volumes de trabalho em contêineres. Ele automatiza o ciclo de vida de aplicativos em contêineres em infraestruturas modernas - essencialmente, gerencia aplicativos em um sistema distribuído para operar como um sistema operacional de data center.

O Kubernetes faz um excelente trabalho em automatizar ambientes em contêineres, de modo que as organizações economizem tempo e aumentem a produtividade. Além disso, as organizações podem colocar o volume de trabalho em contêineres e deixar tudo como automático.

A maioria dos nossos clientes nos pede para implementar o Kubernetes no ambiente e treinar os engenheiros após a implementação. Isso é feito por uma equipe de Engenharia Elástica da Rackspace, que oferece serviços flexíveis até que os clientes se sintam autossuficientes. Já outros clientes querem que a Rackspace Technology gerencie totalmente o Kubernetes para se dedicarem a outros aspectos da empresa. Esses clientes interagem conosco pelo nosso serviço Rackspace Managed Platform for Kubernetes.

Quais são os principais recursos do Kubernetes ?

Essa tecnologia de contêiner oferece seis recursos essenciais:

  1. Orquestração do contêiner: automatiza a implementação, o tamanho e o balanceamento de carga de aplicativos em contêiner.
  2. Configuração declarativa: permite definir declarativamente o estado desejado dos seus aplicativos e infraestrutura, facilitando a gestão e a manutenção.
  3. Descoberta de serviços: inclui um mecanismo para que os aplicativos encontrem e se comuniquem entre si.
  4. Balanceamento de carga: distribui o tráfego em várias instâncias de um aplicativo e já vem com balanceamento de carga.
  5. Ajuste automático do tamanho: ajusta automaticamente o tamanho dos aplicativos com base no uso de recursos ou outras métricas.
  6. Atualizações contínuas: atualiza os aplicativos sem tempo de inatividade.

O que é modelo de arquitetura de nó de trabalho máster do Kubernetes?

A arquitetura do Kubernetes é construída em torno de um modelo de nó de trabalho máster, como visto neste diagrama.

Kubernetes Cluster
Kubernetes Cluster

1. Nó máster do Kubernetes: o nó máster (também conhecido como nó do plano de controle) é responsável por gerenciar o cluster e os respectivos recursos. Esse plano de controle serve como o sistema nervoso central do cluster. Ele supervisiona a gestão do estado do cluster, o agendamento dos aplicativos e o tratamento da comunicação entre os nós. O nó máster também armazena e gerencia os dados de configuração do cluster.

Os principais elementos do nó máster são:

  • Servidor de API: componente central do nó principal, expõe a API do Kubernetes a outros componentes do cluster. O servidor API lida com toda a comunicação entre os componentes do cluster.
  • Etcd: armazenamento do valor-chave distribuído, usado para armazenar dados de configuração do cluster. É um componente essencial do nó máster do Kubernetes porque armazena o estado do cluster.
  • Agendador: supervisiona a atribuição de pods para agrupar nós com base na disponibilidade dos recursos e nos requisitos do volume de trabalho. Para que o cluster seja executado de forma eficiente, o agendador toma decisões inteligentes sobre onde colocar os volumes de trabalho.
  • Gerente do controlador: essa função supervisiona a gestão dos vários controladores que mantêm o cluster no estado desejado. O gerenciador do controlador também contém o controlador de replicação, que garante que o número desejado de réplicas esteja sempre em execução.

As funções e responsabilidades do nó máster são:

  • Administração do cluster: supervisiona o estado geral do cluster do Kubernetes. Ele garante que todos os nós do cluster estejam operacionais e que os dados de configuração estejam atualizados.
  • Alocação dos recursos: supervisiona a gestão da alocação dos recursos em todo o cluster, garantindo que os volumes de trabalho sejam distribuídos uniformemente em todos os nós disponíveis e que o cluster seja executado com máxima eficiência.
  • Ajuste do tamanho: supervisiona a expansão ou a contração do cluster com base no volume de trabalho. Ele pode adicionar ou retirar nós conforme necessário para manter o cluster em execução na capacidade máxima.
  • Alta disponibilidade: oferece alta disponibilidade para manter os clusters em funcionamento, mesmo que um ou mais nós falhem. Para isso, emprega mecanismos de replicação e failover.

2. Nós de trabalho do Kubernetes: nó de trabalho (às vezes chamado de nó minion) é um componente do cluster que executa aplicativos no contêiner. Ele executa tarefas delegadas pelo plano de controle, como executar contêineres e gerenciar o armazenamento.

O nó de trabalho pode ser uma máquina física ou virtual que executa o sistema operacional Linux® ou Windows®. Cada nó de trabalho possui um conjunto de recursos de hardware que podem ser alocados a contêineres, como CPU, memória e armazenamento.

O nó de trabalho é alimentado por um sistema operacional que fornece a infraestrutura para a execução dos contêineres. Ele é composto de várias partes que funcionam juntas para executar aplicativos em contêineres:

  • Kubelet: um agente do nó de trabalho que se comunica com o plano de controle. É responsável por gerenciar o estado do nó, iniciar e parar contêineres e relatar o status do nó ao plano de controle.
  • Kube-proxy: proxy de rede executado em cada nó de trabalho. É responsável por gerenciar o tráfego de rede entre contêineres e serviços de cluster.
  • Tempo de execução do contêiner: o software que executa contêineres no nó de trabalho. Docker, Containerd e CRI-O estão entre os tempos de execução do contêiner aceitos pelo Kubernetes.

Ao implementar um aplicativo em contêineres em um cluster do Kubernetes, o plano de controle programa o aplicativo para ser executado em um nó de trabalho, que usa os recursos para executar o contêiner.

O kubelet se comunica com o plano de controle para obter informações, como requisitos de imagem e recursos, do contêiner. Em seguida, ele recupera a imagem do contêiner de um registro de contêiner e a inicia no nó de trabalho.

O kube-proxy gerencia o tráfego de rede entre contêineres e serviços de cluster. Ele garante que cada contêiner tenha um endereço IP distinto e possa se comunicar com outros contêineres e serviços. O contêiner é gerenciado pelo tempo de execução do contêiner no nó de trabalho. Ele protege e isola o ambiente do contêiner; e gerencia recursos como CPU, memória e armazenamento.

O que é pod do Kubernetes?

Pod do Kubernetes é a menor unidade implementável que representa uma única instância de um processo em execução no cluster. É um host lógico para um ou mais contêineres, completo e com recursos compartilhados e um espaço de nomes de rede. Ele engloba um ou mais contêineres, recursos de armazenamento e componentes de rede; e representa uma única instância de um processo em execução em um cluster. Além disso, os pods podem ser criados, ajustados ou excluídos a qualquer momento pelo Kubernetes com base na configuração da implementação.

Os pods servem para executar um ou mais contêineres intimamente relacionados, como um servidor da web e o respectivo banco de dados. Os contêineres dentro de um pod têm o mesmo espaço de nome de rede e endereço IP e podem se comunicar pela interface de rede do localhost. Os pods também compartilham o mesmo volume de armazenamento, normalmente usado para armazenar dados de aplicativos compartilhados ou arquivos de configuração entre contêineres. Isso simplifica a gestão dos dados e padroniza todo o aplicativo.

Uma das principais vantagens de usar pods é a capacidade de eles seres ampliados ou reduzidos em resposta à demanda. Se o volume de trabalho de um aplicativo aumentar, por exemplo, o Kubernetes pode criar pods para lidar com a esse volume extra. Se o volume de trabalho cair, o Kubernetes pode reduzir o número de pods em execução para otimizar o uso dos recursos.

Cada pod do Kubernetes tem o próprio endereço IP, bem como um nome de domínio totalmente qualificado (FQDN) que pode ser usado para se comunicar com outros pods e serviços no cluster. Isso facilita a gestão e a vinculação de vários pods em um aplicativo distribuído.

Os pods também podem ser configurados com vários ganchos de ciclo de vida, que permitem a execução de lógica personalizada durante o ligamento, o desligamento ou atualização de um pod. Isso pode ser útil para tarefas como iniciação dos dados, migrações de banco de dados e alterações de configuração em um aplicativo.

O que é réplica do Kubernetes?

O Kubernetes oferece vários recursos para gerenciar e operar aplicativos em contêiner, incluindo a capacidade de criar e gerenciar réplicas de aplicativos. Réplica é a cópia de um pod criado para gerar redundância e alta disponibilidade. No Kubernetes, os usuários podem criar várias réplicas de um pod e as distribuir por vários nós em um cluster. Com isso, se um pod falhar ou ficar indisponível, outro pod pode entrar e continuar atendendo ao tráfego sem interrupções.

Para gerenciar as réplicas de um pod, o Kubernetes tem dois tipos de controladores: replicação e ReplicaSet. Controladores de replicação são um mecanismo mais antigo para gerenciar réplicas do Kubernetes. ReplicaSet é o método mais novo e preferido.

O ReplicaSet é mais eficiente e flexível do que os controladores de replicação mais antigos. Ele oferece um conjunto mais robusto de recursos para a gestão das réplicas. Os usuários podem usar o ReplicaSet para expandir ou reduzir o número de réplicas com base na demanda; criar estratégias para implementar atualizações; e trocar automaticamente as réplicas com falha.

Ao criar um ReplicaSet, os usuários definem um modelo que descreve o pod a ser replicado e o número de réplicas desejadas. Em seguida, para garantir que o número desejado de réplicas esteja sempre em execução, o Kubernetes adiciona ou retira réplicas conforme necessário.

O ReplicaSet também pode ser combinado com o Kubernetes Service, uma camada de abstração que define um conjunto lógico de pods e fornece um endereço IP e um nome DNS consistentes para um grupo de réplicas. Os usuários podem acessar as réplicas de um pod com um URL consistente, independentemente de qual réplica atende à solicitação.

O que é implementação do Kubernetes?

O processo de implementação de aplicativos em contêineres em clusters do Kubernetes é conhecido como implementação do Kubernetes. Implementação é uma camada de abstração que define o estado desejado de um aplicativo em contêiner e traz uma maneira de gerenciá-lo. Ele lida com a implementação de contêineres, a expansão e atualizações contínuas.

A implementação do Kubernetes é realizada com a criação e a gestão de conjuntos de réplicas, como mostrado na imagem abaixo. Pode ser comparado a um projeto de um aplicativo em contêiner. Ele especifica o estado desejado do aplicativo, incluindo o número de réplicas, a imagem do contêiner a ser usada e quaisquer configurações. Ao criar e gerenciar um conjunto de réplicas, a implementação do Kubernetes garante que o estado desejado do aplicativo seja mantido.

Kubernetes Deployment
Kubernetes Deployment

A implementação do Kubernetes também aceita atualizações contínuas para atualizar a imagem ou a configuração do contêiner de um aplicativo sem tempo de inatividade. A atualização contínua gradualmente troca as réplicas existentes por novas, a fim de atualizar o conjunto de réplicas de forma controlada.

O uso do Kubernetes vem se expandindo à medida que mais empresas notam os benefícios, como economia na orquestração dos contêineres, implementação do volume de trabalho em várias nuvens, automação da implementação e do ajuste do tamanho e muito mais. A Rackspace Technology é a principal parceira de várias empresas líderes que desejam aproveitar as oportunidades que essa excelente tecnologia de contêineres oferece.

Nos diga como podemos ajudar sua organização a lançar e otimizar o Kubernetes - e aproveite a expertise de uma equipe dedicada e flexível de Engenharia Elástica da Rackspace.

Saiba mais sobre a gama completa de serviços da Kubernetes que oferecemos na Rackspace Technology.