Capítulo 9: Oracle Kubernetes Engine (OKE)
9.2 Introdução ao Kubernetes
Os contêineres já se consolidaram como uma solução eficaz para a execução de aplicações. O Docker, em particular, oferece a poderosa capacidade de transferir uma aplicação e suas dependências de forma simples entre diferentes máquinas.
À medida que as organizações começaram a adotar contêineres para desenvolver e implantar suas aplicações, surgiu a necessidade de uma plataforma que pudesse simplificar o gerenciamento dessas aplicações.
Kubernetes, frequentemente abreviado como K8s, foi desenvolvido para ser um orquestrador de contêineres que possui a responsabilidade de gerenciar e automatizar o ciclo de vida de aplicações em contêineres, facilitando a implantação, operação e escalabilidade dessas aplicações em ambientes complexos.
Ele abstrai toda a infraestrutura de hardware do datacenter, transformando-a em um único e grande recurso computacional. Como resultado, o Kubernetes se consolidou como a plataforma ideal para implantar aplicações nativos da nuvem (Cloud Native), sendo frequentemente denominado o "sistema operacional da nuvem".
O Kubernetes é projetado para funcionar em um cluster de computadores que executa de maneira distribuída diversos serviços e componentes projetados para implantar, operar e manter disponíveis as suas aplicações. O fato de serem distribuídos, possibilita escalar e torna o cluster resiliente a falhas.
Esses diversos serviços e componentes constituem o núcleo da orquestração de contêineres e serão detalhados a seguir.
Abaixo, uma figura que exibe diversos Playstation 2 foram usados para formar um cluster onde o objetivo era unir o poder computacional dos consoles para executar tarefas de computação em larga escala.

9.2.1 Problemas que o Kubernetes resolve
O Kubernetes não apenas simplifica a implantação de aplicações contêinerizadas, mas também cuida para não haver indisponibilidade, criando novas instâncias para substituir aquelas que falharam ou para atender a um aumento na demanda de utilização.
Abaixo, um alguns dos problemas que ele resolve:
Alta Disponibilidade (HA) das Aplicações
O Kubernetes garante a disponibilidade das aplicações por meio da criação de múltiplas réplicas em diferentes máquinas.
Além de serem criadas, essas réplicas são monitoradas de forma contínua. Em caso de falha, o Kubernetes as substitui automaticamente, assegurando a continuidade do serviço.
Gerenciamento de Deploy
O processo de deployment envolve a substituição de uma aplicação por uma versão mais recente. No entanto, quando realizado em um ambiente de produção, essa operação é considerada crítica, pois a aplicação está ativa e constantemente respondendo às requisições dos usuários.
O Kubernetes facilita a realização de deployments e rollbacks das aplicações sem causar impacto, através de diversas estratégias de deployment como Rolling Update, Blue-Green Deployment, Canary Deployment, A/B Testing e Shadow Deployment.
Escalabilidade
A escalabilidade refere-se à capacidade de ajustar o poder computacional de uma aplicação em resposta à demanda de uso. Nesse contexto, o Kubernetes oferece duas abordagens principais para escalabilidade: a escalabilidade horizontal e a escalabilidade vertical.
A escalabilidade horizontal é realizada por meio do Horizontal Pod Autoscaler (HPA), que permite aumentar automaticamente o número de réplicas de uma aplicação. Por outro lado, a escalabilidade vertical é gerenciada pelo Vertical Pod Autoscaler (VPA), que ajusta CPU e memória.
9.2.2 Demais implementações Kubernetes
Implementações menores:
https://docs.k3s.io/ minikube
Hoje, diversos provedores de Computação em Nuvem implementam e disponibilizam o Kubernetes como serviço.
NOTA
Red Hat OpenShift não é exclusivamente uma solução de Kubernetes em nuvem. Ele é uma plataforma de contêineres que se fundamenta no Kubernetes no qual pode ser implantada em diversas nuvens.