☕ Um Café no Bellacosa Mainframe
Gostou do conteúdo? Ajude a manter o café quente, o COBOL compilando e o mainframe acordado. 😄
☕ Pague um café ao Bellacosa

Translate

Mostrar mensagens com a etiqueta Orquestração. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta Orquestração. Mostrar todas as mensagens

quarta-feira, 27 de agosto de 2025

O Paciente Loop: Patrick Jane, COBOL e o Mistério dos Agentes de IA que Nunca Conferem se Fizeram a Coisa Certa

 

Bellacosa Mainframe e os loops agentes de ia e o cobol na confusao

☕ Um Café no Bellacosa Mainframe

O Paciente Loop: Patrick Jane, COBOL e o Mistério dos Agentes de IA que Nunca Conferem se Fizeram a Coisa Certa

Existe uma cena imaginária que poderia perfeitamente abrir um episódio de The Mentalist.

Uma grande empresa acaba de colocar em produção seu novíssimo sistema de Inteligência Artificial. Há telas gigantes na sala de operações, dashboards coloridos, gráficos, APIs, modelos generativos, agentes, bancos vetoriais, cloud, Kubernetes e uma quantidade respeitável de palavras em inglês sendo pronunciadas por minuto.

O diretor anuncia orgulhoso:

— Nosso agente agora trabalha sozinho.

Patrick Jane, sentado no canto da sala, mexe distraidamente em uma xícara de chá.

Ele olha para o monitor.

Olha para o diretor.

Olha novamente para o monitor.

E pergunta:

— Como vocês sabem que ele fez a coisa certa?

Silêncio.

O arquiteto responde:

— Porque a execução terminou com sucesso.

Jane sorri.

— Eu não perguntei se terminou. Perguntei se estava certo.

Nesse momento começa o episódio.

E talvez comece também uma das discussões mais importantes da atual engenharia de Inteligência Artificial.

Porque estamos descobrindo que o maior problema dos agentes de IA não é necessariamente a inteligência.

É o loop.

Ou, mais precisamente, a ausência dele.

Bem-vindo ao café.

Pegue uma cadeira, abra uma sessão TSO imaginária, coloque ===> diante de você e venha investigar comigo um dos crimes arquiteturais mais interessantes da era da Inteligência Artificial.


A primeira pista: durante muito tempo nós confundimos resposta com solução

Quem está começando em COBOL aprende cedo uma coisa aparentemente simples.

Um programa recebe dados.

Processa.

Produz uma saída.

Algo semelhante a:

ENTRADA
   ↓
PROGRAMA COBOL
   ↓
SAÍDA

Imagine nosso programa clássico.

IDENTIFICATION DIVISION.
PROGRAM-ID. CALCSAL.

DATA DIVISION.
WORKING-STORAGE SECTION.

01 WS-SALARIO      PIC 9(7)V99.
01 WS-BONUS        PIC 9(7)V99.
01 WS-TOTAL        PIC 9(8)V99.

PROCEDURE DIVISION.

    COMPUTE WS-TOTAL = WS-SALARIO + WS-BONUS

    DISPLAY 'TOTAL: ' WS-TOTAL

    STOP RUN.

Entrou salário.

Entrou bônus.

Calculamos.

Terminamos.

Durante décadas esse modelo mental funcionou muito bem.

Depois chegaram os grandes modelos de linguagem.

E começamos praticamente da mesma forma.

PROMPT
   ↓
LLM
   ↓
RESPOSTA

Escrevemos:

Explique um programa COBOL que lê um arquivo VSAM.

O modelo responde.

Nós lemos.

Se estiver errado, corrigimos o prompt.

Ele responde novamente.

Nós verificamos outra vez.

E assim sucessivamente.

Pare por alguns segundos e observe o que aconteceu.

Existe um loop:

PROMPT
   ↓
MODELO
   ↓
RESPOSTA
   ↓
VOCÊ VERIFICA
   ↓
VOCÊ CORRIGE
   ↓
NOVO PROMPT

Quem está executando o loop?

Você.

A Inteligência Artificial não possui necessariamente um processo próprio de verificação nesse cenário.

Ela gera.

Você avalia.

Ela tenta.

Você confere.

Ela erra.

Você corrige.

O ser humano é o scheduler, o monitor, o operador e o mecanismo de recovery.

Patrick Jane provavelmente observaria:

— Interessante. Vocês chamaram a máquina de agente autônomo, mas existe um humano escondido atrás dela fazendo todo o trabalho de controle.

Touché.


Prompt Engineering não morreu. Apenas deixou de ser toda a história

Por alguns anos houve quase uma obsessão com Prompt Engineering.

Qual o melhor prompt?

Quantas instruções?

Qual temperatura?

Devemos dizer "pense passo a passo"?

Devemos fornecer exemplos?

Devemos criar personas?

Tudo isso continua importante.

Mas existe uma mudança arquitetural maior acontecendo.

A pergunta deixou de ser apenas:

Como consigo uma boa resposta?

E passou a ser:

Como construo um sistema capaz de alcançar um objetivo, verificar se o alcançou e corrigir a própria trajetória quando necessário?

Essa diferença parece pequena.

Não é.

É aproximadamente a diferença entre escrever um programa COBOL isolado e administrar uma cadeia inteira de processamento bancário.


Conheça o suspeito principal: o Execution Loop

Podemos representar um agente moderno de maneira simplificada assim:

OBJETIVO
   ↓
DESCOBRIR
   ↓
PLANEJAR
   ↓
EXECUTAR
   ↓
VERIFICAR
   ↓
MELHORAR
   └──────────→ NOVO CICLO

A postagem original fala em cinco grandes estágios.

Dependendo da literatura ou framework, os nomes mudam. Você encontrará variações como:

Plan
Execute
Observe
Evaluate
Improve

ou:

Discover
Plan
Execute
Verify
Iterate

Não se prenda aos nomes.

Observe o princípio.

O sistema não considera a geração de uma resposta como o final do trabalho.

Ele pergunta:

Funcionou?

Essa simples pergunta transforma tudo.


Primeiro estágio: descobrir

Imagine um gerente chegando para nosso agente e dizendo:

Corrija os clientes com problema.

Um agente ingênuo poderia imediatamente começar a alterar registros.

Um agente bem projetado deveria primeiro investigar.

Que clientes?

Qual problema?

Qual sistema?

Produção ou homologação?

Qual janela de processamento?

Existe autorização?

Quais tabelas podem ser modificadas?

Qual política regulatória se aplica?

Qual é a definição de sucesso?

Isso é Discover.

Antes de agir, compreender.

Um programador COBOL conhece isso melhor do que imagina.

Quando recebemos uma manutenção dizendo:

O batch está errado.

Não abrimos imediatamente o editor e começamos a trocar IF por EVALUATE.

Investigamos.

Consultamos o SYSOUT.

Verificamos o RC.

Lemos o dump.

Observamos os datasets.

Procuramos alterações recentes.

Consultamos o log.

Descobrimos o contexto.

Em outras palavras:

fazemos investigação antes de execução.

Patrick Jane aprovaria.


Segundo estágio: planejar

Depois de compreender o problema, o agente precisa decidir o que fazer.

Suponha que a tarefa seja:

Localize transações duplicadas e gere um relatório.

Um plano poderia ser:

1. Identificar fonte dos dados.
2. Consultar transações.
3. Determinar chave de duplicidade.
4. Agrupar ocorrências.
5. Validar os resultados.
6. Gerar relatório.
7. Conferir totais.
8. Entregar.

Observe algo importantíssimo.

Planejamento não é execução.

Parece óbvio, mas muitos sistemas agentic misturam os dois.

O agente começa chamando APIs enquanto ainda está tentando descobrir o problema.

Isso é como um programador entrar em produção com UPDATE antes de executar o SELECT.

Quem trabalha em ambiente corporativo sentiu um pequeno arrepio lendo essa frase.

Exatamente.


Terceiro estágio: executar

Agora o agente começa a trabalhar.

Pode consultar banco.

Pode chamar uma API.

Pode executar código.

Pode buscar documentos.

Pode criar arquivos.

Pode usar ferramentas.

Pode disparar outros agentes.

Nesse momento deixamos de falar apenas sobre LLM.

Passamos a falar sobre sistema agentic.

Isso é crucial.

Um Large Language Model sozinho é um mecanismo probabilístico de geração.

Um agente normalmente combina modelo com alguma estrutura de execução:

LLM
+
TOOLS
+
MEMÓRIA
+
REGRAS
+
CONTEXTO
+
ORQUESTRAÇÃO

Agora começamos a chegar a algo muito mais interessante.


Quarto estágio: verificar

Aqui está a pista que resolve boa parte do caso.

Imagine que pedimos:

Gere um programa COBOL que calcule juros.

A IA escreve 150 linhas perfeitamente formatadas.

Pode até ficar bonito.

Isso significa que está certo?

Não.

Precisamos compilar.

Código gerado
      ↓
Compilador
      ↓
RC?

Suponhamos:

MAXCC = 12

Fim do mistério.

O programa estava errado.

Mas imagine algo ainda mais perigoso.

Ele compila.

MAXCC = 0

Está correto?

Também não necessariamente.

Compilação comprova principalmente que o código respeitou regras sintáticas e semânticas esperadas pelo compilador.

Ainda precisamos testar.

COMPILAÇÃO
    ↓
UNIT TEST
    ↓
TESTES FUNCIONAIS
    ↓
VALIDAÇÃO DE REGRA
    ↓
SEGURANÇA
    ↓
PERFORMANCE

Somente então podemos aumentar nossa confiança.

Aqui está uma lição gigantesca:

Um resultado tecnicamente executável não é necessariamente um resultado correto.

Isso vale para COBOL.

Vale para SQL.

Vale para IA.

Vale para praticamente toda engenharia.


Evaluation Gap: o buraco entre "fiz" e "está certo"

Esse problema recebe um nome interessante:

Evaluation Gap.

O agente executa a tarefa.

Mas ninguém mede o resultado.

Imagine:

AGENTE
  ↓
EXECUTA
  ↓
SUCESSO

Qual é a definição de sucesso?

"Não deu erro"?

Perigoso.

Imagine um agente responsável por classificar dez mil documentos.

Ele processa todos.

Nenhuma exceção.

Nenhum timeout.

Nenhuma API falhou.

Operacionalmente:

100% de sucesso.

Mas depois descobrimos que 17% dos documentos foram classificados incorretamente.

Tecnicamente funcionou.

Business-wise fracassou.

Esse é o Evaluation Gap.


Um programador mainframe já conhece isso pelo Return Code

Aqui temos uma deliciosa ironia histórica.

