1. K8s集群架构概述:Master节点与Worker节点角色及核心组件

Kubernetes集群采用典型的主从(Master-Worker)分布式架构。Master节点负责集群的“大脑”决策与控制,Worker节点负责运行实际的应用负载。理解各节点角色及组件功能,是进行故障迁移与调度策略优化的基础。

1.1 节点角色与职责对比

节点类型 核心职责 关键组件 故障影响范围
Master节点 集群控制面,负责API请求处理、调度决策、状态维护与控制器循环 etcd、kube-apiserver、kube-scheduler、kube-controller-manager 全局:Master宕机导致集群管理不可用,但已有Pod继续运行
Worker节点 数据面,负责运行Pod容器、执行健康检查、维护网络规则 kubelet、kube-proxy、容器运行时(如containerd) 局部:节点宕机导致其上Pod不可用,需调度迁移
架构要点:Master节点通常部署为奇数个(3或5)形成高可用集群;Worker节点数量根据业务规模弹性扩展。故障迁移主要发生在Worker节点层面,但Master组件的稳定性直接影响调度决策的及时性。

1.2 核心组件功能详解

1.2.1 etcd — 集群状态存储

etcd是一个分布式、强一致性的键值存储系统,是Kubernetes集群的“数据库”。所有集群对象(Pod、Service、ConfigMap等)的声明状态都持久化存储在etcd中。

  • 数据一致性:基于Raft共识算法,保证集群中所有etcd节点数据一致。
  • 监听机制:支持Watch API,其他组件可通过监听etcd的变化实时感知集群状态变更。
  • 故障影响:etcd集群不可用将导致整个Kubernetes控制面瘫痪,无法进行任何资源变更操作。

1.2.2 kube-apiserver — 集群入口网关

kube-apiserver是Kubernetes控制面的前端,所有对集群的操作请求(kubectl、Pod调度、控制器调用)都必须经过API Server。它负责认证、授权、准入控制以及RESTful API的暴露。

  • 无状态设计:API Server本身不存储状态,所有数据读写都委托给etcd,便于水平扩展。
  • 请求处理流程:认证 → 授权 → 准入控制 → 对象验证 → 持久化到etcd。
  • 故障影响:API Server宕机后,kubectl命令、调度器、控制器均无法工作,但已有Pod不受影响。

1.2.3 kube-scheduler — 调度决策引擎

kube-scheduler负责为新创建的Pod选择最合适的Worker节点。调度决策直接影响集群资源利用率和应用性能,是故障迁移策略的核心执行者。

  • 调度流程:过滤(Predicates)→ 打分(Priorities)→ 绑定(Bind)。
  • 调度策略:支持节点亲和性、Pod亲和性/反亲和性、污点与容忍、资源请求与限制等。
  • 故障影响:调度器宕机将导致新Pod无法被调度,但已调度Pod正常运行。

1.2.4 kube-controller-manager — 状态调节器

控制器管理器运行多个控制器进程,负责将集群的实际状态调节至用户声明的期望状态。每个控制器专注于一种资源类型。

控制器名称 核心功能 与故障迁移的关系
Node Controller 监控节点健康状态,检测节点宕机 触发Pod驱逐与迁移的起点
Replication Controller 确保Pod副本数符合期望 在Pod故障后创建替代Pod
Endpoint Controller 维护Service与Pod的映射关系 故障迁移后更新服务端点
Service Account Controller 管理命名空间默认服务账户 间接影响Pod启动权限

1.2.5 kubelet — 节点代理

kubelet是运行在每个Worker节点上的核心代理,负责管理节点上的Pod生命周期。它接收来自API Server的PodSpec,确保容器按声明运行。

  • 核心职责:Pod创建/删除、容器健康检查(liveness/readiness probe)、资源监控上报。
  • 故障影响:kubelet宕机导致该节点上的Pod无法被管理,节点状态变为NotReady,触发控制器驱逐Pod。

1.2.6 kube-proxy — 网络代理

