O que é o Kubernetes?

Publicado 11/03/2024
Raios azuis irradiam de um ponto central sobre um fundo preto, criando um efeito de velocidade de dobra ou explosão de luz
By Stephanie Susnjara and Ian Smalley

Definição de Kubernetes

O Kubernetes, também conhecido como k8s ou kube, é uma plataforma de orquestração de contêineres de código aberto para agendar e automatizar a implementação, o gerenciamento e o dimensionamento de aplicações conteinerizadas.

Atualmente, o Kubernetes e o ecossistema mais amplo de tecnologias relacionadas a contêineres se fundiram para formar os blocos de construção da infraestrutura de nuvem moderna. Esse ecossistema permite que as organizações ofereçam um ambiente de computação multinuvem híbrida altamente produtivo para realizar tarefas complexas relacionadas à infraestrutura e às operações. Também oferece suporte ao desenvolvimento nativo da nuvem, permitindo uma abordagem de "construir uma vez e implementar em qualquer lugar" para a criação de aplicações.

A palavra Kubernetes tem origem no grego, significando timoneiro ou piloto, daí o leme no logotipo Kubernetes.

Contexto: contêineres, Docker e Kubernetes

O que são contêineres?

Contêineres são componentes de aplicações leves e executáveis que combinam o código-fonte com todas as bibliotecas do sistema operacional (SO) e as dependências necessárias para executar o código em qualquer ambiente.

Os contêineres aproveitam uma forma de virtualização do SO que permite que várias aplicação compartilhem uma única instância de um sistema operacional isolando processos e controlando a quantidade de CPU, memória e disco que esses processos podem acessar. Como são menores, mais eficientes em termos de recursos e mais portáteis do que máquinas virtuais (VMs), os contêineres se tornaram as unidades de computação padrão de aplicações nativas da nuvem modernas. Os contêineres também são mais eficientes em termos de recursos. Eles permitem que você execute mais aplicações em menos máquinas (servidores virtuais e servidores físicos) com menos instâncias do sistema operacional.

Como os contêineres podem ser executados de forma consistente em qualquer lugar, eles se tornaram críticos para a arquitetura subjacente que suporta ambientes de multinuvem híbrida, uma combinação de infraestrutura local, nuvem privada, nuvem pública e mais de um serviço de nuvem de mais de um fornecedor.

O que é Docker?

O Docker é a ferramenta mais popular para criar e executar contêineres Linux. Embora formas iniciais de contêineres tenham sido introduzidas décadas atrás (com tecnologias como FreeBSD Jails e AIX Workload Partitions), os contêineres foram popularizados em 2013 quando o Docker os trouxe para as massas com uma nova implementação fácil de usar por desenvolvedores e compatível com a nuvem.

O Docker começou como um projeto de código aberto, mas hoje também se refere à Docker Inc., a empresa que desenvolve o Docker — um toolkit de contêineres comercial que se baseia no projeto de código aberto (e contribui com essas melhorias de volta para a comunidade de código aberto).

O Docker foi desenvolvido com base na tecnologia tradicional de contêineres do Linux, mas permite uma virtualização mais granular dos processos do kernel do Linux e adiciona funcionalidades para tornar os contêineres mais acessíveis para os desenvolvedores construírem, implementarem, gerenciarem e protegerem.

Embora existam hoje plataformas alternativas de tempo de execução de contêineres, como Open Container Initiative (OCI), CoreOS e Canonical (Ubuntu) LXD, o Docker é a escolha dominante. Além disso, o Docker se tornou sinônimo de contêineres e às vezes é confundido como concorrente de tecnologias complementares como o Kubernetes

Hoje, Docker e Kubernetes são as principais ferramentas de conteinerização, com o Docker dominando 82% do mercado, e o Kubernetes controlando 11,52% de participação de mercado em 2024.

Orquestração de contêineres com Kubernetes

Com a proliferação dos contêineres, hoje, uma organização pode ter centenas ou milhares de contêineres. Equipes de operações são necessárias para agendar e automatizar implementação de contêineres, rede, escalabilidade e disponibilidade. É aí que entra a orquestração de contêineres.

