文章目录
- 一、概念介绍
- 二、配置介绍
- 三、版本生成测试
- 四、版本回滚测试
一、概念介绍
-
什么是控制器:在k8s中,控制器是一种用于控制和管理Pod的管理器,包括Deployment、ReplicaSet、StatefulSet等。
-
什么是控制器版本管理:是指对于同一个控制器,在进行更新和回滚操作时,可以记录和管理相应的版本信息。每个版本都会有一个固定的版本号,以及与此版本相关的配置和参数信息。这样,当需要回滚到某个版本时,可以很方便地找到相应的版本进行操作,而且也不会出现配置信息丢失的情况。
-
控制器版本如何生成:当执行kubectl apply或edit命令来更新一个控制器时,默认情况下会创建一个新的版本,而之前的版本会被保留。通过kubectl rollout history命令可以查看控制器的版本历史记录,并且可以基于版本号进行回滚操作。
-
控制器版本管理优势:控制器版本管理能够提高系统的可靠性和稳定性。在进行更新操作时,k8s会保存历史相关版本,新发布的版本有问题,可以迅速回滚到之前的版本,从而避免应用程序因为操作失误或者意外故障而出现问题。
二、配置介绍
-
控制器版本配置:spec.revisionHistoryLimit
ps:当超过设置的数量,旧的版本将会被清除。如果设置为0,则无法进行回滚
-
statefulset控制器更新策略
ps:利用滚动更新中的partition属性,可以实现简易的灰度发布的效果。例如我们有5个pod如果当前 partition设置为3那么此时滚动更新时,只会更新那些序号>=3的pod。利用该机制,我们可以通过控制partition的值,来决定只更新其中—部分pod,确认没有问题后再主键增大更新的pod数量,最终实现全部pod更新
#默认更新策略: updateStrategy: rollingUpdate: partition: 0 type: RollingUpdate #1.RollingUpdate 滚动更新:从下往上更新,倒序更新。2.OnDelete 手动更新,需要删除一个pod才会触发更新策略
三、版本生成测试
-
创建nginx控制器:kubectl create deployment nginx --image=nginx
-
修改配置,添加存活探针:kubectl edit deployment nginx
livenessProbe: httpGet: path: /started.html port: 80 failureThreshold: 3 periodSeconds: 10 successThreshold: 1 timeoutSeconds: 5
-
每次修改deployment后,都会生成一个新的Replicaset控制器:kubectl get rs
-
查看历史版本信息:kubectl rollout history deployment/nginx
-
查看历史版本,某个版本的具体信息:kubectl rollout history deployment/控制器 --revision=版本号
ps:可以看出版本1和版本2的区别,就是添加了存活探针配置
四、版本回滚测试
-
回退到版本1:kubectl rollout undo deployment/控制器 --to-revision=版本号
-
查看版本滚动情况:kubectl rollout status deployment 控制器
-
再次查看版本历史:kubectl rollout history deployment/nginx
ps:可以看到版本1被移除了,新增了版本3。实际上版本3就是版本1,因为是回滚版本。
-
由于有的时候我们需要修改很多次资源配置,如果我们只想产生一次资源历史版本,则可以再修改前先暂停记录版本,等待升级版本结束后,再重新启用
1. 暂停记录版本:kubectl rollout pause deploy 控制器 2. 重新启用版本:kubectl rollout resume deploy 控制器