平台工程若在 clustervps 多可用区 Mac 集群 上同时跑 OpenClaw 网关 与 CI 构建,最怕的不是 worker 不够,而是 KEDA 扩缩与金丝雀权重脱节。本文给出 KEDA ScaledObject × Webhook × 金丝雀探针 的最小可复现路径:含构建队列触发、多 AZ 切片、失败摘要广播与技能包回滚。⚡️🦞

目标读者:平台工程多 AZ Mac 集群管理员。结论先行:用 KEDA 对齐构建队列深度伸缩 worker,用 OpenClaw 汇总网关金丝雀指标,失败时广播 Webhook 摘要。结构含决策矩阵、七步落地与三条 FAQ。请先回到 首页 确认节点区域,再串读 Flagger 金丝雀文Nomad 构建锁文

三大痛点:① ScaledObject 只盯 CPU,忽略 build_queue_depth,尖峰仍排队;② 金丝雀网关与 stable 共用技能包,canary 收到半套设定;③ 扩缩失败只打原始日志,值班无法在 60 秒内判断是否冻结晋升。下文用一张 KEDA/Flagger/Argo 对照表与七步清单把事件驱动金丝雀跑通。

KEDA ScaledObject 触发条件与构建队列关系

在 Mac 集群上,构建队列深度比 CPU 更能预测是否需要加 worker。建议以 Prometheus 或 OpenClaw 导出的 openclaw_build_queue_depth{tenant} 作为触发器,cooldownPeriod 覆盖最长单次构建(建议 300 秒),maxReplicaCount 受磁盘水位约束而非硬拉满。

触发器阈值起点与队列关系
prometheusdepth ≥ 12 扩 1 副本每 +8 depth 再加 1,上限受水位表
cron夜间 02:00–06:00强制缩至 minReplica=1,错峰 rsync
webhook队列卡死 > 900s广播摘要并冻结 scale-out
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
  name: openclaw-build-workers
spec:
  scaleTargetRef:
    name: build-worker
  triggers:
  - type: prometheus
    metadata:
      serverAddress: http://observer:9090
      query: max(openclaw_build_queue_depth)
      threshold: "12"

多可用区网关节点金丝雀切片

AZ + ROLE 切三层:全域 KEDA 与 OpenClaw 共享字段、区域层写入口与权重、租户层写技能包 digest。canary-gw 仅在通过探针后才接收 KEDA 新起的 worker 流量;stable-gw 保持 100% 基线直到权重台阶晋升。

3 层
全域 / 区域 / 租户
5%→20%
首轮金丝雀权重(KEDA 冻结期)
AZ×2
每区 stable + canary 各一

指标探针(延迟、错误率)阈值

指标阈值(基线)探针来源
score≥94 允许 scale-out,<88 冻结OpenClaw readyz + doctor
5xx 率≤1.0%canary-gw access 对比 stable
p95 延迟较 stable 升幅 ≤15%网关合并口径
queue lag≤ 120s构建队列最老任务年龄

ScaledObject 的 activation 应读 /keda/canary-score,返回 score、queue_lag、p95_delta、digest_sha256。勿与 Flagger 的 /flagger/canary-score 或 Rollouts 路径混用,避免令牌覆盖。

Webhook 失败摘要广播

扩缩失败、探针未过或队列卡死时,广播固定五元组:rollout, queue, node, reason, attempts。鉴权用双令牌重叠窗口(建议 12 分钟)。401 单独标「鉴权失败」;业务降级返回 200 + 低 score,避免 KEDA 把网络抖动当坏版本。

  1. 注册 ScaledObject 并绑定 Prometheus 触发器。
  2. 部署 OpenClaw observer/keda/canary-score
  3. 写入 X-OpenClaw-Token,校验令牌版本。
  4. 合并四类探针:路由、5xx、p95、queue lag。
  5. 金丝雀段冻结 maxReplica,仅允许权重晋升。
  6. 失败触发 Webhook 摘要,同 delivery id 60 秒内只推一条。
  7. 预发压深队列,验证 scale 与摘要同步回落。

技能包版本锁与回滚

金丝雀阶段必须锁定 skills.lock 的 SHA256 digest;KEDA 新起的 worker 在 digest 未验前不得挂载 canary 技能树。回滚时先降 maxReplicaCount 至 min,再还原 stable 技能包与网关权重,顺序不可颠倒。排程亲和请对照 Nomad 构建锁矩阵

1TB/2TB 磁盘水位

构建暂存与 DerivedData 常把 1TB 盘提前打红;KEDA 扩缩必须读取同一水位脚本输出,红线时冻结 scale-out 并降 rsync bwlimit。

规格黄线红线KEDA 动作
1TB约 78%约 88%黄:maxReplica ×0.6;红:冻结扩缩
2TB约 72%约 84%黄:禁止新 canary worker;红:缩至 min

与 Flagger/Argo 已有文差异化(强调 KEDA)

方案驱动方式适用场景
KEDA队列深度/事件指标CI 尖峰、夜间退避、Mac worker 池
Flagger固定权重台阶 + AnalysisRun网关版本渐进;见 姊妹文
Argo Rollouts步进式 AnalysisRunGitOps 镜像流;见 Rollouts 探针文

实务上建议 KEDA 管 worker 副本与构建队列Flagger 或 Rollouts 管网关流量权重;两者共用 OpenClaw observer,但指标路径与令牌必须隔离。

金丝雀与扩缩 FAQ

  • 问:KEDA 与 Flagger 能否共用端点?答:可共用 observer,路径必须分离,例如 /keda 与 /flagger。
  • 问:队列飙升是否立刻拉满 maxReplica?答:受 cooldown 与磁盘水位约束,红线时冻结扩缩。
  • 问:与 Rollouts 差异?答:Rollouts 重步进晋升;KEDA 重事件对齐队列,更适合 CI 尖峰。
可引用(3 条):① 触发阈值 queue depth ≥12 扩 1 副本。② Webhook 超时 3 秒、同 id 60 秒 去重。③ 1TB 红线 88% 冻结 KEDA scale-out。
本文为工程演练建议。KEDA CRD 字段随版本可能变化,请以集群已部署版本为准;生产写入 runbook 前请在 clustervps 预发节点完整复跑。
事件驱动金丝雀 · 并联集群套餐

在真实 Mac 节点上跑通 KEDA × OpenClaw

已公開 FlaggerNomad 姊妹教学;本文为 KEDA 事件驱动路径。至 首页 选区域,再至 并联集群套餐 为 canary-gw 与 build-worker 各租一台 Mac mini M4。

租用并联 Mac 集群 阅读 Flagger 金丝雀文 查看定价