kube-proxy负责实现Service的抽象网络层,维护节点上的网络规则,确保集群内外的流量能够正确路由到后端Pod。

  • 工作模式:iptables(默认)、IPVS、userspace。
  • 核心功能:负载均衡、会话保持、Service发现。
  • 故障影响:kube-proxy故障导致该节点上的Service网络规则失效,流量无法到达Pod。

1.3 集群组件交互架构

下图展示了Master节点与Worker节点之间各组件的通信关系与数据流向:

Kubernetes 集群组件交互架构图 Master 节点(控制面) etcd kube-apiserver kube-scheduler kube-controller-manager Worker 节点(数据面) kubelet kube-proxy Pod 容器运行时 iptables/IPVS 网络规则 组件通信说明 1. 所有组件通过 kube-apiserver 与 etcd 交互,不直接读写 etcd。 2. kube-scheduler 通过 Watch API 监听未调度的 Pod,决策后通过 apiserver 写入绑定信息。 3. kube-controller-manager 中的 Node Controller 定期检查节点状态,发现故障后触发 Pod 驱逐。 4. kubelet 定期向 apiserver 上报节点状态与 Pod 运行状况,接收 Pod 创建/删除指令。 5. kube-proxy 监听 Service 与 Endpoint 变化,动态更新节点 iptables/IPVS 规则。

1.4 组件故障对集群的影响矩阵

在故障迁移与调度策略优化中,需要明确每个组件故障后的具体表现,以便制定针对性的容错方案:

故障组件 故障表现 自动恢复机制 对调度迁移的影响
etcd(全部宕机) 集群完全不可管理 需人工恢复数据或重建集群 调度器无法读取/写入状态
kube-apiserver 所有API请求失败 多副本负载均衡自动切换 调度器与控制器无法工作
kube-scheduler 新Pod处于Pending状态 多副本选举新Leader 故障迁移无法触发新调度
kube-controller-manager 控制器循环停止 多副本选举新Leader 节点宕机后Pod不会被驱逐
kubelet 节点状态变为NotReady 需重启kubelet服务 触发Node Controller驱逐Pod
kube-proxy Service网络规则失效 需重启kube-proxy 迁移后Pod网络不可达
关键提示:在故障迁移场景中,kube-controller-manager 中的 Node Controller 是检测节点故障并触发Pod驱逐的起点;kube-scheduler 负责将驱逐的Pod重新调度到健康节点。这两个组件的稳定性直接决定了故障迁移的时效性与成功率。

1.5 调度决策流程与故障迁移触发链路

下图展示了从节点故障发生到Pod完成迁移的完整调度链路:

节点故障 → Pod迁移 调度链路 ① 节点故障 kubelet 心跳超时 ② Node Controller 检测 NotReady 状态 ③ Pod 驱逐 设置 Pod 状态为 Failed ④ 调度器介入 监听未调度 Pod ⑤ 迁移 调度器决策详细流程 过滤阶段 (Predicates) 节点资源、污点容忍、端口冲突 打分阶段 (Priorities) 资源利用率、亲和性、负载均衡 绑定阶段 (Bind) 写入 Pod 与 Node 绑定关系 调度器通过 Watch API 监听 apiserver 中状态为 Pending 的 Pod,执行上述三阶段决策后写入绑定结果 kubelet 监听到绑定信息后,在目标节点上启动 Pod 容器,完成迁移

1.6 高可用部署建议

基于上述架构分析,在生产环境中进行故障迁移与调度优化时,应遵循以下部署原则:

  • Master组件多副本:kube-apiserver、kube-scheduler、kube-controller-manager 均部署为多副本,通过Leader选举实现高可用。
  • etcd集群奇数节点:至少3个etcd节点,保证Raft多数派可用,避免脑裂。
  • Worker节点资源预留:每个Worker节点预留10%-20%的CPU/内存资源,用于故障迁移时的Pod快速调度。
  • PodDisruptionBudget:为关键应用设置PDB,控制故障迁移时允许同时中断的Pod数量。
  • 节点故障检测参数调优:调整kube-controller-manager的 --node-monitor-period 和 --node-eviction-rate 参数,平衡故障检测速度与集群稳定性。