应用制作

本章节介绍如何准备应用镜像和应用包,包括以下步骤:
  1. 获取应用包模板
  2. 配置应用文件
  3. 制作应用镜像
  1. 获取应用包模板
    1. 登录https://github.com/ZStack-Robot/marketplace-apps
    2. 在页面右上角点击Use this template > Create a new repository,将应用包模板克隆到自己的仓库。
      图 1所示:
      图 1. 克隆应用包模板


    应用包源目录结构如下:
    ├── applications │   ├── index.json │   ├── zstack_io_grafana │   │   └── aarch64 │   │       └── 11.2.0 │   │           ├── application.json │   │           ├── input.json │   │           ├── logo.png │   │           ├── output.json │   │           └── src │   │                 ├── main.tf │   │                 ├── output.tf │   │                 ├── scripts │   │                 │     └── check-health.sh │   │                 ├── variables.tf │   │                 └── version.tf │   │   └── x86_64 │   │       └── 11.2.0 │   │           ├── application.json │   │           ├── input.json │   │           ├── logo.png │   │           ├── output.json │   │           └── src │   │                 ├── main.tf │   │                 ├── output.tf │   │                 ├── scripts │   │                 │     └── check-health.sh │   │                 ├── variables.tf │   │                 └── version.tf
    目录结构说明
    • zstack_io_grafana:应用ID,请根据实际情况重命名,需和application.json中的appId值一致
    • aarch64/x86_64:应用架构,如应用只适配一种架构,可将其他架构路径删除
    • 11.2.0:应用版本号,请根据实际情况重命名
    • application.json:定义应用名称、应用描述、应用appId、应用类型、连接类型的文件
    • input.json:UI渲染文件,用于定义用户通过应用市场UI界面部署应用时需填写的表单参数
    • logo.png:应用的Logo图片
    • output.json:用于定义该应用在应用市场部署完成后,在UI界面上展示的详情字段
    • src: 存放内容为Terraform (OpenTofu) 编排的IaC文件
    • main.tf:OpenTofu执行文件入口,请参考Terraform语法编写,详见https://developer.hashicorp.com/terraform/language
    • output.tf:执行main后的结果输出,请参考Terraform语法编写,详见https://developer.hashicorp.com/terraform/language
    • script:存放应用执行脚本,脚本可以通过data导入数据,或remote-exec到运行该应用的云主机执行
    • variables.tf:OpenTofu格式的引入变量
    • version.tf:导入的Provider信息
  2. 配置应用文件
    1. 使用实际应用ID、应用架构、应用版本号重命名zstack_io_grafana、aarch64/x86_64、11.2.0文件夹
    2. 配置application.json文件
      模板
      {   "name": "Grafana 是一款开源指标分析和可视化套件",   "description": "Grafana 是一款开源指标分析和可视化套件,用于可视化支持各种数据源的时间序列数据,应用市场也提供对应ZStack监控模板",   "details": "Grafana 是一款开源指标分析和可视化套件,用于可视化支持各种数据源的时间序列数据。 本应用由ZStack打包。产品中提及的相应商标归相应公司所有",   "appId": "zstack.io.grafana",   "category": "cloud",   "connector_type": "zstack" }
      说明:
      • categoryconnector_type需使用模板中提供的默认值
      • 其他选项的值请根据实际情况修改
    3. 配置input.json文件
      模板
      [   {     "name": "root_disk_size",     "required": true,     "default_value": 107374182400,     "min": 107374182400,     "tag": "ZStack::rootDiskSize"   },   {     "name": "memory_size",     "required": true,     "default_value": 4294967296,     "min": 2147483648,     "tag": "ZStack::memorySize"   },   {     "name": "l3_network_uuids",     "en_label": "l3_network_uuids",     "zh_label": "网络",     "required": true,     "tag": "ZStack::l3NetworkUuids"   },   {     "name": "cpu_num",     "required": true,     "default_value": 2,     "min": 1,     "tag": "ZStack::cpuNumber"   },   {     "name": "backup_storage_uuid",     "required": true,     "tag": "ZStack::backupStorageUuid"   } ]
      说明:
      • name:在应用市场UI界面部署应用时的表单参数
      • required:部署应用时,该参数是否必填
      • en_lable:UI界面显示的参数英文名称
      • zh_lable:UI界面显示的参数中文名称
      • default_value:参数默认值
      • min:参数最小值
      • tag:标记ZStack前缀,用于渲染UI表单。带有tag标记的字段才能展示在应用部署界面
      应用部署界面会按以下顺序展示input.json中规定的参数:
      字段 字段释义 是否必须包含在input.json中
      ZStack::cpuNumber CPU核数
      ZStack::memorySize 内存大小
      ZStack::imageStoreUuid 镜像服务器UUID 否。本参数将由系统自动生成和展示
      ZStack::rootDiskSize 根云盘大小
      ZStack::dataDiskSize 数据云盘大小 否。可以选填一个或多个,input.json中包含几个该字段,表示部署时可设置几个数据云盘
      ZStack::l3NetworkUuid 三层网络UUID 是。至少包含一个,也可以包含多个,input.json中包含几个该字段,表示部署时可设置几个三层网络
      ZStack::l3NetworkIp 指定网卡IP地址 否。如包含,必须先包含一个同组的ZStack::l3NetworkUuid。一个ZStack::l3NetworkUuid对应一个ZStack::l3NetworkIp
      ZStack::clusterUuid 集群UUID
      ZStack::hostUuid 物理机UUID
      ZStack::rootDiskPrimaryStorageUuid 根云盘主存储UUID
      ZStack::rootDiskPrimaryStorageCephPoolUuid 根云盘主存储存储池UUID 如根云盘主存储为Ceph类型,则必须包含,和ZStack::rootDiskPrimaryStorageUuid一起指定
      ZStack::dataDiskPrimaryStorageUuid 数据云盘主存储UUID 如已包含ZStack::dataDiskSize,则必须包含
      ZStack::dataDiskPrimaryStorageCephPoolUuid 数据云盘主存储存储池UUID 如已包含ZStack::dataDiskSize且数据云盘主存储为Ceph类型,则必须包含,和ZStack::dataDiskPrimaryStorageUuid一起指定
      ZStack::gpuDeviceUuid GPU设备UUID 否。如包含,则必须同时包含ZStack::gpuSpecsUuid和ZStack::gpuDeviceType
      ZStack::gpuSpecsUuid GPU规格UUID 否。如包含,则必须同时包含ZStack::gpuDeviceUuid和ZStack::gpuDeviceType
      ZStack::gpuDeviceType GPU设备类型 否。如包含,则必须同时包含ZStack::gpuDeviceUuid和ZStack::gpuSpecsUuid
    4. 配置output.json文件
      模板
      [     {         "name": "vm_uuids",         "en_label": "vm_uuids",         "zh_label": "vm_uuids",         "type":"array",         "tag":"ZStack:vmInstanceUuid"     },     {         "name": "application_protocol",         "en_label": "Application Protocol",         "zh_label": "应用协议",         "type": "string",         "tag": "Application:protocol"     },     {         "name": "application_ip",         "en_label": "Application IP",         "zh_label": "应用IP",         "type":"string",         "tag":"Application:ip"     },     {         "name": "application_port",         "en_label": "Application Port",         "zh_label": "应用端口",         "type":"number",         "tag":"Application:port"     },     {         "name": "default_account",         "en_label": "Default User Name",         "zh_label": "默认账号",         "type":"string"     },     {         "name": "default_password",         "en_label": "Default Password",         "zh_label": "默认密码",         "type":"password"     } ]
      说明:
      • name:应用部署完成后,UI界面展示的详情字段
      • en_lable:UI界面显示的字段英文名称
      • zh_lable:UI界面显示的字段中文名称
    5. 配置src-main.tf文件
      模板
      resource "zstack_vm" "vm" {   name = "Grafana"   description = "应用市场-Grafana-可视化"   root_disk = {     size = {{.root_disk_size}}   }    l3_network_uuids = {{.l3_network_uuids}}   memory_size = {{.memory_size}}   cpu_num = {{.cpu_num}}   marketplace = true   never_stop = true }  variable "l3Uuids" {   type = list(string)   default = {{.l3_network_uuids}} }  data "zstack_l3network" "network" {     depends_on = [zstack_vm.vm]     uuid = var.l3Uuids[0] }  resource "terraform_data" "healthy_check" {   depends_on = [zstack_vm.vm]    provisioner "local-exec" {       command     = var.wait_for_migrate_health_cmd       environment = {         ENDPOINT =  "http://${zstack_vm.vm.ip}:3000/"      }     }  }
      说明: {{}}中的变量值由input.json文件中对应字段的值传递,即用户通过UI界面部署应用时填写的表单参数值。
    6. 配置src-output.tf文件
      模板
      output "vm_uuids" {    value = zstack_vm.vm.uuid }  output "application_protocol" {    value = "http" }  output "application_ip" {    value = zstack_vm.vm.ip }  output "application_port" {    value = 3000 }  output "default_account" {    value = "admin" }  output "default_password" {    value = "password" }  output "default_host_root_password" {    value = "password" }
    7. 配置src-variables.tf文件
      模板
      variable "wait_for_migrate_health_cmd" {     description = "local-exec command to execute for determining if the Grafana url is healthy. Grafana endpoint will be available as an environment variable called ENDPOINT"     type        = string     default     = "start=$(date +%s); until curl -k -s $ENDPOINT >/dev/null; do sleep 4; now=$(date +%s); if [ $((now - start)) -ge 600 ]; then echo 'Timeout reached'; exit 1; fi; done"   } 
    8. 配置src-version.tf文件
      模板
      terraform {   required_providers {     zstack = {       source = "zstack.io/terraform-provider-zstack/zstack"     }   } }
      说明:
      • 如用户环境连接公网,可使用Terraform提供的Provider,详见https://registry.terraform.io/browse/providers
      • 如用户环境未连接公网,仅可使用以下Provider,详细使用方法可参考:https://registry.terraform.io/browse/providers
         template = {       source  = "hashicorp/template"       version = "2.2.0"     }     external = {       source = "hashicorp/external"       version = "2.3.3"     }     grafana = {       source = "grafana/grafana"       version = "3.2.1"     }     local = {       source = "hashicorp/local"       version = "2.5.1"     }     null = {       source = "hashicorp/null"       version = "3.2.3"     }
  3. 制作应用镜像
    应用镜像需基于KVM qcow2格式的云主机镜像,可以通过Packer Qemu插件代码化制作镜像。如云主机镜像包含QGA插件,可以使用User Data参数传入,User Data内容需经过Base64编码。
    以下示例为格式化数据云盘的User Data,用户可按实际情况编写自己的User Data:
    编码前
    #cloud-config runcmd:   - |     pv_list=$(pvs --noheadings -o pv_name)     pv_count=$(echo "$pv_list" | wc -l)     pv_name=$(echo "$pv_list" | tr -d ' ')      vg_name=$(pvs --noheadings -o vg_name $pv_name | tr -d ' ')      growpart $(echo $pv_name | sed 's/[0-9]*$//') $(echo $pv_name | grep -o '[0-9]*$')     pvresize $pv_name      lv_name=$(lvs --noheadings -o lv_name --sort -size | tail -1 | tr -d ' ')      lvextend -l +100%FREE /dev/$vg_name/$lv_name      lv_path="/dev/$vg_name/$lv_name"     mapper_name=$(readlink -f $lv_path | awk -F '/' '{print $3}')      lv_mapper_name=$(ls -l /dev/mapper/ | grep "$mapper_name" | awk '{print $9}')      blkid | grep "/dev/mapper/$lv_mapper_name" | grep -q xfs      if [ $? -eq 0 ]; then         xfs_growfs /dev/mapper/$lv_mapper_name     else         resize2fs /dev/mapper/$lv_mapper_name     fi     partprobe
    编码传入
     user_data = "I2Nsb3VkLWNvbmZpZwpydW5jbWQ6CiAgLSB8CiAgICBwdl9saXN0PSQocHZzIC0tbm9oZWFkaW5ncyAtbyBwdl9u \ YW1lKQogICAgcHZfY291bnQ9JChlY2hvICIkcHZfbGlzdCIgfCB3YyAtbCkKICAgIHB2X25hbWU9JChlY2hvICIkcHZfbGlzdCIgfCB0ciAtZCAnI \ CcpCgogICAgdmdfbmFtZT0kKHB2cyAtLW5vaGVhZGluZ3MgLW8gdmdfbmFtZSAkcHZfbmFtZSB8IHRyIC1kICcgJykKCiAgICBncm93cGFydCAkKG \ VjaG8gJHB2X25hbWUgfCBzZWQgJ3MvWzAtOV0qJC8vJykgJChlY2hvICRwdl9uYW1lIHwgZ3JlcCAtbyAnWzAtOV0qJCcpCiAgICBwdnJlc2l6ZSA \ kcHZfbmFtZQoKICAgIGx2X25hbWU9JChsdnMgLS1ub2hlYWRpbmdzIC1vIGx2X25hbWUgLS1zb3J0IC1zaXplIHwgdGFpbCAtMSB8IHRyIC1kICcg \ JykKCiAgICBsdmV4dGVuZCAtbCArMTAwJUZSRUUgL2Rldi8kdmdfbmFtZS8kbHZfbmFtZQoKICAgIGx2X3BhdGg9Ii9kZXYvJHZnX25hbWUvJGx2X \ 25hbWUiCiAgICBtYXBwZXJfbmFtZT0kKHJlYWRsaW5rIC1mICRsdl9wYXRoIHwgYXdrIC1GICcvJyAne3ByaW50ICQzfScpCgogICAgbHZfbWFwcG \ VyX25hbWU9JChscyAtbCAvZGV2L21hcHBlci8gfCBncmVwICIkbWFwcGVyX25hbWUiIHwgYXdrICd7cHJpbnQgJDl9JykKCiAgICBibGtpZCB8IGd \ yZXAgIi9kZXYvbWFwcGVyLyRsdl9tYXBwZXJfbmFtZSIgfCBncmVwIC1xIHhmcwoKICAgIGlmIFsgJD8gLWVxIDAgXTsgdGhlbgogICAgICAgIHhm \ c19ncm93ZnMgL2Rldi9tYXBwZXIvJGx2X21hcHBlcl9uYW1lCiAgICBlbHNlCiAgICAgICAgcmVzaXplMmZzIC9kZXYvbWFwcGVyLyRsdl9tYXBwZ \ XJfbmFtZQogICAgZmkKICAgIHBhcnRwcm9iZQ=="

