Kubernetes com Claude Code: Deployment, Service, Ingress e rollback
Guia prático para criar manifests Kubernetes seguros com Claude Code, probes, recursos, CI e rollback.
Gere YAML que possa ser revisado
Kubernetes executa aplicações em contêineres dentro de um cluster, mas o primeiro desafio para iniciantes é a quantidade de conceitos que aparecem ao mesmo tempo: Deployment, Service, Ingress, ConfigMap, Secret, probes, requests, limits, rollout e rollback. Se você pedir ao Claude Code apenas “gere YAML de Kubernetes”, ele pode entregar algo que parece bom, mas usa latest, não tem readinessProbe, coloca um Secret de exemplo no Git ou expõe a aplicação de forma inadequada.
Este guia usa Claude Code como ferramenta para criar uma base segura e revisável. O exemplo usa nginx:1.27-alpine e uma página HTML fornecida por ConfigMap. Assim, você consegue testar em kind, minikube, Docker Desktop Kubernetes ou um cluster temporário sem criar uma imagem privada. Depois, substitua a imagem, os caminhos de health check e o Ingress pelos valores da sua aplicação.
Use a documentação oficial como base: Deployments, Services, Ingress, probes, gerenciamento de recursos, ConfigMap, Secret e kubectl rollout. Para continuar, veja também integração Docker, CI/CD, code review e permissões.
Casos de uso reais
O melhor começo não é uma plataforma grande. É uma unidade pequena que você consegue aplicar, verificar, quebrar de propósito e recuperar.
| Caso | Objetivo | O que pedir ao Claude Code |
|---|---|---|
| Primeiro app interno | Colocar uma aplicação web atrás de um Service estável | Deployment, ClusterIP Service, probes, requests e limits |
| Treinamento ou workshop | Fazer todos seguirem o mesmo roteiro | Manifest com namespace, comandos de verificação e falha controlada |
| Revisão antes de produção | Encontrar configurações perigosas antes do release | Selectors, Secret, probes, Ingress e rollback |
| Gate de Pull Request | Bloquear erros de infraestrutura cedo | dry-run em CI e checklist de revisão |
Esse conteúdo também ajuda na monetização porque o leitor quer evitar um erro real, não apenas aprender uma definição. Por isso o ClaudeCodeLab conecta o guia a materiais gratuitos, templates e treinamento e consultoria Claude Code para equipes que querem adaptar o fluxo ao próprio repositório.
Prompt com restrições explícitas
Em Kubernetes, diga também o que não deve ser criado. Sem limites, o modelo pode escolher LoadBalancer, inventar Secrets, criar RBAC de cluster ou assumir um Ingress Controller diferente do seu.
Crie um exemplo de deploy Kubernetes para iniciantes que possa ser testado localmente.
Requisitos:
- namespace claude-k8s-demo
- usar nginx:1.27-alpine, sem imagem privada
- incluir ConfigMap com uma página HTML
- Deployment com replicas 2, RollingUpdate, readinessProbe, livenessProbe e resources
- Service do tipo ClusterIP
- Ingress opcional com host claude-k8s.local
- explicar política de Secret sem gerar valores reais
- incluir comandos de apply, rollout status, port-forward, falha e rollback
Restrições:
- não usar NodePort nem LoadBalancer
- não escrever valores reais de Secret em YAML
- não criar ClusterRole, ClusterRoleBinding ou comandos destrutivos
Esse prompt torna a revisão objetiva: labels, selectors, probes, portas, resources e segredos. Se a equipe repete isso, coloque as regras estáveis em CLAUDE.md; veja boas práticas de CLAUDE.md.
Manifest pronto para copiar
Salve como k8s/claude-k8s-demo.yaml. O Ingress só funciona com controller instalado, mas o Service funciona via port-forward.
apiVersion: v1
kind: Namespace
metadata:
name: claude-k8s-demo
---
apiVersion: v1
kind: ConfigMap
metadata:
name: demo-page
namespace: claude-k8s-demo
data:
APP_ENV: "demo"
index.html: |
<!doctype html>
<html lang="pt">
<head><meta charset="utf-8" /><title>Claude Code Kubernetes Demo</title></head>
<body><h1>Claude Code Kubernetes Demo</h1><p>Deployment, Service, ConfigMap, probes are running.</p></body>
</html>
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: demo-web
namespace: claude-k8s-demo
labels:
app: demo-web
spec:
replicas: 2
revisionHistoryLimit: 5
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
selector:
matchLabels:
app: demo-web
template:
metadata:
labels:
app: demo-web
spec:
containers:
- name: nginx
image: nginx:1.27-alpine
ports:
- name: http
containerPort: 80
resources:
requests:
cpu: "50m"
memory: "64Mi"
limits:
cpu: "250m"
memory: "128Mi"
readinessProbe:
httpGet:
path: /
port: http
initialDelaySeconds: 3
periodSeconds: 5
livenessProbe:
httpGet:
path: /
port: http
initialDelaySeconds: 10
periodSeconds: 10
volumeMounts:
- name: demo-page
mountPath: /usr/share/nginx/html/index.html
subPath: index.html
readOnly: true
volumes:
- name: demo-page
configMap:
name: demo-page
---
apiVersion: v1
kind: Service
metadata:
name: demo-web
namespace: claude-k8s-demo
spec:
type: ClusterIP
selector:
app: demo-web
ports:
- name: http
port: 80
targetPort: http
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: demo-web
namespace: claude-k8s-demo
spec:
ingressClassName: nginx
rules:
- host: claude-k8s.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: demo-web
port:
name: http
O erro mais comum é desalinhamento entre selector.matchLabels, labels do template e selector do Service. Peça ao Claude Code para revisar esses três pontos juntos.
Verificação local
Confirme o cluster com kubectl cluster-info e rode:
kubectl apply -f k8s/claude-k8s-demo.yaml
kubectl -n claude-k8s-demo rollout status deployment/demo-web
kubectl -n claude-k8s-demo get pods -l app=demo-web
kubectl -n claude-k8s-demo get service demo-web
kubectl -n claude-k8s-demo port-forward service/demo-web 8080:80
Em outro terminal:
curl http://localhost:8080/
Ingress deve ser o último passo da investigação. Primeiro prove que Pod e Service funcionam.
kubectl -n claude-k8s-demo get ingress demo-web
kubectl -n claude-k8s-demo describe ingress demo-web
ConfigMap, Secret e rollback
ConfigMap é para configuração não sensível. Secret é para valores sensíveis, mas um Secret em YAML com base64 não deve ir para Git. Base64 não é criptografia. Em produção, use Secret Manager, External Secrets, Sealed Secrets, SOPS ou o processo vault aprovado pela equipe.
Para teste local:
kubectl -n claude-k8s-demo create secret generic demo-api-secret \
--from-literal=API_TOKEN='replace-me-locally' \
--dry-run=client \
-o yaml > secret.local.yaml
kubectl apply -f secret.local.yaml
Pratique rollout e falha:
kubectl -n claude-k8s-demo set image deployment/demo-web nginx=nginx:1.27-alpine
kubectl -n claude-k8s-demo rollout status deployment/demo-web
kubectl -n claude-k8s-demo rollout history deployment/demo-web
kubectl -n claude-k8s-demo set image deployment/demo-web nginx=nginx:not-a-real-tag
kubectl -n claude-k8s-demo rollout status deployment/demo-web --timeout=30s
kubectl -n claude-k8s-demo rollout undo deployment/demo-web
Rollback de Deployment não reverte automaticamente ConfigMap, Secret, migrações, DNS ou feature flags. O runbook precisa dizer o que volta e o que exige outro procedimento.
CI, armadilhas e próximo passo
Use pelo menos um dry-run em Pull Request:
name: Kubernetes manifest review
on:
pull_request:
paths:
- "k8s/**"
jobs:
dry-run:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: azure/setup-kubectl@v4
with:
version: "v1.30.0"
- run: kubectl apply --dry-run=client -f k8s/
As falhas recorrentes são latest em produção, confundir readiness com liveness, esquecer resources, achar que base64 protege segredos, debugar Ingress antes do Service e publicar saída do Claude Code sem review humano. A defesa é documentação oficial, CI, verificação local, prompt com restrições e revisão crítica.
Este exemplo é pequeno de propósito. Em produção entram build Docker, tags imutáveis, TLS, secrets, observabilidade, RBAC, CI/CD e resposta a incidentes. Desenvolvedores individuais podem começar pelo cheatsheet gratuito. Equipes podem usar treinamento e consultoria Claude Code para adaptar prompts, CLAUDE.md, gates de CI e exercícios de rollback ao repositório real. O fluxo verificado aqui é apply, rollout status, Pods, port-forward, curl, imagem inválida, erro visível e rollout undo.
PDF grátis: cheatsheet do Claude Code
Informe seu e-mail e baixe uma página com comandos, hábitos de revisão e workflows seguros.
Cuidamos dos seus dados e não enviamos spam.
Sobre o autor
Masa
Engenheiro focado em workflows práticos com Claude Code.
Artigos relacionados
Workflow Obsidian para CLAUDE.md com Claude Code
Transforme notas de trabalho do Obsidian em notas operacionais CLAUDE.md para preservar contexto.
Claude Code Revenue CTA Routing: artigos para PDF, Gumroad e consultoria
Um fluxo com Claude Code para levar leitores ao PDF grátis, Gumroad ou consultoria conforme intenção.
Regras de handoff para equipes com Claude Code: evidências, permissões, rollback e receita
Formato prático para entregar trabalho do Claude Code com prova, permissões, rollback, PDF grátis, Gumroad e consultoria.