此文为学习《Kubernetes权威指南》的相关笔记
学习笔记:
Deployment具备升级的功能,允许我们在运行过程中升级Deployment到新的运行版本,与之对应的是,在某些情况下(比如新的Deployment不稳定时)可能需要将Deployment回滚到旧版本。
在默认情况下,所有Deployment的发布历史都被保留在系统中,以便我们随时进行回滚。
值得注意的是,只有在Deployment的Pod模板(spec.template)被更改时才会创建新的修订版本。
于此同时,K8s允许暂停(pause)Deployment的更新操作,然后进行配置修改,再进行恢复(resume)。
在后面的实操中可以看到,在恢复之前进行的所有配置修改,都将在同一次升级中完成,归为一个版本上。
这样的设定避免了进行复杂配置修改时,频繁出发更新操作的情况
一、查看kubectl rollout命令使用方法
kubectl rollout命令是回滚、暂停和恢复操作用到的主要命令
查看该命令详情如下
可以看到,该命令的操作的资源对象是:deployments\daemonsets\statefulsets
主要子命令是:
- history:查看历史版本
- pause:暂停更新
- restart:重启资源对象
- resume:恢复暂停的额资源对象
- status:查看资源对象状态
- undo:回滚到一个历史版本
# kubectl rollout -h
Manage the rollout of a resource.
Valid resource types include:* deployments
* daemonsets
* statefulsetsExamples:
# Rollback to the previous deployment
kubectl rollout undo deployment/abc
# Check the rollout status of a daemonset
kubectl rollout status daemonset/fooAvailable Commands:
history View rollout history
pause Mark the provided resource as paused
restart Restart a resource
resume Resume a paused resource
status Show the status of the rollout
undo Undo a previous rolloutUsage:
kubectl rollout SUBCOMMAND [options]Use "kubectl <command> --help" for more information about a given command.
Use "kubectl options" for a list of global command-line options (applies to all commands).
2、测试Deployment的回滚操作
1、创建nginx-deployment
与探究Deployment升级时创建的Deployment相同,创建3个带有nginx:1.7.9容器的Pod副本
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
name: nginx
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
需要注意的时,在创建时添加参数--record,可以在history命令提供的版本列表中看到这次版本更替的操作命令
# kubectl create -f rollback-deployment