目标读者是平台工程与多 AZ Mac 集群管理员。典型拓扑:stable-gw-a/b、canary-gw、observer 控制面,共四台以上物理 Mac。OpenClaw 聚合网关指标与 Webhook digest;Flagger 通过 Canary 与 AnalysisRun 决定权重。请先回到 首页确认节点区域,再串读 多 AZ 网关 Webhook 与 集群日志 Webhook。
三大痛点:① 网关版本与技能包未锁,金丝雀节点收到半套配置;② AnalysisRun 只盯单一 HTTP 探针,忽略 doctor 与 digest;③ 失败只打原始日志,值班无法在 60 秒内判断是否回滚。下文用一张阈值表、六步清单与三条 FAQ 把 Flagger 金丝雀跑通。
① 多节点网关版本切片与技能包锁
按 AZ + ROLE 切三层:全局 Flagger 与 OpenClaw 共享字段、区域层写入口与权重、租户层写技能包 digest。金丝雀阶段必须锁定 skills.lock,禁止 canary-gw 加载未验签的技能包。
② AnalysisRun 指标阈值与探针合并
| 指标 | 阈值(基线) | 探针来源 |
|---|---|---|
| score | ≥95 晋升,<90 回滚 | OpenClaw 合并 readyz + doctor |
| 5xx 率 | ≤1.2% | 网关 access 与 canary 对比 |
| p95 延迟 | 较 stable 升幅 ≤18% | canary-gw 与 stable-gw 差分 |
| digest | 无新未分类失败 | 近 5 分钟 Webhook 摘要 |
Flagger MetricTemplate 应调用 /flagger/canary-score,返回 score、node_breakdown、digest_sha256、retry_observed 四字段。勿与 Argo Rollouts AnalysisRun 共用同一路径,避免令牌互相覆盖。
apiVersion: flagger.app/v1beta1
kind: MetricTemplate
metadata:
name: openclaw-gateway-score
spec:
provider:
type: webhooks
address: https://ctl.internal/flagger/canary-score
timeout: 3s
③ Webhook 失败摘要广播与令牌轮换
AnalysisRun 失败时广播固定五元组:rollout, step, node, reason, attempts。鉴权用双令牌重叠窗口(建议 12 分钟),覆盖 Flagger 最长重试链。401 单独广播「鉴权失败」;业务降级返回 200 + 低 score,避免 Flagger 把抖动当坏版本。
- 创建 MetricTemplate 并绑定 Canary 的 analysis 段。
- 写入 X-OpenClaw-Token,observer 校验令牌版本。
- 合并四类探针:路由、5xx、p95、doctor deep。
- 按 5%、15%、30% 放量,每段结束写 JSONL 摘要。
- 失败触发广播,同 delivery id 60 秒内只推一条卡片。
- 预发演练 rollback,确认权重与 digest 同步回落。
④ 制品 rsync / 构建锁参数
金丝雀阶段不要停 rsync,应把 --bwlimit 降到 stable 的 40%、并发设为 1。构建锁 TTL 须 ≥ AnalysisRun 全链最长耗时 + 一个探针周期(建议 900 秒)。持有锁期间禁止向 canary 推送未验 digest 的制品。若你使用 GitOps 镜像流,可对照 Flux Webhook 金丝雀 的令牌与去重口径。
⑤ 金丝雀回滚 FAQ
- 问:Flagger 与 Rollouts 能否共用 OpenClaw 端点?答:可共用 observer,但 metric 路径与令牌必须隔离。
- 问:AnalysisRun 超时要不要立刻回滚?答:先记 degraded 并广播;连续两次超时或 score<90 再 rollback。
- 问:canary-gw 磁盘水位告警还能放量吗?答:1TB 盘可用率 >88% 时冻结晋升,先 rsync 回迁再分析。
在真实 Mac 节点上跑通 Flagger 金丝雀
已公开 Argo Rollouts 与 Flux 姊妹教程;本文为 Flagger 路径。为 canary-gw 单独租用一台 Mac mini M4,AnalysisRun 才能反映真实渐进风险。