Kubernetes 的 Deployment 是管理 Pod 副本的核心控制器,提供声明式更新、滚动升级、回滚等能力,是部署无状态应用(如Web服务、API)的标准工具。以下是其核心特性及使用方法:
一、Deployment 的核心特点
特点 | 说明 |
---|---|
声明式配置 | 通过 YAML 定义期望状态(如副本数、镜像版本),由 Kubernetes 自动同步实际状态。 |
副本管理 | 自动创建和管理 ReplicaSet,确保指定数量的 Pod 副本始终运行。 |
滚动更新(Rolling Update) | 逐步替换旧版本 Pod,实现零停机更新。支持自定义更新策略(如批次间隔、最大不可用)。 |
版本回滚 | 可快速回退到历史版本(通过 kubectl rollout undo )。 |
扩缩容 | 手动或通过 HPA(Horizontal Pod Autoscaler)自动调整 Pod 副本数量。 |
状态监控 | 查看 Deployment 的更新状态(kubectl rollout status )。 |
二、Deployment 的典型使用场景
-
部署无状态应用
• 例如 Web 服务、API 服务、微服务等。 -
持续更新应用版本
• 通过滚动更新逐步替换旧 Pod,保证服务不中断。 -
蓝绿部署(Blue-Green)或金丝雀发布(Canary)
• 结合多个 Deployment 和 Service 流量切换实现。 -
弹性扩缩容
• 根据 CPU/内存指标自动扩缩容(需配合 HPA)。
三、如何使用 Deployment?
1. 编写 Deployment YAML 文件
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment # Deployment 名称
labels:
app: nginx
spec:
replicas: 3 # 副本数
selector:
matchLabels:
app: nginx # 匹配 Pod 标签
template: # Pod 模板
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.25.3 # 容器镜像
ports:
- containerPort: 80
resources:
requests:
memory: "128Mi"
cpu: "100m"
livenessProbe: # 存活探针
httpGet:
path: /
port: 80
initialDelaySeconds: 5
periodSeconds: 10
2. 常用操作命令
操作 | 命令 |
---|---|
创建 Deployment | kubectl apply -f deployment.yaml |
查看 Deployment 状态 | kubectl get deployments 或 kubectl describe deployment nginx-deployment |
触发滚动更新(修改镜像版本) | kubectl set image deployment/nginx-deployment nginx=nginx:1.25.4 |
查看更新进度 | kubectl rollout status deployment/nginx-deployment |
回滚到上一版本 | kubectl rollout undo deployment/nginx-deployment |
扩缩容副本数 | kubectl scale deployment nginx-deployment --replicas=5 |
删除 Deployment | kubectl delete -f deployment.yaml |
四、Deployment 的更新策略
在 YAML 中通过 spec.strategy
定义:
spec:
strategy:
type: RollingUpdate # 默认策略,可选 Recreate(先终止旧Pod再创建新Pod)
rollingUpdate:
maxSurge: 25% # 更新期间允许超过期望副本数的最大比例
maxUnavailable: 25% # 更新期间不可用 Pod 的最大比例
五、最佳实践
-
标签选择器一致性
•spec.selector.matchLabels
必须与 Pod 模板的metadata.labels
一致,否则会报错。 -
资源限制
• 在containers.resources
中定义 CPU/内存的请求(requests
)和上限(limits
),避免资源争抢。 -
健康检查
• 配置livenessProbe
和readinessProbe
,确保 Pod 健康状态可被监控。 -
版本控制
• 每次更新镜像时生成新标签(如nginx:1.25.4
),避免使用latest
标签。
六、Deployment 与相关对象的关系
Deployment
└─ 管理 ReplicaSet(记录版本历史)
└─ 管理 Pod 副本
└─ 通过 Service 暴露服务
总结
• Deployment 是 Kubernetes 部署无状态应用的“瑞士军刀”,提供自动化副本管理、滚动更新和版本回滚能力。
• 核心操作:通过 YAML 定义期望状态,使用 kubectl
命令管理生命周期。
• 适用场景:Web 服务、API、微服务等无需持久化本地数据的应用。