Deployment 与滚动更新
约 634 字大约 2 分钟
布欧-Lewyon
2026-05-15
首页 › K8s › 工作负载(在新窗口打开) › Deployment 与滚动更新
什么是 Deployment
Deployment 是 K8s 中最常用的工作负载资源,用于声明式管理无状态应用的副本、更新和回滚。
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3 # 期望副本数
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:alpine
ports:
- containerPort: 80# 创建 Deployment
kubectl apply -f deployment.yaml
# 查看 Deployment
kubectl get deployments
kubectl describe deployment nginx-deployment
# 查看其管理的 Pod
kubectl get pods -l app=nginx
# 扩缩容
kubectl scale deployment nginx-deployment --replicas=5滚动更新
spec:
strategy:
type: RollingUpdate # 滚动更新(默认)
rollingUpdate:
maxUnavailable: 1 # 更新中最多不可用 Pod 数
maxSurge: 1 # 更新中最多额外创建 Pod 数# 触发滚动更新(修改镜像版本)
kubectl set image deployment/nginx-deployment nginx=nginx:1.25
# 查看更新状态
kubectl rollout status deployment/nginx-deployment
# 查看历史版本
kubectl rollout history deployment/nginx-deployment
# 回滚到上一个版本
kubectl rollout undo deployment/nginx-deployment
# 回滚到指定版本
kubectl rollout undo deployment/nginx-deployment --to-revision=2
# 暂停/恢复更新
kubectl rollout pause deployment/nginx-deployment
kubectl rollout resume deployment/nginx-deployment滚动更新过程
回滚机制
# 更新失败自动停止
kubectl rollout status deployment/nginx-deployment
# Waiting for deployment "nginx-deployment" rollout to finish: 1 out of 3 new replicas has been updated...
# 如果一直卡住,用 Ctrl+C 取消
# 回滚
kubectl rollout undo deployment/nginx-deploymentspec:
revisionHistoryLimit: 10 # 保留的历史版本数(默认 10)Recreate 策略
spec:
strategy:
type: Recreate # 先删所有旧 Pod,再建新 Pod适用场景:
- 不支持多版本同时运行的应用。
- 数据库迁移(Schema 变更)。
- 需要完全重启的应用。
Pod 模板变更触发更新
修改 Deployment 的 .spec.template 下的任何字段都会触发滚动更新:
# 修改资源限制触发更新
kubectl set resources deployment/nginx-deployment -c=nginx --limits=cpu=200m,memory=256Mi
# 修改环境变量
kubectl set env deployment/nginx-deploy NODE_ENV=production小结
- Deployment 管理无状态应用的副本声明和滚动更新。
- 滚动更新策略:
RollingUpdate(默认,分批交替)和Recreate(先删后建)。 kubectl rollout status/undo/history管理更新和回滚。revisionHistoryLimit控制保留的历史版本数。set image/set resources/set env命令可直接修改 Pod 模板触发更新。
上一节:Init 容器与 Sidecar 下一节:StatefulSet