O mundo da IA está redescobrindo conceitos que profissionais de processamento empresarial utilizam há décadas.

Considere:

//STEP01 EXEC PGM=PROGA
//STEP02 EXEC PGM=PROGB,COND=(4,LT)

Ou estruturas modernas de scheduler baseadas no resultado de etapas anteriores.

A lógica fundamental é:

EXECUTA
   ↓
VERIFICA RESULTADO
   ↓
DECIDE O PRÓXIMO PASSO

É exatamente a essência do loop agentic.

Naturalmente, IA adiciona uma dimensão probabilística e interpretativa muito maior.

Mas arquiteturalmente existe parentesco.

Não estamos inventando o conceito de controle.

Estamos aplicando controle a sistemas capazes de raciocínio probabilístico.


Single-Agent Loop: nosso investigador solitário

Agora chegamos a uma decisão arquitetural importante.

Usamos um agente?

Ou vários?

Comecemos pelo agente único.

        AGENTE
          │
     ┌────┴────┐
     ↓         ↓
  Planeja    Executa
     ↓
  Verifica
     ↓
  Corrige

Ele controla todo o ciclo.

Para muitas tarefas isso é excelente.

Imagine um agente encarregado de analisar JCL.

Ele recebe:

JOB
 ↓
PROC
 ↓
DD statements
 ↓
SYSOUT

Analisa.

Identifica problemas.

Explica.

Confere novamente.

Entrega a resposta.

Não precisamos de quinze agentes discutindo DISP=(NEW,CATLG,DELETE).

Um agente bem instruído pode resolver.

Essa arquitetura oferece enorme vantagem:

simplicidade.

Menos componentes.

Menor latência.

Menor custo.

Menos pontos de falha.

Mais facilidade de debugging.

E essa última palavra deveria estar escrita em letras douradas em todo projeto de IA corporativa.


Fleet Loop: quando Red John aparece

Mas existem casos maiores.

Imagine um agente encarregado de modernizar uma aplicação bancária COBOL com 8 milhões de linhas.

Agora nossa investigação cresceu.

Precisamos compreender COBOL.

JCL.

Db2.

CICS.

VSAM.

Regras de negócio.

APIs.

Segurança.

Testes.

Arquitetura.

Documentação.

Performance.

Talvez um único agente possa tentar.

Mas surge outra possibilidade.

Uma Fleet, ou frota de agentes especializados.

                    ORQUESTRADOR
                         │
        ┌────────────────┼───────────────┐
        ↓                ↓               ↓
   COBOL Agent       DB2 Agent      CICS Agent
        │                │               │
        └────────────────┼───────────────┘
                         ↓
                   TEST AGENT
                         ↓
                   EVALUATOR

Agora cada agente possui responsabilidade específica.

É quase uma equipe virtual.


O orquestrador é o JES da festa

Para um iniciante COBOL, podemos fazer uma analogia divertida.

Imagine o orquestrador como algo entre um scheduler, JES e gerente de processamento.

Ele não necessariamente executa todo o trabalho.

Ele determina:

quem trabalha;

quando trabalha;

com quais informações;

em qual sequência;

e o que acontece depois.

ORCHESTRATOR
      ↓
  AGENT COBOL
      ↓
   AGENT DB2
      ↓
 TEST AGENT
      ↓
 EVALUATOR

Sem orquestrador, uma frota de agentes pode virar uma reunião corporativa às 16h de sexta-feira.

Todo mundo fala.

Ninguém sabe quem decide.

E misteriosamente surge outra reunião.


Role Specialization Gap

Esse é outro problema citado.

Você cria cinco agentes.

Mas todos fazem praticamente a mesma coisa.

Um analisa.

Outro também analisa.

Outro revisa a análise.

Outro "supervisiona".

Outro analisa a revisão.

Parabéns.

Você inventou burocracia digital.

Especialização precisa significar fronteiras claras.

Por exemplo:

Maker → produz
Checker → verifica
Security → procura vulnerabilidades
Performance → analisa eficiência
Orchestrator → decide fluxo

Isso é melhor.

Temos separação de responsabilidades.

Um conceito antiquíssimo da engenharia de software reaparece.

Separation of Concerns.


Maker e Checker: uma das melhores ideias para IA empresarial

Se eu tivesse que selecionar uma arquitetura simples para ensinar a um iniciante, escolheria:

MAKER
  ↓
CHECKER

O Maker faz.

O Checker confere.

Por exemplo:

Agent A:
"Gere SQL."

Agent B:
"Verifique o SQL."

Melhor ainda:

Agent A
gera SQL
   ↓
database sandbox
   ↓
execution result
   ↓
Agent B
avalia

Aqui aparece um princípio fundamental:

sempre que possível, substitua opinião por evidência.

Em vez de perguntar ao segundo LLM:

Esse código parece correto?

Execute.

Compile.

Teste.

Compare.

Meça.

Observe.

Isso aumenta enormemente a confiabilidade.


Open Loop: Patrick Jane solto na cena do crime

Loops abertos são interessantes porque permitem exploração.

Imagine:

Descubra por que nosso processamento ficou 40% mais lento.

O agente pode explorar várias hipóteses.

CPU?
 ↓
I/O?
 ↓
Db2?
 ↓
Locks?
 ↓
WLM?
 ↓
Dataset?
 ↓
Rede?
 ↓
Mudança recente?

Ele não conhece previamente o caminho.

Investiga.

Formula hipóteses.

Descarta.

Testa.

Reformula.

É uma abordagem quase investigativa.

E muito parecida com The Mentalist.

Jane entra em uma sala e começa a observar detalhes aparentemente insignificantes.

Um copo deslocado.

Uma janela aberta.

Uma pessoa olhando para o relógio.

Uma contradição.

Um perfume.

Nenhuma pista isolada fornece a resposta.

O valor aparece quando diferentes sinais são combinados.

Um agente exploratório faz algo conceitualmente semelhante.


Mas o Open Loop possui um monstro escondido: custo

Imagine o agente dizendo:

Vou investigar mais uma hipótese.

Depois:

Mais uma.

Depois:

Talvez outra.

Depois:

Encontrei algo interessante. Vou aprofundar.

Depois:

Talvez exista uma abordagem alternativa.

Duas horas depois:

TOKENS: ☠☠☠☠☠
CUSTO:  ☠☠☠☠☠
RESULTADO: "AINDA INVESTIGANDO"

Esse é o problema de loops excessivamente abertos.

Sem critério de parada, exploração vira desperdício.

Precisamos de limites.

Por exemplo:

máximo 5 hipóteses

máximo 3 tentativas

máximo 50.000 tokens

timeout 10 minutos

confidence > 95%

stop when test passes

A palavra-chave é:

budget.

Agentes precisam de orçamento.

Não apenas monetário.

Tempo.

Tokens.

Chamadas de API.

CPU.

Ferramentas.

Tentativas.


Closed Loop: o mundo confortável do batch

Agora entramos em terreno familiar ao mainframe.

Loops fechados possuem passos bem definidos.

RECEBER
 ↓
VALIDAR
 ↓
PROCESSAR
 ↓
CONFERIR
 ↓
GRAVAR
 ↓
FINALIZAR

Isso é previsível.

E previsibilidade é ouro em ambientes corporativos.

Especialmente quando estamos falando de:

pagamentos,

folha salarial,

liquidação,

contabilidade,

regulatório,

processamento financeiro.

Ninguém quer um agente criativo decidindo:

Hoje vou experimentar uma maneira diferente de calcular a folha.

Não.

Obrigado.

Volte para homologação.


Entretanto, loops fechados também possuem um problema

Rigidez.

Imagine que uma API mudou.

O fluxo continua:

Passo 1
Passo 2
Passo 3
Passo 4

Mas Passo 3 não funciona mais.

Um workflow extremamente rígido pode repetir o erro indefinidamente.

Por isso aparece uma arquitetura extremamente interessante:

exploração aberta + execução fechada.

PROBLEMA
   ↓
OPEN LOOP
investiga soluções
   ↓
DECISÃO
   ↓
CLOSED LOOP
executa solução controlada
   ↓
VALIDAÇÃO

Essa combinação provavelmente será uma das estruturas mais úteis da IA corporativa.


Memory Gap: o agente com amnésia

Imagine conversar hoje com um agente.

Você explica durante quarenta minutos seu sistema.

Ele entende.

Amanhã você retorna.

— Então, sobre aquele problema do CICS...

Agente:

— Qual problema?

Pronto.

Temos um consultor que sofre amnésia todas as manhãs.

Não escala.

Por isso sistemas agentic precisam de memória.

Mas "memória" não significa simplesmente jogar todas as conversas anteriores dentro do prompt.

Isso seria caro, lento e eventualmente impossível.

Precisamos de camadas.

MEMÓRIA DE CURTO PRAZO
contexto da execução

MEMÓRIA DE TRABALHO
informações relevantes da tarefa

MEMÓRIA PERSISTENTE
dados entre sessões

BASE DE CONHECIMENTO
documentação externa

Um mainframer pode imaginar algo como:

WORKING-STORAGE
+
VSAM
+
DB2
+
LOG

Não é uma equivalência técnica perfeita, evidentemente.

Mas ajuda a compreender a ideia.


Context não é Memory

Aqui existe uma sutileza importante.

Contexto é aquilo que o modelo consegue considerar na execução atual.

Memória é um mecanismo capaz de preservar e recuperar informações úteis através das execuções.

Imagine uma biblioteca.

Contexto é a pilha de livros atualmente sobre sua mesa.

Memória é a biblioteca inteira e o catálogo que permite encontrar novamente os livros relevantes.

Essa distinção será cada vez mais importante.


Connectors: as mãos do agente

Um modelo sem ferramentas sabe falar.

Um agente equipado com conectores consegue agir.

Imagine:

LLM
 │
 ├── Gmail
 ├── Calendar
 ├── Git
 ├── Database
 ├── Mainframe
 ├── API
 ├── Files
 └── Monitoring

Isso muda completamente sua natureza.

Perguntar:

Qual é o saldo do cliente?

é uma tarefa linguística + acesso a dados.

Perguntar:

Transfira R$ 500.

é uma ação.

E ação exige controles muito mais fortes.

Autorização.

Auditoria.

Identidade.

Permissão.

Limites.

Confirmação.

Rollback.

É aí que Agentic AI deixa de ser brinquedo e entra no território da engenharia empresarial séria.


Automations: o agente começa a trabalhar sem ser chamado

Outro building block fundamental são automações.

Podemos ter:

EVENTO
  ↓
TRIGGER
  ↓
AGENTE
  ↓
LOOP

Exemplo:

