Kubernetes
O Kubernetes é uma plataforma de orquestração de contêineres de código aberto que automatiza os processos de implantação, gerenciamento e dimensionamento de aplicações conteinerizadas.
Otimize seu ambiente Kubernetes Assine a newsletter da IBM
Fundo em preto e azul
O que é o Kubernetes?

Kubernetes (também conhecido como "k8s" ou "kube") é uma plataforma de orquestração de contêiner para agendar e automatizar a implantação, o gerenciamento e o dimensionamento de aplicativos em contêiner.

Kubernetes foi inicialmente desenvolvido por engenheiros da Google antes de ser disponibilizado como código aberto em 2014. É descendente da Borg, uma plataforma de orquestração de contêineres usada internamente no Google. Kubernetes significa timoneiro ou piloto em grego, daí o leme no logotipo do Kubernetes (link externo ao ibm.com ).

Atualmente, o Kubernetes e o amplo ecossistema de contêineres estão se desenvolvendo como uma plataforma de computação de uso geral que concorre, e em alguns casos supera, as máquinas virtuais (VMs) como os elementos fundamentais da infraestrutura de nuvem moderna e das aplicações. Esse ecossistema permite que as organizações forneçam uma plataforma como serviço (PaaS) de alta produtividade que aborda diversas tarefas e problemas relacionados à infraestrutura e às operações que envolvem o desenvolvimento nativo da nuvem , para que as equipes de desenvolvimento possam se concentrar exclusivamente na codificação e na inovação.     

O vídeo a seguir oferece uma ótima introdução ao básico do Kubernetes:

Automatizando a elasticidade do contêiner orientado por aplicação

Para engenheiros de plataforma e DevOps que buscam operacionalizar a velocidade de entrada no mercado e, ao mesmo tempo, garantir o desempenho dos aplicativos.

O que são contêineres?

Os contêineres são componentes de aplicativos leves e executáveis que combinam o código fonte do aplicativo 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 de sistema operacional (SO) que permite que várias aplicações compartilhem uma única instância de um SO, 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 com maior portabilidade do que as máquinas virtuais (VMs), os contêineres se tornaram as unidades de computação de facto dos modernos aplicativos nativos de nuvem

Em um estudo recente da IBM, os usuários relataram vários benefícios técnicos e comerciais específicos resultantes da adoção de contêineres e tecnologias relacionadas. 

Contêineres versus máquinas virtuais versus infraestrutura tradicional

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

Na infraestrutura tradicional, os aplicativos são executados em um servidor físico e utilizam todos os recursos disponíveis. Isso deixa você com a opção de executar vários aplicativos em um único servidor e torcer para que um deles não consuma recursos em detrimento dos outros, ou dedicar um servidor para cada aplicativo, o que desperdiça recursos e não é escalável.

As máquinas virtuais (VMs) são servidores abstratos do hardware de computador real, permitindo que você execute várias 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 você pode isolar cada aplicativo em sua própria VM, reduzindo a chance de que aplicativos rodando no mesmo hardware físico subjacente afetem uns aos outros. As VMs fazem melhor uso dos recursos e são muito mais fáceis e econômicas de escalar do que a infraestrutura tradicional. E elas são descartáveis, quando você não precisa mais executar o aplicativo, você desativa a VM.

Para obter mais informações sobre máquinas virtuais, consulte "O que são máquinas virtuais?"

Os contêineres levam essa abstração a um nível superior, especificamente, além de compartilharem o hardware virtualizado subjacente, eles também compartilham um kernel de sistema operacional virtualizado subjacente. Contêineres oferecem o mesmo isolamento, escalabilidade e descartabilidade das VMs, mas, como não carregam a carga de sua própria instância de sistema operacional, são mais leves (ou seja, ocupam menos espaço) do que VMs. Eles são mais eficientes em recursos — eles permitem que você execute mais aplicativos em menos máquinas (virtuais e físicas), com menos instâncias de sistema operacional. Os contêineres são mais facilmente portáteis em ambientes de desktop, data center e nuvem. E eles são uma excelente opção para práticas de desenvolvimento Agile e DevOps .

