promovaweb-devops-review-kestra-stack
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 serjdbc:postgresql://postgres:5432/kestra(ou URL válida)datasources.postgres.driver-class-name— deve serorg.postgresql.Driverdatasources.postgres.username— deve ser definidodatasources.postgres.password— deve existir e não deve ser o placeholderSENHA, compare com a senha definida empostgres.yaml
Kestra Server:
kestra.ai.providers— verificar se o provedorgeminiestá configurado corretamente (modelogemini-2.5-flash) e se aapi-keynão é o placeholderYOUR_GEMINI_API_KEYkestra.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ãoadmin@kestra.iokestra.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ãokestraouKwesstsra5039
Repositório e Fila:
kestra.repository.type— deve serpostgreskestra.queue.type— deve serpostgres
Storage:
kestra.storage.type— verificar se élocalou 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 comhttps://e terminar com/- O domínio deve ser válido (não
seudominio.com.brplaceholder) - 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-urldeve existir e conter um domínio válido (não placeholder comoseudominio.com.br) - O domínio na âncora deve ser idêntico ao domínio dentro de
Host(...)na labeltraefik.http.routers.kestra.rule - Se não forem iguais, reportar como ❌ Erro: inconsistência entre
x-kestra-app-urle a regra Traefik - O domínio na âncora deve coincidir também com o domínio em
KESTRA_URL(sem ohttps://e sem a barra final)
Labels obrigatórias:
traefik.enable=truetraefik.swarm.network=network_swarm_publictraefik.http.routers.kestra.rule— deve conterHost(...)com domínio válido e coincidir comx-kestra-app-urltraefik.http.routers.kestra.entrypoints=websecuretraefik.http.routers.kestra.tls=truetraefik.http.routers.kestra.tls.certresolver=letsencryptresolvertraefik.http.routers.kestra.service=kestratraefik.http.services.kestra.loadbalancer.server.port=8080traefik.http.services.kestra.loadbalancer.passHostHeader=true
Regras:
kestra-scheduler,kestra-worker,kestra-executornão devem ter labels Traefik (serviços internos)- O domínio na regra Traefik deve corresponder ao
x-kestra-app-urle aoKESTRA_URL
7. Volumes
Verifique se os volumes estão corretamente configurados:
kestra_data— deve serexternal: truee montado em todos os serviços em/app/storagekestra_wd— deve serexternal: truee 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 serreplicatedplacement.constraints— deve incluirnode.role == manager- Verificar se há
update_configcomorder: start-firstefailure_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: truena seçãonetworks:
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.passwordnão deve serSENHA(placeholder)kestra.ai.providers.gemini.configuration.api-keynão deve serYOUR_GEMINI_API_KEYkestra.server.basic-auth.enabled: false— alertar como risco de segurança (qualquer um pode acessar a UI)kestra.server.basic-auth.usernamenão deve seradmin@kestra.io(padrão)kestra.server.basic-auth.passwordnão deve serkestraouKwesstsra5039(padrão)KESTRA_URLnão deve conterseudominio.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. ...
More from promovaweb/skills-devops
promovaweb-devops-docker
Verifica o ambiente Docker do servidor — versão do Docker Engine, status do Swarm, nós do cluster, rede network_swarm_public, volumes externos e conformidade geral com as recomendações da Promovaweb.
10promovaweb-devops-review-evolution-go-stack
Verifica a Stack do Evolution Go. Além disso analisa parâmetros, rotas Traefik, volumes, recursos e conformidade do stack Evolution Go de Acordo com as Recomendações da Promovaweb.
9promovaweb-devops-docker-volumes
Implemente armazenamento persistente com Docker volumes, bind mounts e estratégias de backup
9promovaweb-devops-dockerfile-basics
Aprenda os fundamentos do Dockerfile e as melhores práticas para criar imagens de container prontas para produção
9promovaweb-devops-review-chatwoot-stack
Verifica a Stack do Chatwoot. Além disso analisa parâmetros, rotas Traefik, volumes, recursos e conformidade do stack Chatwoot de Acordo com as Recomendações da Promovaweb.
9promovaweb-devops-docker-networking
Configure a rede (networking) do Docker para containers, incluindo bridge, overlay e service discovery
9