功能开关与暗发布:部署和开放分离

验证:未记录
适用版本
未记录
验证范围
尚未登记验证记录。
本文缩写(英文全称与中文含义)
缩写 英文全称/名称 中文含义
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。审计谁、何时、对哪些租户调整比例,日志不含分桶密钥。全量稳定后删除旧路径与开关,同时删过期配置;不可回退的数据迁移不放进开关分支。

搜索文档

输入关键词,搜索所有文档。

↑ ↓ 选择 · Enter 打开 · Esc 关闭