历史文档

学习路径

ZStack Cloud 产品学习路径

版本号:

5.3.0
4.8.10
常见问题
常见问题

ZStack Cloud 产品学习路径

快速梳理文档,点击相应文本链接,快速跳转到相应文档的页面,学习 ZStack Cloud 产品。

我知道了

升级提醒

若您选择升级至4.0.0及之后版本,请注意以下功能调整:

1. 云路由器全面升级为VPC路由器,云路由网络全面升级为VPC网络,不再单独设云路由器页面。升级全程无感知,相关业务不受任何影响。

2. 企业管理账号体系取代用户组与用户,不再单独设用户/用户组页面,不可再使用用户/用户组账号登录云平台。升级前,请先将“用户组与用户”纳管的账号数据妥善迁移至“企业管理”纳管,再执行升级操作。注意:对于admin创建并具备admin权限的用户账号同步取消,如有需要,可使用企业管理账号体系中的平台管理员实现相同功能。

3. 调整AD/LDAP与账户的对接管理方式,统一由企业管理纳管,不再单独设AD/LDAP页面。升级前,请先将“账户”对接纳管的AD/LDAP账号数据妥善迁移至“企业管理”纳管,再执行升级操作。

如对上述升级提醒有任何疑问或需要升级帮助,请联系ZStack官方技术支持

