一、术语及解释
| 术语 | 解释说明 |
| 安装包 | 安装包是伙伴提交符合云应用标准的自动化部署交付物,整合了云资源编排、安装参数和输出声明等内容。用户通过云应用一键部署,即可自动完成资源创建、应用配置和进程启动,实现全流程自动化安装。 |
二、创建安装包
当前,安装包支持两种创建方式,说明如下:
| 创建方式 | 模板创建 | 普通创建 |
| 优势 | 简单、快捷,通过提供的固定模板创建。只需输入少量模板参数,即可快速创建安装包并提交开发版。 | 灵活性高,可创建复杂应用。可完全自定义各种类型的资源,以及资源的各种参数。 |
| 不足 | 灵活性不足,仅支持部分参数自定义。 | 需要有一定开发基础。需要安装 Node.js 环境和 CLI 开发者工具。 |
具体创建步骤如下:
普通创建模板快速创建
·自主管理:即安装包由你当前登录的账号制作。
·委托账号管理:即安装包托管给验证账号进行制作;若未显示委托账号 ID,代表委托操作未生效。
3. 选择创建方式:普通创建;此方式适合首次创建安装包的开发者。
4. 创建完成后,单击目标应用操作栏下的版本管理即可进入安装包版本管理界面。
1. 若你的合作账号不具备消费能力,请将 合作账号&验证账号 提供至商务经理,进行委托账号绑定操作。
2. 在 安装包管理 单击新建安装包,选择管理模式:
·自主管理:即安装包由你当前登录的账号制作。
·委托账号管理:即安装包托管给验证账号进行制作;若未显示委托账号 ID,代表委托操作未生效。
3. 选择创建方式:通过模板创建;此方式仅适合非首次创建的开发者。
4. 安装包创建完成后,单击目标应用操作栏下的版本管理即可进入安装包版本管理界面。
三、登录开发者工具(CLI)
1. 在版本管理界面中,单击如何上传开发版本,唤出工具安装和登录指引。
注意:说明:
注意:需要 Node.js 环境。云应用开发者工具基于 Node.js 开发,安装前请确认开发环境已安装 Node.js。如未安装,请前往 Node.js 页面下载安装。
2. 根据指引安装好开发者工具后,使用 cloudapp 命令可以查看工具的使用说明:
3. 安装好工具后,请使用 cloudapp login 命令在本地开发者中心登录,你需要使用开发者的 CAM 密钥进行登录。
SecretId 和 SecretKey 为注册应用开发方主体身份时,提交的开发者信息中对应的 CAM 密钥。登录成功会显示开发方和开发者名称。如果你忘记了密钥信息,可以到 CAM 控制台 查询。
cloudapp login $SECRET_ID@$SECRET_KEY
四、安装包初始化(CLI 工具)
注意:说明:
注意:安装包在开发者的本地体现为一个文件系统目录,一般建议采用项目根目录下的 .cloudapp 目录作为安装包目录。
注意:推荐通过阅读 最小安装包的 Demo 源码,来理解安装包的组成。
使用 cloudapp init 命令可以生成一个示例安装包:
# 初始化本地项目,可通过 -t 指定初始模板,支持的模板参考 Github 模板清单(默认模板:CVM实例 + 公网IP)cloudapp init hello-world# 示例# cloudapp init hello-world -t CT_001
注意:cloudapp init 命令当前为预览版功能,后续可能会调整其用法和参数。当前 cloudapp init 只在本地下载模板代码,更多的模板代码可以在云应用的 CNB 仓库 中查看。
五、安装包组成
安装包由开发方交付的内容组成(分为 CVM 部署和容器部署两种模式),具体差异见下表:
CVM 部署容器部署
注意:说明:
注意:如果你的应用采用的是「容器部署」,请切换到 「容器部署」 查看需要交付的内容。
| 内容 | 位置 | 说明 |
| 安装包元信息 | .cloudapp/package.yaml | 安装包的元信息描述文件。包含安装包 ID、应用安装参数、CAM 权限策略等信息声明。 |
| 资源和变量声明 | .cloudapp/infrastructure/**/*.tf | 资源和变量声明,采取 Terraform 语法。资源采用资源块的方式声明;变量为资源部署时可使用的变量,使用前需声明。 |
| CVM 镜像(制品) | 云应用制品托管中心 | 云应用提供 CVM 镜像托管。 |
注意:说明:
注意:如果你的应用采用的是「CVM 部署」,请切换到 「CVM 部署」 查看需要交付的内容。
| 内容 | 位置 | 说明 |
| 安装包元信息 | .cloudapp/package.yaml | 安装包的元信息描述文件。包含安装包 ID、应用安装参数、云 API 权限等信息声明。 |
| 资源和变量声明 | .cloudapp/infrastructure/**.tf | 资源和变量声明,采取 Terraform 语法。资源采用资源块的方式声明;变量为资源部署时可使用的变量,使用前需声明。 |
| 容器镜像(制品) | 云应用 TCR 仓库 | 云应用提供 TCR 仓库为需要托管容器镜像的应用提供镜像托管服务。 |
| 服务编排 | .cloudapp/software/charts/**/*.yaml | 服务编排,采用 Helm Chart 编排规范。编排容器集群中的 StatefulSet、Service、Job、Secret 等内容。 |
六、安装包元信息
安装包元信息在 package.yaml 中声明,包含安装包 ID、应用安装参数、云 API 权限等信息声明。
# 安装包 ID,对应开发者中心中的应用 IDid: pkg-8lve2gn1# 应用参数,定义允许客户在安装过程中设置的参数,例如所属网络、应用规格、付费方式等args: – name: app_target label: 目标网络 widget: subnet-select# 应用权限声明(可选),如果应用内需调用云 API,需这里进行声明role: policy: version: "2.0" statement: – action: – cloudapp:DescribeLicense resource: "*" effect: allow
注意:请提供正确的安装包 ID。开发者工具在推送应用的时候,会根据 package.yaml 中记录的安装包 ID 来鉴权并推送,如果应用未登记,或者当前登录的开发者,不是对应的应用开发者,将推送失败。
七、资源声明
安装包中的资源声明,是安装包的核心内容。云应用借用 Terraform 语法 来声明软件依赖的云资源。
resource "tencentcloud_eks_cluster" "eks" { availability_zone = var.app_target.subnet.zone k8s_version = "1.20.6" vpc_id = var.app_target.vpc.id subnet_ids = [var.app_target.subnet.id] service_subnet_id = var.app_target.subnet.id}
上面是一个资源块的声明语法,resource 表示声明资源块,"tencentcloud_eks_cluster" 表示资源类型,"eks" 为资源名称。
注意:说明:
注意:安装包支持声明的资源大致分为两类:
注意:支持的资源类型及资源参数,请参考 资源类型手册。
八、变量声明
上面声明的 EKS 资源,其关联的 VPC、子网等信息,是从变量中获取的。安装包中,所有用到的变量,都需要进行声明才能使用。
# 使用 variable 关键字声明变量,app_target 为「变量名」,通过 var.app_target 可使用该变量variable "app_target" { type = object({ region = string region_id = string vpc = object({ id = string cidr_block = string }) subnet = object({ id = string zone = string }) })}
跟资源块类似,我们使用变量块 variable 声明一个变量,上面的声明中 app_target 为变量名,在资源块中用 var.app_target 即可引用。
变量可用于获取用户的安装参数,也可以用于获取系统的安装参数,详情请参考 安装参数、变量和输出 文档说明。
九、镜像托管
CVM 镜像托管容器镜像托管
说明:创建镜像可参见 操作指南。当你制作好 CVM 镜像后,需要将镜像托管到云应用制品管理中心,以便于在用户安装时,云应用自动将对应镜像共享给用户。1. 在云应用开发者中,选择应用的制品管理。2. 在制品管理中心选择当前应用需要托管的 CVM 镜像。3. 根据应用允许安装的地域,调整镜像可用地域。
注意:说明:
注意:云应用提供 TCR 仓库为需要托管容器镜像的应用提供镜像托管服务。该仓库客户在安装时从内网拉取,无需外网支持。
1. 使用 cloudapp docker 命令获得仓库登录命令。
2. 使用 cloudapp docker –url 获得仓库推送地址。
3. 使用 cloudapp docker –auth 单独获得 Docker 授权文件,适用于 CI 构建的场景。
4. Docker 仓库登录后,就可以将镜像推送到托管的仓库中了。
注意:仓库票据有效期和权限
十、服务编排(容器部署)
通过声明 cloudapp_helm_app 类型的资源,可以声明容器服务编排。
resource "cloudapp_helm_app" "helm_charts" { cluster_id = tencentcloud_eks_cluster.eks.id chart_src = "../software/chart" chart_username = var.cloudapp_repo_username chart_password = var.cloudapp_repo_password chart_values = { SUBNET_ID = var.app_target.subnet.id IMAGE_CREDENTIALS = { REGISTRY = var.cloudapp_repo_server USERNAME = var.cloudapp_repo_username PASSWORD = var.cloudapp_repo_password } }}
需要指定编排的目标容器集群以及编排的 Helm Chart 源码位置(一般建议放在 .cloudapp/software/chart 上)。
通过 chart_values 将资源信息传递到 Helm Chart Values,这些信息在部署时,会传递给 Helm,因而编排的时候可以直接使用基础设施。参见上面的例子,将子网 ID 传给编排,在对 service 进行编排的时候,指定该子网 ID 从而生成内网的负载均衡类型。另一个常见的例子是,将 DB 实例化后的连接信息传入编排,从而让工作负载可以从环境变量中引用,或是生成到 configmap 中。
注意:将 TF 中声明的资源属性,传递到 Helm Chart Values,是个很重要的特性。利用该特性,让软件编排的时候可以直接编排实际部署的硬件资源,而无需二次设置。
十一、制包规范
开发者制包时需严格遵循以下规范,并在提审时进行自查,若不符合制包规范,平台将驳回提交的安装包:
| 制包规范 | 分类 | 细则 |
| 可用 | 制包细节 | 1、CVM 镜像分发区域与安装可选区域一致。 |
| | | 2、机型选择器设置符合要求的机型规格约束。 |
| | | 3、新建安全组时合理设置放行规则,如选用已有安全组则需要提供指引描述所需规则。 |
| | | 4、添加必要的 output main (应用入口地址) 输出,以及其他需要提供给用户的信息输出,参考 使用安装参数、变量和输出。 |
| | 开箱即用 | 5、软件运行所涉及的云资源需要全部使用腾讯云产品,禁止跨云调用。 |
| | | 6、安装包至少完成一次成功安装。 |
| | | 7、安装包已涵盖软件运行所涉及的所有云资源配置,即用户安装完成后无需手动调整云资源(允许后续的域名解析配置/软件内相关的配置调整)。 |
| 对接 License 服务 | | 8、针对线上计费产品,必须对接 License 服务,参考 对接 License。 |
十二、进阶
继续阅读后续内容,学习进阶安装包特性的实现。
·使用安装参数、变量和输出
·提供 HTTPS 访问
·调用云 API
·对接 License
十三、资源
前往 CNB 仓库 查看更多示例源码。
十四、下一步
完成安装包的生产和上传后,需进行安装包的推送、验证和上架,详情参考 安装包管理。