蓝绿部署是一个部署模型,该模型使用两台 Docker 主机,您可以在 Kubernetes 集群中以相同方式部署和配置这两台主机。使用蓝绿部署模型,可以减少 Code Stream 中的管道部署应用程序时环境中出现的停机。
部署模型中的蓝部署实例和绿部署实例分别用于不同用途。一次只有一个实例可以接受部署应用程序的实时流量,而且每个实例在特定时间接受该流量。蓝部署实例接收应用程序的第一个版本,而绿部署实例接收第二个版本。
蓝绿部署环境中的负载均衡器将确定实时流量在部署应用程序时采用的路由。使用蓝绿部署模型,您的环境将保持正常运行,用户不会注意到任何停机,而且管道会持续将应用程序集成并部署到生产环境。
在 Code Stream 中创建的管道以两个阶段表示蓝绿部署模型。一个是开发阶段,另一个是生产阶段。
Code Stream 管道工作区支持使用 Docker 和 Kubernetes 执行持续集成任务和自定义任务。
有关配置工作区的信息,请参见配置管道工作区。
任务类型 | 任务 |
---|---|
Kubernetes | 为蓝绿部署创建命名空间。 |
Kubernetes | 为 Docker Hub 创建密钥。 |
Kubernetes | 创建用于部署应用程序的服务。 |
Kubernetes | 创建蓝部署。 |
Poll | 验证蓝部署。 |
Kubernetes | 移除命名空间。 |
任务类型 | 任务 |
---|---|
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 本机构建。
过程
结果
恭喜!您已使用智能管道模板创建了一个管道,该管道可将应用程序部署到 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 管理员和开发人员使用的更多资源。