Um job termina com RC=12.

O monitor detecta.

Um agente recebe SYSOUT.

Analisa.

Compara com incidentes anteriores.

Sugere causa.

Consulta documentação.

Cria resumo.

Encaminha para operador.

Agora temos algo muito próximo de AIOps agentic.


A regra de ouro: autonomia não significa ausência de controle

Talvez este seja um dos maiores equívocos atuais.

Algumas pessoas imaginam uma escala assim:

MAIS AUTONOMIA = MAIS EVOLUÇÃO

Nem sempre.

Em aplicações empresariais, talvez a melhor equação seja:

AUTONOMIA
+
OBSERVABILIDADE
+
LIMITES
+
VALIDAÇÃO
+
AUDITORIA
=
CONFIANÇA

Um agente completamente autônomo, porém impossível de auditar, pode ser menos útil que um agente limitado e extremamente previsível.


Human-in-the-Loop continua vivo

Existe também um ponto onde o humano deve permanecer.

Imagine:

Agente detecta
fraude provável
      ↓
Confidence 62%
      ↓
AÇÃO IRREVERSÍVEL?
      ↓
SIM
      ↓
HUMAN REVIEW

Isso não significa fracasso da automação.

Significa arquitetura responsável.

Um sistema maduro sabe quando continuar sozinho.

E sabe quando chamar alguém.


Curiosidade: Agentic AI está redescobrindo sistemas de controle

Existe algo fascinante em toda essa discussão.

Muito antes de LLMs, engenharia já estudava sistemas baseados em feedback.

Termostato.

Piloto automático.

Controladores industriais.

Sistemas de navegação.

Automação fabril.

Todos trabalham aproximadamente com:

ESTADO DESEJADO
      ↓
AÇÃO
      ↓
MEDIÇÃO
      ↓
ERRO
      ↓
CORREÇÃO

Agentic AI adiciona capacidades linguísticas e cognitivas poderosas ao princípio.

Mas o DNA do loop é antigo.


Easter Egg nº 1 — PROC LOOP

Imagine um agente COBOL escrito como se fosse um episódio de The Mentalist:

       PROCEDURE DIVISION.

       1000-INVESTIGATE.
           PERFORM 2000-DISCOVER
           PERFORM 3000-PLAN
           PERFORM 4000-EXECUTE
           PERFORM 5000-VERIFY

           IF WS-RESULTADO = 'OK'
               PERFORM 9000-SHIP
           ELSE
               PERFORM 6000-IMPROVE
               GO TO 1000-INVESTIGATE
           END-IF.

           STOP RUN.

Alguns veteranos COBOL acabaram de franzir a testa por causa daquele GO TO.

Sim.

Foi proposital.

O easter egg era fazer um mainframer sentir uma pequena perturbação na Força.


Easter Egg nº 2 — Red John era um Open Loop

Patrick Jane passou anos investigando Red John.

Hipótese.

Pista.

Nova hipótese.

Suspeito.

Erro.

Nova pista.

Outro suspeito.

Mais investigação.

Tecnicamente poderíamos dizer que a série inteira possui um gigantesco:

OPEN INVESTIGATION LOOP

com um critério final:

RED JOHN IDENTIFIED = TRUE

Talvez Bruno Heller tenha criado Agentic Television antes de isso virar buzzword.


Uma arquitetura agentic para analisar um Abend

Agora vamos juntar tudo em um exemplo muito próximo do universo mainframe.

Recebemos:

JOB ABC123
ABEND S0C7

Nosso agente entra em ação.

Primeiro ele descobre contexto.

Qual STEP?

Qual programa?

Qual offset?

Qual dump?

Houve mudança recente?

Depois planeja.

1 localizar mensagem
2 identificar programa
3 mapear offset
4 localizar campo
5 verificar dados
6 buscar histórico

Executa.

Consulta SYSOUT.

Obtém dump.

Lê listing.

Verifica copybook.

Cruza layout.

Então avalia.

A hipótese realmente explica o S0C7?

Se não explicar:

ITERATE

Formula outra hipótese.

Por exemplo:

Campo numericamente inválido.

Ou redefinição incorreta.

Ou arquivo com layout inesperado.

Ou COMP-3 corrompido.

Quando encontra evidência suficiente:

VERIFY = PASS

Entrega diagnóstico.

Veja como isso é muito superior a simplesmente perguntar a um chatbot:

O que é S0C7?

Uma coisa é explicar o conceito.

Outra coisa é investigar o incidente.

Essa diferença resume boa parte da passagem de Generative AI para Agentic AI.


Passo a passo para construir seu primeiro loop mental

Se você é iniciante, não tente começar criando quinze agentes, quatro bancos vetoriais, Kubernetes, três modelos e um nome grego para o orquestrador.

Comece pequeno.

Use esta sequência como seu mapa:

  1. Defina um objetivo mensurável. "Explicar JCL" é vago; "identificar possíveis erros em um JOB e apontar evidências" é melhor. Em seguida, determine quais ferramentas o agente realmente precisa, estabeleça como ele saberá que terminou, crie uma etapa independente de validação, defina limites de custo e tentativas, registre cada decisão, teste primeiro com casos conhecidos, introduza memória apenas quando houver necessidade real, adicione novos agentes somente quando existir uma especialização justificável e mantenha ações críticas sob autorização explícita até possuir evidências suficientes de confiabilidade.

Essa ordem é menos glamourosa.

E muito mais segura.


Observabilidade: porque até Patrick Jane precisava de pistas

Se um agente falhar e você não conseguir descobrir por quê, possui um problema grave.

Precisamos observar:

INPUT

DECISION

MODEL CALL

TOOL CALL

RESULT

EVALUATION

RETRY

COST

DURATION

FINAL OUTPUT

Isso é tracing agentic.

Um sistema empresarial precisa conseguir responder:

Por que esse agente tomou essa decisão?

Talvez não consigamos reconstruir todo fenômeno interno do modelo.

Mas podemos registrar o contexto operacional disponível:

instruções;

dados recuperados;

ferramentas utilizadas;

resultados;

scores;

retries;

políticas aplicadas.

Quem vem do mainframe sabe o valor disso.

SMF existe por um motivo.

SYSLOG existe por um motivo.

JESMSGLG existe por um motivo.

Auditoria existe por um motivo.

Quando algo explode às 03:17 da madrugada, "a IA decidiu" não será uma explicação aceitável.


A arquitetura que eu escolheria para uma empresa

Não escolheria simplesmente "Single Agent" ou "Fleet".

Escolheria de acordo com risco e complexidade.

Para tarefas pequenas:

Single Agent
     ↓
Tool
     ↓
Verifier

Para tarefas grandes:

                 ORCHESTRATOR
                       │
        ┌──────────────┼──────────────┐
        ↓              ↓              ↓
     COBOL           DB2            CICS
        │              │              │
        └──────────────┼──────────────┘
                       ↓
                    MAKER
                       ↓
                    CHECKER
                       ↓
                 QUALITY GATE
                       ↓
             ┌─────────┴─────────┐
             ↓                   ↓
           PASS                 FAIL
             ↓                   ↓
           SHIP               ITERATE

Agora temos algo reconhecível para qualquer profissional de engenharia.

Pipeline.

Quality gate.

Especialização.

Auditoria.

Retry.

Observabilidade.

Controle.


O curioso encontro entre Mainframe e IA

Talvez a parte mais divertida dessa história seja perceber quanto do futuro se parece com o passado.

Estamos falando de:

jobs,

queues,

orchestration,

retries,

return codes,

logs,

resource limits,

authorization,

transaction boundaries,

checkpoint,

recovery,

audit trail.

Um mainframer poderia olhar para boa parte dessa arquitetura e perguntar:

— Vocês passaram três anos inventando nomes novos para coisas que fazemos desde 1978?

Não exatamente.

Mas...

também não estaria completamente errado.

A novidade fundamental está na possibilidade de incluir mecanismos probabilísticos capazes de interpretar linguagem, contexto, intenção e informação não estruturada dentro desses loops.

O velho mundo determinístico ganha um novo componente cognitivo.


E chegamos ao verdadeiro segredo

A discussão frequentemente fica presa a modelos.

Qual é maior?

Qual possui mais parâmetros?

Qual benchmark vence?

Qual raciocina melhor?

Essas perguntas importam.

Mas quando chegamos a produção, surgem outras muito mais difíceis.

O que acontece quando o modelo erra?

Como detectamos?

Quem corrige?

Quantas vezes pode tentar?

Quando deve desistir?

Quando chama um humano?

Como registramos?

Como recuperamos?

Como evitamos repetir o mesmo erro amanhã?

Como garantimos que dois agentes não executem ações conflitantes?

Como impedimos um loop infinito?

Como controlamos custo?

Como testamos?

É aí que começa a verdadeira Loop Engineering.


O último interrogatório

Voltemos à nossa sala.

O diretor continua orgulhoso.

— Nosso agente é extremamente inteligente.

Patrick Jane termina seu chá.

— Inteligência não é o que me preocupa.

— Então o que preocupa?

Jane aponta para o dashboard.

— Quando ele erra, quem percebe?

O diretor hesita.

— O usuário.

Jane sorri.

— Então vocês ainda não construíram um agente.

— Construímos o quê?

— Um estagiário muito rápido.

Silêncio.

Fim do episódio.


O diagnóstico final

Durante a primeira fase da IA generativa, tentamos criar respostas melhores.

Durante a segunda, demos ferramentas aos modelos.

Durante a terceira, começamos a transformar modelos em agentes.

Agora entramos numa fase mais madura.

Precisamos transformar agentes em sistemas confiáveis.

E sistemas confiáveis exigem loops.

DISCOVER
   ↓
PLAN
   ↓
EXECUTE
   ↓
OBSERVE
   ↓
EVALUATE
   ↓
IMPROVE
   ↓
REPEAT

Mas repare numa última sutileza.

O objetivo não é repetir infinitamente.

O objetivo é saber quando parar.

Um bom loop possui critérios de entrada.

Critérios de qualidade.

Limites.

Feedback.

Recovery.

Auditoria.

E condição de saída.

Isso é engenharia.


☕ A última xícara

Talvez daqui a alguns anos a palavra "agente" nem seja tão importante.

Talvez simplesmente chamemos tudo isso de software.

Afinal, microsserviços já foram novidade.

Cloud já foi novidade.

APIs já foram novidade.

DevOps já foi novidade.

Containers já foram novidade.

Com o tempo, tecnologias extraordinárias tornam-se infraestrutura.

Agentic AI provavelmente seguirá caminho semelhante.

