Communitygithub.com

padrões-kubernetes

Padrões de carga de trabalho do Kubernetes, gerenciamento de recursos, RBAC, sondas, autoescalonamento, manipulação de ConfigMap/Secret e depuração com kubectl para implantações de nível de produção. Use ao escrever ou revisar manifestos do Kubernetes, ou ao depurar sondas, RBAC, autoescalonamento ou limites de recursos.

O que é padrões-kubernetes?

Esta skill fornece um conjunto abrangente de padrões do Kubernetes prontos para produção, focados em implantações confiáveis, gerenciamento de recursos e depuração. Ela inclui modelos de manifesto YAML copiáveis e prontos para uso, tabelas de decisão para configurar sondas de inicialização, viabilidade e prontidão, além de orientações detalhadas sobre ConfigMaps, Secrets, RBAC com privilégios mínimos e autoescalonamento horizontal de pods (HPA). A skill é especialmente útil ao escrever ou revisar manifestos do Kubernetes para Deployments, Services, Ingress, Jobs e CronJobs, pois cobre tanto padrões corretos quanto antipadrões comuns. Suporta todos os ambientes Kubernetes, do desenvolvimento à produção, e é compatível com ferramentas como Claude Code, Cursor e Codex, ajudando engenheiros e agentes de IA a aplicar as melhores práticas de segurança, observabilidade e resiliência.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/affaan-m/ECC/tree/main/skills/kubernetes-patterns

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Padrões Kubernetes

Padrões do Kubernetes de nível de produção para implantar, gerenciar e depurar cargas de trabalho de forma confiável.

Quando Ativar

  • Escrevendo manifestos do Kubernetes (Deployments, Services, Ingress, Jobs)
  • Configurando solicitações/limites de recursos, sondas de viabilidade/prontidão
  • Configurando RBAC, namespaces ou ServiceAccounts
  • Gerenciando configuração e secrets no K8s
  • Depurando CrashLoopBackOff, OOMKilled, pods pendentes ou erros de pull de imagem
  • Configurando HPA (Horizontal Pod Autoscaler) ou PodDisruptionBudgets
  • Revisando YAML do K8s para segurança ou correção

Quando Usar

O mesmo que Quando Ativar acima. Este alias atende às convenções de formato de skill do repositório. Use esta skill sempre que estiver escrevendo, revisando ou depurando workloads e YAML do Kubernetes.

Como Funciona

Esta skill fornece padrões YAML copiáveis e prontos para produção e comandos de depuração kubectl organizados por tarefa:

  1. Modelo de Deployment — Um Deployment de produção totalmente configurado com contexto de segurança, estratégia de atualização contínua, todos os três tipos de sonda, limites de recursos e injeção de ambiente do ConfigMap/Secret.
  2. Sondas — Tabela de decisão para inicialização vs. viabilidade vs. prontidão, com o cálculo correto de failureThreshold × periodSeconds.
  3. Services e Ingress — Padrões de ClusterIP, LoadBalancer e Ingress com TLS e anotações do cert-manager.
  4. ConfigMaps e Secrets — Orientação sobre envFrom, montagem de arquivo e secrets externos.
  5. Gerenciamento de recursos — Regras práticas de solicitações vs. limites por tipo de workload (web API, JVM, worker, sidecar).
  6. RBAC — Cadeia de privilégios mínimos: ServiceAccount → Role → RoleBinding.
  7. HPA e PDB — Configurações de autoescalonamento e segurança para drenagem de nós.
  8. Jobs e CronJobs — Padrões de cargas de trabalho únicas e agendadas com restartPolicy correta.
  9. Folha de dicas kubectl — Comandos para logs, exec, rollback, port-forward, dry-run e diagnóstico de erros comuns.
  10. Antipadrões e lista de verificação — O que NÃO fazer e uma lista de verificação de segurança/confiabilidade/observabilidade.

Exemplos

Veja as seções abaixo para exemplos completos e executáveis. Referências rápidas:

