本文主要介绍如何使用云效 AppStack 应用编排能力进行部署环境。
应用编排原理
云效 AppStack 应用编排用于定义应用部署架构,支持 Kubernetes 和主机部署场景。编排生效逻辑如下:
云效 AppStack 以面向终态的方式定义应用环境部署配置。环境部署时,读取相应类型的编排文件,并使用部署参数替换占位符,渲染成最终生效的 YAML 文件(K8s 部署)或脚本(主机部署),下发到环境关联的集群或主机上执行部署操作。
应用编排:定义应用的部署架构,支持 K8s YAML 和主机脚本部署架构。
编排组件:K8s 场景是一个可独立部署的资源,对应一个 K8s YAML 文件;主机场景是一个可独立部署的服务,对应一个或一组软件包部署和相关依赖信息的配置。
占位符:应用编排文件中用于动态替换内容的固定位置。
变量:一个 key/value 键值对。
变量组:一组变量的集合。
应用编排版本:每次修改编排文件都会生成一个版本,方便查阅和回滚。
云效 AppStack 提供占位符和变量组机制,您可以使用占位符替换编排文件中的部分关键字,以实现多环境差异化部署。AppStack 预置了一些常用的占位符,您也可以根据需要添加自定义占位符。
场景示例
使用多个 K8s Namespace 隔离多个环境
Kubernetes 部署场景下,线下环境可能使用同一个 K8s 集群。通常会使用多个命名空间(Namespace)来隔离多套环境,如开发环境使用 dev,测试环境使用 test(生产环境通常是单独的集群)。在 YAML 文件中将 namespace 关键字的值替换为占位符
{{ .Values.namespace }}
,占位符赋值为变量${namespace}
,在开发、测试环境分别使用值 dev、test,提交部署时进行变量替换,应用环境将部署到指定的 Kubernetes 命名空间。为线下环境与生产环境在不同的端口启动服务
主机部署场景下,线下环境与生产环境可能需要在不同的端口启动服务。在主机启动脚本中将启动端口号定义成
{{ .Values.port }}
,占位符赋值为变量${port}
,在开发、测试环境分别使用值 8080、8081,提交部署时进行变量替换,应用环境将在指定的端口启动服务。
部署方式
云效 AppStack 应用编排支持三种部署方式:
Kubernetes 部署(适用于云原生场景),具体使用说明可参考 Kubernetes 部署编排。
主机部署(适用于传统主机场景),具体使用说明可参考 主机部署编排。
Kubernetes 和主机混合部署(适用于转型场景)。
在应用架构转型时,您可以新增或删除某种编排方式,实现平滑迁移。
编排配置变更与环境部署
应用部署配置变更需要逐环境验证后发布到生产环境。云效AppStack支持在编排更新时增加环境标签,标识修改版本。环境部署时可选编排版本,不影响生产发布。
以下以 myapp 应用为例,描述编排配置变更流程。myapp 使用 Kubernetes YAML 文件编排,有测试、预发、生产三套环境。初始版本为 V1,需修改为 V2(如 containerPort 从 80 改为 8080)。
进入应用编排,修改 YAML 文件生成 V2 版本,确认无误后标识为测试环境。
部署测试环境,选择 V2 版本进行测试验证。
部署预发环境,选择 V2 版本进行预发验证。
测试验证通过后,标识为预发环境。
预发验证通过后,标识为生产环境。
生产发布时,提示有新版本,手动创建部署单,选择 V2 版本发布到生产。
至此,完成了一次编排配置变更,从测试验证、预发部署到最终发布生产的全部过程。