E quando isso acontecer, os sistemas vencedores não serão necessariamente aqueles com o maior número de agentes ou com o modelo mais impressionante.

Serão aqueles que conseguirem responder consistentemente às perguntas que Patrick Jane faria logo ao entrar na sala:

O que aconteceu?

Por que aconteceu?

Como você sabe?

Quem verificou?

O que fará se estiver errado?

E existe uma sexta pergunta, aquela que talvez seja a mais importante de todas:

Quando o loop termina?

Porque gerar uma resposta é fácil.

Executar uma tarefa é mais difícil.

Verificar o resultado é ainda mais difícil.

Corrigir-se sem destruir nada é engenharia.

E fazer tudo isso repetidamente, com custo controlado, memória, segurança, rastreabilidade, qualidade e possibilidade de intervenção humana...

isso já não é apenas Inteligência Artificial.

É engenharia de sistemas empresariais com inteligência dentro do loop.

E talvez essa seja a verdadeira revolução que estava escondida diante de nós o tempo inteiro.

READY

RUN AGENT

DISCOVER...

PLAN...

EXECUTE...

VERIFY...

QUALITY GATE FAILED.

ITERATING...

Patrick Jane olha para o terminal 3270.

Sorri discretamente.

E diz:

— Agora sim. Pelo menos ele sabe que errou.

domingo, 20 de abril de 2025

Como Construir um Agente de IA sem Criar Mais um "Chatbot Bonitinho"

 

Bellacosa Mainframe como construir um agente de ia

☕ Um Café no Bellacosa Mainframe

Como Construir um Agente de IA sem Criar Mais um "Chatbot Bonitinho"

O Guia Definitivo para um Programador COBOL Padawan Entender por que um AI Agent se Parece Muito Mais com um Sistema Bancário no IBM Z do que com um ChatGPT

"Os iniciantes acreditam que Inteligência Artificial é escolher o melhor modelo. Os veteranos sabem que o modelo é apenas mais um componente da arquitetura."

Durante muitos anos ouvimos que o Mainframe era um ambiente complexo demais para ser compreendido pelos desenvolvedores modernos. Curiosamente, agora estamos vendo exatamente o caminho inverso.

À medida que os chamados AI Agents começam a dominar as discussões sobre Inteligência Artificial, profissionais vindos do mundo web descobrem que construir um agente realmente confiável é muito mais difícil do que simplesmente conectar um LLM a algumas APIs.

Na verdade, quanto mais sofisticado um agente se torna, mais ele começa a lembrar... um sistema corporativo executando sobre IBM Z.

Sim.

Pode parecer exagero.

Mas não é.

Enquanto muitos imaginam que um agente é apenas um ChatGPT "turbinado", quem trabalhou anos com COBOL, CICS, Db2, MQ, JES2, RACF, WLM e z/OS rapidamente percebe algo curioso:

quase todos os conceitos fundamentais dos AI Agents já existem no Mainframe há décadas.

E isso muda completamente a forma como um Programador COBOL Padawan deve enxergar essa nova revolução.

Pegue sua caneca de café.

Hoje vamos desmontar essa arquitetura peça por peça.


O maior erro dos iniciantes

Imagine alguém dizendo:

"Vou construir um banco."

Você pergunta:

— Banco de quê?

Ele responde:

— Ainda não sei.

— Para quem?

— Também não pensei.

— Qual problema resolve?

— Depois vejo.

Parece absurdo.

Mas exatamente isso acontece com inúmeros projetos de IA.

As pessoas começam perguntando:

Qual modelo devo usar?

Quando deveriam perguntar:

Que problema estou resolvendo?

No Mainframe aprendemos isso logo no primeiro projeto COBOL.

Ninguém escreve um programa antes de entender:

  • regra de negócio;

  • layout dos arquivos;

  • usuários;

  • volume;

  • desempenho;

  • segurança;

  • auditoria.

IA não muda essa ordem.


Passo 1 — O propósito vem antes da inteligência

A primeira caixa do diagrama parece simples:

Define Purpose & Scope

Mas ela provavelmente representa mais da metade do sucesso do projeto.

Imagine um agente para bancos.

Objetivo ruim:

"Responder perguntas sobre contas."

Objetivo excelente:

"Auxiliar operadores de produção na investigação inicial de ABENDs batch relacionados a pagamentos, consultando logs, dumps e documentação interna antes do escalonamento para especialistas."

Perceba a diferença.

Agora sabemos:

  • quem usa;

  • quando usa;

  • quais dados possui;

  • quais limitações existem;

  • quando deve parar.

No IBM Z chamamos isso de...

levantamento de requisitos.

Nada mudou.


O Padawan pensa no modelo.

O Mestre pensa no problema.

Existe uma enorme diferença entre estas duas perguntas.

Pergunta do iniciante

Qual é o melhor LLM?

Pergunta do arquiteto

Qual trabalho preciso executar?

São perguntas completamente diferentes.

Porque diferentes tarefas exigem modelos diferentes.

Algumas precisam velocidade.

Outras precisam enorme contexto.

Outras precisam baixo custo.

Outras precisam excelente raciocínio.

Exatamente como escolher entre:

  • COBOL

  • PL/I

  • Assembler

  • Java

  • REXX

Nenhuma linguagem vence todas.


O cérebro não faz tudo sozinho

Uma das maiores ilusões criadas pelo marketing é imaginar o LLM como uma espécie de cérebro universal.

Na prática ele funciona mais como...

...um excelente analista.

Ele raciocina.

Interpreta.

Planeja.

Mas não faz quase nada sozinho.

Imagine um gerente de banco.

Ele decide.

Mas quem movimenta dinheiro?

Quem consulta saldo?

Quem imprime boleto?

Quem abre chamado?

Quem consulta cliente?

São dezenas de sistemas especializados.

O mesmo acontece com IA.


Ferramentas são os CALLs do mundo moderno

Todo COBOL conhece algo parecido.

CALL 'CONSCLI'
CALL 'CALCJURO'
CALL 'ENVIA-MQ'
CALL 'GRAVA-DB2'

O programa principal não faz tudo.

Ele delega.

Nos agentes acontece exatamente igual.

O LLM pensa.

Depois chama ferramentas.

Exemplo:

Consultar clima

↓

Pesquisar banco

↓

Enviar e-mail

↓

Criar ticket

↓

Consultar documentação

↓

Executar SQL

Cada ferramenta representa um pequeno programa especializado.

Na prática...

Estamos reinventando os velhos módulos reutilizáveis.


APIs são os novos Program Calls

Na década de 80:

Programa COBOL chamava outro programa COBOL.

Hoje:

O agente chama uma API REST.

A filosofia continua igual.

Existe apenas uma diferença.

Antes:

CALL "PROG001"

Hoje:

POST /consultar_cliente

Mudou o protocolo.

Não mudou a arquitetura.


MCP lembra muito um Middleware Corporativo

Uma parte interessante do diagrama apresenta o MCP Server.

Muita gente acha complicado.

Mas para um profissional IBM Z isso lembra imediatamente:

  • CICS

  • IMS TM

  • MQ

  • z/OS Connect

  • Enterprise Service Bus

O MCP padroniza como ferramentas são descobertas e utilizadas.

É parecido com um catálogo corporativo.

Em vez de ensinar o agente cada integração individualmente...

Criamos uma camada intermediária.

Isso reduz acoplamento.

O Mainframe faz isso há décadas.


Memória não significa lembrar tudo

Talvez esta seja a maior confusão existente hoje.

Quando alguém fala:

"O agente possui memória."

Muitos imaginam algo parecido com um cérebro humano.

Não é isso.

Existem vários tipos de memória.


Memória de Conversa

Equivale ao contexto atual.

É semelhante ao conteúdo de uma COMMAREA.

Enquanto a transação está ativa...

Ela existe.

Depois desaparece.


Memória de Trabalho

É parecida com Working Storage.

Informações temporárias.

Variáveis.

Resultados intermediários.

Estado atual.

Nada permanente.


Memória Vetorial

Aqui aparece algo realmente novo.

Imagine uma biblioteca.

Você pergunta:

"Mostre tudo relacionado a VSAM."

O sistema encontra:

  • KSDS

  • RRDS

  • ESDS

  • RLS

  • IDCAMS

Mesmo sem procurar exatamente essas palavras.

Ele procura significado.

É diferente de um índice Db2.

É mais parecido com associação de ideias.


Banco Relacional continua existindo

Muitos imaginam que bancos vetoriais substituirão SQL.

Não vão.

Pergunta:

Qual é o saldo da conta?

Resposta precisa.

SQL.

Pergunta:

Quais documentos falam sobre fraude semelhante?

Resposta aproximada.

Banco vetorial.

Cada tecnologia possui seu espaço.


Escolher modelo lembra escolher CPU

Outra caixa interessante é:

Choose LLM.

O Padawan pergunta:

Qual é o melhor?

O veterano responde:

Depende.

Exatamente como escolher processador.

Você não compra um z17 para rodar uma calculadora.

Nem usa um Raspberry Pi para processar milhões de transações financeiras.

Modelos possuem:

  • custo

  • latência

  • contexto

  • precisão

  • velocidade

Tudo é compromisso.


O Prompt virou a nova Especificação Funcional

No início da IA muitos tratavam prompts como frases mágicas.

Hoje sabemos que um bom prompt parece muito mais uma documentação técnica.

Ele define:

Objetivo.

Escopo.

Restrições.

Formato.

Limitações.

Critérios.

Responsabilidades.

Em outras palavras...

É quase uma especificação funcional.


Guardrails são o novo RACF

Esta talvez seja minha comparação favorita.

Um agente sem guardrails é parecido com um usuário SPECIAL no RACF.

Pode fazer qualquer coisa.

E isso é perigoso.

Imagine um agente que possa:

Excluir arquivos.

Enviar e-mails.

Mover dinheiro.

Executar comandos.

Sem controle.

Seria um desastre.

Por isso criamos regras.

Assim como RACF protege datasets...

Os guardrails protegem ferramentas.


Orquestração lembra o JES2

Muitos pensam que um agente simplesmente responde.

Na prática existe uma enorme infraestrutura por trás.

Primeiro chega a solicitação.

Depois ela é classificada.

Depois o sistema decide quais ferramentas usar.

Depois verifica resultados.

Depois tenta novamente se houver erro.

Depois registra tudo.

Isso lembra muito:

JES2.

Schedulers.

Control-M.

OPC.

TWS.

Fluxos batch.

Mudou o nome.

A ideia continua idêntica.


Um agente também faz tratamento de erro

Imagine esta situação.

Ferramenta indisponível.

API fora do ar.

Banco lento.

Resposta inválida.

Timeout.

O que acontece?