Baseado no Borg, a plataforma interna de orquestração de contêineres do Google, o Kubernetes foi apresentado ao público como uma ferramenta de código aberto em 2014, com Microsoft, Red Hat, IBM e outros grandes players de tecnologia aderindo como membros iniciais da comunidade Kubernetes. Em 2015, o Google doou o Kubernetes à Cloud Native Computing Foundation (CNCF), o hub de computação nativa da nuvem de código aberto e independente de fornecedores.

O Kubernetes se tornou o primeiro projeto hospedado da CNCF em março de 2016. Desde então, o Kubernetes tornou-se a ferramenta de orquestração de contêineres mais usada para executar cargas de trabalho baseadas em contêineres em todo o mundo. Em um relatório da CNCF, o Kubernetes é o segundo maior projeto de código aberto do mundo (depois do Linux) e a principal ferramenta de orquestração de contêineres para 71% das empresas da Fortune 100.

Em 2018, o Kubernetes tornou-se o primeiro projeto a alcançar o status de "Graduated" na CNCF, consolidando-se como um dos projetos de código aberto com crescimento mais acelerado da história. Embora outras opções de orquestração de contêineres, mais notavelmente Docker Swarm e Apache Mesos, tenham ganhado alguma força no início, o Kubernetes rapidamente se tornou a opção mais adotada.

Desde que o Kubernetes entrou para a CNCF em 2016, o número de colaboradores cresceu para 8.012, um aumento de 996%. Até o momento da redação desse texto, os colaboradores adicionaram mais de 123.000 commits ao repositório Kubernetes no GitHub.

O que o Kubernetes faz?

O Kubernetes agenda e automatiza tarefas relacionadas a contêineres durante todo o ciclo de vida das aplicações, incluindo as seguintes.

Implementação

Implementar um número específico de contêineres em um host específico e mantê-los em execução no estado desejado.

Implementações

Um lançamento é uma alteração em uma implementação. O Kubernetes permite iniciar, pausar, retomar ou reverter lançamentos.

Descoberta de serviços

O Kubernetes pode expor automaticamente um contêiner à internet ou a outros contêineres usando um nome de Sistema de Nomes de Domínio (DNS) ou endereço IP.

Armazenamento provisionamento

Defina o Kubernetes para montar armazenamento local persistente ou em nuvem para contêineres, conforme a necessidade.

Balanceamento de Carga

Com base na utilização da CPU ou métricas personalizadas, o balanceamento de carga do Kubernetes pode distribuir a carga de trabalho em toda a rede para manter o desempenho e a estabilidade.

Ajuste automático de escala

Quando o tráfego aumenta, o escalonamento automático do Kubernetes pode criar novos clusters conforme a necessidade para lidar com a carga de trabalho adicional.

Autocorreção para alta disponibilidade.

Quando um contêiner falha, o Kubernetes pode reiniciá-lo ou substituí-lo automaticamente para evitar o downtime. Ele também pode derrubar contêineres que não atendem a seus requisitos de verificação de integridade.

IBM DevOps

O que é DevOps?

Andrea Crawford explica o que é DevOps, seu valor e como suas práticas e ferramentas ajudam você a migrar suas aplicações por todo o pipeline de entrega de software, desde a concepção até a produção. Conduzido pelos principais líderes da IBM, o conteúdo foi concebido para ajudar os líderes empresariais a adquirir o conhecimento necessário para priorizar os investimentos em IA que podem estimular o crescimento.

Arquitetura e componentes do Kubernetes

A implementação do Kubernetes envolve clusters, os blocos de construção da arquitetura do Kubernetes. Os clusters são compostos por nós, cada um representando um único host de computação, seja uma máquina física (bare metal server) ou uma VM.

A arquitetura do Kubernetes consiste em duas partes principais: os componentes do painel de controle e os componentes que gerenciam nós individuais.

Um nó consiste de pods. São grupos de contêineres que compartilham os mesmos recursos de computação e a mesma rede. Também são a unidade de escalabilidade no Kubernetes. Se um contêiner em um pod estiver ganhando mais tráfego do que pode lidar, o Kubernetes replicará o pod em outros nós no cluster.

O plano de controle lida automaticamente com o agendamento dos pods nos nós em um cluster.

Componentes do plano de controle

