Kubernetes

menu icon

Kubernetes

Kubernetes é uma plataforma de orquestração de contêiner de software livre que automatiza a implementação, o gerenciamento e o dimensionamento de aplicativos. Saiba como ele permite o desenvolvimento nativo em cloud com boa relação custo-benefício.

O que é o Kubernetes?

Kubernetes, também conhecido como "k8s" ou "kube", é uma plataforma de orquestração de contêineres para planejar e automatizar a implementação, o gerenciamento e o ajuste de escala de aplicativos em contêineres.

Kubernetes foi desenvolvido pela primeira vez por engenheiros do Google, antes de ser inaugurado em 2014. Ele é um descendente do Borg, uma plataforma de orquestração de contêineres usada internamente no Google. O termo Kubernetes significa timoneiro ou piloto em grego, daí o leme no logotipo do Kubernetes (link externo à ibm.com).

Hoje, o Kubernetes e o ecossistema de contêineres mais amplo estão amadurecendo para formar uma plataforma de computação de uso geral e ecossistema que compete, se não ultrapassa, as máquinas virtuais (VMs) como os blocos de construção básicos de aplicativos e infraestrutura modernos na cloud. Este ecossistema permite que as organizações entreguem uma Platform-as-a-Service (PaaS) de alta produtividade que aborda diversas tarefas e problemas relacionados à infraestrutura e às operações que envolvem o desenvolvimento nativo em cloud para que as equipes de desenvolvimento possam focar unicamente na codificação e inovação.     

No vídeo a seguir, Sai Vennam fornece uma explicação sobre os conceitos básicos do Kubernetes (10:59):

O que são contêineres?

Vamos começar com uma definição: Um contêiner é uma unidade de software executável em que o código do aplicativo é empacotado, juntamente com bibliotecas e dependências, de maneiras comuns para que ele possa ser executado em qualquer desktop, TI tradicional ou na cloud.

Os contêineres utilizam um tipo de virtualização de sistema operacional (S.O.) que permite que diversos aplicativos compartilhem o sistema operacional ao isolar processos e controlar a quantia de CPU, memória e disco que esses processos podem acessar.

Contêineres vs. máquinas virtuais vs. infraestrutura tradicional

Pode ser mais fácil ou útil entender os contêineres como o último ponto do processo de automação e abstração da infraestrutura de TI.

Na infraestrutura tradicional, os aplicativos são executados em um servidor físico e capturam todos os recursos possíveis. Isso lhe dá a escolha de executar vários aplicativos em um único servidor, na esperança que um deles não monopolize recursos às custas dos outros, ou de dedicar um servidor por aplicativo, o que desperdiça recursos e não possibilita ajuste de escala.

As máquinas virtuais (VMs) são servidores abstraídos do hardware de computador real, permitindo que você execute diversas VMs em um servidor físico ou em uma única VM que abrange mais de um servidor físico. Cada VM executa sua própria instância de sistema operacional e é possível isolar cada aplicativo em sua própria VM, reduzindo a probabilidade de os aplicativos executados no mesmo hardware físico subjacente impactarem um ao outro. As VMs fazem melhor uso dos recursos e são muito mais fáceis e econômicas de dimensionar do que a infraestrutura tradicional. Além disso, elas são descartáveis e a VM é removida quando não mais for necessário executar o aplicativo.

Para obter informações adicionais sobre as VMs, consulte "Virtual Machines: An Essential Guide".

Os contêineres levam essa abstração para um nível mais elevado, especificamente compartilhando um kernel subjacente e virtualizado do SO além de compartilharem o hardware virtualizado subjacente. Os contêineres oferecem o mesmo isolamento, escalabilidade e disponibilidade das VMs, mas como não carregam a carga útil de sua própria instância de sistema operacional, eles são mais leves (ou seja, ocupam menos espaço) do que as VMs. Eles são mais eficientes na utilização de recursos, permitindo que mais aplicativos sejam executados em um número menor de máquinas (virtuais e físicas), com menos instâncias de SO. Os contêineres são mais facilmente movidos entre ambientes de área de trabalho, data center e cloud. E são muito recomendados para práticas de desenvolvimento ágil e de DevOps.

"Containers: An Essential Guide" fornece uma explicação completa sobre os contêineres e a conteinerização. E a postagem de blog "Containers vs. VMs: What's the difference?" fornece um detalhamento completo das diferenças.

O que é o Docker?

Docker é a ferramenta mais popular para criar e executar contêineres Linux®. Embora as primeiras formas de contêineres foram introduzidas há décadas (com tecnologias como FreeBSD Jails e AIX Workload Partitions), os contêineres foram democratizados em 2013 quando o Docker os apresentou às massas com uma nova implementação favorável ao desenvolvedor e à cloud.

