8WoHsO.jpg

示例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
$ 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就不允许回退了

参考引用链接阳明的博客