Um bom agente precisa decidir.

Tentar novamente?

Trocar ferramenta?

Perguntar ao usuário?

Cancelar?

Escalar para humano?

Quem trabalhou anos corrigindo ABENDs sabe exatamente a importância disso.


O verdadeiro segredo está na observabilidade

Pouca gente fala nisso.

Mas empresas não compram IA porque ela responde bonito.

Compram porque conseguem confiar nela.

Para isso precisamos registrar tudo.

Qual modelo respondeu?

Qual prompt?

Quais ferramentas?

Quanto custou?

Quanto demorou?

Quem autorizou?

Quais documentos consultou?

No Mainframe isso lembra:

SMF.

RMF.

SYSLOG.

JESLOG.

Dump.

Trace.

Sem logs...

Não existe produção.


Testes nunca terminam

Outra excelente observação do diagrama.

Testing & Evals.

Muitos acreditam que basta testar uma vez.

Mas IA aprende.

Modelos mudam.

Ferramentas mudam.

Documentos mudam.

Usuários mudam.

Logo...

O teste nunca acaba.

É um ciclo permanente.

Muito parecido com:

Teste unitário.

Teste integrado.

Teste de regressão.

Teste de performance.

Teste de produção.


O maior erro dos projetos de IA

Hoje vejo centenas de agentes fazendo isto:

Pergunta.

Resposta.

Fim.

Mas empresas reais precisam de muito mais.

Precisam de:

Auditoria.

Segurança.

Escalabilidade.

Versionamento.

Logs.

Controle de acesso.

Custos.

Explicabilidade.

Resiliência.

Recuperação.

Exatamente as características que fizeram o Mainframe sobreviver durante mais de seis décadas.


O Mainframe já conhecia quase tudo isso

Observe esta tabela.

Mundo IAIBM Z
LLMPrograma especialista
PromptEspecificação funcional
FerramentaCALL
APIPrograma remoto
MCPMiddleware
MemóriaVSAM/Db2/Storage
OrquestraçãoJES2 / Scheduler
GuardrailsRACF
ObservabilidadeSMF/RMF
LogsSYSLOG
WorkflowBatch
EstadoCOMMAREA / Working Storage
Aprovação humanaOperador / Change Management

Curiosamente...

A arquitetura moderna está caminhando para conceitos que o Mainframe já dominava.


O verdadeiro diferencial continua sendo Engenharia

Existe uma frase que gosto muito.

"Modelos impressionam. Arquiteturas sobrevivem."

Qualquer pessoa consegue criar um chatbot em poucos minutos.

Criar um agente que opere meses em produção...

É outra história.

Esse agente precisa:

  • resistir a erros;

  • proteger dados;

  • registrar auditoria;

  • controlar custos;

  • explicar decisões;

  • evoluir continuamente.

Isso é Engenharia de Software.

Não Engenharia de Prompt.


O Padawan do futuro

Se você programa COBOL hoje, talvez esteja pensando:

"Onde entro nessa história?"

A resposta é:

Em praticamente tudo.

Porque empresas não querem apenas alguém que saiba conversar com um LLM.

Elas precisam de profissionais capazes de integrar IA aos sistemas que realmente movem o negócio.

E esses sistemas continuam sendo, em grande parte, os que executam em plataformas como IBM Z.

O Programador COBOL Padawan que compreender agentes de IA terá uma vantagem rara: enxergará a IA não como um brinquedo de linguagem, mas como mais um componente de uma arquitetura corporativa robusta. Ele saberá que um bom agente precisa de regras de negócio, integração, segurança, persistência, tratamento de erros e observabilidade — exatamente os pilares que sempre sustentaram as aplicações de missão crítica.


O Café Terminou, mas a Jornada Está Apenas Começando

Quando observamos um diagrama de "How to Build an AI Agent", é fácil acreditar que tudo se resume a oito caixas conectadas por setas. Porém, a realidade é muito mais rica. Cada uma dessas caixas representa disciplinas inteiras: arquitetura, engenharia de software, segurança, infraestrutura, governança de dados, experiência do usuário e operações.

Para o Programador COBOL Padawan, talvez a maior descoberta seja perceber que a revolução da IA não invalida tudo o que foi aprendido no Mainframe. Pelo contrário: ela confirma que os princípios que mantêm bancos, seguradoras e governos funcionando há décadas continuam válidos. O que muda são as ferramentas; os fundamentos permanecem.

No fim das contas, um agente de IA realmente confiável não nasce do modelo mais poderoso, nem do prompt mais elaborado. Ele nasce de uma arquitetura sólida, de decisões bem fundamentadas e da disciplina de engenharia.

E essa sempre foi a maior lição do IBM Z.

Porque, no Bellacosa Mainframe, aprendemos uma verdade que a indústria de IA está redescobrindo apenas agora: inteligência impressiona nas demonstrações; arquitetura confiável sustenta a produção.


sábado, 9 de setembro de 2023

Kubernetes, COBOL e a Viagem ao Fundo do Cluster: quando o programador entrou no Seaview procurando um JCL e encontrou Pods nadando entre Nodes

 

Bellacosa Mainframe e o kubernetes no cobol uma viagem ao fundo do cluster

☕ Um Café no Bellacosa Mainframe

Kubernetes, COBOL e a Viagem ao Fundo do Cluster: quando o programador entrou no Seaview procurando um JCL e encontrou Pods nadando entre Nodes

🌊 Containers, Pods, Deployments, Services, Scheduler, Control Plane, YAML, autoscaling, storage, observabilidade e a estranha descoberta de que administrar Kubernetes às vezes parece comandar um submarino nuclear onde metade da tripulação fala YAML

Imagine a cena.

O jovem programador COBOL entra no CPD numa segunda-feira, café na mão, perfeitamente confortável com aquele universo conhecido:

JOB
JCL
JES2
COBOL
CICS
Db2
VSAM
SDSF

Tudo possui nome.

Tudo possui finalidade.

Tudo possui, em algum lugar, um manual de 2.700 páginas que ninguém leu inteiro, mas algum sysprog aposentado sabe exatamente em qual capítulo está a informação necessária.

Então alguém da arquitetura aparece.

— Precisamos colocar a nova aplicação em Kubernetes.

O COBOLzeiro olha para ele.

— Em quê?

— Kubernetes.

— Isso é banco de dados?

— Não.

— Linguagem?

— Não.

— Sistema operacional?

— Não exatamente.

— Middleware?

— Também não.

— Scheduler?

— Mais ou menos.

— Docker?

— Não.

Silêncio.

O jovem COBOLzeiro bebe café.

— Então vocês inventaram uma coisa que não dá para explicar em uma palavra.

Bem-vindo ao século XXI.

E é nesse momento que nossa viagem começa.

Não a bordo da Enterprise.

Nem da TARDIS.

Hoje descemos centenas de metros abaixo da superfície, entrando num submarino tecnológico imaginário chamado:

USS KUBERNETES

Um enorme navio submersível cheio de containers, workloads, redes, volumes, APIs e operadores correndo pelos corredores gritando:

— CAPITÃO! PERDEMOS UM POD!

E o capitão responde:

— Quantas réplicas estavam declaradas?

— TRÊS!

— Quantas temos?

— DUAS!

— Então pare de gritar. O controller já está criando outra.

E o COBOLzeiro, olhando pela escotilha:

— Que tipo de feitiçaria é essa?

Pegue o café.

Vamos ao fundo do cluster.


🌊 Capítulo 1 — Kubernetes não é Docker

Antes de descermos aos níveis mais profundos precisamos matar um dos monstros marinhos mais resistentes da informática moderna:

“Kubernetes substituiu Docker.”

Não.

O problema começa porque vários conceitos acabaram historicamente misturados.

Docker popularizou containers.

Kubernetes popularizou a orquestração de containers.

E durante algum tempo existiu uma disputa mais direta entre:

Docker Swarm
        versus
Kubernetes

Isso fazia sentido porque ambos tratavam de orquestração.

Mas Docker e Kubernetes não ocupam exatamente a mesma camada.

Pense desta forma:

Aplicação
   |
   v
Imagem
   |
   v
Container
   |
   v
Runtime
   |
   v
Pod
   |
   v
Kubernetes
   |
   v
Cluster

Docker ajudou a tornar simples construir, distribuir e executar containers.

Kubernetes pergunta outra coisa:

“Muito bem. Agora você possui 4.000 desses bichos. Quem administra?”

Essa pergunta muda tudo.


⚓ Capítulo 2 — O que diabos é um container?

O COBOLzeiro geralmente conhece um mundo bastante previsível.

Você compila:

PROGRAMA.CBL
       |
       v
 compilador
       |
       v
 load module

Depois executa num ambiente definido.

No mundo moderno surgiu um problema recorrente.

O programador dizia:

— Funciona na minha máquina.

Produção respondia:

— Pois aqui não funciona.

Então começava a investigação arqueológica:

versão diferente da biblioteca
variável de ambiente ausente
pacote não instalado
configuração divergente
runtime diferente
permissão diferente

O container tenta encapsular boa parte desse ambiente.

Imagine uma caixa contendo:

Aplicação
Bibliotecas
Dependências
Runtime
Configuração básica

Essa caixa pode ser reproduzida em diferentes ambientes.

Mas cuidado.

Container não é simplesmente uma VM pequena.

Uma máquina virtual tradicional possui algo parecido com:

HARDWARE
   |
HYPERVISOR
   |
   +---- VM A
   |      |
   |   Guest OS
   |
   +---- VM B
          |
       Guest OS

Já containers normalmente compartilham o kernel do host:

HARDWARE
   |
HOST OS
   |
KERNEL
   |
   +---- Container A
   +---- Container B
   +---- Container C

O isolamento utiliza mecanismos do sistema operacional, especialmente recursos como:

namespaces
cgroups
filesystem isolation
network isolation

Portanto containers costumam ser muito mais leves que VMs completas.

Não existe um sistema operacional inteiro sendo inicializado dentro de cada container da mesma forma que numa VM tradicional.


🐋 Curiosidade do sonar — Docker não inventou isolamento

A ideia de isolamento de processos é muito anterior ao Docker.

Unix já possuía conceitos relacionados.

Depois vieram tecnologias como:

chroot
FreeBSD Jails
Solaris Zones
Linux namespaces
cgroups
LXC

Docker acertou magistralmente numa coisa:

experiência de uso.

Ele tornou relativamente simples construir uma imagem e executar:

docker run

Em tecnologia, muitas revoluções acontecem não quando algo é inventado, mas quando alguém torna aquilo utilizável por gente normal.


🌊 Capítulo 3 — Três containers não precisam de um almirante

