
示例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
    如需转载请注明文章作者和出处。谢谢!