梗概
Deployment 是用于管理 Pod 副本的控制器,它定义了期望的应用状态,并确保实际状态与之保持一致。它通常用于无缝升级、扩展或[use::回滚]应用。
详细说明
主要功能
- 声明式地管理 Pod 和 ReplicaSet
- 支持滚动更新和回滚功能
- 提供自动扩缩容能力
- 确保应用程序版本的一致性
滚动更新
滚动更新是 Deployment 的默认更新策略,通过逐步替换 Pod 实现无缝更新:
触发方式
- 修改 YAML 文件后使用
kubectl apply命令 - 使用
kubectl set image命令直接更新镜像
更新过程
- 首先创建少量新版本 Pod
- 当新 Pod 就绪后,删除部分旧版本 Pod
- 重复上述过程,直到所有旧版本 Pod 被替换
- 整个过程中服务不会中断
自定义更新参数
maxSurge:定义更新过程中允许创建的超出期望副本数的最大 Pod 数量maxUnavailable:定义更新过程中允许不可用的最大 Pod 数量- 通过这两个参数可以调整更新速度和资源使用
更新操作和监控
- 使用
kubectl rollout status观察更新进度 - 支持暂停更新(
kubectl rollout pause) - 支持继续更新(
kubectl rollout resume) - 支持回滚到之前版本(
kubectl rollout undo)
部署策略类型
除了默认的 滚动更新 策略,Kubernetes Deployment 还支持其他部署策略:
ReCreate(重建策略)
- 工作方式:先删除所有旧版本的 Pod,再创建新版本的 Pod
- 特点:更新过程中会有服务中断(旧 Pod 全删后新 Pod 才开始创建),但实现简单
- 适用场景:不允许新旧版本 Pod 同时存在的场景(如数据库升级)
InPlaceIfPossible(尽可能原地升级)
- 工作方式:优先在原有 Pod 内直接更新容器镜像(不重建 Pod),保留 Pod 的 IP、存储等资源
- fallback 机制:若无法原地更新(如涉及 Pod 规格变更),则回退到重建 Pod
- 特点:减少服务中断时间,降低资源重建成本
- 适用场景:希望保持 Pod 稳定性、减少网络/存储重新配置的场景
RollingUpdate(滚动更新)
- 默认策略:Kubernetes Deployment 的默认更新方式
- 详细说明:参见 滚动更新 笔记
与其他资源的关系
- Deployment 管理 ReplicaSet,ReplicaSet 管理 Pod
- 当更新 Deployment 时,会创建新的 ReplicaSet,并逐步将流量从旧 ReplicaSet 迁移到新 ReplicaSet
father:: kubernetes