Imagine que temos:

Container A
Container B
Container C

Você pode executá-los manualmente.

Talvez Docker Compose resolva perfeitamente.

Agora aumente:

30 containers
300 containers
3.000 containers

Distribuídos entre:

Node 01
Node 02
Node 03
...
Node 200

Então começam as perguntas.

Onde colocar cada aplicação?

Quem reinicia algo que morreu?

Quem percebe que uma máquina caiu?

Quem encontra capacidade disponível?

Quem faz atualização sem interromper o serviço?

Quem distribui tráfego?

Quem escala?

Quem controla configuração?

Quem mantém o estado desejado?

Essa é a missão do Kubernetes.


🧭 Capítulo 4 — O conceito mais importante: estado desejado

Aqui está o segredo que transforma Kubernetes de “montanha de YAML” em algo compreensível.

O modelo é declarativo.

Você diz:

QUERO 3 RÉPLICAS

Não precisa escrever um script detalhando:

crie processo 1
crie processo 2
crie processo 3
verifique processo 1
se morrer reinicie
verifique processo 2
...

Você declara:

replicas: 3

Agora imagine o sonar:

ESTADO DESEJADO

Pod A
Pod B
Pod C

Mas o Kubernetes observa:

ESTADO REAL

Pod A
Pod B

Alguma coisa está errada.

Desejado:

3

Atual:

2

Diferença:

1

O Kubernetes tenta corrigir.

cria novo Pod

Depois observa novamente.

Essa ideia recebe um nome fundamental:

reconciliation loop.


🔁 O coração mecânico do submarino

Imagine um oficial andando eternamente pelos corredores do USS Kubernetes perguntando:

O que deveria existir?
        |
        v
O que existe agora?
        |
        v
São iguais?
   /        \
 NÃO        SIM
  |          |
corrigir   continuar
  |
observar novamente

Esse processo ocorre continuamente.

É uma diferença filosófica enorme.

Você não está apenas executando uma sequência de comandos.

Você está declarando uma condição que deseja manter verdadeira.


☕ O COBOLzeiro começa a desconfiar

Nesse momento o veterano de mainframe encosta na cadeira.

— Espera.

— Sim?

— Então existe um sistema que observa workloads, recursos, prioridades, falhas e tenta manter um estado operacional desejado?

Sim.

— Isso está começando a parecer menos alienígena.

Exatamente.

Mainframe e Kubernetes são arquiteturas profundamente diferentes.

Mas os problemas fundamentais de computação continuam aparecendo com roupas novas.


🏗️ Capítulo 5 — O cluster Kubernetes

Um ambiente Kubernetes é organizado num cluster.

Simplificando:

                CLUSTER

           CONTROL PLANE
                |
      +---------+---------+
      |         |         |
    NODE 1    NODE 2    NODE 3
      |         |         |
    Pods      Pods      Pods

Temos duas grandes categorias:

Control Plane
Worker Nodes

O Control Plane coordena.

Os Nodes executam os workloads.

Pense no submarino.

Existe a ponte de comando:

CONTROL PLANE

e existem as áreas onde o trabalho realmente acontece:

NODES

🎛️ Capítulo 6 — kube-apiserver: a sala de rádio

Quando você escreve:

kubectl apply -f deployment.yaml

você não está entrando diretamente num servidor e mandando iniciar alguma coisa.

Você está interagindo com a API do Kubernetes.

O kube-apiserver é uma peça central dessa arquitetura.

É através dele que grande parte das interações ocorre.

Conceitualmente:

kubectl
   |
   v
API SERVER
   |
   +--> autenticação
   +--> autorização
   +--> validação
   +--> objetos Kubernetes

Para quem vem de mainframe, pense nisso como uma grande interface controlada entre operadores, automações e o sistema.


🧠 Capítulo 7 — etcd: a memória do navio

O Kubernetes precisa guardar informações fundamentais sobre seu estado.

Para isso existe o etcd.

É um armazenamento distribuído chave-valor.

Ele contém dados críticos relacionados aos objetos e estado do cluster.

Imagine o diário de bordo:

Deployment A deseja 3 réplicas
Service B existe
ConfigMap C contém configuração
Namespace D está configurado

Se estivéssemos numa série submarina antiga, alguém inevitavelmente entraria correndo:

— CAPITÃO! O COMPUTADOR CENTRAL PERDEU A MEMÓRIA!

E todos fariam cara dramática.

No mundo Kubernetes, proteger o estado do etcd é assunto sério.

Backup e recuperação são fundamentais principalmente quando você administra o Control Plane por conta própria.


⚙️ Capítulo 8 — Scheduler: JES2 encontrou Poseidon

Um Pod precisa executar em algum Node.

Mas onde?

Suponha:

Node A
Node B
Node C
Node D

O Pod precisa de:

CPU: 500m
RAM: 512Mi

Talvez:

Node A -> sem recurso
Node B -> possível
Node C -> restrição de afinidade
Node D -> possível

O scheduler analisa as possibilidades e seleciona um Node adequado.

O COBOLzeiro arregala os olhos.

— Temos um componente escolhendo onde colocar workload considerando recursos?

Sim.

— Eu conheço essa música.

Calma.

Não diga:

Kubernetes Scheduler = JES2

Isso estaria tecnicamente errado.

Mas como mapa mental, existe uma familiaridade interessante.

Schedulers são uma obsessão antiga da computação.

Quando temos muitos trabalhos e recursos limitados, alguém precisa decidir:

quem
onde
quando
com quanto

Muda a arquitetura.

A pergunta permanece.


🫧 Capítulo 9 — Pod não é container

Agora encontramos uma criatura que confunde praticamente todo iniciante:

POD

Kubernetes não trabalha primariamente com containers isolados.

Sua menor unidade de execução e scheduling é normalmente o Pod.

Um Pod pode conter:

Pod
 |
 +---- Container A

ou:

Pod
 |
 +---- Container principal
 |
 +---- Container auxiliar

Os containers dentro de um Pod estão fortemente relacionados e compartilham certas características, particularmente contexto de rede.

Uma analogia razoável seria:

Pod = cápsula operacional
Container = ocupante da cápsula

Não confunda isso com host.

O Pod não é simplesmente uma VM.

Ele é uma abstração do Kubernetes.


🐙 Easter egg — o nome Kubernetes

“Kubernetes” vem do grego e está relacionado à ideia de:

timoneiro, piloto, navegador.

Da mesma raiz linguística surgiram palavras relacionadas a governo e cibernética.

Ou seja, aquele logo com um leme não foi escolhido por acaso.

O símbolo do Kubernetes é literalmente um timão naval.

Para nosso submarino, portanto, não poderíamos ter escolhido tema melhor.


🚢 Capítulo 10 — Não crie Pods na unha

Você pode definir diretamente um Pod.

Mas normalmente não é isso que deseja em produção.

Imagine:

Pod A

Ele morre.

Fim.

Por isso usamos objetos controladores como:

Deployment

Você diz:

Quero 3 réplicas.

O Deployment trabalha junto com ReplicaSets para manter essa condição.

Deployment
     |
     v
ReplicaSet
     |
     +--> Pod
     +--> Pod
     +--> Pod

Se um desaparece:

3 desejados
2 existentes

O sistema tenta criar outro.


🩹 Capítulo 11 — Self-healing não é milagre

Essa capacidade é frequentemente chamada de:

self-healing.

Mas existe um perigo de marketing.

Kubernetes não conserta automaticamente seu software.

Suponha que seu container faça:

START
 |
 v
BUG
 |
 v
CRASH

O Kubernetes reinicia.

Resultado:

START
 |
 v
BUG
 |
 v
CRASH
 |
 v
RESTART
 |
 v
BUG
 |
 v
CRASH

Em algum momento você pode encontrar:

CrashLoopBackOff

Kubernetes consegue dizer:

“Esse processo deveria estar funcionando.”

Ele não consegue dizer:

“Seu programador esqueceu de inicializar WS-CONTADOR.”

O S0C7 continua sendo problema seu.

😆


🚨 Capítulo 12 — Perdemos um Node!

Agora começa o episódio dramático.

Node A desapareceu.

NODE A
  X

Pod 1
Pod 2

Silêncio na ponte.

O sonar dispara.

O Control Plane percebe que workloads deixaram de estar disponíveis.

Dependendo das condições e políticas, substitutos podem ser criados em Nodes saudáveis.

NODE B          NODE C
  |               |
Pod 3          novo Pod 1
Pod 4          novo Pod 2

Esse é um dos motivos fundamentais pelos quais Kubernetes existe.

Em vez de depender de um humano perceber às três da manhã:

“Servidor XPTO caiu.”

o sistema possui mecanismos automáticos para reagir.


📡 Capítulo 13 — Mas se Pod muda de IP, como encontro a aplicação?

Excelente pergunta.

Pods são relativamente efêmeros.

Hoje:

10.10.4.31

Amanhã:

10.10.7.88

Você não quer configurar clientes apontando diretamente para cada Pod.

É aí que entra o:

Service

Conceitualmente:

CLIENTE
   |
   v
SERVICE
   |
   +---- Pod A
   +---- Pod B
   +---- Pod C

O Service fornece uma forma estável de alcançar um conjunto de Pods.

Isso desacopla:

quem chama

de:

qual instância específica está viva neste momento

🌐 Capítulo 14 — Load balancing

O Kubernetes oferece mecanismos para distribuir tráfego entre workloads.

Mas não caia numa simplificação perigosa.

Existem várias camadas possíveis:

Internet
   |
Load Balancer externo
   |
Ingress / Gateway
   |
Service
   |
Pods

Cada ambiente pode montar essa arquitetura de forma diferente.

Cloud providers também adicionam componentes próprios.

Portanto dizer:

“Kubernetes possui load balancing”

é correto.

Mas é apenas o começo da história.


📈 Capítulo 15 — O submarino precisa acelerar

Imagine uma aplicação com:

3 Pods

De repente chega uma carga enorme.

CPU sobe.

Requests crescem.

Com mecanismos como Horizontal Pod Autoscaler, podemos aumentar o número de réplicas.

3
|
5
|
8
|
12 Pods

Quando a carga desaparece:

12
 |
 8
 |
 5
 |
 3

Esse é o conceito de autoscaling horizontal.

Mas existe uma pegadinha.

Criar mais Pods exige capacidade física ou virtual.

Se todos os Nodes estiverem cheios:

Kubernetes:
"Preciso criar mais 10 Pods."

Cluster:
"Excelente ideia."

Kubernetes:
"Onde estão os recursos?"

Cluster:
"..."

Pods podem ficar:

Pending

