Deployment

2019-12-11  本文已影响0人  魔曦帝天

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 和 Pod 的关系
备注:Deployment 控制 ReplicaSet(版本),ReplicaSet 控制 Pod(副本数)。这个两层控制关系一定要牢记。

Deployment 实际上是一个两层控制器
首先,它通过ReplicaSet 的个数来描述应用的版本.然后,它再通过ReplicaSet 的属性(比如 replicas 的值),来保证 Pod 的副本数量

控制这些“历史”ReplicaSet 的数量
kubectl edit deployment nginx-deployment

image.png
上一篇 下一篇

猜你喜欢

热点阅读