Kubernetes 红黑部署实践

功能介绍

CODING 持续部署支持开箱即用的部署策略,比如红黑部署(也称蓝绿部署)、Highlander 部署。其中 Kubernetes 云服务类型在「部署 (Manifest)」阶段支持 红黑部署、Highlander部署和 dark 部署。

CODING CD 的部署策略不同于 Kubernetes 原生的部署策略。CODING 部署控制台将常用的部署策略抽象成易管理型和可重复使用的「执行阶段」。您不需要关心如何在每个 manifest 文件中配置实现部署策略,也不需要使用 kubectl 手工调用命令编辑资源对象标签(labels),只需要专注于 CODING 部署控制台中的「执行阶段」即可实现红黑部署。

红黑部署示例

我们将会在下文介绍如何基于一个简单的 Web 应用实现红黑部署。将会先使用简单的原理图说明演示实现原理。

首先,假设有一个单独的工作负载从负载均衡器接收流量。

接着,部署新版本 v2 的工作负载。

待新版本 v2 的工作负载稳定运行后,负载均衡器将流量发送给新版本承担工作负载。旧版本 v1 的工作负载保持在线,当新版本工作负载遇到任何问题时可以随时回滚(即将流量切换给旧版本,让其继续承担工作负载)。

下文将进入正式实践。

在部署控制台实现红黑部署

假设您已经部署了一个 Service:

kind: Service
apiVersion: v1
metadata:
  name: maggie-k8s-demo
  namespace: default
spec:
  selector:
    app: maggie-k8s-demo
  type: LoadBalancer
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8000

接下来配置部署流程。

部署流程中只有一个阶段用于部署 ReplicaSet,对应的 manifest 内容为:

apiVersion: apps/v1beta2
kind: ReplicaSet
metadata:
  name: maggie-k8s-demo
  namespace: default
  labels:
    applicationName: maggie-k8s-demo
spec:
  replicas: 1
  selector:
    matchLabels:
      applicationName: maggie-k8s-demo
  template:
    metadata:
      labels:
        applicationName: maggie-k8s-demo
    spec:
      containers:
        - name: primary
          image: lhkprod-docker.pkg.coding.net/cd-demo/release/spinnaker-kubernetes-demo
          ports:
            - containerPort: 8000
          readinessProbe:
            httpGet:
              path: /
              port: 8000

接着在部署流程配置页面添加部署 ReplicaSet 所需的 manifest 和 Docker 镜像制品:

接着配置触发器,将这些制品与触发器绑定。当存储在 GitHub 代码仓库中的 manifest 或存储在 Google Container Registry 中的 Docker 镜像被更新时,部署流程会被自动触发执行:

最后,配置「部署 (Manifest)」阶段。

在「部署 (Manifest)」阶段,我们将先前配置的 GitHub 制品作为阶段的 Manifest 制品,并将 Docker 镜像制品与阶段绑定。您需要重点关注 Rollout Strategy Options 部分,这里的选项将会决定:

  • 工作负载将绑定哪些 Services

  • 流量是否马上切换给新的工作负载

  • CODING CD 将如何处理集群中之前的工作负载

接着勾选 Traffic,表示一旦将 ReplicaSet 的 pods 部署完成,立即使 Service 发送流量给 pods。

最后,在策略(Strategy)处选择红黑部署,意味着让部署控制台禁用集群中同一命名空间下的 ReplicaSet。

如果更新 ReplicaSet manifest 或 Docker 镜像,将会触发部署流程执行并开始部署新版本的 ReplicaSet。部署控制台将会让新版本 ReplicaSet 处理流量,并禁用旧版本的 ReplicaSet。

集群页面信息

下文展示了在部署控制台【集群】页面红黑部署的数个过程状态图。

在部署之前:

新版本启动(还没处理流量):

流量已切换至新版本:

扩展阅读

其他部署策略示例

上一篇Deploy(Manifest) 阶段
文档是否对您有用?
感谢反馈有用
感谢反馈没用