ACK的灰度发布功能除了手动发布方式外,还提供了自动发布方式。自动发布模式可以让您全自动化地完成灰度发布流程。

步骤一:创建测试应用

本文使用以下YAML文件模板作为测试示例。该示例使用Deployment部署一个Web应用,并通过路由(Ingress)向外暴露服务(Service)。有关如何使用YAML模板创建应用的具体步骤,请参见通过编排模板创建Linux应用

apiVersion: apps/v1
kind: Deployment
metadata:
  name: podinfo
  labels:
    app: podinfo
spec:
  replicas: 4
  minReadySeconds: 5
  revisionHistoryLimit: 5
  progressDeadlineSeconds: 60
  strategy:
    rollingUpdate:
      maxUnavailable: 1
    type: RollingUpdate
  selector:
    matchLabels:
      app: podinfo
  template:
    metadata:
      labels:
        app: podinfo
    spec:
      containers:
      - name: podinfod
        image: registry.cn-hangzhou.aliyuncs.com/acs/rollouts-demo:green
        imagePullPolicy: IfNotPresent
        ports:
          - name: http
            containerPort: 8080
            protocol: TCP
        readinessProbe:
          tcpSocket:
            port: 8080
          initialDelaySeconds: 5
          timeoutSeconds: 5

---

apiVersion: v1
kind: Service
metadata:
  name: my-podinfo-svc
spec:
  selector:
    app: podinfo
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080

---

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: podinfo
  labels:
    app: podinfo
spec:
  rules:
    - host: app.example.com
      http:
        paths:
          - backend:
              serviceName: my-podinfo-svc
              servicePort: 80

步骤二:创建灰度发布

创建灰度发布时,设置上述创建的Deployment、Service、Ingress,然后设置发布方式为自动发布。有关创建灰度发布的具体操作,请参见创建灰度发布
注意
您在配置自动发布模式时,需要注意以下两点:
  • 和手动发布不同,使用自动发布模式时,您需要在创建灰度发布的时候编辑发布对象里面的YAML以设置需要更新的新版本Deployment。本文示例将发布的版本镜像blue修改成green
  • 您需要设置权重调整步长。该值设置每次以多少步长来调整新版本的权重流量。本文以20为例,起初会以0%的流量切至新版本。随着新版本的Pod创建出来后,第一次切换20%的流量至新版本Pod,然后随着新版本的Pod数量变多,流量逐步切换到40%,60%,80%,直到100%。
blue-green

完成创建灰度发布后,发布流程会全自动化地进行。当一个新版本的Pod创建出来后,流量切换20%至新版本Pod,此时旧版本的一个Pod会被删除,然后系统会再继续创建一个新的Pod删除一个旧版Pod,以此类推,直到完毕。