promovaweb-devops-review-kestra-stack

Installation
SKILL.md

Review Kestra Stack

Executa uma auditoria completa do arquivo kestra.yaml e reporta conformidade, problemas e sugestões.

Instruções de Execução

Quando esta skill for invocada, siga exatamente este roteiro:

Passo 1 — Ler o arquivo

Leia o arquivo kestra.yaml completo.

Passo 2 — Executar todos os checks abaixo

Execute cada bloco de verificação e registre os resultados (✅ OK / ⚠️ Atenção / ❌ Erro).

Passo 3 — Gravar o resultado

Grave o relatório completo em um arquivo chamado kestra.audit.md.


Checks de Verificação

1. Configuração YAML Obrigatória

O Kestra usa um bloco YAML embutido (KESTRA_CONFIGURATION) como variável de ambiente. Verifique o anchor x-kestra-config:

Banco de dados PostgreSQL:

  • datasources.postgres.url — deve ser jdbc:postgresql://postgres:5432/kestra (ou URL válida)
  • datasources.postgres.driver-class-name — deve ser org.postgresql.Driver
  • datasources.postgres.username — deve ser definido
  • datasources.postgres.password — deve existir e não deve ser o placeholder SENHA, compare com a senha definida em postgres.yaml

Kestra Server:

  • kestra.ai.providers — verificar se o provedor gemini está configurado corretamente (modelo gemini-2.5-flash) e se a api-key não é o placeholder YOUR_GEMINI_API_KEY
  • kestra.server.basic-auth.enabled — verificar se autenticação está habilitada (recomendado em produção)
  • kestra.server.basic-auth.username — se habilitado, não deve ser o padrão admin@kestra.io
  • kestra.server.basic-auth.password — se habilitado deve ter no múnimo 10 caracteres entre letras, números e um caracter especial como . ou /, não deve ser o padrão kestra ou Kwesstsra5039

Repositório e Fila:

  • kestra.repository.type — deve ser postgres
  • kestra.queue.type — deve ser postgres

Storage:

  • kestra.storage.type — verificar se é local ou outro backend (S3, GCS, etc.)
  • kestra.storage.local.base-path — deve ser /app/storage (ou caminho válido do volume)

Tasks:

  • kestra.tasks.tmp-dir.path — deve ser /tmp/kestra-wd/tmp (ou caminho válido do volume)

2. Serviços Obrigatórios

Verifique se todos estes serviços estão presentes:

Serviço Obrigatório
kestra-scheduler Sim
kestra-worker Sim
kestra-executor Sim
kestra-webserver Sim

3. Comandos dos Containers

Verifique o comando (command) de cada serviço:

Serviço Comando Esperado
kestra-scheduler server scheduler
kestra-worker server worker
kestra-executor server executor
kestra-webserver server webserver

4. Replicas dos Serviços

Verifique a quantidade de réplicas de cada serviço:

Serviço Réplicas Mínimas Observação
kestra-scheduler 1 Múltiplas réplicas aumentam disponibilidade
kestra-worker 1 Pode escalar para mais workers
kestra-executor 1 Pode escalar para mais executors
kestra-webserver 1 Interface web, geralmente 1 réplica

Verificar se réplicas de scheduler e executor são adequadas para a carga esperada.


5. Variável de Ambiente KESTRA_URL

Verificar no serviço kestra-webserver:

  • KESTRA_URL — deve começar com https:// e terminar com /
  • O domínio deve ser válido (não seudominio.com.br placeholder)
  • Deve corresponder à regra Traefik configurada

6. Rotas Traefik

Para o serviço kestra-webserver, verifique:

