一、Kubernetes 架构总览

Kubernetes 集群可以概括为两大部分:

  • 控制面:负责接收请求、保存状态、调度资源和持续控制。
  • 工作节点:负责真正运行 Pod,并承担网络、运行时和节点级管理职责。

image-20250314164256905

二、控制面的核心组件

控制面是整个集群的“大脑”,主要由以下组件构成。

1. API Server

API Server 是 Kubernetes 的统一入口。无论是 kubectl、控制器还是其他客户端,最终都要通过它来读写资源对象。

它既负责认证、鉴权、准入控制,也负责把最终资源状态持久化到 etcd 中。可以把它理解为整个集群的控制中枢。

2. Scheduler

Scheduler 负责给尚未绑定节点的 Pod 选择合适的运行位置。

它会基于资源、约束、亲和性、污点容忍等条件进行过滤和打分,最终把 Pod 调度到最适合的节点上。

3. Controller Manager

Controller Manager 的职责是持续比对“期望状态”和“当前状态”,并不断做出修正。

例如 Deployment 控制器会维护副本数,ReplicaSet 控制器会补齐 Pod,节点控制器会处理节点状态变化。Kubernetes 的“声明式收敛”能力,核心就来自这里。

4. Etcd

Etcd 是 Kubernetes 的后端数据存储,保存着集群关键状态。它通常建议采用奇数节点部署,并使用可靠的高速磁盘,以保证一致性和恢复能力。

三、工作节点上的核心组件

工作节点负责真正把 Pod 跑起来。

1. kubelet

kubelet 是节点上的核心代理。它监听分配到本节点的 Pod,调用容器运行时拉取镜像、创建容器,并持续上报节点和 Pod 状态。

2. kube-proxy

kube-proxy 负责维护 Service 相关的转发规则,常见实现是 iptables 或 IPVS。它让集群内外的访问请求能够被正确转发到后端 Pod。

3. Container Runtime

容器运行时负责管理容器生命周期,常见实现包括 Containerd。它通过 CRI 与 kubelet 对接,是 Kubernetes 真正落地到容器执行层的关键组件。

4. CoreDNS、CNI 和监控扩展

在典型集群里,还会配合 CoreDNS 做服务解析,配合 Calico 等 CNI 插件完成 Pod 网络分配与网络策略控制,配合 Metrics Server 提供自动扩缩需要的指标数据。

四、几个非常关键的组件细节

真正进入生产环境后,有几个细节非常值得记住:

  • API Server 是唯一直接和 etcd 通信的核心入口组件。
  • Scheduler 和 Controller Manager 都支持高可用和选主机制。
  • kube-proxy 并不是绝对必需,某些基于 eBPF 的网络方案可以替代它的部分能力。
  • etcd 的可靠性直接决定控制面的稳定性。
  • 只要有 kubeconfigkubectl,就可以在合适权限范围内管理集群。

五、一次 Pod 创建请求是怎样流转的

把一次典型部署过程串起来,Kubernetes 的工作机制会更直观。

Day007-k8s设计思想必知必会-图2

  1. 用户执行 kubectl,把 YAML 提交给 API Server。
  2. API Server 完成认证、鉴权和准入控制后,把资源对象写入 etcd。
  3. 相关控制器通过 Watch 机制感知资源变化,创建 ReplicaSet、Pod 等对象。
  4. Scheduler 发现待调度 Pod 后,为它挑选目标节点。
  5. 目标节点上的 kubelet 监听到分配给自己的 Pod,随后调用容器运行时拉取镜像并启动容器。
  6. 存储插件和 CNI 插件分别负责卷挂载与网络配置。
  7. Service Controller 和 Ingress Controller 再继续把访问流量接入到后端服务。

这条链路体现出 Kubernetes 最核心的设计思想:用户只声明目标状态,平台负责持续把目标状态变成现实状态。