示例yaml文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
apiVersion: apps/v1beta2
kind: Deployment
metadata:
name: nginx-test
labels:
app: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.16.1
imagePullPolicy: Always
ports:
- containerPort: 80
|
若要滚动升级需要在spec下添加滚动升级策略
1
2
3
4
5
6
|
minReadySeconds: 30 #滚动升级时runing状态30s后认为该pod就绪
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1 #滚动升级时会先启动1个pod
maxUnavailable: 1 #滚动升级时允许的最大Unavailable的pod个数
|
- minReadySeconds:
- Kubernetes在等待设置的时间后才进行升级
- 如果没有设置该值,Kubernetes会假设该容器启动起来后就提供服务了
- 如果没有设置该值,在某些极端情况下可能会造成服务服务不正常
- maxSurge:
- 升级过程中最多可以比原先设置多出的POD数量
- 例如:maxSurage=1,replicas=5,则表示Kubernetes会先启动1一个新的Pod后才删掉一个旧的POD,整个升级过程中最多会有5+1个POD。
- maxUnavaible:
- 升级过程中最多有多少个POD处于无法提供服务的状态
- 当
maxSurge
不为0时,该值也不能为0
- 例如:maxUnavaible=1,则表示Kubernetes整个升级过程中最多会有1个POD处于无法服务的状态。
执行:
1
2
|
$ kubectl apply -f nginx-test.yaml --
# Deployment升级的时候最好带上record参数,便于我们查看历史版本信息。
|
可以使用rollout命令来查看状态 、历史、暂停或继续升级、回滚等操作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
$ kubectl rollout status deployment nginx-test #查看状态
$ kubectl rollout pause deployment nginx-test #暂停升级
$ kubectl rollout resume deployment nginx-test #继续升级
$ kubectl rollout history deployment nginx-test #查看历史
$ kubectl rollout history deployment nginx-test --revision=3 #查看特定版本历史
$ kubectl rollout undo deployment nginx-test #回滚到上个版本
$ kubectl rollout undo deployment nginx-test --to-revision=2 #回滚到特定版本
|
Kubernetes默认是会将Deployments的每次改动操作生成一个新的RS,并保存下来的。不过你可以设置参数.spec.revisonHistoryLimit来来指定Deployment最多保留多少revision 历史记录。如果将该项设置为0,Deployment就不允许回退了。
参考引用链接:阳明的博客
Author
dylan
LastMod
2020-03-21
License
如需转载请注明文章作者和出处。谢谢!