Три операционных ловушки до первого честного promote
1. Два контроллера на один URL. Если Argo Rollouts и Flagger бьют в один endpoint измерения шлюза, вы получите гонку вердиктов и непредсказуемый откат. Разведите namespace или выберите один upstream на зону.
2. Расщеплённые пробы. Flagger читает одно тело за окно AnalysisRun. Отдельный «зелёный» health процесса и отдельный счётчик 5xx на канареечном ingress дают ложноположительные promote.
3. Webhook без digest и rsync без очереди. Повторы без потолка нагружают шлюз за балансировщиком; параллельный promote артефактов без flock ломает срез skill pack, пока канарейка ещё наращивает трафик. Согласуйте с логами и webhook кластера и главной clustervps.
Многоузловой шлюз: срезы версии и lock skill pack
Перед сдвигом веса Flagger зафиксируйте на каждой зоне: образ шлюза OpenClaw, хеш skill pack и политику sticky или leader для измерений. Канареечный срез должен получать тот же набор навыков, что и stable, иначе метрики сравнивают разные контракты.
- Срез по AZ: метка
regionиgateway_generationв JSON ответа webhook. - Lock skill pack: promote конфигурации только после ACK merge-пробы; см. canary skills multi-AZ.
- Drain узла: при обслуживании Mac снимайте его с LB до завершения активного AnalysisRun.
Матрица: Flagger, Rollouts, Flux и роль webhook OpenClaw
| Контроллер | Триггер канарейки | HTTP webhook | Когда выбирать |
|---|---|---|---|
| Flagger | Canary + AnalysisRun metricTemplate | Один URL merge-метрик на шлюзе | Уже стандартизированы на Flagger в кластере K8s |
| Argo Rollouts | Шаги Rollout, pause, promote | AnalysisTemplate → тот же контракт JSON | Нужны шаги Rollout; см. runbook Rollouts |
| Flux | ImageUpdateAutomation, Receiver | Webhook на ingress шлюза, bearer overlap | GitOps без Rollouts; см. Flux webhook |
| clustervps multi-AZ | LB + несколько Mac mini M4 | Стабильный DNS шлюза, rate limit | Паттерн из multi-AZ gateway |
AnalysisRun: пороги метрик и merge проб шлюза
В обработчике webhook соберите: долю ошибок канареечного среза, p95 latency upstream, флаг degraded, занятость диска APFS и единый verdict. Пороги в metricTemplate должны ссылаться на те же поля.
{
"verdict": "pass",
"canary_error_rate": 0.008,
"gateway_p95_ms": 142,
"degraded": false,
"gateway_generation": "2026.05.18-7"
}
При degraded: true или error_rate выше потолка возвращайте HTTP 200 с verdict: fail — fail closed для Flagger, а не маскировку через 5xx без тела.
Webhook: broadcast digest сбоев и ротация bearer
На каждый неуспех измерения публикуйте нормализованный digest: rollout, окно, узел Mac, код upstream, усечённый reason. Держите два действительных bearer минимум одно окно AnalysisRun; снимайте старый секрет только после ACK на шлюзе.
Authorization: Bearer <secret>, таймаут запроса строго короче интервала канарейки; max retry не выше пяти с jitter на стороне Flagger.Артефакты: rsync, build lock и окно канарейки
Не снимайте flock promote, пока канарейка не promote или abort. Параметры полосы — в матрице rsync артефактов; при жёлтом водяном знаке диска на шлюзе — abort канарейки раньше повторов webhook.
flock /var/tmp/openclaw-promote.lock ionice -c2 -n4 \ rsync -a --delete-delay --bwlimit=32000 ./out/ /artifacts/canary/
Семь шагов минимального воспроизведения
- Выбор контроллера: один из Flagger / Rollouts / Flux на endpoint; остальные только читают статус.
- Canary CR и metricTemplate: URL HTTPS шлюза OpenClaw на пуле clustervps, интервал и пороги error-rate / latency.
- Merge handler: один JSON, поля
verdictиreason, без скрытых вторичных путей. - Staging drill: два параллельных AnalysisRun с искусственной задержкой и проверкой overlap bearer.
- Digest channel: зеркало неуспехов в канал дежурств по контракту cluster logs webhook.
- rsync gate: flock и bwlimit до promote артефактов; abort при disk yellow на Mac шлюза.
- Документированный rollback: сброс веса Flagger, stable generation, снятие lock — см. FAQ ниже.
Цифры для runbook и постмортемов
- Не выше полутора процентов error-rate на канареечном срезе — типичный потолок для promote; ужесточайте для auth маршрутов.
- p95 gateway ниже 220 ms между регионами clustervps — ориентир до расширения веса выше тридцати процентов.
- Два действительных bearer в окне ротации; снятие старого — не раньше max интервала AnalysisRun.
- Не выше пяти retry webhook на окно с экспоненциальным backoff — потолок против шторма на шлюз.
FAQ: откат канарейки Flagger
Когда abort вместо retry? Два окна подряд с verdict: fail, жёлтый водяной знак диска на Mac шлюза или flock promote не освобождается дольше документированного потолка.
Как не смешать Flagger и Rollouts? Разные URL или namespace; для Rollouts — отдельный runbook; для Flux — ImageUpdateAutomation.
Что после abort? Сбросить canary weight, вернуть stable gateway_generation, разблокировать rsync только после зелёного merge-пробы. SSH и доступ — справочный центр.
Mac mini M4 под OpenClaw, Flagger и merge webhook
Расширьте пул физических Mac для канареечного шлюза и параллельного CI: сначала изучите Argo Rollouts или Flux webhook, затем оформите многоузловой тариф на странице покупки.