1.1 Architecture

1.1 Kubernetes architecture

核心架构图

1
2
3
4
5
6
7
8
9
10
11
graph TD
A[Master Node] -->|管理| B[Worker Nodes]
A -->|存储集群状态| C[ETCD Cluster]
A -->|调度决策| D[Kube-Scheduler]
A -->|控制循环| E[Controller Manager]
E -->|节点管理| F[Node-Controller]
E -->|副本管理| G[Replication-Controller]
A -->|API 入口| H[Kube-APIServer]
B -->|运行容器| I[Container Runtime]
B -->|代理网络| J[Kube-Proxy]
B -->|节点代理| K[Kubelet]

Master Node(控制平面)

负责集群的全局决策和调度,包含以下核心组件:

① Kube-APIServer
  • 作用:集群的“前台”,所有操作的唯一入口(RESTful API)。
  • 关键关系
    • 接收用户或工具的请求(如 kubectl)。
    • 验证请求后,将状态写入 ETCD。
② ETCD Cluster
  • 作用分布式键值数据库,存储集群所有状态(如 Pod、Node 配置)。
  • 关键关系
    • 只有 APIServer 能直接读写 ETCD。
    • 高可用部署需 3 个以上节点。
③ Kube-Scheduler
  • 作用:决定 Pod 运行在哪个 Worker Node 上。
  • 调度策略
    • 资源需求(CPU/Memory)。
    • 亲和性/反亲和性规则。
④ Controller Manager
  • 作用:通过控制循环确保集群实际状态与期望状态一致。
    • Node-Controller
      • 监控 Node 状态(如宕机时标记为 NotReady)。
    • Replication-Controller
      • 确保 Pod 副本数符合预期(已逐步被 Deployment 替代)。

Worker Nodes(工作节点)

运行容器化应用,包含以下组件:

① Kubelet
  • 作用:节点上的“代理”,负责:
    • 与 APIServer 通信(接收 Pod 定义)。
    • 管理容器生命周期(通过 Container Runtime)。
② Container Runtime
  • 常见实现:Docker、containerd、CRI-O。
  • 作用:实际运行容器的引擎(如拉取镜像、启动/停止容器)。
③ Kube-Proxy
  • 作用:维护节点网络规则(如 Service 的 IP 转发、负载均衡)。
  • 关键关系
    • 实现 ClusterIPNodePort 等网络功能。

核心概念关系总结

概念 功能简述 依赖/交互对象
Master 集群大脑,全局决策 所有 Worker Nodes
ETCD 集群状态存储 仅 APIServer 可读写
Kube-Scheduler 调度 Pod 到 Node 监听 APIServer 的未调度 Pod
Controller Manager 确保集群状态一致 通过 APIServer 监听 ETCD
Kubelet 执行 Pod 管理 接收 APIServer 指令
Kube-Proxy 处理 Service 网络流量 依赖节点网络配置

工作流程示例(以部署一个 Pod 为例)

  1. 用户提交请求kubectl create -f pod.yaml → APIServer。
  2. 写入状态:APIServer 将 Pod 定义存入 ETCD。
  3. 调度决策:Scheduler 发现未调度的 Pod,选择合适 Node 并更新 ETCD。
  4. 执行创建:目标 Node 的 Kubelet 监听到变化,调用 Container Runtime 启动容器。
  5. 状态反馈:Kubelet 将 Pod 状态报告给 APIServer → 写入 ETCD。

常见疑问解答

  • Q:ETCD 和 APIServer 的关系?

    • APIServer 是 ETCD 的“门卫”,所有组件必须通过 APIServer 访问 ETCD。
  • Q:Controller Manager 和 Kubelet 的分工?

    • Controller Manager 确保集群级状态(如副本数),Kubelet 确保节点级状态(如容器运行)。
  • Q:为什么需要 Kube-Proxy?

    • Service 的虚拟 IP 需要被转换为实际 Pod IP,由 Kube-Proxy 维护 iptables/IPVS 规则, 使得pod之间得以通讯。