术语及解释
术语 | 解释说明 |
安装包 | 安装包是伙伴提交符合云应用标准的自动化部署交付物,整合了云资源编排、安装参数和输出声明等内容。 用户通过云应用一键部署,即可自动完成资源创建、应用配置和进程启动,实现全流程自动化安装。 |
创建安装包
当前,安装包支持两种创建方式,说明如下:
| 模板创建 | 普通创建 |
优势 | 简单、快捷,通过官方提供的固定模板创建。 只需输入少量模板参数,即可快速创建安装包并提交开发版。 | 灵活性高,可创建复杂应用。 可完全自定义各种类型的资源,以及资源的各种参数。 |
不足 | 灵活性不足。 仅支持部分参数自定义。 | 需要有一定开发基础。 需要安装 Node.js 环境和 CLI 开发者工具。 |
具体创建步骤如下:
登录开发者工具(CLI)
1. 在版本管理界面中,单击如何上传开发版本,唤出工具安装和登录指引。
说明:


2. 根据指引安装好开发者工具后,使用
cloudapp
命令可以查看工具的使用说明:

3. 安装好工具后,请使用
cloudapp login
命令在本地开发者中心登录,您需要使用开发者的 CAM 密钥进行登录。cloudapp login $SECRET_ID@$SECRET_KEY
安装包初始化(CLI 工具)
使用
cloudapp init
命令可以生成一个示例安装包:# 初始化本地项目,可通过 -t 指定初始模板,支持的模板参考 Github 模板清单(默认模板:CVM实例 + 公网IP)cloudapp init hello-world# 示例# cloudapp init hello-world -t CT_001
技术预览版功能:
安装包组成
安装包由开发方交付的内容组成(分为 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_targetlabel: 目标网络widget: subnet-select# 应用权限声明(可选),如果应用内需调用云 API,需这里进行声明role:policy:version: "2.0"statement:- action:- cloudapp:VerifyLicenseresource: "*"effect: allow
注意:
请提供正确的安装包 ID。开发者工具在推送应用的时候,会根据 package.yaml 中记录的安装包 ID 来鉴权并推送,如果应用未登记,或者当前登录的开发者,不是对应的应用开发者,将推送失败。
资源和变量声明
资源声明
resource "tencentcloud_eks_cluster" "eks" {availability_zone = var.app_target.subnet.zonek8s_version = "1.20.6"vpc_id = var.app_target.vpc.idsubnet_ids = [var.app_target.subnet.id]service_subnet_id = var.app_target.subnet.id}
上面就是一个资源块的声明语法,
resource
表示声明资源块,"tencentcloud_eks_cluster"
表示资源类型,"eks"
为资源名称。说明:
安装包支持声明的资源大致分为两类:
腾讯云 IaaS / SaaS 资源,资源类型前缀为
tencentcloud
。云应用封装的资源,资源前缀
cloudapp
。变量声明
上面声明的 EKS 资源,其关联的 VPC、子网等信息,是从 变量 中获取的。安装包中,所有用到的变量,都需要进行声明才能使用:
# 使用 variable 关键字声明变量,app_target 为「变量名」,通过 var.app_target 可使用该变量variable "app_target" {type = object({region = stringregion_id = stringvpc = object({id = stringcidr_block = string})subnet = object({id = stringzone = string})})}
跟资源块类似,我们使用变量块
variable
声明一个变量,上面的声明中 app_target
为变量名,在资源块中用 var.app_target
即可引用。镜像托管
CVM 镜像
说明:
当您制作好 CVM 镜像后,需要将镜像托管到云应用制品管理中心,以便于在用户安装时,云应用自动将对应镜像共享给用户。
在云应用开发者中,选择应用的制品管理。


在制品管理中心选择当前应用需要托管的 CVM 镜像。




根据应用允许安装的地域,调整镜像可用地域。


容器镜像
说明:
云应用提供 TCR 仓库为需要托管容器镜像的应用提供镜像托管服务。该仓库客户在安装是从内网拉取,无需外网支持。
使用
cloudapp docker
命令获得仓库登录命令。

使用
cloudapp docker --url
获得仓库推送地址。

使用
cloudapp docker --auth
单独获得 Docker 授权文件,适用于 CI 构建的场景。

Docker 仓库登录后,就可以将镜像推送到托管的仓库中了。
仓库票据有效期和权限
cloudapp docker 命令拿到的仓库票据,只能用于应用方推送软件容器镜像。该票据有效期 2 个小时,所以不应该存储下来使用,建议 CI 流程构建完之后,再实时通过 cloudapp docker 命令获取票据。
客户安装时使用的安装票据是只读的,而 cloudapp docker 拿到的票据则可以操作应用开发方的软件镜像。
服务编排(容器部署)
通过声明
cloudapp_helm_app
类型的资源,可以声明容器服务编排。resource "cloudapp_helm_app" "helm_charts" {cluster_id = tencentcloud_eks_cluster.eks.idchart_src = "../software/chart"chart_username = var.cloudapp_repo_usernamechart_password = var.cloudapp_repo_passwordchart_values = {SUBNET_ID = var.app_target.subnet.idIMAGE_CREDENTIALS = {REGISTRY = var.cloudapp_repo_serverUSERNAME = var.cloudapp_repo_usernamePASSWORD = var.cloudapp_repo_password}}}
需要指定编排的目标容器集群以及编排的 Helm Chart 源码位置(一般建议放在
.cloudapp/software/chart
上)。通过
chart_values
将资源信息传递到 Helm Chart Values,这些信息在部署时,会传递给 Helm,因而编排的时候可以直接使用基础设施。参见上面的例子,将子网 ID 传给编排,在对 service 进行编排的时候,指定该子网 ID 从而生成内网的负载均衡类型。另一个常见的例子是,将 DB 实例化后的连接信息传入编排,从而让工作负载可以从环境变量中引用,或是生成到 configmap 中。注意:
将 TF 中声明的资源属性,传递到 Helm Chart Values,是个很重要的特性。利用该特性,让软件编排的时候可以直接编排实际部署的硬件资源,而无需二次设置。
进阶
继续阅读后续内容,学习进阶安装包特性的实现。
调用云 API
资源
下一步