应用编排与管理:Deployment
需求来源
背景问题
- 可不可以直接管理集群中所有的pod?
- 如何保证集群内可用pod数量
- 如何更新所有pod的镜像版本
- 更新过程中如何保证服务的可用性
- 更新过程中遇到问题如何快速归滚
Deployment: 管理部署发布的控制器
- 定义一组Pod的期望数量,controller会维持Pod数量和期望数量一直
- Pod发布的方式,controller会按照给定策略更新Pod,保证更新过程中不可用的pod在限定范围内
- 如果发布有问题,支持回滚
用例解读
- replicas:终态Pod数量
- template:pod模板
- labels:标签
- selector:pod选择器
- pod image:镜像版本
查看Deployment状态
查看Pod
更新镜像
快速回滚
Deployment Status
架构设计
管理模式
- Deployment只负责挂你了不同版本的replicaSet,由ReplicaSet管理Pod副本数
- 每个ReplicaSet对应了Deploymeny template的一个版本
- 一个ReplicaSet下的Pod都是相同版本
Deployment控制器
- check从事件队列中拿出事件之后会检查replicas的版本。版本没变就只是数量上的变化。
ReplicaSet控制器
- ReplicaSet控制器只会管理Pod数量
扩容模拟
发布模拟
- Deployment的副本数由ReplicaSet管理
- 修改 Deployment ReplicaSet之后,controller会把replicas同步到当前版本的ReplicaSet中,由ReplicaSet执行扩容/缩容
回滚模拟
Deployment中的字段解析
- MinReadySeconds:会根据pod ready字段来判断是否可用。会在pod状态在MinReadySeconds之后才认为Pod是可用的
- revisionHistoryLimiy: 保留历史revision(replicaSet)的数量,默认值为10
- paused:表示Deployment只做数量变化,不做新的发布
- progressDeadlineSeconds:判断Deployment status condition为failed的最大时间
- MaxUnavailable:回滚过程中最多有多少个Pod不可用
- MaxSurge:滚动过程中最多存在多少个Pod超过期望Replicas数量