本手册用于把单个 DataFlow 从 n8n 正式执行逐步迁移到 Kestra。迁移是逐流程、 逐环境进行的,不允许一次性改变全局正式引擎。
四种受控状态如下:
n8n_primary:n8n 是唯一正式引擎。n8n_primary_kestra_shadow:n8n 正式执行,Kestra 只读或写入隔离目标。kestra_primary_n8n_standby:Kestra 正式执行,n8n 保留为可回切目标。kestra_primary:仅在统一退役门禁独立批准后允许进入。状态只能沿相邻路径前进或回退,禁止从 n8n_primary 直接跳到
kestra_primary。
scripts/inventory_n8n_workflows.py 取得目标环境的实时资产清单。空的本地
清单不能替代生产清单。app.commands.migrate_n8n_workflow 生成 WorkflowSpec、SchedulePlan 和
阻断报告。命令只转换,不部署。read_only 隔离策略。同一次双跑必须使用不可变的同一输入快照,并记录 SHA-256 输入摘要。n8n 仍是 唯一正式写入引擎,Kestra 只能:
每次执行用 app.commands.reconcile_dual_run 对账以下指标:
对账文件只包含有界指标和摘要,不保存业务原始行。状态、行数、主键摘要、内容 摘要和异常数不能配置为忽略项。非确定性时间戳或资源波动只能通过显式路径和数值 容差处理。
迁移顺序固定为:
进入一个批次前,资产清单、WorkflowSpec、策略、回滚目标、规定次数的影子运行、 一次失败恢复、对账、连接预算、峰值并发和 SLA 必须全部通过。任一门禁缺失即 失败关闭。
workflow_cutover_operations、把迁移状态标记为
transition_pending,并写入 workflow.engine.cutover.requested Outbox 事件。kestra_primary_n8n_standby。rolled_back。原始异常
和引擎响应不会进入审计,只记录安全原因码与有界状态。不得在数据库事务中发起 n8n 或 Kestra HTTP 请求。
观察期必须达到流程预先声明的时长,并且满足:
观察期未结束或出现任一事件时,不允许推进下一批或退役 n8n。
kestra_primary_n8n_standby。n8n_primary_kestra_shadow。若引擎状态不明确,暂停该流程,不允许同时启用两个正式写入引擎。