"O que são contêineres?" fornece uma explicação completa dos contêineres e containerização. E a publicação do blog "Contêineres vs. VMs: Qual é a diferença?" apresenta um resumo completo das diferenças.

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 amigável para 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 conjunto de ferramentas de container 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 Linux (LXC), mas permite uma virtualização mais granular dos processos do kernel Linux e adiciona recursos para tornar os contêineres mais fáceis de serem criados, implementados, gerenciados e protegidos pelos desenvolvedores.

Embora existam plataformas de container alternativas hoje em dia (como a Open Container Initiative (OCI), CoreOS e Canonical (Ubuntu) LXD), o Docker é tão amplamente preferido que é praticamente sinônimo de contêineres e às vezes é confundido como concorrente de tecnologias complementares, como o Kubernetes (veja o vídeo "Kubernetes vs. Docker: Não é uma Questão de Tudo ou Nada" mais abaixo).

Orquestração de contêineres com Kubernetes

Hoje em dia, com a proliferação dos contêineres, uma organização pode ter centenas ou milhares deles, e as equipes de operações precisaram agendar e automatizar a implementação de contêineres, a rede, a escalabilidade e a disponibilidade.E assim nasceu o mercado de orquestração de contêineres.

Embora outras opções de orquestração de contêineres, principalmente o Docker Swarm e o Apache Mesos, tenham obtido alguma tração no início, o Kubernetes rapidamente se tornou o mais amplamente adotado (na verdade, em um determinado momento, foi o projeto de software de código aberto com o crescimento mais rápido na história).

Os desenvolvedores escolheram e continuam escolhendo o Kubernetes por sua ampla funcionalidade, seu vasto e crescente ecossistema de ferramentas de código aberto de suporte e sua compatibilidade e portabilidade em diversos provedores de serviços de nuvem.Todos os principais provedores de nuvem pública — incluindo Amazon Web Services (AWS), Google Cloud, IBM Cloud e Microsoft Azure, oferecem serviços Kubernetes totalmente gerenciados.

O que o Kubernetes faz?

A Kubernetes programa e automatiza tarefas relacionadas ao contentor durante todo o ciclo de vida do aplicativo, incluindo:

  • Implementação: implemente um número específico de contêineres em um host especificado e mantenha-os funcionando no estado desejado.

  • Implementações: uma implementação é uma alteração em uma implantaçã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 DNS ou endereço IP.

  • Provisionamento de armazenamento: defina o Kubernetes para montar armazenamento local persistente ou na nuvem para seus contêineres, conforme necessário.

  • 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. 

  • Expansão automática: quando o tráfego aumenta, o dimensionamento automático do Kubernetes pode criar novos clusters conforme necessário 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 aos seus requisitos de verificação de integridade.

Kubernetes vs. Docker

Lendo até aqui você já consegue entender que, embora o Kubernetes seja uma alternativa ao Docker Swarm, ele não é (ao contrário do equívoco popular persistente) uma alternativa ou concorrente do próprio Docker.

Na verdade, se você adotou o Docker com entusiasmo e está criando implementação de contêineres com base em Docker em grande escala, a orquestração do Kubernetes é um próximo passo lógico para gerenciar essas cargas de trabalho.

Para saber mais, consulte “Kubernetes vs. Docker: It's Not an Either/Or Question":"

Arquitetura Kubernetes

Os principais componentes da arquitetura Kubernetes incluem o seguinte:

Clusters e nós (computação)

Os clusters são os alicerces da arquitetura 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 um master node (nó mestre) que serve como plano de controle para o cluster e vários worker nodes (nó de trabalho) que implementam, executam e gerenciam aplicativos containerizados. O master node executa um serviço de escalonador que automatiza quando e onde os contêineres são implementados com base nos requisitos de implantação do conjunto de desenvolvedores e na capacidade de computação disponível. Cada worker node inclui a ferramenta que está sendo usada para gerenciar os contêineres — como Docker — e um agente de software chamado Kubelet que recebe e executa pedidos do master node.

Os desenvolvedores gerenciam as operações do cluster usando o kubectl, uma interface de linha de comando (cli) que se comunica diretamente com a API do Kubernetes. 