Cada cluster tem um nó mestre que manipula o plano de controle do cluster. O nó mestre executa um serviço de agendador que automatiza quando e onde os contêineres são implementados com base nos requisitos de implementação do conjunto de desenvolvedores e na capacidade de computação disponível.

Os principais componentes em um cluster Kubernetes são o kube-apiserver, etcd, kube-scheduler, kube-controller-manager e cloud-controller-manager:

API server:
o servidor de interface de programação de aplicativos (API) no Kubernetes expõe a API do Kubernetes (a interface usada para gerenciar, criar e configurar clusters Kubernetes) e serve como ponto de entrada para todos os comandos e consultas.

etcd
: o etcd é um armazenamento de chave-valor distribuído e de código aberto usado para armazenar e gerenciar as informações críticas que os sistemas distribuídos precisam para continuar funcionando. No Kubernetes, o etcd gerencia os dados de configuração, dados de estado e metadados.

Scheduler:
este componente acompanha pods recém-criados e seleciona nós para que eles rodem. O Scheduler leva em consideração a disponibilidade de recursos e as restrições de alocação, os requisitos de hardware e software, e outros.

Controller-manager: um conjunto de controladores integrados, o controller-manager do Kubernetes executa um loop de controle que monitora o estado compartilhado do cluster e se comunica com o servidor da API para gerenciar recursos, pods ou endpoints. O controller-manager consiste em processos separados que são agrupados para reduzir a complexidade e executados em um único processo.

Cloud-controller-manager: este componente tem função semelhante ao link controller-manager. Ele se conecta a uma API do provedor de nuvem e separa os componentes que interagem com essa plataforma de nuvem daqueles que interagem apenas dentro do cluster.

Componentes dos nós

Os nós do trabalhador são responsáveis por implementar, executar e gerenciar aplicações em contêineres:

Kubelet:
o Kubelet é um agente de software que recebe e executa pedidos do nó principal e ajuda a garantir que os contêineres sejam executados em um pod.

Kube-proxy:
instalado em todos os nós em um cluster, o kube-proxy mantém as regras de rede no host e monitora as alterações nos serviços e pods.

Outros conceitos e terminologia do Kubernetes

  • ReplicaSet: um ReplicaSet mantém um conjunto estável de pods de réplica para cargas de trabalho específicas.

  • Implementação: a implementação controla a criação e o estado da aplicação conteinerizada e a mantém em execução. Especifica quantas réplicas de um pod devem ser executadas no cluster. Se um pod falhar, a implementação criará um novo.

  • Kubectl: desenvolvedores gerenciam as operações do cluster usando o kubectl, uma ferramenta de desenvolvedor que consiste em uma interface de linha de comando (CLI) que se comunica diretamente com a API do Kubernetes.

  • DaemonSets: os DaemonSets são responsáveis por ajudar a garantir que um pod seja criado em cada nó do cluster.

  • Complementos: os complementos do Kubernetes estendem as funções e incluem Cluster DNS (um servidor DNS que fornece registros DNS para o cluster), Web IU (um dashboard Kubernetes para gerenciar um cluster) e muito mais.

  • Service: um Kubernetes Service é uma camada de abstração que define um conjunto lógico de pods e como acessá-los. Um serviço expõe uma aplicação de rede em execução em um ou mais pods em um cluster. Fornece uma maneira abstrata de balancear a carga de pods.

O ecossistema do Kubernetes

Atualmente, há mais de 90 ofertas certificadas do Kubernetes, incluindo plataformas de gerenciamento de nível empresarial que fornecem ferramentas, atualizações e recursos complementares que aceleram o desenvolvimento e a entrega de aplicações conteinerizadas.

Kubernetes Services gerenciados

Embora o Kubernetes seja a tecnologia preferida para orquestrar aplicações em nuvem baseadas em contêiner, ele depende de outros componentes, que vão desde redes, entrada de dados, balanceamento de carga, armazenamento, integração contínua e entrega contínua (CI/CD) e muito mais, para funcionar plenamente.

Embora a auto-hospedagem de um cluster do Kubernetes em um ambiente baseado em nuvem seja possível, a configuração e o gerenciamento podem ser complexos para uma organização empresarial. É aqui que entram os Kubernetes Services gerenciados.