Âncora de endereço (x-kestra-app-url):

  • A âncora x-kestra-app-url deve existir e conter um domínio válido (não placeholder como seudominio.com.br)
  • O domínio na âncora deve ser idêntico ao domínio dentro de Host(...) na label traefik.http.routers.kestra.rule
  • Se não forem iguais, reportar como ❌ Erro: inconsistência entre x-kestra-app-url e a regra Traefik
  • O domínio na âncora deve coincidir também com o domínio em KESTRA_URL (sem o https:// e sem a barra final)

Labels obrigatórias:

  • traefik.enable=true
  • traefik.swarm.network=network_swarm_public
  • traefik.http.routers.kestra.rule — deve conter Host(...) com domínio válido e coincidir com x-kestra-app-url
  • traefik.http.routers.kestra.entrypoints=websecure
  • traefik.http.routers.kestra.tls=true
  • traefik.http.routers.kestra.tls.certresolver=letsencryptresolver
  • traefik.http.routers.kestra.service=kestra
  • traefik.http.services.kestra.loadbalancer.server.port=8080
  • traefik.http.services.kestra.loadbalancer.passHostHeader=true

Regras:

  • kestra-scheduler, kestra-worker, kestra-executor não devem ter labels Traefik (serviços internos)
  • O domínio na regra Traefik deve corresponder ao x-kestra-app-url e ao KESTRA_URL

7. Volumes

Verifique se os volumes estão corretamente configurados:

  • kestra_data — deve ser external: true e montado em todos os serviços em /app/storage
  • kestra_wd — deve ser external: true e montado em todos os serviços em /tmp/kestra-wd
  • /var/run/docker.sock — montado em todos os serviços (necessário para execução de tasks Docker)

Alertar se algum serviço não compartilhar os volumes kestra_data e kestra_wd.


8. Usuário dos Containers

Verificar que todos os serviços têm user: "root":

  • Necessário para acesso ao Docker socket
  • Alertar se algum serviço não tiver user: "root" definido

9. Recursos dos Containers

Para cada serviço, verifique os limites de recursos:

Serviço CPU Mínimo Memória Mínima Memória Máxima
kestra-scheduler "1" 512M 1024M
kestra-worker "1" 512M 1024M
kestra-executor "1" 512M 1024M
kestra-webserver "1" 512M 1024M

Alertar se algum serviço não tiver resources.limits definido.


10. Configuração de Deploy

Para cada serviço, verifique:

  • mode: replicated — todos devem ser replicated
  • placement.constraints — deve incluir node.role == manager
  • Verificar se há update_config com order: start-first e failure_action: rollback (recomendado)

11. Redes e Imagens

Redes:

  • Todos os serviços devem estar na rede network_swarm_public
  • A rede deve ser declarada como external: true na seção networks:

Imagens:

  • Todos os serviços devem usar *kestra-image (anchor)
  • Verificar se a imagem usa tag específica de versão em vez de latest (recomendado em produção)

12. Segurança

  • datasources.postgres.password não deve ser SENHA (placeholder)
  • kestra.ai.providers.gemini.configuration.api-key não deve ser YOUR_GEMINI_API_KEY
  • kestra.server.basic-auth.enabled: false — alertar como risco de segurança (qualquer um pode acessar a UI)
  • kestra.server.basic-auth.username não deve ser admin@kestra.io (padrão)
  • kestra.server.basic-auth.password não deve ser kestra ou Kwesstsra5039 (padrão)
  • KESTRA_URL não deve conter seudominio.com.br (placeholder)

Formato do Relatório de Saída

Ao final, produza um relatório estruturado:

# Relatório de Auditoria — kestra.yaml
Data: <data atual>

## Resumo
- Total de checks: X
- ✅ OK: X
- ⚠️ Atenções: X
- ❌ Erros: X

## Resultados por Categoria

### 1. Configuração YAML
✅ datasources.postgres.url: definido corretamente
❌ datasources.postgres.password: usando placeholder SENHA — troque antes do deploy
...

### 2. Serviços
✅ kestra-scheduler: presente
✅ kestra-worker: presente
✅ kestra-executor: presente
✅ kestra-webserver: presente

### 3. Comandos
✅ kestra-scheduler: comando `server scheduler` correto
✅ kestra-worker: comando `server worker` correto
...

### 4. Replicas
✅ kestra-worker: 2 réplicas
✅ kestra-executor: 2 réplicas
...

### 5. KESTRA_URL
❌ KESTRA_URL: contém placeholder `seudominio.com.br` — configure o domínio real
...

### 6. Rotas Traefik
❌ kestra-webserver: domínio placeholder `kestra.seudominio.com.br` na regra Traefik
...

### 7. Volumes
✅ kestra_data: compartilhado entre todos os serviços
✅ kestra_wd: compartilhado entre todos os serviços
✅ docker.sock: montado em todos os serviços
...

### 8. Usuário
✅ Todos os serviços com user: root
...

### 9. Recursos
✅ Todos os serviços com limits definidos
...

### 10. Deploy
⚠️ update_config não definido — recomendado configurar start-first e rollback
...

### 11. Redes e Imagens
⚠️ Imagem usando `latest` — considere fixar uma versão em produção
...

### 12. Segurança
❌ basic-auth desabilitado — qualquer usuário pode acessar a interface web
❌ datasources.postgres.password: placeholder SENHA detectado
⚠️ kestra.server.basic-auth.password: usando valor padrão `Kwesstsra5039` — troque em produção
⚠️ kestra.ai.providers.gemini.api-key: usando placeholder `YOUR_GEMINI_API_KEY`
...

## Ações Recomendadas (por prioridade)

### Crítico (fazer antes do deploy)
1. ...

### Recomendado
1. ...

### Opcional
1. ...
Related skills
Installs
9
GitHub Stars
4
First Seen
Mar 28, 2026