《Deployment 控制器》系列,共包含以下几篇文章:
- Deployment 控制器
- Deployment 的创建和使用(实战)
- Deployment 的状态
- Deployment 的清理策略及编写规则
- 应用的部署(一):金丝雀部署
- 应用的部署(二):蓝绿部署 & 滚动部署
😊 如果您觉得这篇文章有用 ✔️ 的话,请给博主一个一键三连 🚀🚀🚀 吧 (点赞 🧡、关注 💛、收藏 💚)!!!您的支持 💖💖💖 将激励 🔥 博主输出更多优质内容!!!
Deployment 的清理策略及编写规则
1.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
输出的信息如下:
🚀 可以看到,即使执行了回滚操作,也会在修改历史记录中增加一个新的版本。
2.Deployment 的编写规则
从 deployment-demo.yaml
文件和 revisionhistory-demo.yaml
文件可以看出,与创建 Kubernetes 的其他资源一样,创建 Deployment 也需要指定 apiVersion
、kind
和 metadata
字段,另外还需要指定 .spec
字段。
apiVersion
:指定创建 Deployment 对象所使用的 Kubernetes API 版本。kind
:指定创建的对象的类别,这里是 Deployment。metadata
:指定 Deployment 对象的名称和标签信息等。.spec
:指定 Pod 的匹配信息和 Pod 的模板信息。其中只有.spec.selector
和.spec.template
是必需的字段。.spec.selector
:该字段通过标签的匹配,将 Deployment 对象与对应的 Pod 进行关联。因此,在定义标签时应保证其唯一性。.spec.template
:该字段用于创建 Pod 的模板,语法规则与创建 Pod 的语法规则完全相同。