跳转至

Kubernetes 架构

Kubernetes Architecture
Kubernetes Architecture

集群结构

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 等。

主要职责

  • 启动容器
  • 停止容器
  • 管理容器生命周期