功能开关与暗发布:部署和开放分离
验证:未记录
- 适用版本
- 未记录
- 验证范围
- 尚未登记验证记录。
本文缩写(英文全称与中文含义)
| 缩写 | 英文全称/名称 | 中文含义 |
|---|---|---|
| ID | Identifier | 标识符 |
| RTO | Recovery Time Objective | 恢复时间目标,可接受的恢复耗时 |
| SDK | Software Development Kit | 软件开发工具包 |
场景:新逻辑先部署到全部 Pod,默认关闭,再向部分可信租户开放。前置真实应用有新旧两条兼容路径;开关不代替业务授权,数据库必须同时支持两条路径。
1. 接入确定性分桶#
将 flags.py 放入应用公共库(非 Python 应用按相同算法实现)。输入仅允许已认证租户 ID、固定实验名、0–100 的整数百分比;密钥从 Secret Manager/External Secrets 注入,不能放 ConfigMap。先编写单元测试验证同租户稳定、0% 全关、100% 全开、非法配置回旧逻辑。
from flags import enabled
use_new = enabled(tenant_id, 'checkout-v2-2026-09', percent, secret_key)
result = new_checkout(order) if use_new else old_checkout(order)2. 通过版本化配置开放#
kubectl -n orders create configmap orders-flags-v1 --from-literal=CHECKOUT_V2_PERCENT=0 --dry-run=client -o yaml > flags-v1.yaml
kubectl apply -f flags-v1.yaml
kubectl -n orders set env deployment/orders-candidate --from=configmap/orders-flags-v1
kubectl -n orders rollout status deployment/orders-candidate --timeout=10m应用启动时读取环境变量,严格解析;配置缺失/解析失败走旧逻辑并报警,密钥不可用也关闭新功能。上线前必须实际接入该变量和 Secret,单独创建 ConfigMap 不会产生功能开关。
将 0 改为 1 创建 orders-flags-v2,重复 set env 与 rollout;按 1→10→50→100 执行业务和指标门禁。环境变量更新需要滚动重启,不是即时紧急熔断。有秒级关闭要求时接入企业开关服务/SDK,使用鉴权配置、签名、缓存期限和故障默认值,并测试控制面失联。
3. 恢复与债务清理#
kubectl -n orders set env deployment/orders-candidate --from=configmap/orders-flags-v1
kubectl -n orders rollout status deployment/orders-candidate --timeout=10m验证所有副本回到 0;若重启速度不能满足 RTO,先在入口恢复 stable。审计谁、何时、对哪些租户调整比例,日志不含分桶密钥。全量稳定后删除旧路径与开关,同时删过期配置;不可回退的数据迁移不放进开关分支。