蓝绿部署是一个部署模型,该模型使用两台 Docker 主机,您可以在 Kubernetes 集群中以相同方式部署和配置这两台主机。使用蓝绿部署模型,可以减少 Code Stream 中的管道部署应用程序时环境中出现的停机。

部署模型中的蓝部署实例和绿部署实例分别用于不同用途。一次只有一个实例可以接受部署应用程序的实时流量,而且每个实例在特定时间接受该流量。蓝部署实例接收应用程序的第一个版本,而绿部署实例接收第二个版本。

蓝绿部署环境中的负载均衡器将确定实时流量在部署应用程序时采用的路由。使用蓝绿部署模型,您的环境将保持正常运行,用户不会注意到任何停机,而且管道会持续将应用程序集成并部署到生产环境。

Code Stream 中创建的管道以两个阶段表示蓝绿部署模型。一个是开发阶段,另一个是生产阶段。

Code Stream 管道工作区支持使用 Docker 和 Kubernetes 执行持续集成任务和自定义任务。

有关配置工作区的信息,请参见配置管道工作区

表 1. 蓝绿部署的开发阶段任务
任务类型 任务
Kubernetes 为蓝绿部署创建命名空间。
Kubernetes 为 Docker Hub 创建密钥。
Kubernetes 创建用于部署应用程序的服务。
Kubernetes 创建蓝部署。
Poll 验证蓝部署。
Kubernetes 移除命名空间。
表 2. 蓝绿部署的生产阶段任务
任务类型 任务
Kubernetes 绿部署将从蓝部署获取服务详细信息。
Kubernetes 获取绿部署副本集的详细信息。
Kubernetes 创建绿部署,并使用密钥来提取容器映像。
Kubernetes 更新服务。
Poll 验证部署在生产 URL 上是否成功。
Kubernetes 完成蓝部署。
Kubernetes 移除蓝部署。

要使用您自己的蓝绿部署模型来部署应用程序,请在 Code Stream 中创建包含两个阶段的管道。第一个阶段包含将应用程序部署到蓝部署实例的蓝部署任务,而第二个阶段包含将应用程序部署到绿部署实例的绿部署任务。

可以使用 CICD 智能管道模板创建管道。模板将为您创建各个管道阶段和任务,并将部署选择包括在内。

如果您手动创建管道,则必须计划管道阶段。例如,请参见在手动添加任务之前在 Code Stream 中规划 CICD 本地构建

在此示例中,您使用 CICD 智能管道模板来创建蓝绿部署管道。

前提条件

  • 确认您可以访问 AWS 上正常工作的 Kubernetes 集群。
  • 确认您已设置一个蓝绿部署环境,并且已将蓝部署实例和绿部署实例配置为完全相同。
  • Code Stream 中创建一个 Kubernetes 端点,用于将应用程序映像部署到 AWS 上的 Kubernetes 集群。
  • 熟悉如何使用 CICD 智能管道模板。请参见在使用智能管道模板之前在 Code Stream 中计划 CICD 本机构建

过程

  1. 单击管道 > 新建管道 > 智能模板 > CI/CD 模板
  2. 输入 CICD 智能管道模板 CI 部分的信息,然后单击下一步
  3. 完成智能管道模板的 CD 部分
    1. 选择用于应用程序部署的环境。例如,DevProd
    2. 选择管道将用于部署的服务。
    3. 在“部署”区域,选择“开发”环境和“生产”环境对应的集群端点。
    4. 对于“生产部署模型”,选择 蓝绿部署,然后单击创建

    在智能管道模板中,选择服务、部署,并单击“蓝绿部署”作为生产部署模型。

结果

恭喜!您已使用智能管道模板创建了一个管道,该管道可将应用程序部署到 AWS 上的 Kubernetes 生产集群中的蓝绿部署实例。

示例: 适用于部分蓝绿部署任务的示例 YAML 代码

蓝绿部署的 Kubernetes 管道任务中显示的 YAML 代码类似以下创建命名空间、服务和部署的示例。如果需要从专有存储库下载映像,则 YAML 文件必须包含具有 Docker 配置密钥的部分。请参见在使用智能管道模板之前在 Code Stream 中计划 CICD 本机构建中的 CD 部分。

智能管道模板创建管道之后,您可以根据自己的部署需求修改任务。

用于创建示例命名空间的 YAML 代码:

apiVersion: v1
kind: Namespace
metadata:
  name: codestream-82855
  namespace: codestream-82855

用于创建示例服务的 YAML 代码:

apiVersion: v1
kind: Service
metadata:
  labels:
    app: codestream-demo
  name: codestream-demo
  namespace: bluegreen-799584
spec:
  minReadySeconds: 0
  ports:
  - port: 80
  selector:
    app: codestream-demo
    tier: frontend
  type: LoadBalancer

用于创建示例部署的 YAML 代码:

apiVersion: extensions/v1
kind: Deployment
metadata:
  labels:
    app: codestream-demo
  name: codestream-demo
  namespace: bluegreen-799584
spec:
  minReadySeconds: 0
  replicas: 1
  selector:
    matchLabels:
      app: codestream-demo
      tier: frontend
  template:
    metadata:
      labels:
        app: codestream-demo
        tier: frontend
    spec:
      containers:
      - image: ${input.image}:${input.tag}
        name: codestream-demo
        ports:
        - containerPort: 80
          name: codestream-demo
      imagePullSecrets:
      - name: jfrog-2
      minReadySeconds: 0

下一步做什么

要了解有关如何使用 Code Stream 的更多信息,请参见Code Stream 使用教程

要回滚部署,请参见如何在 Code Stream 中回滚部署

有关其他参考,请参见 供 Code Stream 管理员和开发人员使用的更多资源