单实例先行是什么
发布先从单个实例开始:在真实流量下观察错误率、日志与资源占用,验证通过再按批次替换其余实例。对实例数少、流量难按比例切分的系统,这是成本最低的灰度形态;Kubernetes 里 Deployment 用 rollout pause/resume 控制推进节奏,有状态服务用 StatefulSet 的 partition 只更新末位实例。
基本信息
| 适用范围 | 1 个实例或 1 个节点,少量实例的系统 |
|---|---|
| 典型场景 | 实例数少、流量难切分、有状态服务 |
| 观测对象 | 该实例错误率、延迟、日志、资源占用 |
| K8s 实现 | Deployment:rollout pause/resume;StatefulSet:partition 控制 |
| 推进方式 | 验证通过后按批次替换其余实例,每批重新对比 |
典型使用场景
- 实例数少:总共三五个实例,百分比灰度没有统计意义,先动一个最直接
- 有状态服务:StatefulSet 按序号逐个推进,配合数据兼容窗口
- 高风险变更:连接池、序列化协议调整先用一个实例验证
- 边缘与多机房:先在一个节点或机房验证,再逐站点铺开
- 权重放量前置:作为百分比灰度之前的第一道低成本观察
K8s 单实例先行
K8s 单实例先行
kubectl rollout pause deployment/web # 暂停滚动更新,先固定观察窗口
kubectl set image deployment/web web=registry/web:v1.9.0 # 触发一次镜像更新
kubectl rollout status deployment/web # 观察新实例是否按预期就绪
kubectl logs deploy/web --tail=200 # 检查新版本日志中的异常关键词
kubectl rollout resume deployment/web # 验证通过后恢复滚动
# StatefulSet:把 partition 设为副本数-1,只更新末位实例推进阶段与检查
| 阶段 | 动作 | 通过标准 |
|---|---|---|
| 先行实例 | 更新 1 个实例 | 错误率与延迟无新异常 |
| 观察窗口 | 真流量或定向流量 | 日志无新增异常类型 |
| 批次扩大 | 按批次替换其余实例 | 每批之间重新对比基线 |
StatefulSet partition 的语义是只更新序号大于等于 partition 的实例:设为副本数减一即可只更新最后一个实例。
暂停后忘记 resume 会让后续实例长期停在旧版本;把恢复动作写进发布清单并核对 rollout 状态。