2. K8s 节点生命周期管理:节点注册、证书签发、节点状态与污点基础
节点(Node)是 Kubernetes 集群的工作负载载体。理解节点从加入集群到被调度、再到可能被隔离的完整生命周期,是掌握污点与容忍策略的前提。本章聚焦节点注册、证书签发、状态机转换以及污点(Taint)的基础概念。
2.1 节点注册与身份建立
节点加入集群有两种方式:静态注册(手动指定)和动态注册(自动发现)。生产环境几乎全部采用动态注册,由 kubelet 主动向 API Server 发起注册请求。
| 注册方式 | 触发条件 | 适用场景 | 证书管理 |
|---|---|---|---|
| 静态注册 | kubelet 启动时读取 --register-node=false 及本地 manifest |
控制平面节点、边缘离线节点 | 手动分发证书 |
| 动态注册 | kubelet 启动时自动向 API Server 创建 Node 对象 | 工作节点、自动扩缩容集群 | 自动 CSR 与签发 |
关键参数: kubelet 启动参数
--register-with-taints 允许节点在注册时直接携带污点,这是将节点准入策略前置的重要手段。
2.2 证书签发流程(TLS Bootstrap)
Kubernetes 1.18+ 推荐使用 TLS Bootstrap 机制完成节点身份证书的自动签发。流程分为三个阶段:
- 初始令牌认证: kubelet 使用预先分发的 Bootstrap (或 Secret)向 API Server 发起 CSR(CertificateSigningRequest)。
- 节点身份确认: 集群内的
csr-approving控制器(或自定义审批策略)验证请求来源,自动批准 Node 客户端的 CSR。 - 证书轮换: kubelet 获取签发的证书,用于后续所有与 API Server 的通信。证书过期前,kubelet 自动发起轮换请求。
安全要点: Bootstrap 属于高敏感凭据。一旦节点完成注册,应立即禁用该 或设置
--experimental-bootstrap--auth 为 false。证书轮换作业的节点准入控制,正是为了在轮换期间防止恶意节点利用旧证书或未授权 混入集群。
2.3 节点状态机与条件
节点状态由 NodeStatus 对象描述,包含多个条件(Conditions)。kubelet 定期上报心跳,API Server 根据心跳超时判定节点状态。
| 节点条件 | 含义 | 典型值 | 对调度影响 |
|---|---|---|---|
Ready |
节点是否健康并准备好接收 Pod | True / False / Unknown | False 或 Unknown 时,节点被标记为不可调度 |
DiskPressure |
节点磁盘空间是否不足 | True / False | True 时驱逐 Pod |
MemoryPressure |
节点内存是否紧张 | True / False | True 时优先驱逐低优先级 Pod |
PIDPressure |
节点 PID 是否耗尽 | True / False | True 时停止新 Pod 调度 |
NetworkUnavailable |
节点网络是否正常 | True / False | True 时节点不可调度 |
证书轮换与节点状态关联: 当节点证书轮换失败(如 CSR 被拒绝、证书过期),kubelet 无法与 API Server 正常通信,心跳上报中断。约 40 秒后节点状态变为
Ready: Unknown,进而触发 Pod 驱逐。这正是我们需要用污点容忍策略提前控制轮换作业节点准入的原因。
2.4 污点(Taint)基础
污点是附加在节点上的键值对属性,用于排斥不符合条件的 Pod。污点由三部分组成:Key、Value(可选)和 Effect。
| Effect 类型 | 行为描述 | 典型用途 |
|---|---|---|
NoSchedule |
不调度新 Pod 到该节点(已有 Pod 不受影响) | 节点维护、硬件隔离 |
PreferNoSchedule |
尽量不调度,但不强制 | 软约束,用于负载均衡 |
NoExecute |
不调度新 Pod,并驱逐已有不匹配容忍的 Pod | 节点故障隔离、证书轮换期间隔离 |
污点操作命令示例:
# 给节点添加污点(NoExecute 效果)
kubectl taint nodes node1 cert-rotation=true:NoExecute
# 查看节点污点
kubectl describe node node1 | grep Taints
# 移除污点
kubectl taint nodes node1 cert-rotation=true:NoExecute-
2.5 节点生命周期与污点策略的协同
节点生命周期管理不是孤立的过程。证书轮换作业的节点准入,本质上是将节点生命周期中的“证书即将过期”阶段,通过污点机制转化为一个可控制的维护窗口。核心协同点如下:
- 注册阶段: 节点通过 TLS Bootstrap 获取身份证书,同时可携带初始污点(如
node-role.kubernetes.io/control-plane:NoSchedule)。 - 运行阶段: 节点状态正常,无污点或仅有软污点,接受常规调度。
- 证书轮换触发: 检测到证书即将过期(如剩余 30 天),自动或手动为节点添加
cert-rotation=true:NoExecute污点。 - 准入控制: 仅带有对应容忍的证书轮换作业(Job)可以调度到该节点,执行证书更新。
- 恢复阶段: 轮换成功,移除污点,节点状态恢复,重新加入调度池。
最佳实践: 在节点注册时通过
--register-with-taints 设置初始污点,结合 node-lifecycle-controller 自动管理证书轮换期间的污点注入与移除,可以实现零人工干预的节点证书生命周期管理。