梗概

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