2. 集群升级生命周期管理:升级前检查、升级中监控、升级后验证的三阶段模型
Kubernetes 集群升级是风险最高的运维操作之一。一次失控的升级可能导致控制面瘫痪、工作负载中断、存储卷丢失甚至数据损坏。为了将升级风险降至最低,必须将升级视为一个可观测的、可审计的、可回滚的生命周期过程,而非一次性的命令执行。
本章提出的三阶段模型——升级前检查(Pre-Upgrade Check)、升级中监控(In-Upgrade Monitor)、升级后验证(Post-Upgrade Validation)——将升级过程拆解为三个可观测、可度量的阶段,每个阶段都有明确的检查清单、监控指标和验证标准。
2.1 三阶段模型总览
下表对比了三个阶段的核心目标、关键活动与可观测性产出物:
| 阶段 | 核心目标 | 关键活动 | 可观测性产出物 |
|---|---|---|---|
| 升级前检查 | 验证集群是否满足升级条件 | 版本兼容性检查、资源健康度扫描、备份验证、租户隔离确认 | PreCheckReport(JSON/YAML)、健康度评分、风险项列表 |
| 升级中监控 | 实时感知升级进度与异常 | 控制面组件状态跟踪、节点池滚动进度、Pod 驱逐与重调度监控 | 实时仪表盘、事件流、告警通知、升级进度时间线 |
| 升级后验证 | 确认集群功能与性能恢复 | 核心 API 响应测试、租户工作负载运行状态检查、性能基线对比 | PostCheckReport、SLO 达标率、回滚决策依据 |
2.2 升级前检查(Pre-Upgrade Check)
升级前检查是升级安全的第一道防线。该阶段的目标是在升级操作执行之前,发现所有可能影响升级成功或导致集群不可用的问题。检查结果必须形成结构化的报告,并作为升级审批的依据。
2.2.1 检查清单与自动化执行
以下是一个标准化的升级前检查清单,建议使用自动化工具(如 cluster-upgrade-checker 或自定义 Operator)逐项执行:
| 检查类别 | 检查项 | 检查方法 | 通过标准 |
|---|---|---|---|
| 版本兼容性 | 当前版本 → 目标版本升级路径 | 查询 Kubernetes 版本偏差策略 | 升级路径在官方支持范围内 |
| 版本兼容性 | API 弃用检查 | kubectl convert --validate |
无已弃用 API 被使用 |
| 资源健康度 | 控制面组件状态 | kubectl get componentstatuses |
所有组件状态为 Healthy |
| 资源健康度 | 节点状态与资源余量 | kubectl top nodes |
节点 Ready,CPU/内存余量 > 20% |
| 备份验证 | etcd 快照完整性 | etcdctl snapshot status |
快照文件可读,哈希校验通过 |
| 备份验证 | PV/PVC 数据备份 | 检查备份工具(Velero)状态 | 最近一次备份成功,无过期 |
| 租户隔离 | NetworkPolicy 完整性 | 扫描所有 Namespace | 关键租户 Namespace 已配置默认拒绝 |
| 租户隔离 | ResourceQuota 与 LimitRange | kubectl get quota --all-namespaces |
配额未超限,LimitRange 配置合理 |
2.2.2 检查报告示例
以下是一个简化版的 PreCheckReport 结构,展示了检查结果的标准化输出:
{
"clusterName": "prod-east-1",
"upgradeFrom": "v1.27.3",
"upgradeTo": "v1.28.0",
"checkTimestamp": "2025-03-15T08:00:00Z",
"overallStatus": "PASS",
"riskLevel": "LOW",
"checkItems": [
{
"category": "VERSION_COMPATIBILITY",
"name": "API Deprecation Check",
"status": "PASS",
"detail": "No deprecated APIs found in current manifests."
},
{
"category": "RESOURCE_HEALTH",
"name": "Control Plane Components",
"status": "PASS",
"detail": "All 3 master nodes healthy."
},
{
"category": "BACKUP_VALIDATION",
"name": "etcd Snapshot Integrity",
"status": "PASS",
"detail": "Snapshot size: 2.3GB, hash verified."
},
{
"category": "TENANT_ISOLATION",
"name": "NetworkPolicy Coverage",
"status": "WARN",
"detail": "Namespace 'dev-team-b' has no default deny policy."
}
],
"recommendations": [
"Apply default deny NetworkPolicy to namespace 'dev-team-b' before upgrade."
]
}
2.3 升级中监控(In-Upgrade Monitor)
升级中监控是升级生命周期的实时感知层。当升级操作开始执行后,运维团队需要实时了解升级进度、组件状态变化以及异常事件,以便在问题发生时快速决策(继续、暂停或回滚)。
2.3.1 监控维度与关键指标
升级过程中的监控应覆盖以下四个维度:
- 控制面维度:API Server 响应延迟、etcd 领导者变更次数、Controller Manager 队列深度、Scheduler 调度速率。
- 节点维度:节点升级进度(已升级/总数)、节点 NotReady 持续时间、节点上 Pod 驱逐速率。
- 工作负载维度:Pod 重调度成功率、Pending Pod 数量、工作负载可用副本数(Available Replicas)。
- 事件维度:Warning 级别事件频率、升级相关 Event 的 Reason 分布(如
NodeUpgradeStarted、PodEvictionFailed)。
以下是一个升级中监控仪表盘的关键指标表格:
| 指标名称 | 数据来源 | 告警阈值 | 说明 |
|---|---|---|---|
upgrade_progress_percent |
升级 Operator 自定义指标 | 无(用于展示) | 已完成升级的节点数 / 总节点数 |
apiserver_request_duration_seconds |
Prometheus /metrics | P99 > 5s | API Server 响应延迟,反映控制面压力 |
node_collector_unhealthy_nodes |
Kubernetes 内置指标 | > 0 持续 5 分钟 | 节点控制器检测到的异常节点数 |
kube_pod_status_phase{phase="Pending"} |
kube-state-metrics | > 10 持续 3 分钟 | Pending Pod 数量激增,可能表示调度异常 |
events_total{type="Warning"} |
Kubernetes Events | 速率 > 5/min | Warning 事件速率异常升高 |
2.3.2 升级中异常处理策略
当监控系统检测到异常时,升级 Operator 或运维人员应根据异常等级采取不同策略:
- 低风险异常(如单个节点升级超时):自动重试 2 次,若仍失败则跳过该节点,继续升级其他节点,并在升级报告中标记。
- 中风险异常(如 API Server 延迟飙升):暂停节点池滚动,等待控制面恢复稳定(通常 5-10 分钟),然后继续。
- 高风险异常(如 etcd 集群失联、多个节点同时 NotReady):立即触发升级回滚流程,恢复至升级前状态。
2.4 升级后验证(Post-Upgrade Validation)
升级后验证是升级生命周期的质量门禁。只有当所有验证项通过后,升级才能被标记为“成功”,集群才能恢复对外提供完整服务。验证结果也是后续审计和合规审查的核心依据。
2.4.1 验证清单与自动化执行
升级后验证应覆盖功能、性能、安全三个维度:
| 验证维度 | 验证项 | 验证方法 | 通过标准 |
|---|---|---|---|
| 功能验证 | 核心 API 可用性 | kubectl api-resources + 创建测试 Pod |
所有核心 API 返回正常,测试 Pod 运行成功 |
| 功能验证 | DNS 解析 | kubectl run --image=busybox -- nslookup kubernetes.default |
DNS 解析成功,返回 Cluster IP |
| 功能验证 | 网络策略生效 | 跨 Namespace 连通性测试 | 默认拒绝策略生效,允许策略正常工作 |
| 性能验证 | API Server 延迟基线 | 对比升级前后 P99 延迟 | P99 延迟增幅 < 20% |
| 性能验证 | Pod 启动时间 | 测量从创建到 Running 的时间 | 平均启动时间增幅 < 15% |
| 安全验证 | RBAC 权限未丢失 | 使用 ServiceAccount 执行授权操作 | 升级前拥有的权限在升级后依然有效 |
| 安全验证 | PodSecurityAdmission 规则 | 检查 PSA 标签与策略 | 升级后 PSA 策略未降级 |
2.4.2 验证报告与回滚决策
升级后验证报告(PostCheckReport)是决定升级是否成功的最终依据。报告应包含:
- 总体结论:PASS / FAIL / PARTIAL_PASS(部分通过,需人工介入)。
- 逐项验证结果:每个验证项的详细状态、耗时、对比基线。
- 性能对比数据:升级前后关键性能指标的对比图表(如 API Server 延迟分布、Pod 启动时间分布)。
- 回滚建议:如果验证失败,报告应明确指出失败项是否影响核心业务,并给出回滚建议。
2.5 三阶段模型与租户审计的关联
三阶段模型不仅是技术操作流程,更是租户审计数据的重要来源。每个阶段产生的报告和事件记录,都应包含租户维度的标签(如 tenant-id、namespace),以便审计系统能够按租户维度查询升级影响。
下表展示了三阶段模型如何与租户审计数据关联:
| 阶段 | 审计事件示例 | 租户维度标签 | 审计用途 |
|---|---|---|---|
| 升级前检查 | PreCheckCompleted |
tenant_id, namespace |
证明升级前已确认租户隔离策略完整 |
| 升级中监控 | NodeUpgradeStarted, PodEvicted |
tenant_id, workload_name |
记录升级对租户工作负载的具体影响时间点 |
| 升级后验证 | PostCheckCompleted, TenantWorkloadVerified |
tenant_id, slo_name |
证明升级后租户工作负载功能与性能达标 |