Kubernetes Deployment 详解
Deployment 是 Kubernetes 中最常用的工作负载控制器之一,它提供了声明式的更新能力,用于管理无状态应用的部署和更新。
·
Kubernetes Deployment 详解
Deployment 是 Kubernetes 中最常用的工作负载控制器之一,它提供了声明式的更新能力,用于管理无状态应用的部署和更新。以下是 Deployment 的全面介绍:
一、Deployment 核心功能
1. 核心特性
| 特性 | 说明 |
|---|---|
| Pod 声明式管理 | 通过 YAML 定义 Pod 模板 |
| 滚动更新 | 支持无宕机更新应用 |
| 版本回滚 | 可回退到历史版本 |
| 扩缩容 | 轻松调整 Pod 副本数 |
| 健康检查 | 结合 Readiness/Liveness Probe |
2. 典型工作流程
二、Deployment 配置详解
1. 基础 YAML 结构
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3 # Pod副本数
selector: # 必须匹配template中的labels
matchLabels:
app: nginx
template: # Pod模板
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.19.10
ports:
- containerPort: 80
2. 关键字段说明
| 字段 | 必选 | 说明 |
|---|---|---|
spec.replicas |
否 | 期望的Pod副本数(默认为1) |
spec.selector |
是 | 标签选择器(必须匹配template.labels) |
spec.template |
是 | Pod模板定义 |
spec.strategy |
否 | 更新策略配置 |
三、部署策略类型
1. 滚动更新(RollingUpdate) - 默认策略
spec:
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 25% # 可超出replicas的最大Pod数
maxUnavailable: 25% # 更新期间不可用Pod比例
更新过程:
- 创建新ReplicaSet并逐步扩容
- 旧ReplicaSet逐步缩容
- 确保始终有可用Pod处理请求
2. 重建更新(Recreate)
spec:
strategy:
type: Recreate
特点:
- 先删除所有旧Pod再创建新Pod
- 会导致短暂服务不可用
- 适合需要完全替换的场景
四、Deployment 生命周期管理
1. 创建与查看
# 创建Deployment
kubectl apply -f deployment.yaml
# 查看状态
kubectl get deployments
kubectl describe deployment <name>
# 查看关联的ReplicaSet
kubectl get rs -l app=nginx
2. 更新操作
# 镜像更新
kubectl set image deployment/nginx-deployment nginx=nginx:1.20.0
# 或通过编辑配置
kubectl edit deployment nginx-deployment
3. 扩缩容
# 手动扩缩
kubectl scale deployment nginx-deployment --replicas=5
# 基于CPU自动扩缩(HPA)
kubectl autoscale deployment nginx-deployment --min=2 --max=10 --cpu-percent=80
4. 回滚操作
# 查看历史版本
kubectl rollout history deployment nginx-deployment
# 回滚到上一个版本
kubectl rollout undo deployment nginx-deployment
# 回滚到指定版本
kubectl rollout undo deployment nginx-deployment --to-revision=2
五、高级配置
1. 就绪检查配置
spec:
template:
spec:
containers:
- name: nginx
readinessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 5
periodSeconds: 5
2. 资源限制
resources:
requests:
cpu: "100m"
memory: "128Mi"
limits:
cpu: "200m"
memory: "256Mi"
3. 亲和性调度
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: disktype
operator: In
values: [ssd]
六、Deployment 状态解析
1. 状态类型
| 状态 | 说明 |
|---|---|
| Progressing | 正在执行滚动更新 |
| Available | 有足够Pod可用(>=minAvailable) |
| ReplicaFailure | 创建/删除Pod时出错 |
| Completed | 所有Pod已成功更新 |
2. 状态检查
kubectl rollout status deployment nginx-deployment
七、最佳实践
-
标签一致性:
- 确保selector.matchLabels与template.metadata.labels完全匹配
- 使用有意义的标签如:
app,version,environment
-
更新策略选择:
- 生产环境使用RollingUpdate
- 开发环境可使用Recreate加快更新速度
-
版本控制:
# 查看更新历史(包括变更原因) kubectl rollout history deployment nginx-deployment --revision=2 -
监控与告警:
# 设置Rollout监控 kubectl get deployments -w
八、常见问题排查
-
Pod 未创建:
kubectl describe deployment <name> # 查看事件 kubectl get rs # 检查ReplicaSet -
更新卡住:
kubectl rollout undo deployment <name> # 先回滚 kubectl describe deployment <name> # 分析原因 -
资源不足:
kubectl describe nodes # 查看节点资源 kubectl top pods # 查看Pod资源使用
Deployment 是 Kubernetes 中最常用的工作负载管理方式,通过合理配置可以实现高效的应用部署和更新。建议结合 ConfigMap、Secret 和 Service 一起使用,构建完整的应用部署方案。
更多推荐

所有评论(0)