TarefaIr para
YAML completo de Deployment de produçãoPadrões Principais de Carga de Trabalho
Configuração de sondaSondas
Configuração RBAC com privilégios mínimosRBAC
Depurar um CrashLoopBackOffFolha de Dicas de Depuração kubectl
AutoescalonamentoHPA

Padrões Principais de Carga de Trabalho

Deployment — Modelo de Produção

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
  namespace: my-namespace
  labels:
    app: my-app
    version: "1.0.0"
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1          # Permitir 1 pod extra durante a atualização
      maxUnavailable: 0    # Nunca reduzir abaixo da contagem desejada
  template:
    metadata:
      labels:
        app: my-app
        version: "1.0.0"
    spec:
      # Contexto de segurança no nível do pod
      securityContext:
        runAsNonRoot: true
        runAsUser: 1001
        fsGroup: 1001

      # Desligamento gracioso
      terminationGracePeriodSeconds: 30

      containers:
        - name: my-app
          image: ghcr.io/org/my-app:1.0.0   # Nunca use :latest
          imagePullPolicy: IfNotPresent

          ports:
            - containerPort: 8080
              protocol: TCP

          # Solicitações E limites de recursos são ambos necessários
          resources:
            requests:
              cpu: "100m"
              memory: "128Mi"
            limits:
              cpu: "500m"
              memory: "256Mi"

          # Contexto de segurança do contêiner
          securityContext:
            allowPrivilegeEscalation: false
            readOnlyRootFilesystem: true
            capabilities:
              drop:
                - ALL

          # Sondas (veja a seção Sondas abaixo)
          startupProbe:
            httpGet:
              path: /health
              port: 8080
            failureThreshold: 30
            periodSeconds: 5
          livenessProbe:
            httpGet:
              path: /health
              port: 8080
            initialDelaySeconds: 0
            periodSeconds: 30
            failureThreshold: 3
          readinessProbe:
            httpGet:
              path: /ready
              port: 8080
            initialDelaySeconds: 5
            periodSeconds: 10
            failureThreshold: 2

          # Ambiente do ConfigMap e Secret
          envFrom:
            - configMapRef:
                name: my-app-config
          env:
            - name: DB_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: my-app-secrets
                  key: db-password

          # Diretório tmp gravável quando readOnlyRootFilesystem: true
          volumeMounts:
            - name: tmp
              mountPath: /tmp

      volumes:
        - name: tmp
          emptyDir: {}

Sondas — Viabilidade, Prontidão, Inicialização

Entender quando usar cada sonda é crítico:

SondaAção em Caso de FalhaUso para
startupProbeMata o container se for lento para iniciarApps de inicialização lenta (JVM, Python)
livenessProbeReinicia o containerDetecção de deadlock / processo travado
readinessProbeRemove dos endpoints do ServiceIndisponibilidade temporária (reconexão DB)
# Padrão correto: startupProbe cobre inicialização lenta,
# então liveness/readiness assumem o controle
startupProbe:
  httpGet:
    path: /health
    port: 8080
  failureThreshold: 30  # 30 * 5s = 150s de tempo máximo de inicialização
  periodSeconds: 5

livenessProbe:
  httpGet:
    path: /health
    port: 8080
  periodSeconds: 30
  failureThreshold: 3   # 3 * 30s = 90s antes de reiniciar

readinessProbe:
  httpGet:
    path: /ready         # Endpoint separado: verifica DB, cache, etc.
    port: 8080
  periodSeconds: 10
  failureThreshold: 2
# ERRADO: initialDelaySeconds sem startupProbe
# Se o app leva 60s para iniciar, defina uma startupProbe
livenessProbe:
  httpGet:
    path: /health
    port: 8080
  initialDelaySeconds: 60   # RUIM: Espera arbitrária, condição de corrida

Services e Ingress

Tipos de Service

# ClusterIP (padrão) — apenas interno
apiVersion: v1
kind: Service
metadata:
  name: my-app
  namespace: my-namespace
spec:
  selector:
    app: my-app
  ports:
    - port: 80
      targetPort: 8080
      protocol: TCP
  type: ClusterIP
# LoadBalancer — tráfego externo (provedores de nuvem)
spec:
  type: LoadBalancer
  ports:
    - port: 443
      targetPort: 8080

