Translate

Mostrar mensagens com a etiqueta Helm. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta Helm. Mostrar todas as mensagens

terça-feira, 19 de novembro de 2024

Kubernetes sem Mistérios : O Guia Definitivo do Programador COBOL Padawan para Entender a Plataforma que Virou o "z/OS da Nuvem"

 

Bellacosa Mainframe e o kubernetes sem misterios

☕ Um Café no Bellacosa Mainframe

Kubernetes sem Mistérios

O Guia Definitivo do Programador COBOL Padawan para Entender a Plataforma que Virou o "z/OS da Nuvem"

"A tecnologia muda. Os princípios permanecem."

— Adaptado da filosofia vulcana do Sr. Spock


Introdução — Quando o mundo saiu do CPD

Se você começou sua carreira em um CPD tradicional, talvez tenha ouvido frases como:

  • "O programa está em produção."

  • "Vamos fazer o deploy no fim de semana."

  • "Precisamos subir outra LPAR."

  • "Chama o operador."

  • "O Sysprog já autorizou."

Durante décadas, essa foi a realidade do desenvolvimento corporativo.

Enquanto isso, um novo mundo surgia.

Primeiro vieram os servidores Linux.

Depois as máquinas virtuais.

Depois os containers.

E finalmente apareceu uma tecnologia que mudou completamente a forma de executar aplicações:

Kubernetes.

Hoje praticamente toda grande empresa utiliza Kubernetes em algum lugar.

Google.

Amazon.

Netflix.

Spotify.

Nubank.

Mercado Livre.

IBM.

Red Hat.

Microsoft.

Oracle.

SAP.

Mas existe uma curiosidade interessante.

Embora muitos pensem que Kubernetes representa uma revolução completa, para quem trabalha há anos com IBM Z, muita coisa parece incrivelmente familiar.

Na verdade, boa parte dos conceitos que hoje são chamados de "Cloud Native" já existiam no universo mainframe, apenas com nomes diferentes.

Hoje vamos fazer exatamente essa viagem.

Pegue sua caneca de café.

Abra o ISPF...

...ou o VS Code.

E vamos descobrir por que Kubernetes talvez seja o primo moderno do z/OS.


O que é Kubernetes?

A resposta rápida costuma ser:

"É um orquestrador de containers."

Correto.

Mas extremamente incompleto.

Uma definição muito melhor seria:

Kubernetes é um Sistema Operacional Distribuído capaz de administrar milhares de aplicações executando simultaneamente em centenas ou milhares de servidores.

Perceba a palavra importante:

administrar.

Ele não executa apenas containers.

Ele administra:

  • disponibilidade

  • escalabilidade

  • armazenamento

  • rede

  • segurança

  • monitoramento

  • atualização

  • recuperação

  • balanceamento

  • automação

Ou seja...

Ele faz exatamente aquilo que o z/OS faz há décadas.


A evolução da infraestrutura

Vamos visualizar essa evolução.

Era 1 — Servidor físico

Hardware

↓

Sistema Operacional

↓

Aplicação

Muito simples.

Muito limitado.


Era 2 — Virtualização

Servidor

↓

VMware

↓

Máquinas Virtuais

↓

Aplicações

Agora era possível executar diversos servidores no mesmo hardware.


Era 3 — Docker

Em vez de criar máquinas completas...

Criamos containers.

Muito mais leves.

Muito mais rápidos.


Era 4 — Kubernetes

Agora imagine:

50 servidores

↓

20.000 containers

↓

5.000 aplicações

↓

Tudo funcionando sozinho.

É exatamente isso que Kubernetes faz.


Easter Egg nº 1 ☕

Se o Docker é como um apartamento...

O Kubernetes é o síndico.

Ele decide:

  • onde cada morador ficará

  • quem troca de prédio

  • quem recebe visitas

  • quem ganha mais espaço

  • quem precisa sair

O container apenas mora.

Quem administra é o Kubernetes.


O verdadeiro problema

Imagine uma empresa moderna.

Ela possui:

  • 600 microsserviços

  • 1.200 APIs

  • 300 bancos

  • milhares de usuários

Agora imagine que um servidor falha.

Quem:

  • percebe?

  • reinicia?

  • move aplicações?

  • redistribui carga?

  • atualiza DNS?

  • mantém disponibilidade?

