创建服务

更新时间:
2025-01-14

创建服务

此接口用于根据镜像和相关配置信息创建一个服务。

接口描述

通信协议:HTTP

URL:POST /api/v1/service

传参方式:body

请求参数

字段名类型是否必填说明
namestring服务名称
imageImage镜像信息及其容器启动配置
nodeNode指定目标节点信息
factornumber动态部署时的容器实例个数
policyenum服务部署类型。dynamic 表示动态部署;static 表示静态部署。默认为静态部署
prepullboolean是否开启镜像预热。开启后会在部署时向所有节点同步镜像,以加速动态部署时故障迁移的速度。默认为 false

Image

字段名类型是否必填说明
refstring镜像标识符,形式为:name@tag#os
actionenum服务启动类型。load 表示只创建不启动服务;run 表示创建且启动服务
configDockerImageConfig | EcsImageConifg镜像配置信息,其中 DockerImageConfig 为 Linux 系统镜像配置信息,EcsImageConifg 为 SylixOS 系统镜像配置信息
vsoaImageVsoaVSOA 容器配置
pullPolicyenum镜像拉取策略,各策略说明如下:
  • IfNotPresent: 如果待部署节点本地有对应镜像,则使用本地镜像;如果待部署节点本地没有对应镜像,则从 ECSM 镜像仓库拉取
  • Always: 总是从 ECSM 仓库查询镜像摘要,如果本地存在与其相同的镜像则使用本地的,否则会拉取最新的镜像
  • Never: 从不向 ECSM 仓库拉取镜像,只使用待部署节点的本地镜像,如果没有则报错
当镜像的 tag 为 latest 时默认拉取策略为 Always, 当镜像的 tag 为具体版本号时默认拉取策略为 IfNotPresent
autoUpgradeenum服务自动更新策略,各策略说明如下:
  • Never:从不自动更新
  • Larger:当与对应镜像名称相同的新镜像被上传或推送到 ECSM 镜像仓库时,ECSM 将根据 Semantic Versioningopen in new window 语义化版本规范对比两个镜像的版本大小,如果新镜像的版本较大,则自动更新服务,并将服务镜像替换为高版本的镜像。tag 为 latest 的镜像总是被当做较大版本的镜像
  • Always:当与对应镜像名称相同的新镜像被上传或推送到 ECSM 镜像仓库时,将自动使用新镜像更新服务
默认策略为 Never,从不自动更新

ImageVsoa

字段名类型是否必填说明
passwordstringVSOA 服务密码
portnumberVSOA 服务映射的宿主机端口,如果不填或填 0 则表示动态获取
healthPathstring健康检查路径
healthTimeoutnumber健康检查超时时间,单位为 ms
healthRetriesnumber健康检查重复次数
healthStartPeriodnumber健康检查延时启动时间,单位为 ms
healthIntervalnumber健康检查间隔时间,单位为 ms

Node

字段名类型是否必填说明
namesstring[ ]节点名称列表

响应参数

响应体 data 字段参数说明请参见 CreateProvisionResponses

CreateProvisionResponses

字段名类型说明
idstring服务 ID
containersstring[ ]服务下每个容器实例的名称

请求示例

curl --location --request POST 'http://localhost:3001/api/v1/service' \
--header 'Content-Type: application/json' \
--data-raw '{
  "name": "Test-node11_12-factor5-dynamic",
  "image": {
    "ref": "image@2.0.0#sylixos",
    "action": "run",
    "pullPolicy": "IfNotPresent",
    "autoUpgrade": "Never",
    "config": {
      "platform": {},
      "process": {
        "args": [],
        "env": [
          "PATH=/usr/bin:/bin:/usr/pkg/sbin:/sbin:/usr/local/bin",
          "LD_LIBRARY_PATH=/usr/lib:/lib:/usr/local/lib"
        ]
      },
      "root": {},
      "hostname": "sylixos_ecs",
      "mounts": [
        {
          "destination": "/etc/lic",
          "source": "/etc/lic",
          "options": [
            "ro"
          ]
        }
      ],
      "sylixos": {
        "devices": [
          {
            "path": "/dev/fb0",
            "access": "rw"
          },
          {
            "path": "/dev/input/xmse",
            "access": "rw"
          },
          {
            "path": "/dev/input/xkbd",
            "access": "rw"
          },
          {
            "path": "/dev/net/vnd",
            "access": "rw"
          }
        ],
        "resources": {
          "cpu": {
            "highestPrio": 160,
            "lowestPrio": 250,
            "defaultPrio": 200
          },
          "memory": {
            "kheapLimit": 2097152,
            "memoryLimitMB": 512
          },
          "disk": {
            "limitMB": 2048
          },
          "kernelObject": {
            "eventLimit": 32768,
            "eventSetLimit": 500,
            "msgQueueLimit": 8192,
            "partitionLimit": 6000,
            "regionLimit": 50,
            "threadLimit": 4096,
            "threadPoolLimit": 100,
            "timerLimit": 64
          }
        },
        "network": {
          "ftpdEnable": true,
          "telnetdEnable": true
        }
      }
    },
    "vsoa": {
      "port": 0,
      "password": "123445",
      "healthPath": "/health",
      "healthTimeout": 3000,
      "healthRetries": 3,
      "healthStartPeriod": 5000,
      "healthInterval": 5000,
      "livenessProbe": false
    }
  },
  "node": {
    "names": [
      "192.168.64.112"
    ]
  },
  "policy": "dynamic",
  "factor": 5
}'

响应示例

{
  "status": 200,
  "message": "success",
  "fieldErrors": null,
  "data": {
    "id": "06c6d07c10021705042799949b5a923fe",
    "containers": [
      "instance_8ebPz2MiCRuNseDV",
      "instance__EcxMMJGAtgfWnm7",
      "instance_0Inp4lkLfyxaUanl",
      "instance_G1QLCPgnrs9HX2GS",
      "instance_HkRvp6V5kzW5QAr_"
    ]
  }
}

错误码

具体请参见 错误码说明

文档内容是否对您有所帮助?
有帮助
没帮助