书籍来源:cloudman《每天5分钟玩转Kubernetes》
一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持!
kubectl apply每次更新应用时,Kubernetes都会记录下当前的配置,保存为一个revision(版次),这样就可以回滚到某个特定 revision。
默认配置下,Kubernetes只会保留最近的几个revision,可以在Deployment配置文件中通过revisionHistoryLimit属性增加revision数量。
下面实践回滚功能。应用有三个配置文件,即httpd.v1.yml、httpd.v2.yml和httpd.v3.yml,分别对应不同的httpd镜像2.4.16、2.4.17 和2.4.18,如下所示。
[root@k8s-master ~]# cat httpd.v1.yml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: httpd
spec:
  replicas: 3
  selector:
    matchLabels:
      app: httpd
  template:
    metadata:
      labels:
        app: httpd
    spec:
      containers:
      - name: httpd
        image: httpd:2.4.16
        ports:
        - containerPort: 80
[root@k8s-master ~]# cat httpd.v2.yml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: httpd
spec:
  replicas: 3
  selector:
    matchLabels:
      app: httpd
  template:
    metadata:
      labels:
        app: httpd
    spec:
      containers:
      - name: httpd
        image: httpd:2.4.17
        ports:
        - containerPort: 80
[root@k8s-master ~]# cat httpd.v3.yml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: httpd
spec:
  replicas: 3
  selector:
    matchLabels:
      app: httpd
  template:
    metadata:
      labels:
        app: httpd
    spec:
      containers:
      - name: httpd
        image: httpd:2.4.18
        ports:
        - containerPort: 80
[root@k8s-master ~]#通过kubectl apply部署并更新应用,如图所示。

--record的作用是将当前命令记录到revision记录中,这样我们就可以知道每个revison对应的是哪个配置文件了。通过kubectl rollout history deployment httpd查看revison历史记录,如图所示。

CHANGE-CAUSE就是--record的结果。如果要回滚到某个版本,比如revision 1,可以执行命令kubectl rollout undo deployment httpd --to-revision=1,如图所示。

此时,revison历史记录也会发生相应变化,如图所示。

revison 1变成了revison 4。不过我们可以通过CHANGE-CAUSE知道每个revison的具体含义,所以一定要在执行kubectl apply时加上--record参数。









