Kubernetes 最重要的心智模型不是“启动容器”,而是“持续调谐状态”。
声明期望状态 → 控制器观察实际状态 → 计算差异 → 执行动作 → 再观察例如,Deployment 声明 replicas: 3。某个 Pod 消失后,控制器发现实际副本只剩 2 个,就会创建新的 Pod。它不是保证原来的 Pod 永远不坏,而是持续恢复期望数量。
Pod 为什么不适合单独管理
Pod 是 Kubernetes 的最小调度单位,可以包含一个或多个共享网络和存储的容器。但 Pod 本身是可替换对象:重建后 UID 和 IP 都可能变化。
因此,无状态应用通常交给 Deployment:
apiVersion: apps/v1
kind: Deployment
metadata:
name: web
spec:
replicas: 3
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: web
image: registry.example.com/web:1.0.0Deployment 管理 ReplicaSet,ReplicaSet 再维护 Pod 数量。排查时可以沿着所有权关系查看,而不是只盯着最后一个 Pod。
声明式系统的使用方式
- 修改 YAML 表达“想要什么”,不要手工维护某个 Pod;
- 用标签和 selector 建立控制器、Service 与 Pod 的关系;
- 把 Pod 当作可替换实例,把持久数据放到独立存储;
- 观察
status和 Events,判断实际状态为何没有收敛。
理解调谐循环后,自愈、滚动更新和扩缩容都会变成同一个模型的不同应用。