下载ZStack企业版

您已填写过基本信息?点击这里

姓名应该不少于两个字符
手机号格式错误
验证码填写错误 获取短信验证码 60 秒后可重发
公司名称不应该少于4个字符
邮箱格式错误

下载链接将会通过邮件形式发送至您的邮箱,请谨慎填写。

同意 不同意

我已阅读并同意云轴科技 《法律声明》《隐私政策》用户管理规则及公约

下载ZStack企业版

还未填写过基本信息?点击这里

邮箱或手机号码格式错误
同意 不同意

我已阅读并同意云轴科技 《法律声明》《隐私政策》用户管理规则及公约

验证手机号
手机号格式错误
验证码填写错误 获取短信验证码 60 秒后可重发
同意 不同意

我已阅读并同意云轴科技 《法律声明》《隐私政策》用户管理规则及公约

登录观看培训视频
仅对注册用户开放,请 登录 观看培训视频

业务咨询:

400-962-2212 转 1

售后咨询:

400-962-2212 转 2

其他(漏洞提交、投诉举报等)

400-962-2212 转 3
ZStack认证培训咨询
姓名应该不少于两个字符
手机号格式错误
验证码填写错误 获取短信验证码 60 秒后可重发
公司名称不应该少于4个字符
邮箱格式错误