Docker começou como um projeto de software livre, mas hoje ele também se refere à Docker Inc., a empresa que produz o Docker, um kit de ferramentas comercial de contêineres que se baseia no projeto de software livre (e retribuindo à comunidade de software livre com essas melhorias).

Docker foi desenvolvido com base na tecnologia tradicional de contêineres Linux (LXC), mas permite uma virtualização mais granular dos processos do kernel do Linux e inclui recursos para facilitar a criação, a implementação, o gerenciamento e a proteção dos contêineres para os desenvolvedores.

Embora existam atualmente plataformas alternativas de contêineres (como Open Container Initiative (OCI), CoreOS e Canonical (Ubuntu) LXD), o Docker é tão amplamente preferido que é virtualmente sinônimo de contêineres e às vezes é confundido como sendo um concorrente das tecnologias complementares, como o Kubernetes (veja o vídeo "Kubernetes vs. Docker: It’s Not an Either/Or Question” mais abaixo).

Orquestração de contêineres com o Kubernetes

Devido à proliferação dos contêineres, sendo que hoje uma organização pode ter centenas ou milhares deles, as equipes de operações tiveram de planejar e automatizar a implementação,a rede, a escalabilidade e a disponibilidade de contêineres. E assim, nasceu o mercado de orquestração de contêineres.

Ao mesmo tempo que outras opções de orquestração de contêineres,  mais notavelmente o Docker Swarm e o Apache Mesos, ganharam certa força no começo, o Kubernetes rapidamente se tornou o mais amplamente adotado (na verdade, em dado momento, ele era o projeto de crescimento mais rápido na história do software livre).

Os desenvolvedores escolheram (e continuam a escolher) o Kubernetes por sua amplitude de funcionalidades, seu vasto e crescente ecossistema de ferramentas de suporte de software livre e seu suporte e portabilidade em todos os principais provedores de cloud (alguns dos quais agora oferecem serviços totalmente gerenciados de Kubernetes).

Para obter informações adicionais sobre orquestração de contêineres, veja o vídeo "Container Orchestration Explained" (08:59):

O que o Kubernetes faz?

Kubernetes planeja e automatiza estas e outras tarefas relacionadas a contêineres:

  • Implementação: implemente um número específico de contêineres em um host específico e os mantenha em execução no estado desejado.
  • Lançamentos: um lançamento é uma mudança em uma implementação. Kubernetes permite iniciar, pausar, retomar ou recuperar lançamentos.
  • Descoberta de serviço: o Kubernetes pode expor automaticamente um contêiner à Internet ou a outros contêineres por meio de um Nome de DNS ou endereço IP.
  • Provisionamento de armazenamento: configure o Kubernetes para a montagem do armazenamento local ou em cloud persistente para seus contêineres, conforme necessário.
  • Balanceamento de carga e ajuste de escala: quando o tráfego para um contêiner aumenta, o Kubernetes pode empregar o balanceamento de carga e o dimensionamento para distribuí-lo por toda a rede e manter a estabilidade.
  • Capacidade de recuperação automática para alta disponibilidade: quando um contêiner falha, o Kubernetes pode reiniciá-lo ou substituí-lo automaticamente, além de poder retirar contêineres que não atendem aos requisitos de verificação de funcionamento.

Kubernetes vs. Docker

Se você leu até aqui, você já entende que embora o Kubernetes seja uma alternativa para o Docker Swarm, ele não é (ao contrário da concepção errada popular persistente) uma alternativa ou concorrente do próprio Docker.

Na verdade, se você adotou o Docker com sucesso e está criando implementações de contêiner em grande escala com base nele, a orquestração do Kubernetes é um próximo passo lógico para gerenciar essas cargas de trabalho. Para saber mais, assista "Kubernetes vs. Docker: It’s Not an Either/Or Question” (08:03):

Arquitetura do Kubernetes

Os principais componentes da arquitetura do Kubernetes incluem:

Clusters e nós (computação)

Clusters são a base da arquitetura do Kubernetes. Os clusters são compostos de nós, cada um dos quais representa um único host de computação (máquina virtual ou física).

Cada cluster consiste em diversos nós do trabalhador que implementam, executam e gerenciam aplicativos conteinerizados e um nó principal que controla e monitora os nós do trabalhador.

O nó principal executa um serviço planejador que automatiza quando e onde os contêineres são implementados com base nos requisitos de implementação configurados pelo desenvolvedor e na capacidade de computação disponível. Cada nó do trabalhador inclui a ferramenta que está sendo usada para gerenciar os contêineres, como o Docker, e um agente de software chamado de Kubelet que recebe e executa ordens do nó principal.

Para um aprofundamento em clusters Kubernetes, confira esta postagem do blog: "Kubernetes Clusters: Architecture for Rapid, Controlled Cloud App Delivery".

Pods e implementações (software)

Pods são grupos de contêineres que compartilham os mesmos recursos de computação e a mesma rede. Eles também são a unidade de escalabilidade no Kubernetes: se um contêiner em um pod estiver recebendo mais tráfego do que ele pode suportar, o pod será replicado a outros nós no cluster pelo Kubernetes. Por esse motivo, é uma boa prática manter os pods compactos para que contenham somente contêineres que precisam compartilhar recursos.

A implementação controla a criação e o estado do aplicativo conteinerizado, além de o manter em funcionamento. Ele especifica quantas réplicas de um pod devem ser executadas no cluster. Se um pod falhar, a implementação criará um novo.

Para saber mais sobre as implementações do Kubernetes, veja "Kubernetes Deployments:Get Started Fast” (03:54):

Para um entendimento mais detalhado sobre os elementos da arquitetura de Kubernetes, experimente este curso on-line de ritmo próprio: "Kubernetes 101".

Também é possível saber mais com a postagem do blog "Kubernetes Architecture: Four Approaches to Container Solutions".

Malha de serviços do Istio

Kubernetes pode implementar e ajustar a escala de pods, mas não é capaz de gerenciar ou automatizar o roteamento entre eles e não fornece nenhuma ferramenta para monitorar, proteger ou depurar essas conexões. À medida que o número de contêineres em um cluster aumenta, o número de possíveis caminhos de conexão entre eles cresce exponencialmente (por exemplo, dois contêineres possuem duas conexões potenciais, mas 10 pods possuem 90), criando um potencial pesadelo de configuração e gerenciamento.

Utilize o Istio, um nível de Malha de serviços de software livre para clusters Kubernetes. A cada cluster de Kubernetes, o Istio inclui um contêinersidecar, que é essencialmente invisível para o programador e o administrador, que configura, monitora e gerencia interações entre os outros contêineres.

Com o Istio, uma única política é definida para configurar as conexões entre os contêineres para que não seja necessário configurar cada conexão individualmente. Isso facilita a depuração das conexões entre contêineres.

O Istio também fornece um dashboard que as equipes e os administradores de DevOps podem usar para monitorar a latência, os erros de tempo de serviço e outras características das conexões entre os contêineres. E incorpora segurança, especificamente no gerenciamento de identidade que impede que usuários não autorizados falsifiquem  uma chamada de serviço entre contêineres, e recursos de autenticação, autorização e auditoria (AAA) que os profissionais de segurança podem usar para monitorar o cluster.

Veja o artigo "What is Istio?" para obter informações adicionais, incluindo um vídeo e alguns exemplos do Istio na prática.

Computação sem servidor e o Knative

Knative (pronuncia-se 'kay-native') é uma plataforma de software livre com base no Kubernetes e oferece duas classes importantes de benefícios para o desenvolvimento nativo em cloud:

Knative fornece um roteiro fácil para a computação sem servidor

A computação sem servidor é uma maneira relativamente nova de implementar códigos que torna os aplicativos nativos de cloud mais eficientes e com boa relação custo benefício. Em vez de implementar uma instância atual de código que fica inativa enquanto espera por solicitações, a computação sem servidor carrega o código conforme necessário, aumentando e diminuindo a capacidade à medida que a demanda oscila e, em seguida, remove o código quando não estiver em uso. A implementação sem servidor evita o desperdício de capacidade e poder de computação e reduz os custos porque você paga somente quando o código está em execução.

Knative possibilita que desenvolvedores criem um contêiner uma vez e o executem como um serviço de software ou como uma função sem servidor. Tudo isso é transparente para o desenvolvedor: Knative lida com os detalhes em segundo plano e o desenvolvedor pode se concentrar no código.

Knative simplifica o desenvolvimento e a orquestração de contêineres

Para desenvolvedores, a conteinerização de códigos requer muitas etapas repetitivas e a orquestração de contêineres requer muita configuração e script (como gerar arquivos de configuração, instalar dependências, gerenciar a criação de log e rastreio, e escrever scripts de integração /entrega contínuas(CI/CD)).

Knative torna essas tarefas mais fáceis ao automatizá-las por meio de três componentes:

  • Build:O componente Build do Knative transforma automaticamente o código-fonte em uma função ou contêiner nativo da cloud. Especificamente, ele extrai o código do repositório, instala as dependências necessárias, cria a imagem do contêiner e a coloca em um registro de contêiner para que outros desenvolvedores a usem. Os desenvolvedores precisam especificar a localização desses componentes para que o Knative possa encontrá-los, mas, uma vez feito, o Knative automatiza o desenvolvimento.
  • Serve: o componente Serve executa contêineres como serviços escaláveis e pode ampliar para até milhares de instâncias de contêiner ou reduzir para nenhuma (chamado de ajuste de escala para zero). Além disso, o Serve tem dois recursos muito úteis:
    • Configuração, que salva versões de um contêiner (chamadas de capturas instantâneas) toda vez que ele é enviado por push para produção e permite executar essas versões simultaneamente.
    • Roteamento de serviço, que permite direcionar diferentes quantias de tráfego para essas versões. É possível usar esses recursos em conjunto para criar gradualmente um lançamento de contêiner ou preparar um teste canary de um aplicativo conteinerizado antes de colocá-lo na produção global.
  • Event: o Event possibilita que eventos especificados acionem serviços ou funções com base em contêiner. Isso é especialmente essencial para os recursos sem servidor do Knative, pois o sistema precisa ser notificado sobre a necessidade de ativação de uma função. O evento permite que as equipes expressem interesse em tipos de eventos e ele então conecta automaticamente ao produtor do evento e roteia os eventos para o contêiner, eliminando a necessidade de programar essas conexões.

É possível saber mais sobre o Knative lendo "Knative: An Essential Guide".

Eventos do Kubernetes no GitHub e mais evidências do começo da sua popularidade

Kubernetes é um dos projetos de software livre que mais cresce na história, e esse crescimento está acelerando. A adoção continua a crescer entre os desenvolvedores e as empresas que os empregam. Alguns dados dignos de nota:

  • Até o presente momento, mais de 86.200 commits foram feitos ao repositório de Kubernetes no GitHub (link externo ao ibm.com), incluindo quase 6.000 commits nos últimos quatro meses, com mais de 2.300 colaboradores ativos no projeto. De acordo com a Cloud Native Computing Foundation (link externo ao ibm.com), houve mais de 148.000 commits em todos os repositórios relacionados ao Kubernetes (incluindo o Kubernetes Dashboard e o Kubernetes MiniKube).
  • Mais de 1.500 empresas usam o Kubernetes em suas soluções de software de produção. Essas empresas, AirBnB, Bose, CapitalOne, Intuit, Nordstrom, Philips, Reddit, Slack, Spotify, Tinder e, claro, IBM, são conhecidas mundialmente. Veja esses e outros estudos de caso de adoção (link externo à IBM)
  • Uma pesquisa feita em julho de 2019 citada no Container Journal (link externo ao ibm.com) constatou um aumento de 51% na adoção de Kubernetes durante os seis meses anteriores.
  • Mais de 12.000 pessoas compareceram à conferência KubeCon + CloudNative Con North America 2019 (link externo ao ibm.com), alta de mais de 3.000 em relação ao comparecimento recorde do ano anterior.
  • De acordo com a ZipRecruiter (link externo ao ibm.com), o salário médio anual (na América do Norte) para uma tarefa relacionada ao Kubernetes é de USD 144.628.Até o presente momento, há atualmente mais de 21.000 postos relacionados ao Kubernetes listados no LinkedIn (link externo ao ibm.com).

Tutoriais do Kubernetes

Se estiver pronto para começar a trabalhar com o Kubernetes ou procurando desenvolver suas qualificações em Kubernetes e em ferramentas do ecossistema do Kubernetes, experimente um desses tutoriais:

Kubernetes e IBM Cloud

Uma solução gerenciada de orquestração de contêineres, o IBM Cloud® Kubernetes Service automatiza a implementação, a operação, o ajuste de escala e o monitoramento de aplicativos conteinerizados em um cluster de hosts de computação, sem abrir mão de recursos específicos da IBM. Ele possibilita a entrega rápida de aplicativos e pode se ligar a serviços avançados, como o blockchain e o IBM® Watson.

Para uma visão geral de como um serviço gerenciado de Kubernetes pode ajudar em sua jornada rumo à cloud, assista ao nosso vídeo, "Advantages of Managed Kubernetes" (03:14):

Red Hat® OpenShift® on IBM Cloud é um serviço abrangente que oferece clusters OpenShift totalmente gerenciados na plataforma IBM Cloud. (O OpenShift é uma plataforma corporativa de Kubernetes sendo executada no Red Hat Enterprise Linux.)

Veja mais sobre o OpenShift no novo relatório da Forrester Wave: Multicloud Container Development Platforms (PDF, 415 KB).

Para começar a usar, inscreva-se para obter um IBMid e crie sua conta IBM Cloud.