Ingress com TLS

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-app
  namespace: my-namespace
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
    cert-manager.io/cluster-issuer: "letsencrypt-prod"
spec:
  ingressClassName: nginx
  tls:
    - hosts:
        - myapp.example.com
      secretName: my-app-tls
  rules:
    - host: myapp.example.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: my-app
                port:
                  number: 80

ConfigMaps e Secrets

ConfigMap — Configuração não sensível

apiVersion: v1
kind: ConfigMap
metadata:
  name: my-app-config
  namespace: my-namespace
data:
  LOG_LEVEL: "info"
  APP_ENV: "production"
  MAX_CONNECTIONS: "100"
  # Montar como arquivo para configuração complexa
  app.yaml: |
    server:
      port: 8080
      timeout: 30s
# Montar ConfigMap como arquivo
volumes:
  - name: config
    configMap:
      name: my-app-config
      items:
        - key: app.yaml
          path: app.yaml
volumeMounts:
  - name: config
    mountPath: /etc/app
    readOnly: true

Secrets — Dados sensíveis

# Criar secret a partir de literal (CLI, depois armazenar em Vault/SOPS)
kubectl create secret generic my-app-secrets \
  --from-literal=db-password='s3cr3t' \
  --namespace=my-namespace \
  --dry-run=client -o yaml | kubectl apply -f -
apiVersion: v1
kind: Secret
metadata:
  name: my-app-secrets
  namespace: my-namespace
type: Opaque
# Os valores são codificados em base64 (NÃO criptografados — use Sealed Secrets ou ESO para criptografia real)
data:
  db-password: czNjcjN0  # base64 de 's3cr3t'

Importante: Secrets brutos do Kubernetes são apenas codificados em base64, não criptografados em repouso, a menos que seu cluster tenha criptografia configurada. Use Sealed Secrets ou External Secrets Operator para produção.


Solicitações e Limites de Recursos

resources:
  requests:       # O agendador usa isso para posicionar o pod
    cpu: "100m"   # 100 millicores = 0,1 CPU
    memory: "128Mi"
  limits:         # O container é morto/acelerado acima disso
    cpu: "500m"
    memory: "256Mi"

Regras práticas:

Tipo de Carga de TrabalhoSolicitação de CPUSolicitação de MemóriaObservações
Web API100–250m128–256MiDefinir limites 2-4x as solicitações
Worker/consumidor250–500m256–512MiLimite de memória = solicitação para previsibilidade
App JVM500m–1512Mi–2GiPermitir folga acima de -Xmx para sobrecarga da JVM
Sidecar10–50m32–64MiManter o mínimo
# ERRADO: Sem solicitações ou limites — agendamento imprevisível, remoções OOM
containers:
  - name: app
    image: myapp:latest
    # Faltando resources: {} — isso é perigoso em produção

# ERRADO: Limites sem solicitações — solicitações padrão são os limites, super-reserva capacidade
resources:
  limits:
    cpu: "2"
    memory: "1Gi"
  # faltando requests — assumirá os valores dos limites

RBAC — Roles e ServiceAccounts

Princípio do Menor Privilégio

Dois padrões dependendo se o app chama a API do Kubernetes:

Padrão A — App NÃO precisa da API do Kubernetes (a maioria dos apps)

Desabilitar a montagem automática de token no ServiceAccount. Role/RoleBinding não são necessários.

# ServiceAccount com token desabilitado — padrão mais seguro
apiVersion: v1
kind: ServiceAccount
metadata:
  name: my-app-sa
  namespace: my-namespace
automountServiceAccountToken: false   # Nenhum token da API K8s é injetado nos pods
# Referência no Deployment — sem token, sem acesso à API
spec:
  template:
    spec:
      serviceAccountName: my-app-sa
      automountServiceAccountToken: false   # Cinto e suspensórios: também definido no nível do pod

Padrão B — App PRECISA da API do Kubernetes (operadores, controladores, observadores de configuração)

Habilitar o token e conceder apenas as permissões realmente necessárias.