Fazer isso manualmente seria impossível.

Foi exatamente para isso que Kubernetes nasceu.


Cluster — O universo inteiro

O Cluster representa todo o ambiente Kubernetes.

Pode possuir:

10 servidores

100 servidores

1.000 servidores

10.000 servidores

Tudo pertence ao mesmo ambiente.

No IBM Z...

Pense em um grande Sysplex.


Node — O servidor

Cada servidor chama-se Node.

Pode ser:

  • físico

  • virtual

  • cloud

Analogia:

No mainframe seria parecido com uma LPAR.

Cada Node executa dezenas ou centenas de Pods.


Pod — A menor unidade

Aqui existe uma confusão comum.

Muitos acreditam que Kubernetes administra containers.

Na verdade...

Ele administra Pods.

Um Pod pode conter:

Container principal

+

Container Sidecar

+

Volumes

+

Rede

Exemplo:

Aplicação Java

+

Agente OpenTelemetry

+

Coletor de Logs

Tudo no mesmo Pod.


Deployment

Imagine dizer ao Kubernetes:

Quero exatamente

5 Pods.

Ele responde:

"Sem problemas."

Se um morrer...

Outro nasce imediatamente.

Sem operador.

Sem intervenção.

Sem JCL.

Sem abrir chamado.


ReplicaSet

ReplicaSet é o guarda-costas do Deployment.

Sua única missão é garantir que o número correto de Pods esteja sempre disponível.

Se deveria haver:

8 Pods

mas existem apenas:

7

Ele cria automaticamente o oitavo.


Service

Os Pods vivem pouco.

Eles nascem.

Morrem.

Mudam de IP.

Isso seria um pesadelo para aplicações.

Então surge o Service.

Ele fornece um endereço permanente.

db-service

api-service

payment-service

Não importa onde o Pod esteja.

O nome continua igual.


Control Plane — O cérebro

Se o Cluster fosse um corpo humano...

O Control Plane seria o cérebro.

Ele contém diversos componentes.


API Server

Tudo passa por ele.

Quando digitamos:

kubectl apply

Na realidade estamos enviando chamadas REST para o API Server.

Ele decide:

  • aceitar

  • validar

  • armazenar


etcd

Este talvez seja o componente mais importante.

O etcd é um banco chave-valor extremamente rápido.

Ele guarda:

  • Pods

  • Nodes

  • ConfigMaps

  • Secrets

  • Deployments

  • Namespaces

  • Services

Em outras palavras...

Guarda o estado inteiro do Cluster.

Perder o etcd equivale a perder o "catálogo mestre" do ambiente. Por isso, backup e alta disponibilidade do etcd são fundamentais.


Scheduler

Imagine um aeroporto.

O controlador decide em qual pista cada avião pousará.

O Scheduler faz exatamente isso.

Ele escolhe:

  • qual Node possui CPU

  • qual possui memória

  • qual atende afinidade

  • qual respeita políticas


Controller Manager

Existe um conceito muito elegante chamado:

Desired State

Estado desejado.

Você informa:

Desejo:

10 Pods.

O Controller verifica continuamente.

Encontrou apenas 9?

Cria outro.

Encontrou 12?

Remove dois.

Tudo automaticamente.


Kubelet

É o agente instalado em cada servidor.

Ele conversa com o Control Plane.

Recebe ordens.

Executa containers.

Monitora saúde.

É semelhante ao operador residente daquele Node.


kubectl — O TSO do Kubernetes

Quem vem do z/OS rapidamente faz essa associação.

No mainframe:

TSO

ISPF

SDSF

No Kubernetes:

kubectl

Exemplos:

kubectl get pods

kubectl logs

kubectl exec

kubectl describe

kubectl apply

kubectl delete

É praticamente o console administrativo do Cluster.


Operators — O DBA automático

Imagine um DBA que nunca dorme.

Nunca esquece um backup.

Nunca esquece RUNSTATS.

Nunca esquece REORG.

É exatamente isso que um Operator faz.

Ele conhece profundamente determinada aplicação.

Exemplo:

Operator do PostgreSQL.

Ele sabe:

  • instalar

  • criar réplicas

  • atualizar

  • restaurar

  • monitorar

  • recuperar falhas

Automaticamente.


Escalabilidade automática