Para saber mais sobre os clusters Kubernetes, leia: “Clusters Kubernetes: arquitetura para entrega rápida e controlada de aplicativos na nuvem"."

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 container em um pod estiver recebendo mais tráfego do que pode lidar, o Kubernetes replicará o pod em outros nós no cluster.Por esse motivo, é uma boa prática manter os pods compactos, de modo que contenham apenas os containers que precisam compartilhar recursos.

A implementação controla a criação e o estado do aplicativo em contêiner e o 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.

Para saber mais sobre as implementações do Kubernetes, consulte “Implementações do Kubernetes: comece rápido":"

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 potenciais, mas 10 pods têm 90), o que pode resultar em um pesadelo de configuração e gerenciamento.

Entre no Istio, uma camada de malha de serviços de código aberto para clusters Kubernetes. Para cada cluster do Kubernetes, o Istio adiciona um contêiner sidecar, essencialmente invisível para o programador e o administrador, que configura, monitora e gerencia as interações entre os outros contêineres.

Com o Istio, você define uma política única que configura conexões entre contêineres para que você não precise configurar cada conexão individualmente. Isso facilita a depuração das conexões entre contêineres.

O Istio também oferece um painel de controle onde 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 containers. Além disso, ele incorpora segurança, especificamente, gerenciamento de identidade que impede que usuários não autorizados falsifiquem uma chamada de serviço entre containers, e recursos de autenticação, autorização e auditoria (AAA) que profissionais de segurança podem usar para monitorar o cluster.

Leia mais sobre o Istio
Computação nativa e serverless

O Knative (pronunciado 'kay-native') é uma plataforma de código aberto que se baseia no Kubernetes e oferece duas classes importantes de benefícios para o desenvolvimento nativo em nuvem:

Knative fornece um acesso fácil para a computação serverless

A computação serverless é uma maneira relativamente nova de implementar código que torna os aplicativos nativos da nuvem mais eficientes e econômicos. Em vez de implementar uma instância contínua de código que fica inativa enquanto espera por solicitações, o serverless inicia o código conforme necessário, escalando-o para cima ou para baixo conforme a demanda flutua, e então desativa o código quando não está em uso.O Serverless evita o desperdício de capacidade e energia de computação e reduz os custos, pois você só paga para executar o código quando ele estiver realmente em execução.

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

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

Para desenvolvedores, o código de contêineres exige muitas etapas repetitivas, e a orquestração de contêineres requer muitas configurações e scripts (como gerar arquivos de configuração, instalar dependências, gerenciar registros e rastreamentos e escrever scripts de integração contínua/implementação contínua (CI/CD).)

O Knative facilita essas tarefas automatizando-as através de três componentes:

Build: o componente Build do Knative transforma automaticamente o código-fonte em um contêiner ou função nativos da nuvem. Especificamente, ele extrai o código do repositório, instala as dependências necessárias, constrói a imagem do contêiner e o coloca em um registro de contêiner para outros desenvolvedores usarem. Os desenvolvedores precisam especificar o local desses componentes para que o Knative possa encontrá-los, mas uma vez feito isso, o Knative automatiza a construção.

Servir: O componente Servir executa contêineres como serviços escalonáveis; Ele pode escalar até milhares de instâncias de contêiner ou reduzir para nenhuma (chamado de dimensionamento para zero). Além disso, o Serve tem dois recursos muito úteis: configuração, que salva versões de um contêiner (chamado instantâneos) toda vez que você envia o contêiner para produção e permite executar essas versões simultaneamente; e roteamento de serviço, que permite direcionar diferentes quantidades de tráfego para essas versões. Você pode usar esses recursos em conjunto para implementar gradualmente um rollout de contêineres ou para realizar um teste de canário de uma aplicação em contêineres antes de colocá-la em produção global.

Evento: o evento permite que eventos especificados acionem funções ou serviços baseados em contêiner. Isso é especialmente fundamental para os recursos serverless do Knative; algo precisa dizer ao sistema para abrir uma função quando necessário. O evento permite que as equipes expressem interesse em tipos de eventos e, em seguida, se conecta automaticamente ao produtor de eventos e encaminha os eventos para o contêiner, eliminando a necessidade de programar essas conexões.

