4. 集群生命周期阶段划分:创建、扩缩容、升级、备份恢复、销毁阶段的监控要点

K8s 集群的生命周期并非单一运行态,而是由多个具有不同风险特征和监控目标的阶段组成。SRE 需要针对每个阶段制定差异化的延迟水位与异常事件监控策略,才能实现全生命周期的可观测性覆盖。

核心原则:每个阶段都需关注“控制面延迟”和“工作负载扰动”两个维度。控制面延迟反映 API Server、etcd、调度器、控制器管理器的响应能力;工作负载扰动反映 Pod 重建、流量切换、数据迁移对业务的影响。

4.1 阶段总览与监控维度矩阵

下表列出五个生命周期阶段的关键监控维度、典型指标及异常事件类型:

阶段 核心监控对象 延迟水位关键指标 典型异常事件
创建 API Server、etcd、CNI、CoreDNS API 请求延迟 P99、etcd 写入延迟、Pod 启动延迟 节点注册失败、CNI 分配 IP 超时、kubelet 证书未就绪
扩缩容 Cluster Autoscaler、HPA、调度器、节点池 扩缩容决策延迟、节点就绪延迟、Pod 调度延迟 节点创建失败、资源不足导致 Pending、缩容驱逐卡死
升级 kube-apiserver、kube-scheduler、kube-controller-manager、kubelet、kube-proxy 组件重启恢复时间、API 请求错误率、节点 Drain 延迟 版本兼容性错误、Pod 驱逐超时、控制面组件 CrashLoopBackOff
备份恢复 etcd 快照、Velero、存储后端 快照完成时间、恢复 RTO、数据一致性校验延迟 快照损坏、恢复后集群状态不一致、RBAC 丢失
销毁 节点、PV/PVC、Service、Ingress Controller 资源回收延迟、DNS 记录清理延迟、流量 draining 完成时间 PV 残留、SLB 未解绑、Finalizer 阻塞删除

4.2 创建阶段监控要点

集群创建阶段是基础设施从零到一的过程,控制面组件首次启动、网络插件初始化、节点注册等步骤最容易出现配置错误和依赖超时。

  • API Server 就绪探测:监控 apiserver_request_duration_seconds 的 P99 延迟,创建阶段应 < 1s;若持续 > 5s,通常表明 etcd 连接异常或证书问题。
  • etcd 集群健康:通过 etcd_server_leader_changes_seen_total 检测 leader 频繁切换;通过 etcd_disk_wal_fsync_duration_seconds 监控磁盘 I/O 延迟,创建阶段 WAL fsync 延迟应 < 10ms。
  • 节点注册延迟:监控 kubelet_node_status_condition{condition="Ready"} 从节点启动到 Ready 的时间,超过 5 分钟应告警。
  • CNI 与 DNS 就绪:创建阶段需验证 CoreDNS Pod 启动时间 < 30s,且 coredns_dns_request_duration_seconds P99 < 100ms。
实战建议:在集群创建脚本中嵌入 Prometheus 黑盒探测,持续 5 分钟每 10s 检查一次 API Server 健康端点,若连续 3 次失败则终止创建流程并输出诊断日志。

4.3 扩缩容阶段监控要点

扩缩容阶段的核心风险在于资源供给延迟和调度积压,尤其是云上节点池扩容时,云商 API 限流、镜像拉取慢、节点初始化脚本失败都会导致延迟水位飙升。

  • Cluster Autoscaler 决策延迟:监控 cluster_autoscaler_function_duration_seconds,正常应 < 30s;若超过 2 分钟,需检查云商 API 调用是否被限流。
  • 节点就绪延迟:从云商实例创建到 kubelet 上报 Ready 的端到端时间,建议告警阈值:虚拟机节点 > 10 分钟,裸金属节点 > 20 分钟。
  • Pod 调度延迟:监控 scheduler_e2e_scheduling_duration_seconds P99,扩缩容期间应 < 5s;若持续 > 30s,表明调度器积压或节点亲和性冲突。
  • 缩容驱逐事件:通过 Event 对象监控 Evicted 事件,关注是否有 Pod 因 PDB 限制导致驱逐卡死超过 5 分钟。
避坑提示:缩容时若节点上存在非控制器管理的 Pod(如 static Pod、DaemonSet 之外的独立 Pod),kubelet 会拒绝驱逐,导致节点 Terminating 状态持续数小时。务必在缩容前通过 kubectl get pods --field-selector=status.phase!=Running,status.phase!=Succeeded 检查残留 Pod。

4.4 升级阶段监控要点

升级是集群生命周期中风险最高的操作,控制面组件滚动重启、kubelet 版本变更、API 资源版本废弃都可能导致服务中断。监控必须覆盖升级前、升级中、升级后三个阶段。