Aqui Kubernetes impressiona.

Horizontal Pod Autoscaler

CPU chegou a:

90%

Resultado:

Cria mais Pods.

Quando a carga diminui...

Remove Pods.

Tudo sem intervenção humana.


Vertical Pod Autoscaler

Em vez de criar novos Pods...

Ele aumenta memória.

512 MB

↓

2 GB

Cluster Autoscaler

Imagine que todos os servidores ficaram lotados.

Na Cloud...

Kubernetes solicita automaticamente novos servidores.

Minutos depois...

O Cluster cresceu sozinho.


Stateful Applications

Nem tudo pode ser descartado.

Banco de dados possui memória.

Histórico.

Arquivos.

Volumes.

Para isso existe:

StatefulSet

Mantém identidade.

Cada Pod possui:

  • nome fixo

  • armazenamento fixo

  • ordem previsível

Ideal para:

  • PostgreSQL

  • MongoDB

  • Kafka

  • Elasticsearch

  • Redis Cluster


Persistent Volume

Representa o disco permanente.

Mesmo que o Pod desapareça...

Os dados continuam lá.


Persistent Volume Claim

É um pedido.

A aplicação diz:

"Preciso de 100 GB SSD."

O Kubernetes procura um volume compatível e faz a associação.


CSI

Container Storage Interface.

É uma interface padronizada para integrar armazenamento.

Suporta soluções como:

  • IBM FlashSystem

  • IBM Storage Scale

  • NetApp

  • Dell

  • AWS EBS

  • Azure Disk

  • Google Persistent Disk


Networking — O assunto que mais assusta

Todo Pod recebe seu próprio endereço IP.

Isso elimina diversas limitações antigas.


DNS

Cada Service ganha um nome.

orders.default.svc.cluster.local

A aplicação usa nomes, não IPs.


kube-proxy

Encaminha tráfego para os Pods corretos.


CNI

Container Network Interface.

É o "driver de rede" do Cluster.

Exemplos:

  • Calico

  • Cilium

  • Flannel

  • OVN-Kubernetes


Network Policies

Funcionam como firewalls internos.

Você pode permitir, por exemplo:

Frontend

↓

Backend

↓

Banco

Enquanto bloqueia qualquer acesso direto do Frontend ao banco.


Service Mesh

Imagine um "corredor inteligente" entre microsserviços.

Ferramentas como Istio ou Linkerd oferecem:

  • mTLS

  • retries automáticos

  • circuit breaker

  • roteamento avançado

  • telemetria

Sem alterar o código da aplicação.


Helm — O instalador do Kubernetes

Helm é frequentemente comparado a um gerenciador de pacotes.

Com um único comando você instala aplicações completas.

helm install grafana

Pronto.

Grafana inteiro.

Com Deployments.

Services.

Volumes.

Secrets.

Tudo configurado.


Kustomize

Enquanto Helm distribui aplicações...

Kustomize adapta configurações para ambientes diferentes.

DEV.

QA.

Homologação.

Produção.

Sem duplicar arquivos.


GitOps

Talvez uma das maiores revoluções dos últimos anos.

O Git deixa de ser apenas um repositório de código.

Ele passa a representar o estado oficial da infraestrutura.

Fluxo:

Git

↓

Argo CD ou Flux

↓

Kubernetes

↓

Deploy automático

Mudou o repositório?

O Cluster converge automaticamente para a nova configuração.


Estratégias modernas de Deploy

Rolling Update

Atualiza gradualmente.

Sem indisponibilidade.


Blue-Green

Mantém duas versões completas.

Depois troca o tráfego de uma só vez.


Canary

Começa pequeno.

1%

↓

5%

↓

10%

↓

25%

↓

50%

↓

100%

Se algo der errado...

Basta interromper.


Segurança

Assim como RACF é essencial no z/OS...

Segurança também é indispensável no Kubernetes.

Principais recursos:

  • RBAC

  • IAM

  • Security Context

  • Secrets

  • Criptografia

  • Políticas de rede

  • Admission Controllers

A recomendação atual é seguir o princípio do menor privilégio: conceder apenas as permissões estritamente necessárias para cada usuário, serviço ou aplicação.


Observabilidade

Não basta executar aplicações.

É preciso enxergar o que está acontecendo.