# 1. ServiceAccount — habilitar token para esta SA
apiVersion: v1
kind: ServiceAccount
metadata:
  name: my-app-sa
  namespace: my-namespace
automountServiceAccountToken: true    # Token necessário: app chama a API K8s
# 2. Role — conceder apenas o que o app precisa (escopo do namespace)
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: my-app-role
  namespace: my-namespace
rules:
  - apiGroups: [""]
    resources: ["configmaps"]
    verbs: ["get", "list", "watch"]    # Somente leitura, recurso específico
  - apiGroups: [""]
    resources: ["secrets"]
    resourceNames: ["my-app-secrets"]  # Restringir a secret específico por nome
    verbs: ["get"]
# 3. Vincular Role ao ServiceAccount
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: my-app-rolebinding
  namespace: my-namespace
subjects:
  - kind: ServiceAccount
    name: my-app-sa
    namespace: my-namespace
roleRef:
  kind: Role
  apiGroup: rbac.authorization.k8s.io
  name: my-app-role
# 4. Referenciar SA no Deployment
spec:
  template:
    spec:
      serviceAccountName: my-app-sa
      # automountServiceAccountToken assume true da SA — token é injetado

Horizontal Pod Autoscaler (HPA)

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: my-app-hpa
  namespace: my-namespace
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: my-app
  minReplicas: 2      # Sempre pelo menos 2 para HA
  maxReplicas: 10
  metrics:
    - type: Resource
      resource:
        name: cpu
        target:
          type: Utilization
          averageUtilization: 70    # Escalar quando CPU média > 70%
    - type: Resource
      resource:
        name: memory
        target:
          type: Utilization
          averageUtilization: 80

HPA requer que resources.requests seja definido em todos os contêineres — ele calcula a utilização como current / request.


PodDisruptionBudget (PDB)

Evitar que muitos pods caiam durante drenagem de nós ou atualizações contínuas:

apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
  name: my-app-pdb
  namespace: my-namespace
spec:
  minAvailable: 2           # OU use maxUnavailable: 1
  selector:
    matchLabels:
      app: my-app

Namespaces e Multitenência

# Criar namespace com cotas de recursos
kubectl create namespace my-namespace

# Aplicar ResourceQuota para limitar o consumo do namespace
kubectl apply -f - <<EOF
apiVersion: v1
kind: ResourceQuota
metadata:
  name: my-namespace-quota
  namespace: my-namespace
spec:
  hard:
    requests.cpu: "4"
    requests.memory: 4Gi
    limits.cpu: "8"
    limits.memory: 8Gi
    pods: "20"
EOF

Jobs e CronJobs

# Job único (migração de DB, processamento de dados)
apiVersion: batch/v1
kind: Job
metadata:
  name: db-migrate
  namespace: my-namespace
spec:
  backoffLimit: 3          # Tentar novamente até 3 vezes em caso de falha
  ttlSecondsAfterFinished: 3600   # Auto-excluir após 1h
  template:
    spec:
      restartPolicy: OnFailure    # Never para Jobs (não Always)
      containers:
        - name: migrate
          image: ghcr.io/org/my-app:1.0.0
          command: ["python", "manage.py", "migrate"]
          resources:
     …

[truncated for translation]

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

accessibility

Design, implement, and audit inclusive digital products using WCAG 2.2 Level AA. Use when building or auditing UI that must meet WCAG 2.2 Level AA, or when reviewing a change for keyboard, contrast, or screen-reader support.

affaan-m/content-engine

Create platform-native content systems for X, LinkedIn, TikTok, YouTube, newsletters, and repurposed multi-platform campaigns. Use when the user wants social posts, threads, scripts, content calendars, or one source asset adapted cleanly across platforms.

affaan-m/ECC

Multi-platform content distribution across X, LinkedIn, Threads, and Bluesky. Adapts content per platform using content-engine patterns. Never posts identical content cross-platform. Use when the user wants to distribute content across social platforms.

affaan-m/fal-ai-media

Unified media generation via fal.ai MCP — image, video, and audio. Covers text-to-image (Nano Banana), text/image-to-video (Seedance, Kling, Veo 3), text-to-speech (CSM-1B), and video-to-audio (ThinkSound). Use when the user wants to generate images, videos, or audio with AI.

