DR 容灾etcd-sync 动态 ConfigMap 迁移
etcd-sync 动态 ConfigMap 接入规范
上下游接入契约与 SLA
etcd-sync 动态 ConfigMap 接入规范
面向规则提供方与 Agent 实现者,定义 ConfigMap 的发现契约、数据键、排序模型、单层判定流程、状态回写和失败语义。
速查
| 项目 | 取值或规则 |
|---|---|
| 启用标签 | etcd-sync.cpaas.io/enabled: "true" |
| 优先级注解 | etcd-sync.cpaas.io/weight: "<非负整数>",默认 0 |
| 排序 | weight 降序,namespace/name 升序 |
| 默认结果 | 所有规则层都没有结论时,最终忽略 |
| 共享快照对象 | etcd-sync-rule-snapshot |
| 快照数据键 | snapshot.json |
| 默认规则来源 | etcd-sync-ignore-text,weight=0 |
发现契约
etcd-sync 在所有命名空间内发现带启用标签的 ConfigMap。
启用标签
优先级注解
weight 必须是非负整数。值越大优先级越高。非法值会让整个来源进入 rejected。
支持的数据键
| key | 含义 |
|---|---|
ignore-equal.txt | 精确忽略 |
sync-equal-file.txt | 精确同步 |
ignore-prefix-file.txt | 前缀忽略 |
sync-prefix-file.txt | 前缀同步 |
sync-glob-file.txt | glob 同步 |
sync-regexp-file.txt | 正则同步 |
sync-kvs-file.txt | key/value 同步 |
ignore-kvs-file.txt | key/value 忽略 |
sync-delete-prefix-file.txt | 删除事件的同步前缀 |
sync-delete-ignore.txt | 删除事件的忽略前缀 |
pre-sync-prefix-file.txt | 预同步前缀 |
文本归一化
- 空行忽略
- 首尾空白裁剪
#开头视为注释- 出现未知 data key 时,整个来源被拒绝
data为空是合法情况,状态记为accepted: empty rule layer
排序模型
- 所有规则层按
weight降序排 weight相同的层按namespace/name升序排- 首个给出明确结论的层即为生效层
规则层
- 一个 ConfigMap 即一个规则层
- 多个规则层按上述顺序构成一个有序快照
- 默认规则来源与产品规则来源处在同一条优先级链路上
默认结果
一个 key 穿过所有规则层后,如果仍没有任何层给出明确结论,最终结果是忽略。
单层判定
PUT 事件:
DELETE 事件:
语义要点
| 数据键 | 语义 |
|---|---|
ignore-equal.txt | 单层内最高优先级的精确忽略 |
ignore-kvs-file.txt | 在已得到同步候选之后做二次否决 |
sync-delete-prefix-file.txt | 仅作用于删除事件 |
sync-delete-ignore.txt | 在删除路径上进一步否决删除同步 |
pre-sync-prefix-file.txt | 参与预同步范围拼接,不参与单条 key 的常规决策 |
状态回写
| annotation | 含义 |
|---|---|
etcd-sync.cpaas.io/status | accepted 或 rejected |
etcd-sync.cpaas.io/message | 最近一次处理结果的描述 |
etcd-sync.cpaas.io/observed-weight | 实际读取到的 weight |
etcd-sync.cpaas.io/observed-hash | data 内容哈希 |
etcd-sync.cpaas.io/processed-at | 处理时间 |
状态机
失败语义
| 失败类型 | 结果 |
|---|---|
| 出现未知 data key | rejected |
weight 非法 | rejected |
| 正则非法 | rejected |
| 当前版本解析失败 | 上一版成功内容继续生效 |
| ConfigMap 被删除 | 当前规则层从快照中移除 |
平台前提
| 项目 | 要求 |
|---|---|
| 监听 ConfigMap 的权限 | get / list / watch / patch |
| 共享快照对象 | etcd-sync-rule-snapshot |
| 快照读写 | mirror 写入 snapshot.json,mirror 与 monitor 都读取 |
| 默认来源对象 | etcd-sync-ignore-text |
Agent 实现建议
- 把源 ConfigMap 视为公开的输入接口
- 把状态 annotation 视为公开的反馈接口
- 把
etcd-sync-rule-snapshot视为内部对象,不直接对外暴露 - 自动化迁移先校对
weight、data key、命中顺序,再校对功能结果