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
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:
- Orquestração do contêiner: automatiza a implementação, o tamanho e o balanceamento de carga de aplicativos em contêiner.
- Configuração declarativa: permite definir declarativamente o estado desejado dos seus aplicativos e infraestrutura, facilitando a gestão e a manutenção.
- Descoberta de serviços: inclui um mecanismo para que os aplicativos encontrem e se comuniquem entre si.
- Balanceamento de carga: distribui o tráfego em várias instâncias de um aplicativo e já vem com balanceamento de carga.
- Ajuste automático do tamanho: ajusta automaticamente o tamanho dos aplicativos com base no uso de recursos ou outras métricas.
- 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.
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.
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.
Recent Posts
Destaques da palestra do Dr. Werner Vogels: Gerir a Complexidade com Simplicidade
Dezembro 6th, 2024
O poder das parcerias: Palestra do parceiro AWS re:Invent 2024 da Dra. Ruba Borno
Dezembro 5th, 2024
Principais destaques do AWS re: Invent 2024: A visão do Dr. Swami Sivasubramanian para a IA de geração
Dezembro 5th, 2024
Principais destaques do AWS re:Invent 2024: Keynote do CEO com Matt Garman
Dezembro 4th, 2024
Destaques da apresentação do AWS re:Invent 2024 com Peter DeSantis
Dezembro 4th, 2024