werwerwer
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。

启用标签

metadata:
  labels:
    etcd-sync.cpaas.io/enabled: "true"

优先级注解

metadata:
  annotations:
    etcd-sync.cpaas.io/weight: "10"

weight 必须是非负整数。值越大优先级越高。非法值会让整个来源进入 rejected。

支持的数据键

key含义
ignore-equal.txt精确忽略
sync-equal-file.txt精确同步
ignore-prefix-file.txt前缀忽略
sync-prefix-file.txt前缀同步
sync-glob-file.txtglob 同步
sync-regexp-file.txt正则同步
sync-kvs-file.txtkey/value 同步
ignore-kvs-file.txtkey/value 忽略
sync-delete-prefix-file.txt删除事件的同步前缀
sync-delete-ignore.txt删除事件的忽略前缀
pre-sync-prefix-file.txt预同步前缀

文本归一化

  • 空行忽略
  • 首尾空白裁剪
  • # 开头视为注释
  • 出现未知 data key 时,整个来源被拒绝
  • data 为空是合法情况,状态记为 accepted: empty rule layer

排序模型

  1. 所有规则层按 weight 降序排
  2. weight 相同的层按 namespace/name 升序排
  3. 首个给出明确结论的层即为生效层

规则层

  • 一个 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/statusaccepted 或 rejected
etcd-sync.cpaas.io/message最近一次处理结果的描述
etcd-sync.cpaas.io/observed-weight实际读取到的 weight
etcd-sync.cpaas.io/observed-hashdata 内容哈希
etcd-sync.cpaas.io/processed-at处理时间

状态机

失败语义

失败类型结果
出现未知 data keyrejected
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、命中顺序,再校对功能结果

On this page