快速开始 (v1rc1)
使用 ECI
- 以下所有访问都需要携带获取的 para_token,使用 HTTP Header Authorization:
Bearer
token* 获取 API 认证 Token
-
查询超算账号
Requestcurl --request GET \ --url https://eci.paracloud.com/api/v1rc1/clusters/-/accounts \ --header 'Authorization: Bearer KT3eSNnsizsjDIOsn1kL6-12W38xZVTpnsPE59AWVBQ-705200301'Response{ "accounts": [ { "clusterID": "BSCC-N32-H", "accountID": "acct1" }, ] } -
查询实例类型
Requestcurl --request GET \ --url https://eci.paracloud.com/api/v1rc1/clusters/-/instanceTypes \ --header 'Authorization: Bearer KT3eSNnsizsjDIOsn1kL6-12W38xZVTpnsPE59AWVBQ-705200301'- URL path 中的
clusterID可以指定具体值过滤集群,也可以指定为-表示查询所有集群下的实例类型
Response{ "instanceTypes": [ { "id": "n30.xlarge", "clusterID": "NC-N30", "cpu": { "cores": 6, "model": "EPYC7452" }, "memory": { "sizeGB": 60 }, "gpu": { "count": 1, "model": "RTX3090" } }, { "id": "n30.2xlarge", "clusterID": "NC-N30", "cpu": { "cores": 12, "model": "EPYC7452" }, "memory": { "sizeGB": 120 }, "gpu": { "count": 2, "model": "RTX3090" } }, { "id": "n32h.xlarge", "clusterID": "BSCC-N32-H", "cpu": { "cores": 32, "model": "KUNPENG920" }, "memory": { "sizeGB": 55 }, "gpu": { "count": 1, "model": "A100-PCIE-40G" } }, { "id": "n32h.2xlarge", "clusterID": "BSCC-N32-H", "cpu": { "cores": 64, "model": "KUNPENG920" }, "memory": { "sizeGB": 110 }, "gpu": { "count": 2, "model": "A100-PCIE-40G" } } ] }- 选择一个实例类型,比如
n32h.xlarge用于后续创建容器组申请资源 - 如果需要使用持久 Volume,还需要获取对应实例类型所在 clusterID
BSCC-N32-H
- URL path 中的
-
创建持久 Volume
requestcurl --request POST \ --url https://eci.paracloud.com/api/v1rc1/clusters/BSCC-N32-H/accounts/acct1/volumes?volumeID=4dmrgh9n \ --header 'Authorization: Bearer KT3eSNnsizsjDIOsn1kL6-12W38xZVTpnsPE59AWVBQ-705200301' \ --header 'Content-Type: application/json' \ --data '{ "service": {} }'- acct1 即用户绑定的超算账号
volumeID可选为自定义有意义名字即可,支持字符集为 `[a-z0-9-]+- 由于不同间 Cluster 的网络和存储是完全独立的,创建 Volume 时需要明确指定在哪个 clusterID 下
- 如果需要 Volume 提供通过互联网访问的数据传输服务, 还需要设置
service = {}
Response{ "id": "4dmrgh9n", "clusterID": "BSCC-N32-H", "accountID": "acct1", "service": { "username": "z47vmx-bsccn32h-4dmrgh9n", "password": "5gkxzjvbbcb7svbt9djbxp6rpvdcdsv9", "address": { "webdav": "https://webdav.eci.paracloud.com", "sftp": "sftp.eci.paracloud.com:2022" } } }- 获取 Volume id
4dmrgh9n用于后续挂载持久存储到容器中 - 返回的
service提供 WebDAV 和 SFTP 协议登陆信息 (password只能在创建 Volume 返回时获取,后续无法再获取) - 通过 WebDAV/SFTP 上传完数据后即可执行下面的步骤
-
创建 Container
Requestcurl --request POST \ --url https://eci.paracloud.com/api/v1rc1/clusters/BSCC-N32-H/accounts/acct1/containers?containerID=dnfd42jl \ --header 'Authorization: Bearer KT3eSNnsizsjDIOsn1kL6-12W38xZVTpnsPE59AWVBQ-705200301' \ --header 'Content-Type: application/json' \ --data '{ "instanceType": "n32h.xlarge", "image": "jupyter/minimal-notebook", "command": ["jupyter", "lab", "--port", "$BAT_PORT_jupyter", "--NotebookApp.token", "AapayS", "--no-browser", "--allow-root"], "ports": { "jupyter": {, "https": {} } }, "volumeMounts": { "4dmrgh9n": "/root", }, "labels": { "from": "docs.scc.paracloud.com" }, "envs": { "EXAMPLE_KEY": "EXAMPLE_VALUE" } }'- 在使用 Volume 时,必须明确指定
clusterID为BSCC-N32-H. 当不需要 Volume 时可以指定clusterID为-由系统根据实例类型选择clusterID instanceType必须指定,用于申请资源类型和数量containerID可选,为自定义有意义名字即可,支持字符集为[a-z0-9-]+- 目前受限集群不支持网络隔离,为了避免监听端口冲突需要使用随机端口, 这时添加一个
port, port 的名字 可以自定义(字符集同上),容器启动时会设置环境变量BAT_PORT_<port-name>, 启动服务时引用这个值 - 当需要把 http 服务暴露到互联网上时,需要设置
container.ports.<port-name>.https = {}, 可访问的host在创建容器组后会返回,要想访问容器提供的服务还需要启动容器组并等待其Running - jupyter 访问 url 还需要提供 token, 可以创建资源前生成随机的 token 然后传递进去
- 在挂载 Volume 时, 需要指定
name即同clusters/BSCC-N32-H/accounts/acct1/volumes下的 Volumeid值4dmrgh9n, 以及挂载到容器内的路径/root labels可选, 不影响容器的运行,仅标记该容器volumeMounts中 key 为volumeID, value 为mountPoint。同时可以自定义挂载该 Volume 下的子目录或者文件,格式为<volumeID>:<subPath>, 例如"4dmrgh9n:data/subdir": "/root"。注意如果子路径是文件时,<mountPoint>在容器镜像中不能是存在的目录,例如这样挂载子路径是文件时"4dmrgh9n:data/subdir/myfile": "/root/myfile", 其中/root/myfile中的myfile可以使用自定义名称。同时可以使用选项:dir或:file,格式为<volumeID>:<subPath>:<opt>,在子路径文件或目录不存在时自动创建。envs可选,传递环境变量到容器内
Response{ "id": "dnfd42jl", "clusterID": "BSCC-N32-H", "accountID": "acct1", "instanceType": "n32h.xlarge", "image": "jupyter/minimal-notebook", "command": [ "jupyter", "lab", "--port", "$BAT_PORT_http", "--NotebookApp.token", "AapayS", "--no-browser", "--allow-root" ], "ports": { "jupyter": { "port": 29648, "https": { "host": "z47vmx-bscc-n32-h-dnfd42jl-jupyter-http.eci.paracloud.com" } } }, "volumeMounts": { "4dmrgh9n": "/root" }, "labels": { "from": "docs.scc.paracloud.com" }, "envs": { "EXAMPLE_KEY": "EXAMPLE_VALUE" } }- 返回
id值dnfd42jl用于后续状态查询
- 在使用 Volume 时,必须明确指定
-
等待 Container 运行
Requestcurl --request GET \ --url https://eci.paracloud.com/api/v1rc1/clusters/BSCC-N32-H/accounts/acct1/containers/dnfd42jl \ --header 'Authorization: Bearer KT3eSNnsizsjDIOsn1kL6-12W38xZVTpnsPE59AWVBQ-705200301'Response{ "id": "dnfd42jl", "clusterID": "BSCC-N32-H", "accountID": "acct1", "instanceType": "n32h.xlarge", "image": "jupyter/minimal-notebook", "command": [ "jupyter", "lab", "--port", "$BAT_PORT_http", "--NotebookApp.token", "AapayS", "--no-browser", "--allow-root" ], "ports": { "jupyter": { "port": 29648, "https": { "host": "z47vmx-bscc-n32-h-dnfd42jl-jupyter-http.eci.paracloud.com" } } }, "volumeMounts": { "4dmrgh9n": "/root" }, "labels": { "from": "docs.scc.paracloud.com" }, "envs": { "MY_ENV1": "abc" }, "phase": "Running", "state": "Running", "runID": "14081", "nodeID": "paraai-n32-h-01-agent-43", "createTime": "2023-08-07T10:13:47.796946Z", "startTime": "2023-08-07T18:13:50+08:00" }- 需要等待
phase值为Running时表明容器组处于运行并且对外提供的 https 服务已准备就绪 - 其中的
ports.<port-name>.https.host即对外提供服务的地址 - 容器的状态
phase容器运行的状态,主要用于程序作为判断条件使用,包含:Creating: 容器正在创建, 通常包含创建工作目录和在 HPC 集群提作业等Pending: 容器在运行前的状态,通常包含拉取镜像和调度 HPC 作业等Running: 容器在运行中,如果设置暴露https服务表示已经添加配置到反向代理中Exiting: 容器运行开始自己退出,以及去停止https服务等,如果退出成功会进入到Succeeded否则进入Failed或者UnknownSucceeded: 容器退出码是0Failed: 容器退出码是非0Unknown: 容器是由于底层系统故障退出,比如运行节点故障Canceling: 容器被主动取消,如果已经开始运行则开始取消集群作业和停止https服务等Canceled: 容器被取消掉- 在进入
Succeeded,Failed,Unknown和Canceled后,API 系统会对任务记录和工作目录再保留 7 天,此 7 天期间内仍能查询到此任务
state: 具体原因,通常用于显示人类可读错误。比如phase = Pending,state = ImagePulling表示系统在拉取镜像
startTime为作业开始时间,作业状态为Running后才显示endTime为作业结束时间,只有当作业结束时才显示runTime为作业运行时间,单位为秒,只有当作业结束时才显示
- 需要等待
-
从互联网访问容器服务
https://来自约定值, 目前暂时只提供 https 服务z47vmx-bscc-n32-h-dnfd42jl-jupyter-http.eci.paracloud.com从containers.ports.<port-name>.https.host获取/lab?token=为 jupyter 自身约定AapayS由 API 使用者生成,在启动 jupyter lab --NotebookApp.token 时指定
-
取消 Container
Requestcurl -v --request POST \ --url https://eci.paracloud.com/api/v1rc1/clusters/BSCC-N32-H/accounts/acct1/containers/dnfd42jl:cancel \ --header 'Authorization: Bearer KT3eSNnsizsjDIOsn1kL6-12W38xZVTpnsPE59AWVBQ-705200301'- 取消容器会清理其他资源,工作环境会保留(默认保留 7 天),可以查看日志. Volume 会永久保留,需要单独控制
- 在保留的 7 天内,无法创建同一个 ContainerID 的 Container。如果需要再创建请使用下面删除 Container 接口
Response< HTTP/1.1 204 No Content < Connection: close < Date: Thu, 18 May 2023 03:41:38 GMT
常用 API
-
列出所有 Container
Requestcurl --request GET \ --url https://eci.paracloud.com/api/v1rc1/clusters/BSCC-N32-H/accounts/acct1/containers?pageSize=100&nextPageToken=<---nextPageToken---> \ --header 'Authorization: Bearer KT3eSNnsizsjDIOsn1kL6-12W38xZVTpnsPE59AWVBQ-705200301'Response{ "containers": [ { "id": "dnfd42jl", "clusterID": "BSCC-N32-H", "accountID": "acct1", "image": "jupyter/minimal-notebook", "phase": "Running", "state": "Running", "createTime": "2023-08-07T10:13:47.796946Z" } ], "nextPageToken": "<---nextPageToken--->" }- 默认只列出运行中的 Container,加 all=ture 参数列出所有 Container
- pageSize: 可选,默认值 100,查询 Container 的当前页的数量
- nextPageToken: 可选,默认空,查询 Container 的下一页的令牌,由上一次
列出所有 Container请求返回,响应体中nextPageToken为空则无下一页
-
查看 Container 运行日志
Requestcurl --request GET \ --url https://eci.paracloud.com/api/v1rc1/clusters/BSCC-N32-H/accounts/acct1/containers/dnfd42jl/logs \ --header 'Authorization: Bearer KT3eSNnsizsjDIOsn1kL6-12W38xZVTpnsPE59AWVBQ-705200301'- 可选参数:
tail: int,表示查看日志文件的倒数多少行,默认全文follow: bool,是否保持连接持续查看日志
- 可选参数:
-
删除 Container
Requestcurl -v --request DELETE \ --url https://eci.paracloud.com/api/v1rc1/clusters/BSCC-N32-H/accounts/acct1/containers/dnfd42jl \ --header 'Authorization: Bearer KT3eSNnsizsjDIOsn1kL6-12W38xZVTpnsPE59AWVBQ-705200301'- 删除容器只有挂载 Volume 会保留,其他资源和工作环境都将被清理掉, 无法再查询到此 Container
Response< HTTP/1.1 204 No Content < Connection: close < Date: Thu, 18 May 2023 03:41:38 GMT -
列出所有 Volume
Requestcurl --request GET \ --url https://eci.paracloud.com/api/v1rc1/clusters/-/accounts/-/volumes?pageSize=100&nextPageToken=<---nextPageToken---> \ --header 'Authorization: Bearer KT3eSNnsizsjDIOsn1kL6-12W38xZVTpnsPE59AWVBQ-705200301' \ --header 'Content-Type: application/json'Response{ "volumes": [ { "id": "4dmrgh9n", "clusterID": "BSCC-N32-H", "accountID": "acct1", "phase": "Available", "state": "Available", "createTime": "2023-08-07T10:13:47.796946Z" } ], "nextPageToken": "<---nextPageToken--->" }- pageSize: 可选,默认值 100,查询 Container 的当前页的数量
- nextPageToken: 可选,默认空,查询 Container 的下一页的令牌,由上一次
列出所有 Volume请求返回,响应体中nextPageToken为空则无下一页 - Volume 的状态
phaseVolume 运行的状态,主要用于程序作为判断条件使用,包含:Creating: Volume 正在创建Pending: Volume 在运行前的状态,通常是在创建 serviceAvailable: Volume 在运行中,此时 Volume 可用Failed: Volume 创建失败Deleting: Volume 在删除中,此时 Volume 不可用,可以撤销删除Deleted: Volume 已删除,此时 Volume 不可用,不可以撤销删除Unknown: 表示内部和底层系统故障
state: 具体原因,通常用于显示人类可读错误。比如phase = Pending,state = ServiceCreating表示系统正在创建 service
-
删除指定的 Volume
Requestcurl -v --request DELETE \ --url https://eci.paracloud.com/api/v1rc1/clusters/BSCC-N32-H/accounts/acct1/volumes/4dmrgh9n?force=false \ --header 'Authorization: Bearer KT3eSNnsizsjDIOsn1kL6-12W38xZVTpnsPE59AWVBQ-705200301'- 参数
force: 可选,默认为false,会保留 Volume 7 天,可以通过撤销删除恢复,force=true可以强制删除 Volume,此时无法通过撤销删除恢复
ResponseHTTP/1.1 204 No Content Connection: close Date: Thu, 18 May 2023 06:14:36 GMT - 参数
-
撤销删除指定的 Volume
Requestcurl -v --request POST \ --url https://eci.paracloud.com/api/v1rc1/clusters/BSCC-N32-H/accounts/acct1/volumes/4dmrgh9n:undelete \ --header 'Authorization: Bearer KT3eSNnsizsjDIOsn1kL6-12W38xZVTpnsPE59AWVBQ-705200301'ResponseHTTP/1.1 204 No Content Connection: close Date: Thu, 18 May 2023 06:14:36 GMT