Ilustração de homem usando um computador em uma sala de servidores
Freepik/macrovector

Atualizado em

A maneira como construímos e gerenciamos software em data centers está passando por uma mudança drástica. Hoje, as empresas estão adotando a conteinerização e a computação distribuída, e no coração dessa revolução está o Kubernetes (frequentemente abreviado para K8s), uma plataforma de código aberto para gerenciamento de contêineres criada pelo Google em 2014 e atualmente é mantido pela Cloud Native Computing Foundation (CNCF).

O Kubernetes permite que diversos servidores, mesmo distantes entre si, compartilhem workloads para um objetivo comum, apresentando esses workloads como serviços aos clientes. Esse processo, conhecido como processamento distribuído de dados, costumava ser restrito a aplicações monolíticas, mas Kubernetes torna todo o processo observável e gerenciável. Isso permite que as organizações:

  • Escalar aplicativos verticalmente ou horizontalmente conforme necessário para atender às demandas flutuantes, permitindo lidar com o aumento da carga de trabalho, adicionando automaticamente mais instâncias do aplicativo.
  • Melhorar a utilização de recursos distribuindo cargas de trabalho com eficiência entre os servidores.
  • Automatizar implantações e rollbacks para uma entrega de software mais rápida e confiável.
  • Aumentar a resiliência do aplicativo reiniciando automaticamente contêineres com falha e redistribuindo cargas de trabalho. Ele monitora constantemente o estado dos aplicativos e, se um aplicativo falhar, ele tentará reiniciá-lo automaticamente.

O surgimento da conteinerização, liderada pelo Docker, mudou fundamentalmente a forma como empacotamos e implantamos software. Mas gerenciar esses contêineres em escala exigia uma plataforma de orquestração robusta. O Kubernetes emergiu como o vencedor claro, oferecendo várias vantagens sobre seus concorrentes:

  • Neutralidade de fornecedor: O Kubernetes é um projeto de código aberto, eliminando o lock-in do fornecedor e promovendo um ecossistema vibrante de ferramentas e integrações.
  • Extensibilidade: O Kubernetes pode ser estendido para orquestrar não apenas contêineres, mas também máquinas virtuais, funções sem servidor e outros recursos.
  • Maturidade e estabilidade: O Kubernetes possui uma comunidade grande e ativa, garantindo desenvolvimento contínuo e suporte contínuo.
  • Portabilidade: Com o Kubernetes torna mais fácil mover aplicativos de um ambiente para outro. Você pode implantar os mesmos contêineres em diferentes plataformas de nuvem, como AWS, Google Cloud Platform e Microsoft Azure.

Mas o que são contêineres?

Contêineres são unidades padronizadas de software que empacotam código e todas as suas dependências, permitindo que o aplicativo seja executado de forma consistente e confiável em diferentes ambientes de computação. Cada contêiner é isolado, garantindo que aplicações diferentes possam ser executadas no mesmo host sem interferirem umas nas outras. Isso inclui isolamento de recursos como CPU e memória, além de dependências de software. Os contêineres são criados a partir de imagens, que são snapshots imutáveis do software e das suas dependências. Essas imagens podem ser armazenadas e recuperadas de repositórios de imagens, como o Docker Hub ou registries privados.

No Kubernetes, os contêineres não são executados isoladamente; eles são agrupados em unidades chamadas Pods. Um Pod pode conter um ou mais contêineres que compartilham recursos como IP, volume de armazenamento e espaço de nome. O Kubernetes facilita a criação, destruição e gerenciamento de contêineres em grande escala, podendo automaticamente escalar o número de réplicas de um aplicativo com base na carga de trabalho atual. Para gerenciar a criação e o gerenciamento de múltiplas réplicas de Pods, o Kubernetes utiliza Deployments, enquanto ReplicaSets garantem que um número específico de réplicas de um Pod esteja rodando a qualquer momento.

Para facilitar a comunicação entre aplicações, o Kubernetes utiliza serviços para agrupar um conjunto de Pods sob um único endereço IP ou DNS. ConfigMaps são utilizados para armazenar dados de configuração que podem ser injetados nos contêineres, enquanto Secrets armazenam dados sensíveis, como senhas e chaves de API. Além disso, volumes são utilizados para persistir dados e podem ser compartilhados entre diferentes contêineres dentro do mesmo Pod.

Orquestração e software

A orquestração é a gestão eficaz e a execução de múltiplos workloads coexistindo em uma plataforma de TI. No caso do Kubernetes, alguns workloads podem chegar à plataforma já subdivididos em microserviços. Esses microserviços ainda trabalham juntos, mas como unidades independentes. A orquestração do Kubernetes permite que essas unidades sejam multiplicadas e redistribuídas conforme necessário, e eliminadas quando não estiverem mais em uso.