affaan-m/manim-video

日本語翻訳:このファイルは manim-video 用の日本語翻訳が必要です

affaan-m/remotion-video-creation

Remotion のベストプラクティス - React で動画を作成する。3D、アニメーション、音声、字幕、チャート、トランジションなどをカバーするドメイン固有の29のルール。

affaan-m/video-editing

AI-assisted video editing workflows for cutting, structuring, and augmenting real footage. Covers the full pipeline from raw capture through FFmpeg, Remotion, ElevenLabs, fal.ai, and final polish in Descript or CapCut. Use when the user wants to edit video, cut footage, create vlogs, or build video content.

agent-architecture-audit

Full-stack diagnostic for agent and LLM applications. Audits the 12-layer agent stack for wrapper regression, memory pollution, tool discipline failures, hidden repair loops, and rendering corruption. Produces severity-ranked findings with code-first fixes. Essential for developers building agent applications, autonomous loops, or any LLM-powered feature. Use when an agent or LLM feature misbehaves and the failing layer is unknown, or before shipping an agent stack.

agent-eval

Head-to-head comparison of coding agents (Claude Code, Aider, Codex, etc.) on custom tasks with pass rate, cost, time, and consistency metrics. Use when choosing between coding agents, or when a change to an agent setup needs measured pass rate, cost, and time rather than an impression.

agent-harness-construction

Design and optimize AI agent action spaces, tool definitions, and observation formatting for higher completion rates. Use when defining or revising an agent

agentic-engineering

Operate as an agentic engineer using eval-first execution, decomposition, and cost-aware model routing. Use when planning or executing engineering work that agents will carry out end to end.

agentic-os

Build persistent multi-agent operating systems on Claude Code. Covers kernel architecture, specialist agents, slash commands, file-based memory, scheduled automation, and state management without external databases. Use when building a persistent multi-agent system on Claude Code with its own memory, commands, and scheduling.

agent-introspection-debugging

Structured self-debugging workflow for AI agent failures using capture, diagnosis, contained recovery, and introspection reports. Use when an agent run fails and you need a reproducible diagnosis instead of a retry.

agent-payment-x402

Add x402 payment execution to AI agents with per-task budgets, spending controls, and non-custodial wallets. Supports Base through agentwallet-sdk and X Layer through OKX Payments / OKX Agent Payments Protocol. Use when an agent must pay for something itself and needs per-task budgets, spending controls, and a non-custodial wallet.

agent-self-evaluation

Use after completing any non-trivial task. The agent self-rates its output on 5 axes — accuracy, completeness, clarity, actionability, conciseness — with concrete evidence per criterion. Produces a structured 1-5 scorecard with specific improvement suggestions.

agent-sort

Build an evidence-backed ECC install plan for a specific repo by sorting skills, commands, rules, hooks, and extras into DAILY vs LIBRARY buckets using parallel repo-aware review passes. Use when ECC should be trimmed to what a project actually needs instead of loading the full bundle.

ai-first-engineering

Engineering operating model for teams where AI agents generate a large share of implementation output. Use when setting team process, review gates, or ownership rules for a codebase largely written by agents.

ai-regression-testing

Regression testing strategies for AI-assisted development. Sandbox-mode API testing without database dependencies, automated bug-check workflows, and patterns to catch AI blind spots where the same model writes and reviews code. Use when adding regression coverage to AI-assisted code, or when the same model both wrote and reviewed a change.

android-clean-architecture

Clean Architecture patterns for Android and Kotlin Multiplatform projects — module structure, dependency rules, UseCases, Repositories, and data layer patterns. Use when structuring modules, layers, or data flow in an Android or KMP project.

angular-developer

Generates Angular code and provides architectural guidance. Trigger when creating projects, components, or services, or for best practices on reactivity (signals, linkedSignal, resource), forms, dependency injection, routing, SSR, accessibility (ARIA), animations, styling (component styles, Tailwind CSS), testing, or CLI tooling.

Habilidades Relacionadas