1. 课程概述:集群升级背景、Scheduler 调度器角色、证书轮换必要性、节点排空定义与目标
1.1 集群升级背景
Kubernetes 社区以约每 3 个月发布一个次要版本的节奏持续演进。生产集群通常需要跨越多个次要版本进行升级,以获取安全补丁、新特性及性能优化。在升级过程中,控制平面组件(如 kube-apiserver、kube-controller-manager、kube-scheduler)的证书轮换是保障集群安全与通信可靠性的关键环节。
升级场景典型特征:
- 控制平面组件使用 TLS 证书进行双向认证与通信加密。
- 证书具有有效期(通常为 1 年),升级窗口常与证书到期窗口重叠。
- kube-scheduler 作为核心调度组件,其证书轮换失败将导致 Pod 调度停滞。
1.2 Scheduler 调度器角色
kube-scheduler 是 Kubernetes 控制平面的核心组件之一,负责将待调度的 Pod 绑定到合适的 Node 上。其工作流程可概括为:
| 阶段 | 说明 | 关键操作 |
|---|---|---|
| 过滤 | 筛选出满足 Pod 资源请求、亲和性、污点容忍等条件的 Node 集合 | 读取 Node 状态、资源余量、标签 |
| 打分 | 对候选 Node 按优先级策略进行评分 | 执行默认/自定义打分插件 |
| 绑定 | 将 Pod 与最优 Node 的绑定关系写入 API Server | 发送 Binding 请求至 kube-apiserver |
调度器通过 kubeconfig 文件 或 命令行参数 加载客户端证书,用于与 kube-apiserver 通信。证书轮换期间,调度器必须保持对 API Server 的认证能力,否则调度链路将中断。
1.3 证书轮换必要性
证书轮换是 Kubernetes 集群安全运维的基础操作。调度器证书轮换的必要性体现在以下方面:
- 安全合规: 证书过期后,调度器无法向 API Server 证明身份,导致认证失败、调度请求被拒绝。
- 通信加密: 轮换证书可更新加密密钥,降低私钥泄露带来的中间人攻击风险。
- 集群生命周期: 证书有效期通常为 1 年,升级窗口是集中处理证书轮换的最佳时机。
- 避免级联故障: 调度器证书失效会阻止新 Pod 调度,影响应用扩缩容、滚动更新等日常运维。
⚠️ 常见风险: 证书轮换期间,如果调度器 Pod 被重启或重新加载配置,而新证书尚未就绪,可能导致调度器短暂不可用。节点排空操作可提前将调度器 Pod 迁移至健康节点,减少轮换窗口内的服务中断。
1.4 节点排空定义与目标
节点排空(Node Drain) 是指将指定节点上的所有 Pod 安全地迁移到集群中其他可用节点的操作。在调度器证书轮换场景中,节点排空的目标如下:
| 目标 | 说明 | 实现方式 |
|---|---|---|
| Pod 安全迁移 | 将调度器 Pod 从待轮换节点驱逐,确保调度服务不中断 | kubectl drain 命令 + PodDisruptionBudget |
| 证书文件清理 | 排空后节点可安全卸载旧证书、部署新证书 | 节点进入 SchedulingDisabled 状态 |
| 最小化影响 | 控制排空顺序与并发度,避免集群调度能力骤降 | 逐节点排空 + 优雅终止宽限期 |
| 回滚能力 | 排空操作可逆,允许在证书轮换失败时快速恢复 | kubectl uncordon 恢复节点调度 |
💡 最佳实践: 在证书轮换前,先对非关键节点进行排空演练,验证 PodDisruptionBudget 配置是否合理。调度器 Pod 通常应设置
minAvailable: 1 或 maxUnavailable: 0,确保排空期间始终有至少一个调度器副本可用。