Ao contrário da analogia com um maestro, que garante a execução de uma peça no tempo e ritmo corretos, no data center, o sistema operacional ainda desempenha esse papel. Kubernetes vai além, coordenando a execução de todas as partes em uma composição para máxima eficiência e desempenho suave. Ele evita que uma parte sobreponha a outra e garante que todas desempenhem seus papéis de maneira eficaz. Além disso, o orquestrador reúne todos os recursos que as partes possam necessitar, mesmo quando distribuídas em várias localizações.

Um sistema operacional torna viável a execução segura de um programa pelo processador. Kubernetes desempenha esse papel para múltiplos workloads simultaneamente, distribuídos entre vários servidores em um cluster. Não se trata de um sistema operacional escalado; o SO ainda gerencia a execução de cada programa. Em um ambiente de containers, cada container é gerido pelo sistema operacional, não pelo hipervisor.

Kubernetes, como um orquestrador, supervisiona a execução de software em um sistema cujos recursos de infraestrutura – poder de processamento, memória, armazenamento e facilidades de rede – estão unificados.

Onde o software é armazenado?

No data center moderno, o software não precisa ser “instalado” em um computador. Ele funciona como um livro emprestado de uma biblioteca que pode publicá-lo antes de emprestá-lo. No mundo da containerização, essa biblioteca é chamada de registro. Pacotes de código aberto emprestados de um registro vêm em containers totalmente montados. O ato de disponibilizar um aplicativo ou serviço via um registro para um ambiente gerido por Kubernetes é chamado de implantação. Implantar workloads refere-se à preparação do software para entrega a um cluster de servidores, onde ele é gerenciado e orquestrado.

A containerização, iniciada pela Docker Inc. e acelerada pelo Google, é agora adotada por grandes nomes como Microsoft e VMware. Inicialmente considerada um aspecto esotérico da gestão de data centers, ela impactou diretamente os usuários de serviços como Netflix, Amazon Prime, Alexa e Siri. A mudança do foco da gestão de data centers de máquinas para workloads revolucionou a entrega de aplicativos e serviços.

O que é um Workload?

Um workload é composto por uma ou mais peças de software, podendo utilizar um banco de dados compartilhado com outros workloads. É uma unidade coesa, com um propósito principal, mesmo que tenha várias partes componentes. Desenvolvedores escrevem programas, mas ao implantar containers, instruções são dadas ao orquestrador para definir os parâmetros de um workload ativo. Assim, durante a implantação, o software se torna um workload, cujos impactos no consumo de recursos do data center podem ser medidos e mitigados.

O que é um Serviço?

Nos data centers modernos, um serviço é diferente de um aplicativo. Um serviço é software que, dados determinados inputs e dados relevantes, produz um conjunto previsível de outputs. Aplicativos fornecem um ambiente visual para usar serviços, enquanto serviços se concentram em executar suas funções. A maioria dos programas orquestrados e containerizados hoje são serviços. Eles podem desempenhar funções críticas de um aplicativo, mas são unidades independentes.

Um API é um conjunto de serviços com um protocolo de comunicação especificado, projetado para ser contactado remotamente, geralmente por um navegador Web. Kubernetes é especialista em orquestrar esses serviços. Serviços são um tipo de workload e um exemplo proeminente é a função sem servidor, onde a fonte (o servidor ou cluster) não precisa ser endereçada para ser invocada. Isso permite que o usuário finja que a função existe localmente, tornando irrelevante a origem dos recursos.

A ascensão do Kubernetes

A fama do Kubernetes se deve à sua habilidade de escalar serviços conforme a demanda, um processo conhecido como scale out e scale back. Isso permite que serviços sejam subdivididos em microserviços que se comunicam pela rede, em vez de compartilharem memória e processador, escalando individualmente conforme a demanda.

As plataformas de tecnologia da informação sobre as quais nossos negócios e sistemas de comércio são construídos estão mostrando sua idade. Substituí-las depende de os benefícios superarem os custos. O Kubernetes está não apenas defendendo a lucratividade dos negócios, mas também acumulando casos de teste para provar sua eficácia.

O futuro do Kubernetes

O Kubernetes está em constante evolução, com novos recursos e funcionalidades sendo adicionados o tempo todo. Um dos desenvolvimentos mais empolgantes são as Definições de Recursos Personalizados (CRDs). Os CRDs permitem que o Kubernetes orchestre recursos além de contêineres, potencialmente incluindo máquinas virtuais, bancos de dados e até mesmo modelos de aprendizado de máquina.

Essa flexibilidade posiciona o Kubernetes como o sistema nervoso central do data center moderno. À medida que as empresas continuam a adotar a conteinerização e a computação distribuída, o Kubernetes desempenhará um papel crítico na viabilização da agilidade, escalabilidade e eficiência.

O Kubernetes é usado para escalar serviços de empresas como eBay, Goldman Sachs, The New York Times, Uber e muitas outras. De acordo com uma pesquisa da CNCF, o uso do Kubernetes aumentou significativamente nos últimos anos. Em 2019, cerca de 78% das empresas que usavam contêineres estavam usando o Kubernetes como sua plataforma de orquestração preferida. Em comparação, apenas 23% das empresas estavam usando o Kubernetes em 2016.