子阶段 监控指标 异常事件 告警阈值
升级前检查 API Server 版本、etcd 版本、节点 kubelet 版本 版本不兼容、废弃 API 使用 存在已废弃的 API 版本即告警
控制面升级 apiserver_request_total{code=~"5.."} 错误率 API Server CrashLoopBackOff、etcd 成员变更失败 错误率 > 1% 持续 1 分钟
节点 Drain kubelet_drain_duration_seconds Pod 驱逐超时、PDB 阻止驱逐 单节点 Drain 时间 > 10 分钟
节点升级 kubelet_node_status_condition{condition="Ready"} kubelet 启动失败、容器运行时版本不匹配 节点升级后 15 分钟未 Ready
升级后验证 核心组件 Pod 重启次数、API 请求延迟 P99 组件 CrashLoop、延迟突增 > 3 倍基线 重启次数 > 3 次 / 5 分钟
集群升级阶段延迟水位监控流程 升级前检查 版本兼容性 / 废弃 API 控制面升级 API错误率 / etcd健康 节点 Drain 驱逐延迟 / PDB阻塞 节点升级 kubelet就绪 / 运行时版本 升级后验证 延迟基线 / 组件重启 延迟水位关键阈值 • API错误率 > 1% • Drain时间 > 10min • 节点就绪 > 15min

4.5 备份恢复阶段监控要点

备份恢复阶段的可观测性常被忽视,但 etcd 快照损坏或恢复后 RBAC 丢失可能导致整个集群不可用。监控应覆盖备份作业本身和恢复演练两个场景。

  • etcd 快照完整性:每次备份后执行 etcdctl snapshot status 检查快照哈希和版本,通过 Prometheus 自定义 exporter 上报 etcd_snapshot_integrity{result="pass|fail"}。
  • 备份作业延迟:监控 Velero 或 etcd 备份 Job 的完成时间,与历史基线对比,若超过基线 2 倍则告警。
  • 恢复 RTO 监控:从触发恢复操作到 API Server 返回 200 的端到端时间,生产环境 RTO 目标通常 < 30 分钟。
  • 恢复后一致性校验:恢复完成后自动执行 kubectl get nodes、kubectl get pods --all-namespaces,对比恢复前后的资源数量偏差。
关键指标:备份成功率 = 成功备份次数 / 总备份次数 × 100%,目标 99.9%;恢复成功率 = 成功恢复演练次数 / 总演练次数 × 100%,目标 100%。

4.6 销毁阶段监控要点

集群销毁阶段的风险在于资源残留和依赖清理不彻底,尤其是云上负载均衡器、持久化存储卷、DNS 记录等外部资源可能成为孤儿资源,产生持续费用或安全风险。

  • 资源回收延迟:监控 kubectl get pv 中 Released 状态的 PV 数量,若销毁后 30 分钟仍有残留,表明回收策略未生效或 Finalizer 阻塞。
  • SLB/ELB 解绑延迟:通过云商 API 监控负载均衡器实例的删除状态,若集群删除后 15 分钟仍未解绑,需人工介入。
  • DNS 记录清理:检查 ExternalDNS 或 CoreDNS 中集群相关域名记录是否已移除,避免域名指向已销毁的 IP。
  • Namespace 终结状态:监控 kubectl get ns 中 Terminating 状态的 Namespace,若超过 10 分钟未完成,通常存在 Finalizer 未移除。
高危场景:当集群销毁脚本未按顺序执行(先删负载均衡,再删节点,最后删控制面)时,云商 API 可能因依赖关系返回错误,导致部分资源残留。建议在销毁脚本中嵌入幂等清理步骤,每次执行前先查询残留资源列表。

4.7 阶段间延迟水位对比与告警策略

不同阶段的延迟水位基线差异很大,不能使用统一的告警阈值。下表给出各阶段的推荐告警阈值和评估周期:

阶段 指标 Warning 阈值 Critical 阈值 评估窗口
创建 API Server 请求延迟 P99 > 2s > 5s 5 分钟
扩缩容 节点就绪延迟 > 8 分钟 > 15 分钟 单次操作
升级 API 错误率 > 0.5% > 2% 1 分钟
备份恢复 备份完成时间 > 基线 1.5x > 基线 3x 单次作业
销毁 资源残留数量 > 0 个 > 5 个 30 分钟

通过将生命周期阶段标签(lifecycle_phase)注入 Prometheus 指标,可以在告警规则中区分阶段上下文,避免误告警。例如:

# Prometheus 告警规则示例
- alert: NodeProvisionDelay
  expr: |
    max by (node) (time() - kubelet_node_status_condition{condition="Ready",status="true"})
    * on (node) group_left(lifecycle_phase) kube_node_labels
    > 600
  for: 1m
  labels:
    severity: critical
  annotations:
    summary: "节点 {{ $labels.node }} 在 {{ $labels.lifecycle_phase }} 阶段就绪延迟超过 10 分钟"

以上监控要点覆盖了集群从创建到销毁的完整生命周期,SRE 团队应针对每个阶段编写独立的 Grafana 仪表盘和告警规则,并在阶段切换时自动调整监控上下文,实现全生命周期的可观测性闭环。