promovaweb-devops-review-kestra-stack
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseReview Kestra Stack
Kestra技术栈审查
Executa uma auditoria completa do arquivo e reporta conformidade, problemas e sugestões.
kestra.yaml对文件执行完整审计,输出合规性、问题和改进建议报告。
kestra.yamlInstruções de Execução
执行说明
Quando esta skill for invocada, siga exatamente este roteiro:
调用本工具时,请严格按照以下流程执行:
Passo 1 — Ler o arquivo
步骤1 — 读取文件
Leia o arquivo completo.
kestra.yaml读取完整的文件内容。
kestra.yamlPasso 2 — Executar todos os checks abaixo
步骤2 — 执行所有检查项
Execute cada bloco de verificação e registre os resultados (✅ OK / ⚠️ Atenção / ❌ Erro).
执行每个检查模块并记录结果(✅ 正常 / ⚠️ 注意 / ❌ 错误)。
Passo 3 — Gravar o resultado
步骤3 — 保存结果
Grave o relatório completo em um arquivo chamado kestra.audit.md.
将完整审计报告保存为名为kestra.audit.md的文件。
Checks de Verificação
检查项
1. Configuração YAML Obrigatória
1. 必填YAML配置
O Kestra usa um bloco YAML embutido () como variável de ambiente. Verifique o anchor :
KESTRA_CONFIGURATIONx-kestra-configBanco de dados PostgreSQL:
- — deve ser
datasources.postgres.url(ou URL válida)jdbc:postgresql://postgres:5432/kestra - — deve ser
datasources.postgres.driver-class-nameorg.postgresql.Driver - — deve ser definido
datasources.postgres.username - — deve existir e não deve ser o placeholder
datasources.postgres.password, compare com a senha definida emSENHApostgres.yaml
Kestra Server:
- — verificar se o provedor
kestra.ai.providersestá configurado corretamente (modelogemini) e se agemini-2.5-flashnão é o placeholderapi-keyYOUR_GEMINI_API_KEY - — verificar se autenticação está habilitada (recomendado em produção)
kestra.server.basic-auth.enabled - — se habilitado, não deve ser o padrão
kestra.server.basic-auth.usernameadmin@kestra.io - — 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.server.basic-auth.passwordoukestraKwesstsra5039
Repositório e Fila:
- — deve ser
kestra.repository.typepostgres - — deve ser
kestra.queue.typepostgres
Storage:
- — verificar se é
kestra.storage.typeou outro backend (S3, GCS, etc.)local - — deve ser
kestra.storage.local.base-path(ou caminho válido do volume)/app/storage
Tasks:
- — deve ser
kestra.tasks.tmp-dir.path(ou caminho válido do volume)/tmp/kestra-wd/tmp
Kestra使用内嵌的YAML块()作为环境变量,请检查锚点:
KESTRA_CONFIGURATIONx-kestra-configPostgreSQL数据库:
- — 必须为
datasources.postgres.url(或其他有效URL)jdbc:postgresql://postgres:5432/kestra - — 必须为
datasources.postgres.driver-class-nameorg.postgresql.Driver - — 必须已定义
datasources.postgres.username - — 必须存在且不能是占位符
datasources.postgres.password,需与SENHA中定义的密码一致postgres.yaml
Kestra服务端:
- — 检查
kestra.ai.providers提供商是否配置正确(模型为gemini),且gemini-2.5-flash不是占位符api-keyYOUR_GEMINI_API_KEY - — 检查是否启用身份验证(生产环境推荐开启)
kestra.server.basic-auth.enabled - — 若启用认证,不能使用默认值
kestra.server.basic-auth.usernameadmin@kestra.io - — 若启用认证,长度至少为10位,需包含字母、数字和.或/之类的特殊字符,不能使用默认值
kestra.server.basic-auth.password或kestraKwesstsra5039
仓库与队列:
- — 必须为
kestra.repository.typepostgres - — 必须为
kestra.queue.typepostgres
存储:
- — 检查是否为
kestra.storage.type或其他存储后端(S3、GCS等)local - — 必须为
kestra.storage.local.base-path(或有效的存储卷路径)/app/storage
任务:
- — 必须为
kestra.tasks.tmp-dir.path(或有效的存储卷路径)/tmp/kestra-wd/tmp
2. Serviços Obrigatórios
2. 必选服务
Verifique se todos estes serviços estão presentes:
| Serviço | Obrigatório |
|---|---|
| Sim |
| Sim |
| Sim |
| Sim |
检查是否包含以下所有服务:
| 服务 | 是否必填 |
|---|---|
| 是 |
| 是 |
| 是 |
| 是 |
3. Comandos dos Containers
3. 容器启动命令
Verifique o comando () de cada serviço:
command| Serviço | Comando Esperado |
|---|---|
| |
| |
| |
| |
检查每个服务的启动命令():
command| 服务 | 预期命令 |
|---|---|
| |
| |
| |
| |
4. Replicas dos Serviços
4. 服务副本数
Verifique a quantidade de réplicas de cada serviço:
| Serviço | Réplicas Mínimas | Observação |
|---|---|---|
| 1 | Múltiplas réplicas aumentam disponibilidade |
| 1 | Pode escalar para mais workers |
| 1 | Pode escalar para mais executors |
| 1 | Interface web, geralmente 1 réplica |
Verificar se réplicas de scheduler e executor são adequadas para a carga esperada.
检查每个服务的副本数量:
| 服务 | 最小副本数 | 备注 |
|---|---|---|
| 1 | 多副本可提升可用性 |
| 1 | 可扩展更多worker |
| 1 | 可扩展更多executor |
| 1 | 网页界面,通常1个副本即可 |
检查scheduler和executor的副本数是否符合预期负载要求。
5. Variável de Ambiente KESTRA_URL
KESTRA_URL5. 环境变量KESTRA_URL
KESTRA_URLVerificar no serviço :
kestra-webserver- — deve começar com
KESTRA_URLe terminar comhttps:/// - O domínio deve ser válido (não placeholder)
seudominio.com.br - Deve corresponder à regra Traefik configurada
在服务中检查:
kestra-webserver- — 必须以
KESTRA_URL开头,以https://结尾/ - 域名必须有效(不能是占位符)
seudominio.com.br - 必须与配置的Traefik规则匹配
6. Rotas Traefik
6. Traefik路由
Para o serviço , verifique:
kestra-webserverÂncora de endereço ():
x-kestra-app-url- A âncora deve existir e conter um domínio válido (não placeholder como
x-kestra-app-url)seudominio.com.br - O domínio na âncora deve ser idêntico ao domínio dentro de na label
Host(...)traefik.http.routers.kestra.rule - Se não forem iguais, reportar como ❌ Erro: inconsistência entre e a regra Traefik
x-kestra-app-url - O domínio na âncora deve coincidir também com o domínio em (sem o
KESTRA_URLe sem a barra final)https://
Labels obrigatórias:
traefik.enable=truetraefik.swarm.network=network_swarm_public- — deve conter
traefik.http.routers.kestra.rulecom domínio válido e coincidir comHost(...)x-kestra-app-url traefik.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-workernão devem ter labels Traefik (serviços internos)kestra-executor - O domínio na regra Traefik deve corresponder ao e ao
x-kestra-app-urlKESTRA_URL
针对服务,检查以下内容:
kestra-webserver地址锚点():
x-kestra-app-url- 锚点必须存在且包含有效域名(不能是
x-kestra-app-url之类的占位符)seudominio.com.br - 锚点中的域名必须完全一致于标签中
traefik.http.routers.kestra.rule内的域名Host(...) - 若不一致,标记为❌ 错误:与Traefik规则不一致
x-kestra-app-url - 锚点中的域名也必须与中的域名一致(去除
KESTRA_URL和末尾斜杠后)https://
必填标签:
traefik.enable=truetraefik.swarm.network=network_swarm_public- — 必须包含
traefik.http.routers.kestra.rule且域名有效,与Host(...)一致x-kestra-app-url traefik.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
规则:
- 、
kestra-scheduler、kestra-worker不能配置Traefik标签(内部服务)kestra-executor - Traefik规则中的域名必须与和
x-kestra-app-url一致KESTRA_URL
7. Volumes
7. 存储卷
Verifique se os volumes estão corretamente configurados:
- — deve ser
kestra_datae montado em todos os serviços emexternal: true/app/storage - — deve ser
kestra_wde montado em todos os serviços emexternal: true/tmp/kestra-wd - — montado em todos os serviços (necessário para execução de tasks Docker)
/var/run/docker.sock
Alertar se algum serviço não compartilhar os volumes e .
kestra_datakestra_wd检查存储卷是否配置正确:
- — 必须设置
kestra_data,且在所有服务中挂载到external: true/app/storage - — 必须设置
kestra_wd,且在所有服务中挂载到external: true/tmp/kestra-wd - — 需挂载到所有服务中(执行Docker任务所需)
/var/run/docker.sock
若有服务未共享和存储卷,需发出告警。
kestra_datakestra_wd8. Usuário dos Containers
8. 容器运行用户
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 definido
user: "root"
检查所有服务是否配置了:
user: "root"- 访问Docker socket所需
- 若有服务未配置,需发出告警
user: "root"
9. Recursos dos Containers
9. 容器资源配置
Para cada serviço, verifique os limites de recursos:
| Serviço | CPU Mínimo | Memória Mínima | Memória Máxima |
|---|---|---|---|
| "1" | 512M | 1024M |
| "1" | 512M | 1024M |
| "1" | 512M | 1024M |
| "1" | 512M | 1024M |
Alertar se algum serviço não tiver definido.
resources.limits检查每个服务的资源限制:
| 服务 | 最低CPU配置 | 最低内存配置 | 最大内存配置 |
|---|---|---|---|
| "1" | 512M | 1024M |
| "1" | 512M | 1024M |
| "1" | 512M | 1024M |
| "1" | 512M | 1024M |
若有服务未配置,需发出告警。
resources.limits10. Configuração de Deploy
10. 部署配置
Para cada serviço, verifique:
- — todos devem ser
mode: replicatedreplicated - — deve incluir
placement.constraintsnode.role == manager - Verificar se há com
update_configeorder: start-first(recomendado)failure_action: rollback
检查每个服务的以下配置:
- — 所有服务都必须为
mode: replicated模式replicated - — 必须包含
placement.constraintsnode.role == manager - 检查是否配置了,包含
update_config和order: start-first(推荐配置)failure_action: rollback
11. Redes e Imagens
11. 网络与镜像
Redes:
- Todos os serviços devem estar na rede
network_swarm_public - A rede deve ser declarada como na seção
external: truenetworks:
Imagens:
- Todos os serviços devem usar (anchor)
*kestra-image - Verificar se a imagem usa tag específica de versão em vez de (recomendado em produção)
latest
网络:
- 所有服务必须加入网络
network_swarm_public - 该网络必须在段中声明为
networks:external: true
镜像:
- 所有服务必须使用(锚点)
*kestra-image - 检查镜像是否使用指定版本标签而非(生产环境推荐)
latest
12. Segurança
12. 安全性
- não deve ser
datasources.postgres.password(placeholder)SENHA - não deve ser
kestra.ai.providers.gemini.configuration.api-keyYOUR_GEMINI_API_KEY - — alertar como risco de segurança (qualquer um pode acessar a UI)
kestra.server.basic-auth.enabled: false - não deve ser
kestra.server.basic-auth.username(padrão)admin@kestra.io - não deve ser
kestra.server.basic-auth.passwordoukestra(padrão)Kwesstsra5039 - não deve conter
KESTRA_URL(placeholder)seudominio.com.br
- 不能是占位符
datasources.postgres.passwordSENHA - 不能是占位符
kestra.ai.providers.gemini.configuration.api-keyYOUR_GEMINI_API_KEY - — 标记为安全风险(任何人都可以访问UI)
kestra.server.basic-auth.enabled: false - 不能是默认值
kestra.server.basic-auth.usernameadmin@kestra.io - 不能是默认值
kestra.server.basic-auth.password或kestraKwesstsra5039 - 不能包含占位符
KESTRA_URLseudominio.com.br
Formato do Relatório de Saída
输出报告格式
Ao final, produza um relatório estruturado:
undefined完成检查后,生成结构化报告:
undefinedRelatório de Auditoria — kestra.yaml
审计报告 — kestra.yaml
Data: <data atual>
日期: <当前日期>
Resumo
摘要
- Total de checks: X
- ✅ OK: X
- ⚠️ Atenções: X
- ❌ Erros: X
- 总检查项: X
- ✅ 正常: X
- ⚠️ 注意: X
- ❌ 错误: X
Resultados por Categoria
各分类检查结果
1. Configuração YAML
1. YAML配置
✅ datasources.postgres.url: definido corretamente
❌ datasources.postgres.password: usando placeholder SENHA — troque antes do deploy
...
✅ datasources.postgres.url: 配置正确
❌ datasources.postgres.password: 使用了占位符SENHA — 部署前请替换
...
2. Serviços
2. 服务检查
✅ kestra-scheduler: presente
✅ kestra-worker: presente
✅ kestra-executor: presente
✅ kestra-webserver: presente
✅ kestra-scheduler: 已存在
✅ kestra-worker: 已存在
✅ kestra-executor: 已存在
✅ kestra-webserver: 已存在
3. Comandos
3. 启动命令
✅ kestra-scheduler: comando correto
✅ kestra-worker: comando correto
...
server schedulerserver worker✅ kestra-scheduler: 命令正确
✅ kestra-worker: 命令正确
...
server schedulerserver worker4. Replicas
4. 副本配置
✅ kestra-worker: 2 réplicas
✅ kestra-executor: 2 réplicas
...
✅ kestra-worker: 2个副本
✅ kestra-executor: 2个副本
...
5. KESTRA_URL
5. KESTRA_URL配置
❌ KESTRA_URL: contém placeholder — configure o domínio real
...
seudominio.com.br❌ KESTRA_URL: 包含占位符 — 请配置真实域名
...
seudominio.com.br6. Rotas Traefik
6. Traefik路由
❌ kestra-webserver: domínio placeholder na regra Traefik
...
kestra.seudominio.com.br❌ kestra-webserver: Traefik规则中使用了占位符域名
...
kestra.seudominio.com.br7. Volumes
7. 存储卷
✅ kestra_data: compartilhado entre todos os serviços
✅ kestra_wd: compartilhado entre todos os serviços
✅ docker.sock: montado em todos os serviços
...
✅ kestra_data: 所有服务已共享
✅ kestra_wd: 所有服务已共享
✅ docker.sock: 所有服务已挂载
...
8. Usuário
8. 运行用户
✅ Todos os serviços com user: root
...
✅ 所有服务已配置user: root
...
9. Recursos
9. 资源配置
✅ Todos os serviços com limits definidos
...
✅ 所有服务已配置资源限制
...
10. Deploy
10. 部署配置
⚠️ update_config não definido — recomendado configurar start-first e rollback
...
⚠️ 未配置update_config — 推荐配置start-first和rollback策略
...
11. Redes e Imagens
11. 网络与镜像
⚠️ Imagem usando — considere fixar uma versão em produção
...
latest⚠️ 镜像使用了标签 — 生产环境建议固定版本
...
latest12. Segurança
12. 安全性
❌ 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 — troque em produção
⚠️ kestra.ai.providers.gemini.api-key: usando placeholder
...
Kwesstsra5039YOUR_GEMINI_API_KEY❌ basic-auth已关闭 — 任何用户都可访问Web界面
❌ datasources.postgres.password: 检测到占位符SENHA
⚠️ kestra.server.basic-auth.password: 使用了默认值 — 生产环境请替换
⚠️ kestra.ai.providers.gemini.api-key: 使用了占位符
...
Kwesstsra5039YOUR_GEMINI_API_KEYAções Recomendadas (por prioridade)
建议操作(按优先级排序)
Crítico (fazer antes do deploy)
高危(部署前必须处理)
- ...
- ...
Recomendado
建议处理
- ...
- ...
Opcional
可选处理
- ...
undefined- ...
undefined