Kubernetes 的工作原理——从期望状态到运行中的工作负载
Kubernetes 的工作原理,在一张交互式画布上讲清楚:清单文件、控制平面、调度,以及让工作负载持续运行的调谐循环。
Kubernetes 靠不断调谐来运行容器化应用:你声明期望状态,控制平面和工作节点就一直干活,让集群与之相符。
Kubernetes 的工作原理——从期望状态到运行中的工作负载
The interactive FlowJam canvas for this explanation — every lane, row and arrow above is a real QueryChart diagram you can open and edit.
How to read this visual
- 四列从左往右读:声明、调度、运行、维持。
- 上方控制平面的各行负责决策,下方工作节点的各行负责执行。自上而下的箭头是命令;从“Pod 健康吗?”绕回上方的那条线就是调谐周期。
- 清单文件里的期望状态是唯一可信来源——其他每个方框存在的意义,都是把现实推向它。
声明期望状态
“kubectl apply 一份期望状态清单文件”是一切的起点:开发者描述目标——“API 的 3 个副本,镜像 v2.1,端口 8080”——然后提交上去。“API 服务器把期望状态存入 etcd”是落定的一刻:控制平面的 API 服务器是入口,etcd 是集群的唯一可信来源。之后发生的一切,都是这一次写入的结果。
调度
“调度器监听并为 Pod 挑选节点”和“调度器把每个 Pod 分配到一个健康的节点”,是控制平面在决定工作跑在哪里。调度器会权衡每个节点的资源和约束,把 Pod 放到最合适的候选节点上——开发者不挑机器,只声明期望状态。
在工作节点上运行
“节点上的 kubelet 拉取镜像并启动容器”是这套安排里工作节点的那一半:kubelet 是控制平面派驻在每个节点上的代理,它与容器运行时通信,启动分配过来的 Pod,并把健康状况汇报回去。“一个 Service 把流量路由到运行中的 Pod”补上了稳定的网络入口——Pod 来来去去,Service 的名字却不变。
维持状态
“控制器进行调谐——重启故障、伸缩副本”是反馈回路,“Pod 健康吗?”是它的探针——存活与就绪检查决定一个 Pod 是被替换(“否”分支绕回调谐)还是被保留。“Deployment 保持在期望状态”是终态:不是一份干完的活,而是一个与自己的清单文件相符的、运行中的系统。
Key relationships and takeaways
- Kubernetes 是声明式的:你陈述目标,而不是步骤,剩下的交给系统。
- 控制平面决策,kubelet 执行——期望状态不进 etcd,就什么都跑不起来。
- 调谐就是那个循环:比较、补上差异、重复,永不停止。
- 探针决定健康,健康决定是否替换——出故障的 Pod 无需人工介入就会被重启。
- Kubernetes 编排的正是 Docker 打包出来的容器,这也是两张图解彼此相连的原因。
When to use this visual
- 向刚接触 Kubernetes 的团队解释控制平面与工作节点的分工。
- 在有人写下第一份 Deployment 和 Service 清单文件之前,先讲清楚声明式模型。
- 为一场关于自愈的讨论打底——Kubernetes 会自动修好什么,什么仍然需要运维介入。
运作方式
标注你真正在跑的清单文件
在 apply 这一步上,补充你真实的 Deployment 与 Service 信息——副本数、镜像、端口——让这张图与你的集群对得上。
补上网络层
在 Service 与用户之间插入一个 Ingress 方框,写明你的集群如何对外暴露流量,因为这一块是多数团队最先定制的。
画出你的伸缩规则
在调谐这一步上扩展出一条 Horizontal Pod Autoscaler 分支,按 CPU 或自定义指标伸缩副本,并以它自己的状态收尾。
补上故障与存储路径
把有状态工作负载用的持久卷、以及你使用的反亲和性规则都画进来,每一项都加一条注释说明为什么。
常见问题
用大白话说,Kubernetes 是什么?
Kubernetes 是一套在一组机器组成的集群上运行容器化应用、并让它们一直跑下去的系统。你告诉它你想要什么——每个应用要几份、用哪个镜像、开哪些端口——它就把工作调度到机器上,重启故障,上下伸缩,并路由流量。这张图把这件事拆成声明、调度、运行和维持。
Kubernetes 的控制平面是什么?
控制平面是一组为集群做决策的组件:接收你清单文件的 API 服务器、存放期望状态的 etcd、放置 Pod 的调度器,以及把现实向期望状态调谐的控制器。它是大脑。工作节点是肌肉——每个节点上都跑着一个 kubelet,负责启动并监控分配给它的 Pod。
Kubernetes 里的“声明式”是什么意思?
意思是你描述目标状态,而不是下达达到目标的命令。你 apply 一份写着“运行三个副本”的清单文件;步骤由 Kubernetes 自己算出来,而且只要现实发生漂移,它就会一直执行下去。某个 Pod 挂了,控制器就创建一个替代品,回到三个——不需要人去重跑命令。清单文件是唯一可信来源,调谐则是机制。
Kubernetes 怎么让应用保持健康?
靠探针和调谐循环。存活探针告诉 Kubernetes 一个容器是否还活着——存活探针失败就重启它。就绪探针告诉它一个 Pod 能否承接流量——就绪探针失败就把它从 Service 上摘掉。控制器持续比较运行状态与期望状态并补上差异,这个循环就是图中“Pod 健康吗?”这个决策所代表的东西。
在 QueryChart(FlowJam)中编辑这张图解
把上面这张 Kubernetes 画布原样打开成你自己的图表,把组件名改成你自己集群里的名字,再给你的工作负载加上注释。