在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 | | (存储)| |
| +--------------+ +------------+ +-------------+ +-------------+ +-----+ |
+-----------------------------------------------------------------------------------------+
关键设计原则
- 声明式 API:用户定义期望状态(YAML/JSON),K8S 自动驱动系统达到该状态。
- 控制器模式:持续监听状态变化,通过调和循环(Reconcile Loop)消除差异。
- 模块化与解耦:组件通过 API 通信,可独立升级替换(如 CRI、CNI、CSI 接口)。
- 自愈能力:自动重启故障容器、替换不可用节点上的 Pod。
总结
- 控制平面:决策中心(
apiserver
+etcd
+scheduler
+controller-manager
)。 - 数据平面:工作负载执行者(
kubelet
+ 容器运行时 +kube-proxy
)。 - 插件:扩展能力(网络、DNS、存储、监控等)。
- 核心流程:用户通过
kubectl
操作apiserver
→ 状态存入etcd
→ 控制器/scheduler 响应变更 →kubelet
在节点执行操作。
理解这些组件的协作关系,是掌握 Kubernetes 架构和故障排查的基础!