Com os Kubernetes Services gerenciados, o provedor normalmente gerencia os componentes do plano de controle do Kubernetes. O provedor de serviços gerenciados ajuda a automatizar processos de rotina para atualizações, balanceamento de carga, escalonamento e monitoramento. Por exemplo, o Red Hat OpenShift é um Kubernetes Service que pode ser implementado em qualquer ambiente e em todas as principais nuvens públicas, incluindo Amazon Web Services (AWS), Microsoft Azure, Google Cloud e IBM Cloud. Muitos provedores de nuvem também oferecem seus próprios Kubernetes Services gerenciados.

Ferramentas de monitoramento do Kubernetes

O monitoramento Kubernetes refere-se à coleta e análise de dados relacionados à integridade, desempenho e características de custo de aplicações conteinerizadas que rodam dentro de um cluster Kubernetes.

O monitoramento de clusters Kubernetes permite que administradores e usuários acompanhem o tempo de atividade, o uso de recursos dos clusters e a interação entre seus componentes. O monitoramento ajuda a identificar de forma rápida problemas como recursos insuficientes, falhas e nós que não podem ingressar no cluster. As soluções atuais de monitoramento Kubernetes incluem ferramentas automatizadas para gerenciamento de desempenho de aplicações (APM), observabilidade, gerenciamento de recursos de aplicações (ARM), entre outros.

Malha de serviço Istio

O Kubernetes pode implementar e dimensionar pods, mas não pode gerenciar ou automatizar o roteamento entre eles e não fornece nenhuma ferramenta para monitorar, proteger ou depurar essas conexões.

Conforme o número de contêineres em um cluster aumenta, o número de possíveis caminhos de conexão entre eles aumenta exponencialmente. Por exemplo, dois contêineres têm duas conexões em potencial, mas 10 pods têm 90, criando um possível pesadelo de configuração e gerenciamento.

O Istio, uma camada de malha de serviço configurável e de código aberto, fornece uma solução ao conectar, monitorar e proteger contêineres em um cluster do Kubernetes. Outros benefícios significativos incluem recursos para depuração aprimorada e um dashboard que equipes de DevOps e administradores podem usar para monitorar a latência, erros no tempo de serviço e outras características das conexões entre contêineres.

Computação nativa e serverless

O Knative (pronuncia-se "kay-native") é uma plataforma de código aberto que fornece um acesso fácil à computação sem servidor, o modelo de desenvolvimento e execução de aplicações de computação em nuvem, que permite aos desenvolvedores criar e executar código de aplicações sem provisionar ou gerenciar servidores ou infraestrutura de back-end.

Em vez de implementar uma instância contínua de código que fica inativa enquanto espera por solicitações, o serverless abre o código conforme a necessidade, escalando-o para cima ou para baixo conforme a demanda flutua e, então, desativa o código quando não está em uso. A computação sem servidor evita o desperdício de capacidade e poder de computação e reduz os custos, porque você só paga para executar o código quando ele estiver em execução.

Tekton

O Tekton é um framework de código aberto e independente de fornecedor para criar sistemas contínuos de integração e entrega (CI/CD) governados pela Continuous Delivery Foundation (CDF).

Como um framework do Kubernetes, o Tekton ajuda a modernizar a entrega contínua ao fornecer especificações do setor para pipelines, fluxos de trabalho e outros blocos de construção, tornando a implementação em vários provedores de nuvem ou ambientes híbridos mais rápida e fácil.

Vale a pena observar que o Tekton é o sucessor do Knative Build, que ainda é compatível com algumas distribuições do Knative. Os pipelines do Tekton se tornaram o padrão para construir imagens de contêineres e implementar em um container registry em um ambiente Kubernetes.

Casos de uso do Kubernetes

As organizações empresariais usam o Kubernetes para apoiar os seguintes casos de uso que desempenham um papel crucial na criação de uma infraestrutura de TI moderna.

Arquitetura de microsserviços ou desenvolvimento nativo da nuvem

