在K8S中,体系结构有哪些不同的组成部分?

Kubernetes(K8S)的体系结构是一个典型的分布式系统,分为控制平面(Control Plane)数据平面(Data Plane)(也称为工作节点)。以下是其核心组成部分的详细解析:


一、控制平面(Control Plane / Master Node)

集群的“大脑”,负责全局决策和状态管理。通常由多节点组成以实现高可用(HA)。

组件 核心作用 关键特性
1. kube-apiserver - 集群的唯一入口,提供 RESTful API。
- 处理所有操作请求(认证、授权、准入控制)。
- 读写 etcd 存储集群状态。
水平扩展、高可用部署(多副本 + 负载均衡)
2. etcd - 分布式键值数据库,持久化存储集群所有状态数据(如 Pod、Node、ConfigMap)。
- 保证数据一致性和高可用(Raft 协议)。
生产环境需 3/5 个奇数节点部署
3. kube-scheduler - 监听未调度的 Pod,根据资源需求、约束策略选择最优 Node 运行。 调度策略可扩展(过滤 + 评分两阶段)
4. kube-controller-manager - 运行控制器(Controller),驱动集群状态向期望状态收敛:
- 节点控制器(监控 Node 状态)
- 副本控制器(维护 Pod 副本数)
- 服务控制器(管理 Service 与 Endpoints)
- 其他控制器(如 Namespace、Token 控制器)
多副本通过领导者选举(Leader Election)保证单活
5. cloud-controller-manager - 可选组件,对接云厂商 API(如 AWS、Azure)。
- 管理云资源:节点生命周期、负载均衡器、存储卷、路由规则。
解耦云平台依赖,便于扩展

二、数据平面(Data Plane / Worker Node)

运行用户工作负载的节点,由控制平面管理。

组件 核心作用 关键特性
1. kubelet - 节点上的“代理”,管理 Pod 生命周期。
- 向控制平面报告节点和 Pod 状态。
- 执行容器操作(通过 CRI)。
通过 Watch API 监听 apiserver 的 Pod 变更
2. 容器运行时(Container Runtime) - 实际运行容器的引擎(如 containerd、CRI-O)。
- 负责拉取镜像、启停容器、管理隔离资源(CPU/内存)。
遵循 CRI(Container Runtime Interface)标准
3. kube-proxy - 维护节点上的网络规则(iptables/IPVS)。
- 实现 Service 的负载均衡和流量转发(ClusterIP、NodePort 等)。
支持多种代理模式(userspace、iptables、IPVS)

三、插件组件(Add-ons)

扩展集群功能的非核心组件,通常以 Pod 形式运行。

组件 核心作用
1. CNI 网络插件 - 实现 Pod 间网络通信(如 Calico、Flannel、Cilium)。
- 负责 IP 分配、网络策略(NetworkPolicy)。
2. CoreDNS - 提供集群内 DNS 服务,解析 Service 域名(如 my-svc.default.svc.cluster.local)。
3. Ingress 控制器 - 实现 Ingress 资源,暴露 HTTP/HTTPS 服务到集群外(如 Nginx Ingress、Traefik)。
4. Metrics Server - 收集集群资源指标(CPU/内存),为 kubectl top 和 HPA 提供数据。
5. CSI 存储插件 - 对接外部存储系统(如 AWS EBS、NFS),为 Pod 提供持久卷(PV/PVC)。
6. Dashboard - 提供 Web 可视化界面管理集群。

四、核心概念关联图

+-----------------------------------------------------------------------------------------+
|                                     控制平面 (Control Plane)                            |
|  +-------------+     +------------+     +------------+     +-------------------------+ |
|  | kube-       |<--->|   etcd     |<--->| kube-      |     | cloud-controller-       | |
|  | apiserver   |     | (存储状态) |     | scheduler  |     | manager (可选)          | |
|  | (API 网关)   |     +------------+     | (调度器)    |     | (云平台集成)             | |
|  +-------------+           ^            +------------+     +-------------------------+ |
|       ^   ^   ^            |                 ^                                          |
|       |   |   |            v                 |                                          |
+-----------------------------------------------------------------------------------------+
       |   |   |     +-------------------+     |                          
       |   |   +---->| kube-controller-  |<----+                          
       |   |         | manager (控制器)   |                                 
       |   |         +-------------------+                                 
       |   |                                                                
       |   |                                                                
+------v---v-----------------------------------------------------------------------------+
|                                     数据平面 (Worker Nodes)                            |
| +----------------+     +------------------+     +-----------------+     +------------+ |
| | kubelet        |<--->| 容器运行时        |     | kube-proxy      |     | 用户 Pod   | |
| | (节点代理)      |     | (containerd等)   |     | (网络代理)       |     | (工作负载)  | |
| +----------------+     +------------------+     +-----------------+     +------------+ |
+-----------------------------------------------------------------------------------------+
          ^                                                                                
          |                                                                                
+----------v------------------------------------------------------------------------------+
|                                      插件组件 (Add-ons)                                |
| +--------------+     +------------+     +-------------+     +-------------+     +-----+ |
| | CNI 网络插件  |     | CoreDNS    |     | Ingress     |     | Metrics     |     | CSI | |
| | (网络通信)    |     | (DNS解析)  |     | 控制器       |     | Server      |     | (存储)| |
| +--------------+     +------------+     +-------------+     +-------------+     +-----+ |
+-----------------------------------------------------------------------------------------+

关键设计原则

  1. 声明式 API:用户定义期望状态(YAML/JSON),K8S 自动驱动系统达到该状态。
  2. 控制器模式:持续监听状态变化,通过调和循环(Reconcile Loop)消除差异。
  3. 模块化与解耦:组件通过 API 通信,可独立升级替换(如 CRI、CNI、CSI 接口)。
  4. 自愈能力:自动重启故障容器、替换不可用节点上的 Pod。

总结

  • 控制平面:决策中心(apiserver + etcd + scheduler + controller-manager)。
  • 数据平面:工作负载执行者(kubelet + 容器运行时 + kube-proxy)。
  • 插件:扩展能力(网络、DNS、存储、监控等)。
  • 核心流程:用户通过 kubectl 操作 apiserver → 状态存入 etcd → 控制器/scheduler 响应变更 → kubelet 在节点执行操作。

理解这些组件的协作关系,是掌握 Kubernetes 架构和故障排查的基础!

posted @ 2025-08-13 14:26  天道酬勤zjh  阅读(14)  评论(0)    收藏  举报