Ferramentas comuns:

  • Prometheus

  • Grafana

  • OpenTelemetry

  • Loki

  • Jaeger

  • Alertmanager

Elas mostram:

  • consumo de CPU

  • memória

  • latência

  • erros

  • logs

  • traces distribuídos

  • eventos do cluster

No mundo IBM Z, essa função lembra o papel conjunto de RMF, SMF, OMEGAMON e ferramentas de automação, cada uma especializada em um aspecto da operação.


Comparando Kubernetes com o Mainframe

KubernetesIBM Z
ClusterSysplex
NodeLPAR
PodUnidade de execução isolada (analogia funcional a um address space para fins didáticos)
ServiceVIPA / Endereço lógico
SchedulerWLM
RBACRACF
GitOpsPipeline DBB/Jenkins/ISPW (conceitualmente)
Persistent VolumeDASD
CSICamada de integração com armazenamento
PrometheusRMF/SMF (observabilidade)

A comparação não é perfeita — as arquiteturas são diferentes —, mas ajuda a compreender como muitos conceitos fundamentais de disponibilidade, gerenciamento e automação já eram familiares para profissionais de mainframe.


Curiosidades

☕ Easter Egg nº 2

O nome Kubernetes vem do grego κυβερνήτης (kybernḗtēs), que significa timoneiro, piloto ou aquele que governa uma embarcação.

Da mesma raiz surgiu a palavra Cibernética, criada por Norbert Wiener em 1948 para representar a ciência do controle e da comunicação em máquinas e seres vivos.


☕ Easter Egg nº 3

O famoso logotipo em forma de roda do Kubernetes representa o leme de um navio, reforçando a ideia de conduzir e coordenar aplicações em um ambiente distribuído.


☕ Easter Egg nº 4

Grande parte das ideias do Kubernetes nasceu da experiência do Google com um sistema interno chamado Borg, utilizado para gerenciar milhões de workloads muito antes da popularização da computação em nuvem.


Dicas para o Programador COBOL Padawan

Se você vem do universo COBOL e IBM Z, não tente decorar centenas de comandos logo no início. Construa uma base sólida:

  1. Aprenda Docker antes de Kubernetes.

  2. Entenda bem Pods, Deployments e Services.

  3. Estude YAML, pois ele é a linguagem declarativa da plataforma.

  4. Pratique com um cluster local usando Minikube, Kind ou OpenShift Local.

  5. Aprenda kubectl como você aprendeu TSO e ISPF.

  6. Depois avance para Volumes, Networking e Segurança.

  7. Em seguida, mergulhe em Helm, GitOps, Operators e Observabilidade.

  8. Só então explore Service Mesh e arquiteturas distribuídas mais sofisticadas.

Essa sequência torna o aprendizado muito mais natural.


Conclusão — O z/OS da Era Cloud

Existe um velho ditado no universo da engenharia:

"Toda tecnologia realmente nova acaba redescobrindo uma boa ideia do passado."

Kubernetes prova isso.

Ele trouxe uma nova forma de empacotar aplicações, distribuir cargas e automatizar operações em larga escala. Porém, muitos de seus princípios — disponibilidade, isolamento, escalabilidade, controle de acesso, recuperação automática e gerenciamento centralizado — já faziam parte da cultura dos grandes sistemas corporativos há décadas.

Para o programador COBOL Padawan, Kubernetes não deve ser visto como um substituto do IBM Z, mas como uma tecnologia complementar. Hoje é comum encontrar arquiteturas híbridas nas quais aplicações executam no mainframe, APIs são expostas pelo z/OS Connect, mensagens trafegam pelo IBM MQ e microsserviços em Kubernetes consomem essas informações para construir soluções modernas.

O profissional mais valorizado do futuro não será aquele que conhece apenas o mundo distribuído ou apenas o mundo mainframe. Será aquele capaz de conectar ambos com segurança, eficiência e visão arquitetural.

Como diria o Sr. Spock:

"A lógica é o começo da sabedoria, não o fim."

No universo da computação corporativa, compreender Kubernetes amplia sua visão sobre a nuvem; compreender IBM Z revela por que muitos desses conceitos já sustentavam os sistemas mais críticos do planeta muito antes da era dos containers. É nessa combinação entre tradição e inovação que surgem as arquiteturas mais robustas do século XXI.