Por isso escalabilidade de workloads e escalabilidade da infraestrutura são problemas relacionados, mas não idênticos.


📦 Capítulo 16 — CPU e memória não aparecem por magia

Você pode declarar requests e limits.

Por exemplo:

resources:
  requests:
    memory: "256Mi"
    cpu: "250m"
  limits:
    memory: "512Mi"
    cpu: "500m"

requests ajudam o scheduler a entender o que o workload precisa.

limits estabelecem limites operacionais.

Aqui o programador COBOL familiarizado com WLM começa novamente a reconhecer um tema antigo:

recursos não são infinitos.

Todo sistema operacional sério acaba lidando com:

prioridade
capacidade
contenção
limites
planejamento

❤️ Capítulo 17 — Liveness, Readiness e Startup

Esses três conceitos merecem atenção.

Liveness Probe

Pergunta aproximadamente:

“Essa aplicação continua saudável?”

Se falhar repetidamente, pode levar ao reinício do container.

Readiness Probe

Pergunta:

“Está pronta para receber tráfego?”

Talvez a aplicação esteja viva.

Mas:

banco ainda conectando
cache carregando
dependência inicializando

Então:

VIVO? SIM
PRONTO? NÃO

É perfeitamente possível.

Startup Probe

É útil para aplicações que demoram para inicializar.

Durante o startup, você não quer que uma liveness agressiva mate a aplicação antes de ela terminar de subir.


🩺 Diagnóstico submarino

Imagine:

Paciente respirando?

Liveness.

Paciente consegue trabalhar?

Readiness.

Paciente acabou de acordar da anestesia?

Startup.

É simplificado, mas ajuda muito.


🔐 Capítulo 18 — ConfigMap e Secret

Imagine uma configuração:

API_URL
LOG_LEVEL
TIMEOUT

Você não precisa colocar tudo dentro da imagem.

Kubernetes oferece:

ConfigMap

para configurações.

Para dados sensíveis existe:

Secret

Mas atenção.

A palavra “Secret” não significa automaticamente:

Ninguém jamais conseguirá ler isso.

Segurança real exige arquitetura.

Inclui coisas como:

RBAC
criptografia
controle de acesso
secret managers
gestão de chaves
auditoria
políticas

Nunca confunda nome de objeto com garantia criptográfica.


🗄️ Capítulo 19 — E os dados?

Pods podem desaparecer.

Mas seu banco de dados talvez não possa.

Imagine:

Pod
 |
 X

Tudo que estava exclusivamente no filesystem efêmero daquele Pod pode sumir junto com ele.

Para persistência entram conceitos como:

PersistentVolume
PersistentVolumeClaim
StorageClass
CSI

Uma visão extremamente simplificada:

POD
 |
PVC
 |
PV
 |
STORAGE

A aplicação pode morrer.

Outra pode nascer.

Os dados continuam.

Pelo menos essa é a intenção.

Storage em Kubernetes é um dos pontos onde o mergulho deixa de ser piscina infantil e vira Fossa das Marianas.


📊 Capítulo 20 — Kubernetes não é Prometheus

Outro mito:

“Kubernetes já monitora tudo.”

Não exatamente.

Kubernetes possui informações operacionais fundamentais.

Mas observabilidade completa geralmente envolve ecossistemas adicionais.

Podemos querer:

Métricas
Logs
Traces
Alertas
Dashboards

É comum encontrar tecnologias como:

Prometheus
Grafana
OpenTelemetry

e soluções comerciais.

Lembre:

Kubernetes administra workloads.

Isso não significa:

Kubernetes substitui sua estratégia inteira de observabilidade.

🧾 Capítulo 21 — YAML: o JCL que bebeu chá de cogumelo?

O primeiro contato do COBOLzeiro com Kubernetes geralmente é:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: cafe
spec:
  replicas: 3

Ele olha aquilo.

Olha novamente.

— Então é isso?

Não.

YAML é apenas uma forma comum de representar objetos que serão enviados à API Kubernetes.

O fluxo real é mais interessante:

YAML
 |
 v
API SERVER
 |
 v
OBJETO
 |
 v
ESTADO DESEJADO
 |
 v
CONTROLLERS
 |
 v
ESTADO REAL

Portanto Kubernetes não é YAML.

Assim como:

z/OS não é JCL

apesar de alguém poder conhecer z/OS inicialmente através de JCL.


🧠 Capítulo 22 — JCL e Kubernetes: parentes distantes

Existe uma analogia interessante.

Em JCL declaramos:

programa
datasets
parâmetros
condições
recursos

E entregamos o job.

No Kubernetes declaramos:

imagem
réplicas
volumes
rede
recursos
configuração

E entregamos o objeto ao cluster.

Mas existe uma diferença essencial.

O JCL tradicional está fortemente ligado a uma execução.

Kubernetes frequentemente declara:

“Quero que isso continue verdadeiro.”

Exemplo:

replicas = 5

Isso não significa:

“Crie cinco processos uma vez.”

Significa aproximadamente:

“Mantenha cinco instâncias enquanto essa configuração permanecer.”

Essa persistência do estado desejado é fundamental.


🧙 Capítulo 23 — WLM aparece no periscópio

Agora o COBOLzeiro veterano começa a sorrir.

O WLM no z/OS lida com questões como:

objetivos
prioridades
recursos
classes de serviço
competição entre workloads

Kubernetes possui mecanismos diferentes, mas também precisa responder:

Onde executar?
Quanto recurso reservar?
Quem pode consumir?
Qual workload tem prioridade?
O que acontece quando falta capacidade?

Repita comigo:

Kubernetes NÃO é WLM.

Mas ambos pertencem a uma longa tradição de sistemas tentando administrar cargas computacionais automaticamente.

O problema é antigo.

As soluções mudam.


🧩 Capítulo 24 — Kubernetes e COBOL podem conviver

Agora chegamos a um ponto importantíssimo.

Quando alguém diz:

“Estamos modernizando com Kubernetes.”

alguns COBOLzeiros imaginam imediatamente:

COBOL
 |
 v
LIXO

Não.

Uma arquitetura perfeitamente possível seria:

                Internet
                   |
                   v
            Kubernetes
             /    |    \
          API   API    API
            \    |    /
             API Gateway
                   |
                   v
             z/OS Connect
                   |
          +--------+--------+
          |                 |
        CICS               IMS
          |                 |
        COBOL             COBOL
          |
         Db2

Kubernetes pode hospedar:

APIs
microservices
frontends
integrações
processamento auxiliar
componentes de IA

enquanto o core transacional continua no mainframe.

Modernização não é sinônimo de:

jogar COBOL fora.

Muitas vezes significa:

envolver o legado com novas interfaces.

🏛️ Capítulo 25 — O mainframe não precisa morar dentro do Kubernetes

Isso parece óbvio.

Mas precisa ser dito.

Existe uma tendência na indústria de imaginar que qualquer tecnologia nova precisa substituir a anterior.

Não funciona assim.

Você pode ter:

IBM Z
 +
Kubernetes
 +
cloud
 +
SaaS
 +
APIs

Tudo coexistindo.

Empresas grandes são fósseis vivos tecnológicos.

Possuem camadas acumuladas durante décadas.

E isso não é necessariamente ruim.

O problema não é idade.

O problema é incapacidade de evolução.


💸 Capítulo 26 — Kubernetes custa dinheiro

Agora chega o financeiro à ponte do submarino.

— Quanto custa?

O arquiteto responde:

— O cluster custa X.

Errado.

O cluster custa:

compute
storage
network
load balancers

Mas o Kubernetes organizacional custa também:

treinamento
SRE
DevOps
observabilidade
CI/CD
segurança
networking
upgrades
backup
disaster recovery
GitOps
governança
troubleshooting

Uma pequena empresa pode descobrir que transformou:

5 aplicações

num ambiente que exige:

especialista Kubernetes
especialista cloud
especialista networking
especialista segurança
especialista observabilidade

Parabéns.

Você resolveu um problema que talvez não tivesse.


🛶 Capítulo 27 — Quando NÃO usar Kubernetes

Suponha:

Aplicações: 3
Equipe: 4 pessoas
Deploy: mensal
Tráfego: previsível
Disponibilidade: normal

Você realmente precisa de Kubernetes?

Talvez não.

Às vezes:

VM
Docker Compose
serviço gerenciado
PaaS
container service

resolvem.

Tecnologia boa é a tecnologia proporcional ao problema.

Usar Kubernetes para tudo é como comprar o USS Seaview para atravessar uma piscina.

Funciona.

Mas talvez uma boia bastasse.


🚢 Capítulo 28 — Quando Kubernetes começa a fazer sentido

Kubernetes tende a ficar atraente quando começam a aparecer vários fatores simultaneamente:

  • grande quantidade de serviços;

  • necessidade de automação operacional;

  • múltiplas equipes;

  • alta disponibilidade;

  • atualizações frequentes;

  • escalabilidade dinâmica;

  • infraestrutura heterogênea;

  • necessidade de padronização;

  • automação via API;

  • ambientes híbridos;

  • práticas DevOps e GitOps maduras.

A palavra fundamental é:

complexidade.

Kubernetes não elimina complexidade.

Ele tenta organizar complexidade inevitável.

Essa diferença é enorme.


⚓ Capítulo 29 — Kubernetes gerenciado

Se administrar tudo manualmente parece assustador, existem serviços gerenciados.

Exemplos conhecidos incluem:

Amazon EKS
Azure AKS
Google GKE

O provedor assume parte da operação.

Isso pode reduzir bastante o peso do Control Plane.

Mas não elimina responsabilidades.

Você ainda precisa entender:

workloads
rede
segurança
IAM
RBAC
storage
observabilidade
custos
deployments
capacity planning

Managed Kubernetes não significa:

“Agora ninguém precisa saber Kubernetes.”

Significa:

“Algumas partes dolorosas possuem outro responsável.”


🐳 Capítulo 30 — containerd e o fantasma do Docker

Existe ainda uma curiosidade que confunde iniciantes.

Antigamente era comum associar diretamente Kubernetes ao Docker runtime.

Depois Kubernetes removeu o componente conhecido como dockershim.

Hoje runtimes compatíveis com CRI, especialmente:

containerd
CRI-O

são comuns.

Mas isso não significa que imagens criadas com Docker deixaram de funcionar.

A distinção importante é:

Docker como ferramenta/ecossistema de construção

≠

Docker Engine obrigatório dentro do Kubernetes

Esse detalhe costuma render algumas discussões de bar extremamente desnecessárias.


👻 Easter egg — Pods são descartáveis, dados não

Uma filosofia cloud-native bastante importante diz:

Não se apaixone pela instância.

