kubernetes 每次更新资源会记录资源的历史版本, 方便我们进行回滚操作。真的k8s解决了很多运维的痛点问题, 想起来以前没有用k8s的时候,用jenkins和ansible来做的发布和回滚…

查看历史版本

1
2
3
4
5
6
7
8
kubectl rollout history deployment nfs-client-provisioner

deployment.apps/nfs-client-provisioner
REVISION CHANGE-CAUSE
1 <none>
2 <none>
4 <none>
5 <none>

这里列出的就是版本, 为什么没有3, 因为从版本4回滚到了版本3, 则版本3就变成了版本5

查看指定版本详情

1
kubectl rollout history deployment nfs-client-provisioner --revision=4

也可以以yaml格式输出

1
kubectl rollout history deployment nfs-client-provisioner --revision=4 -o yaml

回滚到指定版本

1
kubectl rollout undo deployment nfs-client-provisioner --to-revision=4

回滚到上一个版本可以不用增加--to-revision=4参数, 默认就是回滚上一个版本

记录版本变化

执行命令记录变化

在第一步查看历史版本, CHANGE-CAUSE 显示的是none, 如果需要记录kubectl执行的命令,则执行命令的时候需要添加参数

1
kubectl set image deployment/nginx-deployment nginx=nginx:1.16.1 --record=true

这样就会把当前的命令记录到版本的CHANGE-CAUSE这一栏

设置历史版本数量

在yml文件里面可以设置历史版本的数量, 比如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
revisionHistoryLimit: 5
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80