-
Notifications
You must be signed in to change notification settings - Fork 3
/
rolling-update滚动升级
126 lines (97 loc) · 2.97 KB
/
rolling-update滚动升级
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
Kubernetes中滚动升级的命令如下:
# kubectl rolling-update my-test-v1 -f my-test-v2-rc.yaml --update-period=10s
升级开始后,首先根据定义文件创建v2版本的RC,然后每隔10s(--update-period=10s)逐步增加v2版本的Pod副本数,并逐步减少v1版本Pod的副本数。
升级完成之后,删除v1版本的RC,保留v2版本的RC,从而实现滚动升级。升级过程中如发生错误而导致中途退出,可以选择继续升级。
Kubernetes能够智能地判断升级中断之前的状态,然后紧接着继续执行升级。
当然也可以进行回退,命令如下:
# kubectl rolling-update my-test-v1 -f my-test-v2-rc.yaml --update-period=10s --rollback
回退的方式实际就是升级的逆操作,即逐步增加v1.0版本Pod的副本数,逐步减少v2版本Pod的副本数。
下面配置添加了更新策略,nginx版本从1.79更新到最新版
cat << EOF > deploy-demo.yaml
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: nginx-deploy
labels:
k8s-app: nginx-demo
spec:
replicas: 3
revisionHistoryLimit: 15
minReadySeconds: 5
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
EOF
详细解析:
revisionHistoryLimit: 15 回滚数量控制,保留15个
minReadySeconds: 5
strategy: 升级策略
# indicate which strategy we want for rolling update
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
minReadySeconds:
Kubernetes在等待设置的时间后才进行升级
如果没有设置该值,Kubernetes会假设该容器启动起来后就提供服务了
如果没有设置该值,在某些极端情况下可能会造成服务服务正常运行
maxSurge:
升级过程中最多可以比原先设置多出的POD数量
例如:maxSurge=1,replicas=5,则表示Kubernetes会先启动1一个新的Pod后才删掉一个旧的POD,整个升级过程中最多会有5+1个POD。
maxUnavaible:
升级过程中最多有多少个POD处于无法提供服务的状态
当maxSurge不为0时,该值也不能为0
例如:maxUnavaible=1,则表示Kubernetes整个升级过程中最多会有1个POD处于无法服务的状态。
完整示例:
cat << EOF > service-demo.yaml
---
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: nginx-deploy
labels:
k8s-app: nginx-demo
spec:
replicas: 3
minReadySeconds: 5
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.12.2
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: myservice
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
name: myapp-http
EOF