应用编排原理

本文主要介绍如何使用云效 AppStack 应用编排能力进行部署环境。

应用编排原理

云效 AppStack 应用编排用于定义应用部署架构,支持 Kubernetes 和主机部署场景。编排生效逻辑如下:

image

云效 AppStack 以面向终态的方式定义应用环境部署配置。环境部署时,读取相应类型的编排文件,并使用部署参数替换占位符,渲染成最终生效的 YAML 文件(K8s 部署)或脚本(主机部署),下发到环境关联的集群或主机上执行部署操作。

  • 应用编排:定义应用的部署架构,支持 K8s YAML 和主机脚本部署架构。

  • 编排组件:K8s 场景是一个可独立部署的资源,对应一个 K8s YAML 文件;主机场景是一个可独立部署的服务,对应一个或一组软件包部署和相关依赖信息的配置。

  • 占位符:应用编排文件中用于动态替换内容的固定位置。

  • 变量:一个 key/value 键值对。

  • 变量组:一组变量的集合。

  • 应用编排版本:每次修改编排文件都会生成一个版本,方便查阅和回滚。

云效 AppStack 提供占位符和变量组机制,您可以使用占位符替换编排文件中的部分关键字,以实现多环境差异化部署。AppStack 预置了一些常用的占位符,您也可以根据需要添加自定义占位符。

场景示例

  1. 使用多个 K8s Namespace 隔离多个环境

    Kubernetes 部署场景下,线下环境可能使用同一个 K8s 集群。通常会使用多个命名空间(Namespace)来隔离多套环境,如开发环境使用 dev,测试环境使用 test(生产环境通常是单独的集群)。在 YAML 文件中将 namespace 关键字的值替换为占位符 {{ .Values.namespace }},占位符赋值为变量${namespace},在开发、测试环境分别使用值 dev、test,提交部署时进行变量替换,应用环境将部署到指定的 Kubernetes 命名空间。

  2. 为线下环境与生产环境在不同的端口启动服务

    主机部署场景下,线下环境与生产环境可能需要在不同的端口启动服务。在主机启动脚本中将启动端口号定义成{{ .Values.port }},占位符赋值为变量 ${port},在开发、测试环境分别使用值 8080、8081,提交部署时进行变量替换,应用环境将在指定的端口启动服务。

部署方式

云效 AppStack 应用编排支持三种部署方式

  • Kubernetes 部署(适用于云原生场景),具体使用说明可参考 Kubernetes 部署编排

  • 主机部署(适用于传统主机场景),具体使用说明可参考 主机部署编排

  • Kubernetes 和主机混合部署(适用于转型场景)。

    高的 - 2024-12-18T182504.384.png

在应用架构转型时,您可以新增或删除某种编排方式,实现平滑迁移。

编排配置变更与环境部署

应用部署配置变更需要逐环境验证后发布到生产环境。云效AppStack支持在编排更新时增加环境标签,标识修改版本。环境部署时可选编排版本,不影响生产发布。

以下以 myapp 应用为例,描述编排配置变更流程。myapp 使用 Kubernetes YAML 文件编排,有测试、预发、生产三套环境。初始版本为 V1,需修改为 V2(如 containerPort 从 80 改为 8080)。

image.png

  1. 进入应用编排,修改 YAML 文件生成 V2 版本,确认无误后标识为测试环境

  2. 部署测试环境,选择 V2 版本进行测试验证。

image.png

高的 - 2024-12-18T173044.493.png

高的 - 2024-12-18T173109.530.png

  1. 部署预发环境,选择 V2 版本进行预发验证。

  2. 测试验证通过后,标识为预发环境

image.png

  1. 预发验证通过后,标识为生产环境

  2. 生产发布时,提示有新版本,手动创建部署单,选择 V2 版本发布到生产。

image.png

高的 - 2024-12-18T173210.164.png

高的 - 2024-12-18T173240.589.png

至此,完成了一次编排配置变更,从测试验证、预发部署到最终发布生产的全部过程。