Deployment 基础
本教程共 65 篇 · 第 18 篇 · 更新于 2026-08-14 · 约 10 分钟阅读
本节目标:学完你能创建一个 Deployment 跑无状态应用,说清它、ReplicaSet、Pod 三层谁管谁,并用一条命令完成扩缩容。
如果你只学一个工作负载,就学 Deployment。绝大多数 Web 服务、API 服务都是无状态的,Deployment 就是为它们量身做的。
18-1 Deployment 管什么
Deployment(部署)是 Kubernetes 里最常用的无状态工作负载。它干两件事:维持副本数、管理版本发布。
它不直接管 Pod,而是管 ReplicaSet(第 17 章)。每次你改了镜像或配置,Deployment 就新建一个 ReplicaSet,让新 RS 起新 Pod,旧的慢慢退场。
打个比方:Deployment 是”项目经理”,ReplicaSet 是”班组长”,Pod 是”干活的”。你跟项目经理说要新版,他派新班组长带人上,旧班组长带人撤。
kubectl get deployment
kubectl get rs
kubectl get pods
三条命令一起看,能清楚看到这三层:一个 Deployment 对应一个当前 RS,RS 下挂着 N 个 Pod。
18-2 创建一个 Deployment
最省事的办法是用命令生成,再转成 YAML 文件:
kubectl create deployment nginx --image=nginx:1.27 --replicas=3 --dry-run=client -o yaml > deploy.yaml
kubectl apply -f deploy.yaml
标准 YAML 长这样:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.27
ports:
- containerPort: 80
注意 selector.matchLabels 和 template 里的标签得对上,Deployment 靠它认领自己的 RS 和 Pod。
NoteDeployment 的
selector创建后也不能改,和 ReplicaSet 一样。标签设计一开始就要想好。
18-3 自愈是怎么发生的
Deployment 把”自愈”这件事完全交给 ReplicaSet。某个 Pod 挂了,RS 补一个;节点宕了,RS 在别处补。
你作为用户完全不用管 Pod 的生死,只管描述”我要 3 个副本、跑这个镜像”。这种”只说想要什么,不说怎么做”的方式,叫声明式。
kubectl get pods
# 随便删一个,再看,又冒出来一个
kubectl delete pod <某个pod名>
kubectl get pods
Tip删 Pod 时最好连着 RS 一起看。如果删完不补,八成是 RS 的
replicas或选择器有问题。
18-4 扩缩容
扩到 5 个副本,一行搞定:
kubectl scale deployment nginx --replicas=5
或者改 YAML 里的 spec.replicas 再 apply。Deployment 会让 RS 调和到 5 个。
看实时状态:
kubectl rollout status deployment/nginx
这条命令会一直等到所有新副本就绪才返回,脚本里常用它卡发布流程。
18-5 更新镜像
改镜像也是声明式,Deployment 自动走滚动更新(第 19 章细讲):
kubectl set image deployment/nginx nginx=nginx:1.28
set image 等于改了模板里的镜像,Deployment 据此新建 RS、逐步替换。你不用手动一个个删 Pod。
18-6 常见坑
一是 selector 和 template.labels 不一致,Deployment 起不来,报控制器认领不到 Pod。
二是副本数和节点资源不匹配。要 10 个副本但节点只剩 2 核,剩下的一直 Pending。
三是把有状态应用(数据库、带盘的中间件)用 Deployment 跑。Deployment 不保证存储稳定,这类请用 StatefulSet(第 20 章)。
Warning不要手动
kubectl edit改 Pod 的镜像来”更新”。Pod 由 RS 管,你改的 Pod 一重启就回到模板原样。改模板(Deployment)才是正道。
Deployment 解决了”跑几个、挂了补”,但”怎么平滑换版本、换坏了怎么回退”是下一章的主题。