Deployment 的清理策略
在 Deployment 中配置 spec.revisionHistoryLimit
字段,可以指定其 清理策略。该字段用于指定 Deployment 保留旧 ReplicaSet 的个数,即更新 Pod 前的版本个数。该字段的默认值是 10
。
创建 revisionhistory-demo.yaml
文件,并在其中输入以下内容:
apiVersion: apps/v1
kind: Deployment
metadata:
name: revisionhistory-demo
labels:
app: nginx
spec:
revisionHistoryLimit: 1
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
🚀 这里将
.spec.revisionHistoryLimit
字段设置成 1 1 1,即只保留 1 1 1 个旧版本。
运行以下命令创建 Deployment。
kubectl apply -f revisionhistory-demo.yaml
将镜像的版本从 nginx:1.14
升级到 nginx:1.7.9
。
kubectl --record deployment.apps/revisionhistory-demo \
set image deployment.apps/revisionhistory-demo nginx=nginx:1.7.9
执行以下命令追溯修改的历史。
kubectl rollout history deployment revisionhistory-demo
输出的信息如下:
将镜像的版本从 nginx:1.7.9
升级到 nginx:1.9.1
。
kubectl --record deployment.apps/revisionhistory-demo \
set image deployment.apps/revisionhistory-demo nginx=nginx:1.9.1
执行以下命令追溯修改的历史。
kubectl rollout history deployment revisionhistory-demo
输出的信息如下:
🚀 由于
.spec.revisionHistoryLimit
字段被设置成了 1 1 1,所以 Deployment 控制器只会保留 1 1 1 个旧版本,revision 1
版本已经被自动清除了。
将 Deployment 回滚到 revision 1
版本。
kubectl rollout undo deployment revisionhistory-demo --to-revision=1
这时将出现以下错误信息:
将 Deployment 回滚到 revision 2
版本。
kubectl rollout undo deployment revisionhistory-demo --to-revision=2
重新查看 Deployment 的修改历史。
kubectl rollout history deployment revisionhistory-demo
输出的信息如下:
🚀 可以看到,即使执行了回滚操作,也会在修改历史记录中增加一个新的版本。