Leia mais sobre o Knative
Comprometimentos do GitHub do Kubernetes e mais evidências de popularidade crescente

O Kubernetes é um dos projetos de código aberto que mais crescem na história, e esse crescimento está se acelerando. A adoção continua a crescer significativamente entre os desenvolvedores e as empresas que os empregam. Alguns pontos de dados que valem a pena observar:

  • Neste momento, mais de 120.190 commits foram feitos no repositório Kubernetes no GitHub (link externo ao site ibm.com), um aumento de quase 34.000 commits nos últimos 18 meses e há mais de 3.100 colaboradores ativos no projeto. De acordo com a Cloud Native Computing Foundation (CNCF), houve mais de 148.000 commits em todos os repositórios relacionados ao Kubernetes (incluindo o Kubernetes Dashboard e o Kubernetes MiniKube). Você pode ler todas as estatísticas aqui (link externo ao site ibm.com).

  • Mais de 2.000 empresas usam o Kubernetes em suas pilhas de software de produção. Isso inclui empresas mundialmente conhecidas, como AirBnB, Ancestry, Bose, CapitalOne, Intuit, Nordstrom, Philips, Reddit, Slack, Spotify, Tinder e, claro, IBM. Leia estes e outros estudos de caso de adoção (link externo ao site ibm.com)

  • Uma pesquisa de 2021 citada no Container Journal (link externo ao site ibm.com) descobriu que 68% dos profissionais de TI aumentaram o uso de Kubernetes durante a pandemia COVID-19.

  • De acordo com o ZipRecruiter (link externo ao site ibm.com), o salário anual médio (na América do Norte) para um trabalho relacionado com o Kubernetes é de US$ 147.732. Neste texto, existem atualmente mais de 57.000 posições relacionadas ao Kubernetes listadas no LinkedIn (link externo ao site ibm.com), em comparação com 21.000 posições listadas há apenas 18 meses.
Soluções relacionadas
Red Hat OpenShift on IBM Cloud

Com o Red Hat OpenShift on IBM Cloud, os desenvolvedores do OpenShift têm uma maneira rápida e segura de conteinerizar e implementar cargas de trabalho corporativas em clusters Kubernetes.

Explore o Red Hat OpenShift
IBM Cloud Satellite

Implemente e execute aplicativos de forma consistente em ambientes locais, de borda e em nuvens públicas de qualquer provedor de nuvem, utilizando um conjunto comum de serviços em nuvem, incluindo cadeias de ferramentas, bancos de dados e IA.

Explore as soluções de satélite da IBM Cloud
IBM Cloud Code Engine

Uma plataforma sem servidor totalmente gerenciada, o IBM Cloud Code Engine permite que você execute seu contêiner, código de aplicativo ou trabalho em lote em um tempo de execução de contêiner totalmente gerenciado.

Explorar mecanismo de código
Recursos Contêineres na empresa

A nova pesquisa da IBM documenta o impulso crescente do container e da adoção do Kubernetes.

TI flexível, resiliente e segura para sua nuvem híbrida

Os contêineres fazem parte de uma estratégia de nuvem híbrida que permite criar e gerenciar cargas de trabalho de qualquer lugar.

O que é "serverless"?

Serverless é um modelo de desenvolvimento e execução de aplicações na nuvem que permite que os desenvolvedores criem e executem código sem precisarem gerenciar servidores ou pagar por uma infraestrutura de nuvem ociosa.

Noções básicas de YAML em Kubernetes

Explore um exemplo de como um arquivo YAML é usado no Kubernetes.

Dê o próximo passo

O Red Hat OpenShift on IBM Cloud oferece aos desenvolvedores do OpenShift uma maneira rápida e segura de conteinerizar e implementar cargas de trabalho corporativas em clusters Kubernetes. Implemente clusters Kubernetes altamente disponíveis e totalmente gerenciados para seus aplicativos em contêineres com um único clique. Como a IBM gerencia o OpenShift Container Platform (OCP), você terá mais tempo para se concentrar em suas tarefas principais.

Conheça o Red Hat OpenShift on IBM Cloud