Se um Pod morre:

crie outro.

Isso é culturalmente diferente de ambientes tradicionais nos quais um servidor pode receber nome, personalidade e quase CPF.

Quem trabalhou em CPD antigo conhece:

SRVPROD01

quinze anos depois:

NÃO DESLIGAR.
NINGUÉM SABE O QUE TEM AQUI.

Kubernetes tenta incentivar outro modelo:

instâncias são substituíveis
estado importante fica fora delas

É uma mudança arquitetural gigantesca.


🔄 Capítulo 31 — Rolling Updates

Imagine que temos:

Versão 1

rodando em cinco Pods.

Queremos:

Versão 2

Não precisamos necessariamente destruir tudo simultaneamente.

Kubernetes pode substituir gradualmente:

V1 V1 V1 V1 V1

V2 V1 V1 V1 V1

V2 V2 V1 V1 V1

V2 V2 V2 V1 V1

V2 V2 V2 V2 V1

V2 V2 V2 V2 V2

Esse conceito é associado a rolling updates.

Se algo der errado, estratégias de rollback podem ajudar.

Para quem viveu décadas com janelas de mudança gigantescas:

SÁBADO
23:00
TODO MUNDO NA SALA
PIZZA
BACKOUT PLAN IMPRESSO

isso parece quase ficção científica.

Embora, sejamos sinceros:

em algumas empresas o Kubernetes apenas adicionou YAML à mesma pizza de sábado.


🔍 Capítulo 32 — kubectl: o periscópio

Uma das ferramentas mais usadas para interagir com Kubernetes é:

kubectl

Alguns comandos básicos:

kubectl get pods

Lista Pods.

kubectl get nodes

Lista Nodes.

kubectl describe pod nome

Mostra informações detalhadas.

kubectl logs nome-do-pod

Mostra logs.

kubectl get deployments

Lista Deployments.

Para o COBOLzeiro:

kubectl

eventualmente começa a assumir um papel psicológico semelhante ao:

SDSF

Não tecnicamente.

Mas emocionalmente.

Quando algo quebra:

COBOLzeiro:
SDSF.

Kuberneteszeiro:
kubectl.

😁


🧪 Capítulo 33 — Primeiro laboratório mental

Vamos montar uma aplicação imaginária.

Nome:

cafe-api

Queremos três réplicas.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: cafe-api
spec:
  replicas: 3

A intenção é:

Deployment
     |
     +--> Pod 1
     +--> Pod 2
     +--> Pod 3

Agora um Pod quebra.

Estado real:

Pod 1
Pod 2

Kubernetes observa.

Desejado = 3
Atual = 2

Control loop:

Criar outro.

Nasce:

Pod 4

Não precisamos recuperar exatamente o velho Pod 3.

Precisamos restaurar:

quantidade desejada = 3

Essa distinção é maravilhosa.

O sistema não possui sentimentalismo.


🧠 Capítulo 34 — Pets versus cattle

Existe uma velha metáfora de infraestrutura:

Pets
versus
Cattle

Pets recebem nomes.

Você cuida individualmente.

Cattle são tratados como grupo.

No modelo tradicional:

Servidor Hercules

cai.

Todos correm para recuperar Hercules.

No modelo cloud-native:

instância 27

cai.

O sistema cria:

instância 42

O objetivo não é preservar o indivíduo.

É preservar o serviço.

Essa ideia aparece fortemente no Kubernetes.


🧯 Capítulo 35 — Kubernetes não elimina incidentes

Outra ilusão perigosa:

“Com Kubernetes teremos alta disponibilidade e não teremos mais problemas.”

Teremos.

Só mudaremos o catálogo.

Antes:

servidor caiu

Agora:

Pod Pending
CrashLoopBackOff
ImagePullBackOff
OOMKilled
PVC Pending
DNS quebrado
Ingress errado
RBAC negando acesso
certificate expired
node pressure
CNI quebrado

Toda tecnologia que resolve dez problemas geralmente introduz sete completamente novos.

O segredo da engenharia não é eliminar problemas.

É trocar problemas ruins por problemas mais administráveis.


🌊 Capítulo 36 — A grande lição da viagem

Chegamos ao fundo do oceano.

O COBOLzeiro olha pela escotilha.

Ao longe vemos:

Pods
Services
Deployments
Nodes
Volumes
Controllers

nadando tranquilamente pelo cluster.

Depois de toda essa viagem, podemos finalmente definir Kubernetes com alguma precisão.

Não diga apenas:

“Kubernetes é uma ferramenta para containers.”

Melhor:

Kubernetes é uma plataforma de orquestração baseada em APIs e control loops que permite declarar como workloads containerizados deveriam estar funcionando e trabalha continuamente para aproximar o estado real do cluster desse estado desejado.

Essa definição explica quase tudo.


☕ O mapa do COBOLzeiro

Se você está começando, memorize esta sequência:

1. APPLICATION
       |
       v
2. IMAGE
       |
       v
3. CONTAINER
       |
       v
4. POD
       |
       v
5. DEPLOYMENT
       |
       v
6. SERVICE
       |
       v
7. NODE
       |
       v
8. CLUSTER

Depois adicione:

ConfigMap
Secret
Volume
Ingress
HPA
RBAC
Observabilidade

Não tente aprender tudo simultaneamente.


🧭 Roteiro de estudo Bellacosa

Para um COBOLzeiro iniciante eu seguiria esta ordem.

Passo 1 — Aprenda container

Entenda:

imagem
container
registry
Dockerfile
runtime

Passo 2 — Aprenda Pod

Descubra por que Kubernetes trabalha com Pods.

Passo 3 — Deployment

Entenda:

replicas
ReplicaSet
rolling update
self-healing

Passo 4 — Service

Aprenda descoberta e acesso aos Pods.

Passo 5 — Configuração

Estude:

ConfigMap
Secret

Passo 6 — Storage

Depois:

PV
PVC
StorageClass

Passo 7 — Probes

Estude:

startup
readiness
liveness

Passo 8 — Scheduling

Entre em:

requests
limits
affinity
taints
tolerations

Passo 9 — Segurança

Não pule:

RBAC
ServiceAccount
NetworkPolicy
Secrets

Passo 10 — Observabilidade

Finalmente:

logs
metrics
traces
alerts

Só depois disso mergulhe alegremente no abismo chamado:

Helm
Operators
GitOps
Service Mesh
CRDs
Admission Controllers

Porque depois desse ponto o submarino já está a 11 mil metros.


🧙‍♂️ Dica do velho operador

Quando um Kubernetes parecer complicado demais, não tente memorizar todos os nomes.

Faça sempre cinco perguntas:

1. O que deveria existir?

2. O que existe realmente?

3. Quem observa essa diferença?

4. Quem deveria corrigi-la?

5. Por que não conseguiu?

Essa técnica resolve uma quantidade surpreendente de investigações.

E curiosamente é quase a mesma forma de pensar usada há décadas para diagnosticar ambientes de produção.


🐙 O monstro final: complexidade

No último episódio de nossa expedição aparece diante do submarino uma criatura colossal.

Não é Docker.

Não é YAML.

Não é networking.

É:

COMPLEXIDADE

Kubernetes nasceu porque sistemas distribuídos modernos ficaram complexos demais para administração manual.

Mas existe um paradoxo.

Para controlar complexidade, Kubernetes introduz sua própria complexidade.

Então a decisão madura nunca é:

Kubernetes é bom?

A pergunta correta é:

“O problema que tenho justifica a complexidade operacional que Kubernetes introduzirá?”

Se sim, ele pode ser extraordinário.

Se não, talvez você esteja usando um submarino nuclear para entregar pizza.


🌅 Epílogo — Emergindo do cluster

O USS Kubernetes finalmente retorna à superfície.

O jovem COBOLzeiro sai pela escotilha.

No início da viagem ele conhecia:

JCL
COBOL
CICS
Db2
JES2

Agora carrega um caderno com:

Container
Pod
Deployment
Service
Node
Cluster
Control Plane
Scheduler
etcd
ConfigMap
Secret
PVC
HPA
Probe

Ele olha para o arquiteto.

— Acho que entendi Kubernetes.

— Excelente!

— É um sistema enorme que recebe uma descrição do estado que queremos, observa continuamente o estado que existe e tenta corrigir as diferenças automaticamente.

O arquiteto sorri.

— Perfeito.

O COBOLzeiro toma o último gole do café.

— Então passamos cinquenta anos distribuindo computação para depois construir um negócio gigantesco para coordenar tudo novamente.

Silêncio na sala.

O sysprog veterano, sentado no canto, finalmente levanta os olhos do terminal.

— Eu estava esperando alguém perceber.

E talvez esse seja o maior easter egg de toda a história.

A tecnologia muda.

Os nomes mudam.

Os logos ficam mais bonitos.

O YAML substitui cartões perfurados.

O container substitui parte da configuração artesanal.

O cluster substitui fileiras de servidores administrados individualmente.

Mas a pergunta original continua ecoando pelos corredores do CPD, pelo datacenter, pela cloud e agora pelas profundezas do nosso submarino:

“Temos um monte de programas, recursos limitados, máquinas que quebram e usuários que não querem saber de nada disso. Quem vai administrar essa porra toda?”

No mainframe, construímos respostas.

No Unix, construímos outras.

Na virtualização, outras.

Na cloud, outras.

E no universo containerizado, uma das grandes respostas recebeu um nome grego, um timão como logotipo e a missão quase naval de manter milhares de pequenas embarcações seguindo o curso declarado:

Kubernetes.

Ou, para os íntimos do Bellacosa Mainframe:

//KUBEJOB JOB ...
//STEP01 EXEC PGM=KEEP-EVERYTHING-ALIVE
//SYSOUT DD SYSOUT=*
//COFFEE DD DISP=SHR,DSN=BELLACOSA.CAFE.FORTE

RC=0000.

Esperamos. ☕☸️🌊

Vagner Renato Bellacosa, IBM Champion e especialista em IBM Mainframe
IBM Z17 SYSTEM ONLINE
Sobre o autor

Vagner Renato Bellacosa

IBM Champion 2026 • Especialista em IBM Mainframe

Vagner Renato Bellacosa trabalha com IBM Mainframe desde 1988 , é IBM Champion e especialista em COBOL, CICS, Db2, z/OS e IBM Z. Compartilha experiências profissionais, conhecimento técnico, história da computação e práticas do universo mainframe para aproximar novas gerações das tecnologias que sustentam empresas, bancos e governos ao redor do mundo.

IBM Champion IBM Z COBOL CICS Db2 z/OS Mainframe desde 1988
GitHub LinkedIn
Inicializando conteúdo...