同意 不同意

我已阅读并同意云轴科技 《法律声明》《隐私政策》用户管理规则及公约

业务咨询:

400-962-2212 转 1

ZStack学院:

training@zstack.io
申请ZStack多机版
姓名应该不少于两个字符
手机号格式错误
验证码填写错误 获取短信验证码 60 秒后可重发
公司名称不应该少于4个字符
邮箱格式错误

同意 不同意

我已阅读并同意云轴科技 《法律声明》《隐私政策》用户管理规则及公约

业务咨询:

400-962-2212 转 1

售后咨询:

400-962-2212 转 2

其他(漏洞提交、投诉举报等)

400-962-2212 转 3
立即咨询
姓名应该不少于两个字符
手机号格式错误
验证码填写错误 获取短信验证码 60 秒后可重发
公司名称不应该少于4个字符
邮箱格式错误

同意 不同意

我已阅读并同意云轴科技 《法律声明》《隐私政策》用户管理规则及公约

业务咨询:

400-962-2212 转 1

售后咨询:

400-962-2212 转 2

其他(漏洞提交、投诉举报等)

400-962-2212 转 3
培训认证合作伙伴申请
姓名应该不少于2个字符
手机号格式错误
验证码填写错误 获取短信验证码 60 秒后可重发
邮箱格式错误
城市名称不应该少于2个字符
公司名称不应该少于4个字符
职位名称不应该少于2个字符