Nativo da nuvem é uma abordagem de desenvolvimento de software para construir, implementar e gerenciar aplicações baseadas na nuvem. O principal benefício do nativo da nuvem é que ele permite que o DevOps e outras equipes programem uma vez e implementem em qualquer infraestrutura de nuvem de qualquer provedor de serviço.

Esse processo de desenvolvimento moderno se baseia em microsserviços, uma abordagem em que uma única aplicação é composta por muitos componentes ou serviços menores, pouco acoplados e implementáveis de forma independente, que são implementados em contêineres gerenciados pelo Kubernetes.

O Kubernetes ajuda a garantir que cada microsserviço tenha os recursos necessários para ser executado de forma eficaz, ao mesmo tempo em que minimiza a sobrecarga operacional associada ao gerenciamento manual de vários contêineres.

Ambientes de multinuvem híbrida

A nuvem híbrida combina e unifica a nuvem pública, a nuvem privada e a infraestrutura de data center local para criar uma infraestrutura de TI única, flexível e econômica.

Atualmente, a nuvem híbrida se fundiu com serviços de nuvem pública e multinuvem de mais de um fornecedor de nuvem, para criar um ambiente de multinuvem híbrido.

Uma abordagem de multinuvem híbrida cria maior flexibilidade e reduz a dependência de uma organização de um fornecedor, evitando o lock-in com fornecedor. Como o Kubernetes cria a base para o desenvolvimento nativo da nuvem, ele é fundamental para a adoção da multinuvem híbrida.

Aplicações em escala

O Kubernetes é compatível com a implementação de aplicativos na nuvem em grande escala com escalonamento automático. Esse processo permite que as aplicações escalem para cima ou para baixo, ajustando-se automaticamente às mudanças de demanda, com velocidade, eficiência e downtime mínimo.

A escalabilidade elástica da implementação do Kubernetes significa que recursos podem ser adicionados ou removidos com base nas mudanças no tráfego de usuários, como vendas relâmpago em sites de varejo.

Modernização de aplicativos

O Kubernetes fornece a plataforma de nuvem moderna necessária para suportar a modernização de aplicações, migrando e transformando aplicativos legados monolíticos em aplicativos em nuvem construídos sobre uma arquitetura de microsserviços.

Práticas de DevOps

A automação está no cerne do DevOps, que acelera a entrega de software de maior qualidade ao combinar e automatizar o trabalho das equipes de desenvolvimento de software e operações de TI.

O Kubernetes ajuda as equipes de DevOps a criar e atualizar aplicativos com rapidez, ao automatizar a configuração e a implementação de aplicações.

Inteligência artificial (IA) e aprendizado de máquina (ML)

Os modelos de ML e os grandes modelos de linguagem (LLMs) compatíveis com a IA incluem componentes que, separadamente, seriam difíceis e demorados de gerenciar. Ao automatizar configuração, implementação e escalabilidade em ambientes de nuvem, o Kubernetes ajuda a fornecer a agilidade e a flexibilidade necessárias para treinar, testar e implementar esses modelos complexos.

Tutoriais do Kubernetes

Se você está pronto para começar a trabalhar com o Kubernetes ou está procurando desenvolver suas habilidades com o Kubernetes e as ferramentas do ecossistema do Kubernetes, experimente um destes tutoriais:

Autores

Stephanie Susnjara

Staff Writer

IBM Think

Ian Smalley

Staff Editor

IBM Think

Soluções relacionadas
IBM Instana Observability

Aproveite o poder da IA e da automação para resolver problemas de forma proativa em todo o stack de aplicações.

Explore o IBM Instana Observability
Soluções de DevOps

Utilize softwares e ferramentas de DevOps para desenvolver, implementar e gerenciar aplicações nativas da nuvem em diversos dispositivos e ambientes.

Explore as soluções de DevOps
Serviços de consultoria em nuvem

Acelere a agilidade e o crescimento dos negócios, modernize suas aplicações de forma contínua em qualquer plataforma utilizando nossos serviços de consultoria de nuvem.

Explore os serviços de consultoria em nuvem
Dê o próximo passo

Da detecção proativa de problemas com IBM Instana a insights em tempo real em todo o seu stack, você pode manter aplicações nativas em nuvem funcionando de forma confiável.

  1. Descubra o IBM Instana
  2. Explore as soluções de DevOps