Skip to content
Kubernetes 架构与组件

Kubernetes 架构与组件

Kubernetes 集群架构详解:Master/Worker 节点分工、各核心组件职责与交互流程。


1. 架构全景图

┌──────────────────────────────────────────────────────────────┐
│                      Master Node(控制平面)                    │
│  ┌──────────────┐  ┌──────────────────┐  ┌───────────────┐  │
│  │ kube-apiserver│  │controller-manager│  │   scheduler   │  │
│  │   (API 网关)  │  │   (状态协调器)    │  │  (调度器)     │  │
│  └──────┬───────┘  └────────┬─────────┘  └───────┬───────┘  │
│         │                   │                    │          │
│         └───────────────────┼────────────────────┘          │
│                             │                                │
│                     ┌───────┴───────┐                        │
│                     │     etcd      │                        │
│                     │ (分布式 KV 存储)│                       │
│                     └───────────────┘                        │
└──────────────────────────────────────────────────────────────┘
                             │
          ─ ─ ─ ─ ─ ─ ─ ─ ─ ┼ ─ ─ ─ ─ ─ ─ ─ ─ ─
                             │
┌────────────────────────────┼────────────────────────────────┐
│                   Worker Node(工作节点)                      │
│  ┌──────────┐  ┌──────────┐  ┌──────────────────┐          │
│  │  kubelet │  │kube-proxy│  │ container-runtime │          │
│  │(节点代理) │  │(网络代理) │  │   (容器运行时)     │          │
│  └──────────┘  └──────────┘  └──────────────────┘          │
│                                                              │
│  ┌─────┐  ┌─────┐  ┌─────┐                                  │
│  │ Pod │  │ Pod │  │ Pod │  ...                             │
│  └─────┘  └─────┘  └─────┘                                  │
└──────────────────────────────────────────────────────────────┘

2. Worker Node 组件

每个工作节点上都运行着三个核心组件。

2.1 kubelet

节点上的核心代理,负责管理 Pod 的生命周期。

职责 说明
Pod 管理 根据 PodSpec 创建、启动、停止容器
状态上报 定期向 kube-apiserver 上报节点和 Pod 运行状态
健康检查 执行 Liveness 和 Readiness 探针
资源管理 监控节点资源使用情况,上报给调度器

2.2 kube-proxy

为 Pod 提供网络代理和负载均衡服务。

职责 说明
Service 实现 将 Service 的 ClusterIP 映射到后端 Pod IP
负载均衡 将流量分发到后端的多个 Pod
代理模式 支持 iptables / IPVS / userspace 三种模式

三种代理模式对比

模式 性能 复杂度 推荐场景
iptables 默认模式,中小规模集群
IPVS 大规模集群(>1000 Service)
userspace 旧版兼容(已基本淘汰)

2.3 container-runtime

运行容器的底层软件

职责 说明
镜像管理 拉取、存储、删除容器镜像
容器生命周期 创建、启动、停止、删除容器
CRI 实现 实现容器运行时接口(CRI)与 kubelet 通信

常见运行时

运行时 说明
containerd K8s 社区推荐的默认运行时
CRI-O 专为 K8s 设计的轻量运行时
Docker Engine 历史默认,v1.24 起通过 cri-dockerd 适配

3. Master Node 组件

3.1 kube-apiserver

集群的API 网关,所有组件通过它通信。

职责 说明
REST API 提供集群管理的 RESTful 接口
认证授权 处理请求的身份认证、权限校验(RBAC)
准入控制 执行 Admission Controller 校验和修改请求
数据持久化 所有资源对象持久化到 etcd
kubectl → kube-apiserver → etcd
kubelet → kube-apiserver  (watch Pod 变更)
scheduler → kube-apiserver  (watch 未调度 Pod + 写入调度结果)

3.2 etcd

分布式 KV 存储,保存集群所有配置和状态数据(实际就是集群的 “source of truth”)。

特性 说明
一致性 基于 Raft 共识算法保证强一致性
高可用 通常部署 3/5 个节点,奇数个保证选举
Watch 机制 支持事件监听,组件通过 watch 感知资源变更

K3s 默认使用内嵌的 SQLite 替代 etcd(也支持使用外部 etcd)。

3.3 controller-manager

运行一组控制器的后台进程,每个控制器负责将资源的当前状态向期望状态靠拢。

控制器 职责
Node Controller 监控节点健康状态,处理节点故障
ReplicaSet Controller 确保 Pod 副本数符合期望
Deployment Controller 管理 Deployment 的滚动更新
Endpoint Controller 为 Service 生成 Endpoints
ServiceAccount Controller 为命名空间创建默认 ServiceAccount

🔬 深入原理:控制器的工作模式是经典的 Control Loop观察(Watch) → 比较(Diff) → 执行(Act)

3.4 scheduler

负责将 Pod 调度到合适的节点上运行。

调度流程

1. 过滤(Filtering)
   过滤掉不满足条件的节点(资源不足、污点不匹配、亲和性不满足等)

2. 打分(Scoring)
   对剩余节点打分排序(资源均衡度、亲和性优先等)

3. 绑定(Binding)
   选择最高分节点,将 Pod 绑定到该节点

4. 云平台集成

如果使用云平台(AWS、Azure、GCP 等),还会涉及 cloud-controller-manager

职责 示例
节点管理 检测云上节点是否被删除
路由管理 配置云上 VPC 路由
负载均衡 自动创建云厂商的 LoadBalancer
存储卷 对接云存储(EBS、Azure Disk 等)

K3s 默认移除了 cloud-controller-manager,减小编译体积。


5. 组件间的典型交互流程

5.1 创建一个 Deployment 的完整流程

1. kubectl apply -f deploy.yaml
   └→ POST /apis/apps/v1/deployments (kube-apiserver)
      └→ 写入 etcd

2. Deployment Controller(controller-manager)
   └→ Watch 到新 Deployment
      └→ 创建 ReplicaSet
         └→ 写入 etcd(通过 apiserver)

3. ReplicaSet Controller(controller-manager)
   └→ Watch 到新 ReplicaSet,发现 Pod 数量不足
      └→ 创建 Pod(设置 ownerReference 指向 ReplicaSet)
         └→ 写入 etcd(通过 apiserver),Pod 状态为 Pending

4. Scheduler
   └→ Watch 到未调度的 Pod
      └→ 过滤 + 打分,选出最佳 Node
         └→ 更新 Pod 的 nodeName 字段
            └→ 写入 etcd(通过 apiserver)

5. kubelet(目标节点)
   └→ Watch 到分配给本节点的 Pod
      └→ 调用 CRI 拉取镜像、创建容器
         └→ 更新 Pod 状态为 Running
            └→ 写入 etcd(通过 apiserver)

5.2 访问一个 Service 的流程

Client → Service(ClusterIP:Port) → iptables/IPVS 规则 → 随机选一个 Pod IP → 容器

6. K3s 架构差异

方面 标准 K8s K3s
默认存储 etcd SQLite(可选 etcd)
容器运行时 需单独安装 内嵌 containerd
网络插件 需单独安装 内嵌 Flannel
Ingress 控制器 需单独安装 内嵌 Traefik
二进制大小 多组件分散 单二进制 < 100MB