同意 不同意

我已阅读并同意云轴科技 《法律声明》《隐私政策》用户管理规则及公约

业务咨询:

400-962-2212 转 1

商务联系:

channel@zstack.io
ZStack&工信人才联合证书申请
已获得ZStack原厂证书
未获得ZStack原厂证书
请填写您的基本信息
姓名应该不少于2个字符
手机号格式错误
验证码填写错误 获取短信验证码 60 秒后可重发
邮箱格式错误
城市名称不应该少于2个字符
公司/学校名称不应该少于4个字符
证书类型
ZCCT
ZCCE
ZCCA
ZCPC-ISP
申请ZStack&工信人才联合证书须支付工本费,是否可以接受
同意 不同意

我已阅读并同意云轴科技 《法律声明》《隐私政策》用户管理规则及公约

业务咨询:

400-962-2212 转 1

商务联系:

channel@zstack.io

下载链接已发送至您的邮箱。

如未收到,请查看您的垃圾邮件、订阅邮件、广告邮件。 当您收到电子邮件后,请点击 URL 链接,以完成下载。

下载链接已发送至您的邮箱。

如未收到,请查看您的垃圾邮件、订阅邮件、广告邮件。
或点击下方URL链接 (IE内核浏览器请右键另存为), 完成下载:

感谢您使用 ZStack 产品和服务。

成功提交申请。

我们将安排工作人员尽快与您取得联系。

感谢您使用 ZStack 产品和服务。

信息提交成功。

我们将安排工作人员尽快与您取得联系,请保持电话畅通。

感谢您使用 ZStack 产品和服务。

预约沟通

联系我们

业务咨询
400-962-2212 转 1
售后咨询
400-962-2212 转 2
其他业务(漏洞提交、投诉举报等)
400-962-2212 转 3

联系我们

回到顶部

产品试用申请
请选择您要试用的产品
ZStack Cloud 企业版
ZStack Cloud 混合云版
ZStack Cloud 基础版
ZStack Cloud 标准版
请填写您的基本信息
姓名应该不少于两个字符
手机号格式错误
验证码填写错误 获取短信验证码 60 秒后可重发
公司名称不应该少于4个字符
邮箱格式错误

商务咨询:

400-962-2212 转 1

售后咨询:

400-962-2212 转 2

商务联系:

sales@zstack.io

成功提交申请。

我们将安排工作人员尽快与您取得联系。

感谢您使用 ZStack 产品和服务。