如果说 Kubernetes 入门篇解决的是“集群大概怎么运转”,那理解核心组件就是把这台机器拆开,看每个齿轮到底负责什么。组件名字很多,但只要抓住职责边界,整体并不难。
apiserver:所有请求的入口
kube-apiserver 是集群的统一入口。无论你是执行 kubectl apply、控制器在同步状态,还是平台组件在查询资源,最终都绕不开 apiserver。
它主要负责:
- 接收和校验 API 请求
- 做认证、鉴权和准入控制
- 把合法状态写入存储层
- 对外提供统一资源视图
所以当你感觉“集群没反应”时,很多问题都值得先怀疑 apiserver 是否可达。
etcd:状态的事实来源
很多初学者会忽略 etcd,但它非常关键。你可以把它理解成集群状态的事实来源。Pod、Deployment、Service 等资源的期望状态,本质上都落在这里。
这意味着两个很重要的结论:
- 集群是状态驱动的
- etcd 的健康直接影响控制面稳定性
如果 etcd 出问题,控制面不是“少一个组件”,而是“状态记忆本身出了问题”。
scheduler:决定 Pod 去哪里
调度器不负责真正启动容器,它负责做出放置决策。它会综合考虑:
- 节点资源是否足够
- 是否有污点、容忍、亲和性等限制
- 是否满足调度约束
当一个 Pod 长时间 Pending 时,调度器通常就是重点观察对象。
controller-manager:让现实回到期望
Kubernetes 的强大之处,不在于一次创建成功,而在于它会不断纠偏。这个“纠偏”很多时候由 controller-manager 驱动。
它里面包含多类控制器,例如:
- Deployment controller
- ReplicaSet controller
- Node controller
- Job controller
这些控制器会不断比较“现在是什么样”和“应该是什么样”,如果不一致,就发起修正动作。
kubelet:节点上的执行代表
kubelet 运行在每个工作节点上,是节点与控制面的关键连接点。它会:
- 接收 Pod 规格
- 调用容器运行时启动工作负载
- 采集并回报 Pod 状态
- 执行探针和部分生命周期动作
你可以把 kubelet 理解成“节点上的现场负责人”。
把组件连成一条链
一条典型链路可以简化成这样:
- 你提交 Deployment
- apiserver 接收请求并写入 etcd
- controller 发现新的期望状态
- scheduler 为 Pod 选择节点
- kubelet 在目标节点启动容器
- 状态持续回报给控制面
如果你脑子里能把这条链串起来,排查问题就不会只停留在“这个 YAML 看起来没问题”。
学核心组件不是为了考试
理解这些组件,不是为了背名词,而是为了知道问题应该从哪一层开始查。apiserver、etcd、scheduler、controller-manager、kubelet,各自负责的边界越清楚,你遇到的 Kubernetes 问题就越不容易被一团术语包住。
评论区
可以登录账户在下面对本篇文章提出见解。