Kubernetes 架构
集群结构
Kubernetes 集群(Cluster) 由两大核心部分组成:
- 控制平面(Control Plane)
- 工作节点(Node)
-
🧠 控制平面(Control Plane)
职责:管理整个集群的状态与调度决策
负责内容
- 管理所有节点(Node)
- 管理所有 Pod
- 调度 Pod 到合适的节点
- 维护集群的期望状态(Desired State)
生产环境特点
- 通常部署在多台机器上
- 实现高可用(High Availability)
- 提升容错能力(Fault Tolerance)
-
⚙️ 工作节点(Node)
职责:运行实际的应用负载
每个节点负责
- 运行 Pod(最小部署单元)
- 提供容器运行环境(如 container runtime)
关键特点
- 每个集群至少需要一个 Node
- 通常会有多个 Node 用于:
- 分担负载
- 提高可靠性
- 支持扩展(Scalability)
控制平面组件
控制平面组件负责对整个 Kubernetes 集群做出全局决策,并维护集群状态。
包括:
- 资源调度(Scheduling)
- 状态维护(Desired State)
- 事件响应(Event Handling)
🧩 部署特点
- 控制平面组件可以运行在任意节点
- 实际部署中通常:
- 集中部署在一台机器(学习/测试)
- 多节点部署(生产环境) → 高可用(HA)
- 控制平面节点通常:
- 不运行用户应用容器
kube-apiserver
作用:整个集群的“入口”, 所有请求都必须经过 API Server
- 提供 Kubernetes API
- 所有操作都通过它进行(kubectl / Controller / Scheduler)
- 核心特点:
- 是控制平面的 前端
- 负责处理所有 REST 请求
- 支持 水平扩展(Horizontal Scaling)
- 可运行多个实例
- 通过负载均衡分发流量
etcd
作用:集群的“数据库”, 存储所有集群状态数据(Pods、Nodes、Config 等)
- 一个分布式、高可用、键值存储(Key-Value Store)
- 必须定期备份
- 数据丢失 = 集群状态丢失
kube-scheduler
作用:决定 Pod 应该运行在哪个 Node 上
负责:
- 监听新创建的 Pod(尚未分配 Node)
- 选择最合适的 Node
调度考虑因素:
- 资源需求(CPU / Memory)
- 节点约束(硬件/策略)
- 亲和性 / 反亲和性
- 数据位置
- 工作负载干扰
- 截止时间(Deadline)
kube-controller-manager
作用:维护集群状态的“执行者”, 运行多个 控制器(Controller), 每个控制器负责一种资源的状态维护。
设计特点:
- 多个控制器逻辑独立
- 但运行在同一个进程中(简化架构)
常见的 kube-controller-manager 控制器
| 控制器 | 作用 |
|---|---|
| Node Controller | 负责在节点出现故障时进行通知和响应 |
| Job Controller | 监测代表一次性任务的 Job 对象,然后创建 Pod 来运行这些任务直至完成 |
| EndpointSlice Controller | 填充 EndpointSlice 对象(以提供 Service 和 Pod 之间的链接) |
| ServiceAccount Controller | 为新的命名空间创建默认的 ServiceAccount |
cloud-controller-manager
作用:对接云平台(如 AWS / GCP / Azure),将 Kubernetes 核心控制逻辑 与 云平台的实现细节(如节点/网络/负载均衡等)解耦。
设计特点:
- 仅在需要云平台集成的环境运行,本地或学习环境通常不包含该组件。
- 将所有与云基础设施相关的控制器独立出来运行。
- 支持水平扩展,可多实例部署以提高容错能力。
常见的 cloud-controller-manager 控制器
| 控制器 | 作用 |
|---|---|
| Node Controller | 用于在节点终止响应后检查云平台以确定节点是否已被删除 |
| Route Controller | 用于在底层云基础架构中设置路由 |
| Service Controller | 用于创建、更新和删除云平台上的负载均衡器 |
节点组件
节点组件 运行在每一个 Node 上,负责:
- 运行与维护 Pod
- 提供容器运行环境
- 支撑 Kubernetes 的实际执行层
kubelet
作用:Node 上的“管家”
- 每个节点都会运行一个 kubelet 实例
- 保障节点上 Pod 的生命周期管理
主要职责:
- 使 Pod 按照定义(PodSpec)运行
- 持续监控并确保容器运行且健康
工作流程:
- 从 API Server 获取 PodSpec
- 调用容器运行时(如 Docker、containerd)启动和管理容器
- 实时汇报 Pod 状态,自动重启异常容器
注意事项:
- kubelet 只管理由 Kubernetes 创建的容器
- ❌ 不负责管理节点上非 Kubernetes 管理的容器
kube-proxy
作用: 为 Service 提供网络代理,实现集群网络通信。
主要职责:
- 在每个 Node 上运行
- 维护和管理网络转发规则(如 iptables 或 ipvs)
- 实现 Service 流量到后端 Pod 的转发
核心功能:
- 支持 Pod 之间的通信(Pod ↔ Pod)
- 提供外部访问集群内服务的能力(External -> Service -> Pod)
实现原理:
- 借助操作系统的数据包过滤机制(iptables 或 ipvs)实现网络规则管理
- 有时也可直接进行流量代理或转发
Container Runtime
作用:真正“运行容器”的组件, 常见的有 Docker、containerd、cri-o 等。
主要职责:
- 启动容器
- 停止容器
- 管理容器生命周期