Deployment 简介
deployment 是用来管理无状态应用的,面向的集群的管理,而不是面向的是一个不可变的个体,举例:有一群鸭子,要吃掉一个,只需要再放一个新的鸭仔就好了,不会影响什么,而有状态的应用,就同时养三条狗一样,而每个狗都是无法代替用新的事物代替的,因为有“感情”这个状态在里面。
Deployment 为Pod 和 ReplicaSet 之上,提供了一个声明式定义(declarative)方法,用来替代以前的ReplicationController 来方便的管理应用。
你只需要在 Deployment 中描述您想要的目标状态是什么,Deployment controller 就会帮您将 Pod 和ReplicaSet 的实际状态改变到您的目标状态。您可以定义一个全新的 Deployment 来
创建 ReplicaSet 或者删除已有的 Deployment 并创建一个新的来替换。也就是说Deployment是可以管理多个ReplicaSet的,如下图:
典型的应用场景包括:
- 定义Deployment来创建Pod和ReplicaSet,使用Deployment来创建ReplicaSet。ReplicaSet在后台创建pod。检查启动状态,看它是成功还是失败。
- 然后,通过更新Deployment的PodTemplateSpec字段来声明Pod的新状态。这会创建一个新的ReplicaSet,Deployment会按照控制的速率将pod从旧的ReplicaSet移动到新d的ReplicaSet中。
- 如果当前状态不稳定,回滚到之前的Deployment revision。每次回滚都会更新Deployment的revision。
- 扩容Deployment以满足更高的负载。
- 暂停Deployment来应用PodTemplateSpec的多个修复,然后恢复上线。
- 根据Deployment 的状态判断上线是否hang住了。
- 清除旧的不必要的 ReplicaSet。
Deployment 升级
kubectl explain deploy.spec.strategy 策略订是配置怎么滚动升级的,支持两种策略:
- Recreate 重建式更新,就是删一个建一个。
- rollingUpdate 滚动更新,简单定义 更新期间pod最多有几个等
rollingUpdate 有两种策略
- maxSurge 指定超出副本数有几个,两种方式:1、指定数量 2、百分比
- maxUnavailable 最多有几个不可用
Deployment 历史版本
kubectl explain deploy.spec.revisionHistoryLimit
最多保存多少个历史版本,默认是10个
Deployment 模板
kubectl explain deploy.spec.template
通过template 创建我们的目标状态
类似pod的定义(包含 spec 、 metadata)
spec <Object> Specification of the desired behavior of the pod. More info: https:// git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status/ metadata <Object> Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata