Kubernetes 项目中一个非常重要的功能:Pod的“水平扩展 / 收缩”(horizontal scaling out/in)。
Deployment 同样通过“控制器模式”,来操作 ReplicaSet 的个数和属性,进而实现水平扩展 / 收缩
和滚动更新
这两个编排动作。
滚动更新
Deployment Controller 还会确保,在任何时间窗口内,只
有指定比例的 Pod 处于离线状态
。同时,它也会确保,在任何时间窗口内,只有指定比例的新 Pod 被创建出来
。这两个比例的值都是可以配置的,默认都是DESIRED
值的 25%。
Deployment 的控制器,实际上控制的是 ReplicaSet 的数目,以及每个 ReplicaSet的属性
Deployment 对应用进行版本控制的具体原理
设置错误的镜像版本
kubectl set image deployment/nginx-deployment nginx=nginx:1.91
查看ReplicaSet 的状态:
kubectl get rs
Deployment 回滚到上一个版本
kubectl rollout undo deployment [deployment-name]
查看每次 Deployment 变更对应的版本
kubectl rollout history deployment [deployment-name]
看到每个版本对应的 Deployment 的API 对象的细节
kubectl rollout history deployment/[deployment-name] --revision=2
回滚指定版本
kubectl rollout undo deployment/[deployment-name] --to-revision=2
Deployment 的多次更新操作,最后只生成一个 ReplicaSe
kubectl rollout pause deployment/nginx-deployment
# Deployment 进入“暂停”状态
kubectl rollout resume deploy/nginx-deployment
# Deployment“恢复”
你就可以随意使用 kubectl edit 或者 kubectl set image 指令,修改这个
Deployment 的内容了
Deployment 正处于“暂停”状态,所以我们对 Deployment 的所有修改,都不会触
发新的“滚动更新”,也不会创建新的 ReplicaSet。
Deployment 修改操作都完成之后,只需要再执行一条 kubectl rollout resume
指令,就可以把这个 Deployment“恢复”回来
Deployment 回滚到上一个版本
Deployment 的控制器,其实就是让这个旧ReplicaSet(hash=1764197365)再次“扩展”成 3 个 Pod,而让新的ReplicaSet(hash=2156724341)重新“收缩”到 0 个 Pod。
备注:Deployment 控制 ReplicaSet(版本),ReplicaSet 控制 Pod(副本数)。这个两层控制关系一定要牢记。
Deployment 实际上是一个两层控制器
。
首先,它通过ReplicaSet 的个数
来描述应用的版本.然后,它再通过ReplicaSet 的属性(比如 replicas 的值),来保证 Pod 的副本数量
。
image.png控制这些“历史”ReplicaSet 的数量
kubectl edit deployment nginx-deployment
网友评论