Kubernetes 分批发布

Kubernetes 原生的应用升级基于终态模型,一旦发布出现问题无法暂停,只能通过YAML回滚应用。为了使 Kubernetes 应用发布过程更加可控。Flow 提供了 Kubernetes 分批发布的能力,以让发布过程更加可控。 

背景信息

  • Kubernetes 使用 Service 在集群内暴露服务 。

  • Service 与Deployment 的 Pod 实例之间使用 Lables 进行关联,Service 的流量会转到关联的 Deployment 实例 。

  • 假设 serviceA 关联了应用 app-v1 并且其 Replicas 副本数 > 1 。分批发布开始创建 app-v2 并继承 app-v1 的所有标签,此时 serviceA 的流量会随机转发到 v1 和 v2。 

  • 分批发布过程通过扩容 app-v2 和缩容 app-v1 实现应用的发布 。发布过程暂停时,用户可以选择继续发布,直到 app-v2 达到预期状态 。或者回滚移除 app-v2 并恢复 app-v1 的副本数。

前提条件

  • Deployment 上不能关联 HPA,否则会导致旧版本无法缩容,发布可能超时失败。

  • Deployment 的 labels 内包含有 Service 的全部 selector labels,例如:

    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        run: spring-boot-sample
      name: spring-boot-sample
    spec:
      replicas: 2
      selector:
        matchLabels:
          run: spring-boot-sample
      template:
        metadata:
          labels:
            run: spring-boot-sample
        spec:
          containers:
          - image: ${IMAGE}
            name: app
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: spring-boot-service
      labels:
        test: test
        labele2: label
    spec:
      ports:
        - name: http
          port: 8080
          protocol: TCP
          targetPort: 8080
        - name: https
          port: 443
          protocol: TCP
          targetPort: 443
      selector:
        run: spring-boot-sample
      sessionAffinity: None
      type: ClusterIP

添加分批发布任务

在流水线Flow 控制台,选择目标流水线,添加“Kubernetes 分批发布”任务。Group@1x

配置发布任务

在目标流水线任务步骤中,配置Kubernetes 分批发布任务。

参数

说明

集群连接

使用集群连接,连接到自定义Kubernetes或者阿里云容器服务集群,如果第一次使用可以新建连接,详情可参见Kubernetes 服务连接

Kubectl版本

Kubectl 版本为当前步骤中使用的kubectl客户端版本。请选择与集群适配的Kubectl版本。

命名空间

选择Kubernetes集群中目标自定义命名空间或者默认命名空间。

服务Service

分批发布中使用Service关联多个应用版本。

关联 Workloads 类型

选择您要升级的Workloads(工作负载)类型。就是Kubernetes集群中的资源对象类型。

分批策略

分批暂停时用户可以对发布进行验证并选择继续发布或者回滚。

分批数

分批发布批次。

容器名称

Kubernetes一个应用中可能存在多个容器,这里需要指定具体的容器名称。

镜像

将使用该镜像升级对应的容器版本。

Group@1x

执行分批发布

  1. 保存并运行流水线任务,当第一批发布完成,第一批暂停后,卡片会显示暂停状态,并提示用户继续下一批次或者回退。Group@1x

  2. 在人工验证完成,选择继续发布,后续批次将会执行发布完成。Group@1x