Loading
close

模型部署

time 更新时间:2026-10-08 16:41:12

模型部署

模型部署将推理引擎与模型文件组合为可运行的推理服务。创建、更新、启动和停止接口在提交工作负载变更后即返回,实际状态由 KServe 异步收敛;调用方应通过详情接口中的 status、ready、stopped 和 conditions 判断部署是否最终可用。

部署是项目级资源。普通调用方只能访问当前项目的部署,具有全局读取权限的管理员可以查看所有项目的部署。创建部署时可以引用当前项目或公共的推理引擎、模型和模型文件,但这些关联资源的可见性必须一致。

创建部署至少需要 name 和 engineId,并且必须通过 artifactId 或 modelUri 解析出模型 OCI URI。replicas 省略或小于 1 时按 1 处理。更新接口不能替换已经部署的 modelId、artifactId 或 modelUri;如需更换模型文件,应创建新的部署。

部署响应中的 spec.endpoint 是集群内访问地址,仅在 KServe 已报告工作负载 Service 后返回,不能将其视为面向公网的推理地址。日志接口返回纯文本,follow=true 或 follow=1 时持续输出;终端接口使用 WebSocket。

方法 路径(产品接口统一前缀 /api/v1) 功能
GET /deployments 查询模型部署
POST /deployments 创建模型部署
GET /deployments/api-schemas 查询部署支持的 API 协议
GET /deployments/{id} 获取模型部署详情
PATCH /deployments/{id} 更新模型部署配置
POST /deployments/{id}/stop 停止部署
POST /deployments/{id}/start 启动部署
DELETE /deployments/{id} 删除模型部署
GET /deployments/{id}/pods 查询部署 Pod
GET /deployments/{id}/logs 读取或持续跟踪容器日志
GET /deployments/{id}/metrics 查询部署监控指标
GET /deployments/{id}/exec 建立 WebSocket 终端会话

查询模型部署

功能介绍

分页查询调用方有权查看的模型部署。普通调用方返回当前项目的部署;具有全局读取权限的管理员可以返回所有项目的部署。

列表响应提供部署的目录状态和配置快照,不读取实时 ready 和 conditions。需要判断工作负载的实时状态时,应调用部署详情接口。

访问要求:有效 Token;需要模型部署读取权限。

URI

GET /api/v1/deployments

查询参数

参数 类型 必选 描述
page integer 否 页码,从 1 开始;省略或小于 1 时按 1 返回
page_size integer 否 每页数量,最大 200;省略或传 0 时返回全部匹配项,响应中的 page_size 为 0

请求消息

无请求体。

响应消息

参数 参数类型 描述
items array 部署列表;对象字段与部署详情基本一致,但不包含实时 ready 和 conditions
total integer 匹配条件的部署总数
page integer 当前页码
page_size integer 请求的每页数量;未限制时为 0

请求示例

GET https://{endpoint}/api/v1/deployments?page=1&page_size=20
x-keystone-token: <Keystone Token>

正常响应示例

HTTP/1.1 200 OK
Content-Type: application/json
{
  "items": [
    {
      "id": "deployment-7f3a",
      "name": "qwen-chat",
      "description": "Qwen 对话模型",
      "status": "ready",
      "projectId": "project-a",
      "ownerUserId": "user-a",
      "backend": {
        "catalog": "k8s",
        "type": "LLMInferenceService",
        "id": "project-a/qwen-chat"
      },
      "spec": {
        "architecture": "amd64",
        "k8sName": "qwen-chat",
        "engineId": "engine-vllm",
        "engineName": "vLLM",
        "engineConfigName": "vllm-config",
        "modelId": "model-qwen",
        "artifactId": "artifact-qwen",
        "artifactName": "Qwen2.5-7B-Instruct",
        "modelUri": "oci://registry.example.com/models/qwen@sha256:0123456789abcdef",
        "modelName": "qwen2.5-7b-instruct",
        "replicas": 1,
        "endpoint": "http://qwen-chat-kserve-workload-svc.project-a.svc.cluster.local:8000"
      },
      "stopped": false,
      "labels": {
        "beacon.io/runtime": "vllm"
      },
      "createdAt": "2026-09-21T00:00:00Z",
      "updatedAt": "2026-09-21T00:05:00Z"
    }
  ],
  "total": 1,
  "page": 1,
  "page_size": 20
}

状态码与错误码

成功状态码:200。

HTTP error 说明
401 unauthorized 未认证或 Token 无效
403 forbidden 无模型部署读取权限
500 internal_error 查询部署列表失败

错误返回格式见调用方式。

创建模型部署

功能介绍

在当前项目中创建模型部署,并提交对应的 KServe 工作负载。接口成功仅表示部署资源已经创建,初始 status 为 pending;应继续查询详情,直到 status 变为 ready,或者根据 conditions 处理异常。

访问要求:有效 Token;需要模型部署写入权限。平台已配置 Kubernetes 时,还需要项目作用域令牌。

URI

POST /api/v1/deployments

请求消息

Content-Type: application/json。

参数 参数类型 是否必选 描述
name string 是 部署显示名称;去除首尾空白后不能为空,同时用于生成 Kubernetes 工作负载名称
description string 否 部署说明
engineId string 是 推理引擎 ID;可以引用当前项目或公共引擎
modelId string 否 来源模型 ID,用于记录模型关联关系
artifactId string 条件必选 模型文件 ID;与 modelUri 至少提供一种。提供后优先从该模型文件解析 OCI URI
modelUri string 条件必选 模型 OCI URI;未提供可解析的 artifactId 时必选。省略 oci:// 前缀时服务端会自动补全
modelName string 否 推理服务对外标识的模型名称;引擎引用 SERVED_MODEL_NAME 时建议提供
replicas integer 否 期望副本数;省略或小于 1 时按 1 处理
image string 否 覆盖引擎默认值的容器镜像
command array 否 覆盖引擎默认值的容器启动命令
args array 否 覆盖引擎默认值的容器启动参数
env array 否 覆盖或补充的容器环境变量
resources object / null 否 覆盖引擎默认值的计算资源配置
kvCacheOffloading object / null 否 KV Cache CPU 卸载配置,仅适用于使用加速器资源的 vLLM 引擎
labels object 否 部署标签,键和值均为字符串;系统管理的标签可能被补充或覆盖
lora object / null 否 LoRA 适配器配置,仅适用于 vLLM 引擎
参数 参数类型 是否必选 描述
env[].name string 是 环境变量名称
env[].value string 是 环境变量值
resources.cpu string 否 Kubernetes CPU quantity,例如 4 或 500m
resources.memory string 否 Kubernetes 内存 quantity,例如 16Gi
resources.gpu string 否 加速器数量;非空值会覆盖引擎中的加速器配置
kvCacheOffloading.cpu string 条件必选 用于卸载 KV Cache 的正数内存 quantity,例如 8Gi
kvCacheOffloading.evictionPolicy string 否 淘汰策略:lru 或 arc;省略时使用 lru
lora.adapters array 否 LoRA 适配器列表;省略或传空数组表示不加载适配器
lora.adapters[].name string 是 适配器名称;同一部署内必须唯一
lora.adapters[].modelId string 否 适配器来源模型 ID
lora.adapters[].artifactId string 是 LoRA 模型文件 ID;文件必须已就绪、带有 LoRA 标识并使用摘要固定的 OCI URI

当同时提供 engineId、modelId、artifactId 或 LoRA 模型文件时,这些资源必须全部为公共资源,或全部为当前项目的私有资源。kvCacheOffloading 不能与命令、参数、环境变量或引擎 YAML 中手工配置的 --kv-transfer-config 同时使用。

响应消息

参数 参数类型 描述
id string 部署唯一标识
name string 部署显示名称
description string 部署说明
status string 部署状态;创建成功时为 pending
projectId string 所属项目 ID
projectName string 项目名称;空值时省略
domainId string 所属域 ID;空值时省略
domainName string 所属域名称;空值时省略
ownerUserId string 创建者用户 ID
ownerName string 创建者名称;空值时省略
backend object 后端工作负载引用,包含 catalog、type 和 id
spec object 部署配置快照;字段与请求配置及服务端解析出的引擎、模型文件信息对应
stopped boolean 是否已完全停止;创建成功时为 false
labels object 部署标签;空值时省略
createdAt string(date-time) 创建时间,RFC3339
updatedAt string(date-time) 更新时间,RFC3339

创建响应不包含实时 ready 和 conditions。这些字段需要通过详情接口读取。

请求示例

POST https://{endpoint}/api/v1/deployments
x-keystone-token: <Keystone Token>
Content-Type: application/json
{
  "name": "qwen-chat",
  "description": "Qwen 对话模型",
  "engineId": "engine-vllm",
  "modelId": "model-qwen",
  "artifactId": "artifact-qwen",
  "modelName": "qwen2.5-7b-instruct",
  "replicas": 1
}

正常响应示例

HTTP/1.1 201 Created
Content-Type: application/json
{
  "id": "deployment-7f3a",
  "name": "qwen-chat",
  "description": "Qwen 对话模型",
  "status": "pending",
  "projectId": "project-a",
  "ownerUserId": "user-a",
  "backend": {
    "catalog": "k8s",
    "type": "LLMInferenceService",
    "id": "project-a/qwen-chat"
  },
  "spec": {
    "architecture": "amd64",
    "k8sName": "qwen-chat",
    "engineId": "engine-vllm",
    "engineName": "vLLM",
    "engineConfigName": "vllm-config",
    "modelId": "model-qwen",
    "artifactId": "artifact-qwen",
    "artifactName": "Qwen2.5-7B-Instruct",
    "modelUri": "oci://registry.example.com/models/qwen@sha256:0123456789abcdef",
    "modelName": "qwen2.5-7b-instruct",
    "replicas": 1
  },
  "stopped": false,
  "labels": {
    "beacon.io/runtime": "vllm"
  },
  "createdAt": "2026-09-21T00:00:00Z",
  "updatedAt": "2026-09-21T00:00:00Z"
}

状态码与错误码

成功状态码:201。

HTTP error 说明
400 invalid_request 请求体格式错误、必填字段缺失、关联资源不存在或部署配置不符合要求;具体原因见 message
401 unauthorized 未认证,或缺少项目作用域令牌
403 forbidden 无模型部署写入权限,或 Kubernetes 拒绝操作
404 not_found 目标 Kubernetes 命名空间或对象不存在
409 conflict 同名工作负载或部署资源已存在
422 invalid_request 引擎后端引用无效,或 Kubernetes 拒绝工作负载配置
502 backend_unavailable Kubernetes API 不可用
500 internal_error 创建部署失败

错误返回格式见调用方式。

查询部署支持的 API 协议

功能介绍

一次查询调用方可见的所有部署分别支持哪些推理 API 协议,可用于创建 AI 服务提供者时筛选部署和选择协议。当前协议值为 OpenAI 或 Cohere。

服务端根据部署工作负载实际暴露的接口确定协议。如果工作负载尚未就绪、已停止或无法访问,则返回兼容性默认值 OpenAI,并将 unreachable 标记为 true。因此该结果用于辅助配置,不代表部署当前已经可以处理推理请求。

访问要求:有效 Token;需要模型部署读取权限。

URI

GET /api/v1/deployments/api-schemas

请求消息

无请求体。

响应消息

参数 类型 描述
items object 以部署 ID 为键的协议查询结果
items.{deploymentId}.schemas array 部署支持的协议列表,取值为 OpenAI、Cohere
items.{deploymentId}.recommended string 推荐使用的协议;支持 OpenAI 时优先推荐 OpenAI
items.{deploymentId}.unreachable boolean 是否因工作负载不可访问而使用默认结果;值为 false 时省略

请求示例

GET https://{endpoint}/api/v1/deployments/api-schemas
x-keystone-token: <Keystone Token>

正常响应示例

HTTP/1.1 200 OK
Content-Type: application/json
{
  "items": {
    "deployment-7f3a": {
      "schemas": [
        "OpenAI"
      ],
      "recommended": "OpenAI"
    },
    "deployment-8b2c": {
      "schemas": [
        "OpenAI"
      ],
      "recommended": "OpenAI",
      "unreachable": true
    }
  }
}

状态码与错误码

成功状态码:200。

HTTP error 说明
401 unauthorized 未认证或 Token 无效
403 forbidden 无模型部署读取权限
500 internal_error 查询部署列表失败

错误返回格式见调用方式。

获取模型部署详情

功能介绍

获取指定部署的配置及实时运行状态。服务端会读取 KServe 工作负载,更新 ready、conditions、status 和集群内访问地址;工作负载暂时无法读取时,仍可能返回目录中保存的部署信息。

访问要求:有效 Token;需要模型部署读取权限。普通调用方只能读取当前项目的部署,具有全局读取权限的管理员可以读取其他项目的部署。

URI

GET /api/v1/deployments/{id}
参数 类型 必选 描述
id string 是 部署 ID

请求消息

无请求体。

响应消息

参数 参数类型 描述
id string 部署唯一标识
name string 部署显示名称
description string 部署说明
status string 部署状态:pending、ready、stopping 或 stopped
projectId string 所属项目 ID
projectName string 项目名称;空值时省略
domainId string 所属域 ID;空值时省略
domainName string 所属域名称;空值时省略
ownerUserId string 创建者用户 ID
ownerName string 创建者名称;空值时省略
backend object 后端工作负载引用,包含 catalog、type 和 id
spec object 部署配置快照,主要字段见下表
ready string KServe Ready 条件值:True、False 或 Unknown;无法读取时可能省略
stopped boolean 工作负载是否已完全停止;stopping 阶段仍为 false
conditions array KServe 状态条件;无条件信息时省略
labels object 部署标签;空值时省略
createdAt string(date-time) 创建时间,RFC3339
updatedAt string(date-time) 更新时间,RFC3339
参数 参数类型 描述
spec.architecture string 工作负载架构,当前为 amd64 或 arm64
spec.k8sName string Kubernetes 工作负载名称
spec.engineId string 推理引擎 ID
spec.engineName string 推理引擎名称
spec.engineConfigName string 引擎对应的 KServe 配置名称
spec.modelId string 来源模型 ID;未关联时省略
spec.artifactId string 模型文件 ID;未关联时省略
spec.artifactName string 模型文件名称;未关联时省略
spec.modelUri string 实际部署的模型 OCI URI
spec.modelName string 推理服务使用的模型名称;空值时省略
spec.lora object 已解析的 LoRA 适配器配置;未配置时省略
spec.lora.adapters[].name string LoRA 适配器名称
spec.lora.adapters[].modelId string 适配器来源模型 ID;未关联时省略
spec.lora.adapters[].artifactId string LoRA 模型文件 ID
spec.lora.adapters[].uri string 服务端从模型文件解析出的、使用摘要固定的 OCI URI
spec.replicas integer 期望副本数
spec.image string 部署级镜像覆盖;未配置时省略
spec.command array 部署级启动命令覆盖;未配置时省略
spec.args array 部署级启动参数覆盖;未配置时省略
spec.env array 部署级环境变量;未配置时省略
spec.resources object 部署级计算资源覆盖;未配置时省略
spec.kvCacheOffloading object KV Cache CPU 卸载配置;未配置时省略
spec.endpoint string 集群内工作负载地址;尚未就绪或已停止时省略
conditions[].type string 条件类型
conditions[].status string 条件状态
conditions[].reason string 条件原因;空值时省略
conditions[].message string 条件说明;空值时省略
conditions[].lastTransitionTime string(date-time) 最近转换时间;空值时省略

请求示例

GET https://{endpoint}/api/v1/deployments/deployment-7f3a
x-keystone-token: <Keystone Token>

正常响应示例

HTTP/1.1 200 OK
Content-Type: application/json
{
  "id": "deployment-7f3a",
  "name": "qwen-chat",
  "description": "Qwen 对话模型",
  "status": "ready",
  "projectId": "project-a",
  "ownerUserId": "user-a",
  "backend": {
    "catalog": "k8s",
    "type": "LLMInferenceService",
    "id": "project-a/qwen-chat"
  },
  "spec": {
    "architecture": "amd64",
    "k8sName": "qwen-chat",
    "engineId": "engine-vllm",
    "engineName": "vLLM",
    "engineConfigName": "vllm-config",
    "modelId": "model-qwen",
    "artifactId": "artifact-qwen",
    "artifactName": "Qwen2.5-7B-Instruct",
    "modelUri": "oci://registry.example.com/models/qwen@sha256:0123456789abcdef",
    "modelName": "qwen2.5-7b-instruct",
    "replicas": 1,
    "endpoint": "http://qwen-chat-kserve-workload-svc.project-a.svc.cluster.local:8000"
  },
  "ready": "True",
  "stopped": false,
  "conditions": [
    {
      "type": "Ready",
      "status": "True",
      "lastTransitionTime": "2026-09-21T00:05:00Z"
    }
  ],
  "labels": {
    "beacon.io/runtime": "vllm"
  },
  "createdAt": "2026-09-21T00:00:00Z",
  "updatedAt": "2026-09-21T00:05:00Z"
}

状态码与错误码

成功状态码:200。

HTTP error 说明
401 unauthorized 未认证或 Token 无效
403 forbidden 无模型部署读取权限
404 not_found 部署不存在或无权访问该项目的部署
500 internal_error 读取部署失败

错误返回格式见调用方式。

更新模型部署配置

功能介绍

按字段更新部署。省略的字段保持不变;修改运行配置后,KServe 会异步更新工作负载,响应中的 status 变为 pending。仅修改 name 或 description 时不会重命名或重启已有 Kubernetes 工作负载。

此接口不能替换 modelId、artifactId、modelUri、resources 或 labels。如需更换模型文件,应创建新的部署。

访问要求:有效 Token;需要当前项目的模型部署写入权限。修改运行配置且平台已配置 Kubernetes 时,还需要项目作用域令牌。

URI

PATCH /api/v1/deployments/{id}
参数 类型 必选 描述
id string 是 部署 ID

请求消息

Content-Type: application/json。

参数 参数类型 是否必选 描述
name string 否 新的显示名称;去除首尾空白后不能为空,不会修改 Kubernetes 工作负载名称
description string 否 新的部署说明
engineId string 否 新的推理引擎 ID;必须与已部署的模型文件具有相同可见性
modelName string 否 新的服务模型名称;空字符串表示清空
replicas integer 否 新的期望副本数,必须大于等于 1
image string 否 新的容器镜像覆盖;空字符串表示恢复使用引擎默认值
command array 否 新的启动命令覆盖;空数组表示清除覆盖
args array 否 新的启动参数覆盖;空数组表示清除覆盖
env array 否 新的环境变量数组;空数组表示清除部署级环境变量
kvCacheOffloading object / null 否 新的 KV Cache CPU 卸载配置;null 表示关闭,省略表示不修改
lora object / null 否 新的 LoRA 配置;null 或空 adapters 数组表示清除,省略表示不修改

env、kvCacheOffloading 和 lora 的子字段及约束与创建接口相同。切换到非 vLLM 引擎前,必须先移除已配置的 LoRA 适配器。

响应消息

返回更新后的部署对象,字段与“获取模型部署详情”相同,但该响应不读取实时工作负载,因此通常不包含 ready 和 conditions。运行配置发生变化时,status 为 pending。

请求示例

PATCH https://{endpoint}/api/v1/deployments/deployment-7f3a
x-keystone-token: <Keystone Token>
Content-Type: application/json
{
  "replicas": 2,
  "modelName": "qwen-chat-v2"
}

正常响应示例

HTTP/1.1 200 OK
Content-Type: application/json
{
  "id": "deployment-7f3a",
  "name": "qwen-chat",
  "description": "Qwen 对话模型",
  "status": "pending",
  "projectId": "project-a",
  "ownerUserId": "user-a",
  "backend": {
    "catalog": "k8s",
    "type": "LLMInferenceService",
    "id": "project-a/qwen-chat"
  },
  "spec": {
    "architecture": "amd64",
    "k8sName": "qwen-chat",
    "engineId": "engine-vllm",
    "engineName": "vLLM",
    "engineConfigName": "vllm-config",
    "modelId": "model-qwen",
    "artifactId": "artifact-qwen",
    "artifactName": "Qwen2.5-7B-Instruct",
    "modelUri": "oci://registry.example.com/models/qwen@sha256:0123456789abcdef",
    "modelName": "qwen-chat-v2",
    "replicas": 2
  },
  "stopped": false,
  "labels": {
    "beacon.io/runtime": "vllm"
  },
  "createdAt": "2026-09-21T00:00:00Z",
  "updatedAt": "2026-09-21T01:00:00Z"
}

状态码与错误码

成功状态码:200。

HTTP error 说明
400 invalid_request 请求体格式错误、字段取值无效或关联资源不符合要求;具体原因见 message
401 unauthorized 未认证,或修改工作负载时缺少项目作用域令牌
403 forbidden 无模型部署写入权限,或 Kubernetes 拒绝操作
404 not_found 部署、引擎或目标 Kubernetes 对象不存在
409 conflict 更新与当前资源状态冲突
422 invalid_request 后端引用无效,或 Kubernetes 拒绝工作负载配置
502 backend_unavailable Kubernetes API 不可用
500 internal_error 更新部署失败

错误返回格式见调用方式。

停止部署

功能介绍

请求 KServe 停止指定部署。服务端保留部署配置和期望副本数,以便后续按原配置启动。

停止是异步过程。请求后如果 Pod 尚未全部退出,响应中的 status 为 stopping 且 stopped 为 false;Pod 全部退出后,详情接口返回 status: stopped 和 stopped: true。

访问要求:有效 Token 和项目作用域令牌;需要当前项目的模型部署写入权限。

URI

POST /api/v1/deployments/{id}/stop
参数 类型 必选 描述
id string 是 部署 ID

请求消息

无请求体。

响应消息

返回已提交停止请求的部署对象,字段与“获取模型部署详情”相同,但不包含实时 ready 和 conditions。

请求示例

POST https://{endpoint}/api/v1/deployments/deployment-7f3a/stop
x-keystone-token: <Keystone Token>

正常响应示例

HTTP/1.1 200 OK
Content-Type: application/json
{
  "id": "deployment-7f3a",
  "name": "qwen-chat",
  "description": "Qwen 对话模型",
  "status": "stopping",
  "projectId": "project-a",
  "ownerUserId": "user-a",
  "backend": {
    "catalog": "k8s",
    "type": "LLMInferenceService",
    "id": "project-a/qwen-chat"
  },
  "spec": {
    "architecture": "amd64",
    "k8sName": "qwen-chat",
    "engineId": "engine-vllm",
    "engineName": "vLLM",
    "modelUri": "oci://registry.example.com/models/qwen@sha256:0123456789abcdef",
    "replicas": 1,
    "endpoint": "http://qwen-chat-kserve-workload-svc.project-a.svc.cluster.local:8000"
  },
  "stopped": false,
  "labels": {
    "beacon.io/runtime": "vllm"
  },
  "createdAt": "2026-09-21T00:00:00Z",
  "updatedAt": "2026-09-21T02:00:00Z"
}

如果停止请求提交时工作负载 Pod 已经全部退出,接口可直接返回 status: stopped 和 stopped: true。

状态码与错误码

成功状态码:200。

HTTP error 说明
401 unauthorized 未认证或缺少项目作用域令牌
403 forbidden 无模型部署写入权限,或 Kubernetes 拒绝操作
404 not_found 部署或目标 Kubernetes 对象不存在
409 conflict Kubernetes 更新发生冲突
422 invalid_backend / invalid_request 部署没有有效工作负载,或 Kubernetes 拒绝请求
502 backend_unavailable Kubernetes API 不可用
503 unavailable Kubernetes 未配置
500 internal_error 停止部署失败

错误返回格式见调用方式。

启动部署

功能介绍

移除部署的停止标记,请求 KServe 按原有配置重新创建工作负载。接口返回时 status 为 pending、stopped 为 false,实际就绪仍需通过详情接口确认。

访问要求:有效 Token 和项目作用域令牌;需要当前项目的模型部署写入权限。

URI

POST /api/v1/deployments/{id}/start
参数 类型 必选 描述
id string 是 部署 ID

请求消息

无请求体。

响应消息

返回已提交启动请求的部署对象,字段与“获取模型部署详情”相同,但不包含实时 ready 和 conditions。

请求示例

POST https://{endpoint}/api/v1/deployments/deployment-7f3a/start
x-keystone-token: <Keystone Token>

正常响应示例

HTTP/1.1 200 OK
Content-Type: application/json
{
  "id": "deployment-7f3a",
  "name": "qwen-chat",
  "description": "Qwen 对话模型",
  "status": "pending",
  "projectId": "project-a",
  "ownerUserId": "user-a",
  "backend": {
    "catalog": "k8s",
    "type": "LLMInferenceService",
    "id": "project-a/qwen-chat"
  },
  "spec": {
    "architecture": "amd64",
    "k8sName": "qwen-chat",
    "engineId": "engine-vllm",
    "engineName": "vLLM",
    "modelUri": "oci://registry.example.com/models/qwen@sha256:0123456789abcdef",
    "replicas": 1
  },
  "stopped": false,
  "labels": {
    "beacon.io/runtime": "vllm"
  },
  "createdAt": "2026-09-21T00:00:00Z",
  "updatedAt": "2026-09-21T03:00:00Z"
}

状态码与错误码

成功状态码:200。

HTTP error 说明
401 unauthorized 未认证或缺少项目作用域令牌
403 forbidden 无模型部署写入权限,或 Kubernetes 拒绝操作
404 not_found 部署或目标 Kubernetes 对象不存在
409 conflict Kubernetes 更新发生冲突
422 invalid_backend / invalid_request 部署没有有效工作负载,或 Kubernetes 拒绝请求
502 backend_unavailable Kubernetes API 不可用
503 unavailable Kubernetes 未配置
500 internal_error 启动部署失败

错误返回格式见调用方式。

删除模型部署

功能介绍

删除当前项目中的模型部署。配置 Kubernetes 时,服务端先删除对应的 KServe 工作负载,再将部署记录标记为已删除。该操作不会删除关联的推理引擎、模型或模型文件。

访问要求:有效 Token;需要当前项目的模型部署写入权限。配置 Kubernetes 时还需要项目作用域令牌。

URI

DELETE /api/v1/deployments/{id}
参数 类型 必选 描述
id string 是 部署 ID

请求消息

无请求体。

响应消息

成功返回 204 No Content,无响应体。

请求示例

DELETE https://{endpoint}/api/v1/deployments/deployment-7f3a
x-keystone-token: <Keystone Token>

正常响应示例

HTTP/1.1 204 No Content

状态码与错误码

成功状态码:204。

HTTP error 说明
401 unauthorized 未认证,或配置 Kubernetes 时缺少项目作用域令牌
403 forbidden 无模型部署写入权限,或 Kubernetes 拒绝操作
404 not_found 部署或目标 Kubernetes 对象不存在
409 conflict Kubernetes 删除操作发生冲突
422 invalid_request Kubernetes 拒绝删除请求
502 backend_unavailable Kubernetes API 不可用
500 internal_error 删除部署失败

错误返回格式见调用方式。

查询部署 Pod

功能介绍

查询指定部署当前的工作负载 Pod 及其容器状态,可用于选择日志或终端会话的目标 Pod 和容器。已成功结束的历史 Pod 不在结果中。

访问要求:有效 Token;需要模型部署读取权限。

URI

GET /api/v1/deployments/{id}/pods
参数 类型 必选 描述
id string 是 部署 ID

请求消息

无请求体。

响应消息

参数 参数类型 描述
items array 当前工作负载 Pod 列表,按 Pod 名称排序
items[].name string Pod 名称
items[].phase string Kubernetes Pod phase,例如 Pending、Running 或 Failed
items[].status string 便于展示的详细状态,例如 Running、PodInitializing 或 CrashLoopBackOff
items[].nodeName string 所在节点名称;未调度时省略
items[].startTime string(date-time) Pod 启动时间;尚未启动时省略
items[].containers array 容器列表
items[].containers[].name string 容器名称
items[].containers[].image string 容器镜像;空值时省略
items[].containers[].imageId string 已运行镜像 ID;空值时省略
items[].containers[].ready boolean 容器是否就绪
items[].containers[].restartCount integer 容器重启次数
items[].containers[].state string running、waiting 或 terminated;状态未知时省略

请求示例

GET https://{endpoint}/api/v1/deployments/deployment-7f3a/pods
x-keystone-token: <Keystone Token>

正常响应示例

HTTP/1.1 200 OK
Content-Type: application/json
{
  "items": [
    {
      "name": "qwen-chat-kserve-6d7c9f8b6d-abcde",
      "phase": "Running",
      "status": "Running",
      "nodeName": "worker-01",
      "startTime": "2026-09-21T00:04:00Z",
      "containers": [
        {
          "name": "main",
          "image": "registry.example.com/vllm:v1",
          "ready": true,
          "restartCount": 0,
          "state": "running"
        }
      ]
    }
  ]
}

状态码与错误码

成功状态码:200。

HTTP error 说明
401 unauthorized 未认证或 Token 无效
403 forbidden 无模型部署读取权限,或 Kubernetes 拒绝操作
404 not_found 部署或目标 Kubernetes 对象不存在
422 invalid_backend / invalid_request 部署没有有效工作负载,或 Kubernetes 拒绝请求
502 backend_unavailable Kubernetes API 不可用
503 unavailable Kubernetes 未配置
500 internal_error 查询 Pod 失败

错误返回格式见调用方式。

读取或持续跟踪容器日志

功能介绍

读取部署容器最近的日志,或保持 HTTP 连接持续接收新增日志。单 Pod 部署可以省略 pod;存在多个 Pod 时必须先通过 Pod 查询接口选择目标。建议始终显式传入 container。

访问要求:有效 Token;需要模型部署读取权限。

URI

GET /api/v1/deployments/{id}/logs
参数 类型 必选 描述
id string 是 部署 ID

查询参数

参数 类型 必选 描述
pod string 条件必选 Pod 名称;部署当前存在多个 Pod 时必选,且必须属于该部署
container string 否 容器名称;建议使用 Pod 查询接口返回的容器名称
follow boolean / integer 否 true 或 1 表示持续跟踪;其他值表示仅读取当前日志
tailLines integer 否 返回末尾日志行数;省略、无法解析或小于等于 0 时为 500

请求消息

无请求体。

响应消息

成功响应的 Content-Type 为 text/plain; charset=utf-8。未开启 follow 时连接在当前日志返回完毕后结束;开启后服务端逐块写入新日志,直到客户端断开或日志流结束。

请求示例

GET https://{endpoint}/api/v1/deployments/deployment-7f3a/logs?pod=qwen-chat-kserve-6d7c9f8b6d-abcde&container=main&tailLines=200
x-keystone-token: <Keystone Token>

正常响应示例

HTTP/1.1 200 OK
Content-Type: text/plain; charset=utf-8
X-Accel-Buffering: no

INFO model loaded
INFO server listening on :8000

状态码与错误码

成功状态码:200。

HTTP error 说明
400 pod_required 部署存在多个 Pod,但未指定 pod
400 invalid_pod 指定的 Pod 不属于该部署
401 unauthorized 未认证或 Token 无效
403 forbidden 无模型部署读取权限,或 Kubernetes 拒绝操作
404 no_pods 部署当前没有工作负载 Pod
404 not_found 部署、Pod、容器或目标 Kubernetes 对象不存在
422 invalid_backend / invalid_request 部署没有有效工作负载,或 Kubernetes 拒绝请求
502 backend_unavailable Kubernetes API 不可用
503 unavailable Kubernetes 未配置
500 internal_error 读取日志失败

错误返回格式见调用方式。

查询部署监控指标

功能介绍

查询指定部署在最近时间窗口内的 CPU、内存和网络时间序列。传入 runtime=vllm 时还会查询 vLLM 的延迟与吞吐量指标;如果部署尚未报告工作负载 Service,则仍返回通用资源指标,但省略 vllm。

访问要求:有效 Token;需要模型部署读取权限。

URI

GET /api/v1/deployments/{id}/metrics
参数 类型 必选 描述
id string 是 部署 ID

查询参数

参数 类型 必选 描述
range string 否 时间窗口:5m、15m、1h 或 3h;省略或传入其他值时为 30 分钟
runtime string 否 传 vllm 时附加查询 vLLM 指标;不区分大小写,其他值仅返回通用资源指标

请求消息

无请求体。

响应消息

每个时间序列由 [Unix 时间戳(秒), 数值] 组成。

参数 参数类型 描述
cpu array<[number, number]> CPU 使用量,单位为核
memory array<[number, number]> 内存工作集,单位为字节
netRx array<[number, number]> 网络接收速率,单位为 bytes/s
netTx array<[number, number]> 网络发送速率,单位为 bytes/s
stepSeconds integer 时间序列采样步长,单位为秒;服务端按窗口生成约 60 个点,最小 15 秒
vllm object vLLM 指标;未请求、无工作负载 Service 或无可用数据时可能省略
vllm.ttftP50 / ttftP95 / ttftP99 / ttftAvg array<[number, number]> 首 Token 延迟,单位为秒
vllm.tpotP50 / tpotP95 / tpotP99 / tpotAvg array<[number, number]> 每输出 Token 延迟,单位为秒
vllm.promptThroughput array<[number, number]> 输入 Token 吞吐量,单位为 tokens/s
vllm.generationThroughput array<[number, number]> 输出 Token 吞吐量,单位为 tokens/s
vllm.totalThroughput array<[number, number]> 总 Token 吞吐量,单位为 tokens/s

请求示例

GET https://{endpoint}/api/v1/deployments/deployment-7f3a/metrics?range=1h&runtime=vllm
x-keystone-token: <Keystone Token>

正常响应示例

HTTP/1.1 200 OK
Content-Type: application/json
{
  "cpu": [
    [1789948800, 0.5]
  ],
  "memory": [
    [1789948800, 8589934592]
  ],
  "netRx": [
    [1789948800, 1024]
  ],
  "netTx": [
    [1789948800, 2048]
  ],
  "stepSeconds": 60,
  "vllm": {
    "ttftP50": [
      [1789948800, 0.12]
    ],
    "ttftP95": [
      [1789948800, 0.21]
    ],
    "ttftP99": [
      [1789948800, 0.28]
    ],
    "ttftAvg": [
      [1789948800, 0.14]
    ],
    "tpotP50": [
      [1789948800, 0.018]
    ],
    "tpotP95": [
      [1789948800, 0.026]
    ],
    "tpotP99": [
      [1789948800, 0.032]
    ],
    "tpotAvg": [
      [1789948800, 0.02]
    ],
    "promptThroughput": [
      [1789948800, 180.5]
    ],
    "generationThroughput": [
      [1789948800, 72.3]
    ],
    "totalThroughput": [
      [1789948800, 252.8]
    ]
  }
}

状态码与错误码

成功状态码:200。

HTTP error 说明
401 unauthorized 未认证或 Token 无效
403 forbidden 无模型部署读取权限
404 not_found 部署不存在或无权访问该项目的部署
422 invalid_backend 部署没有有效工作负载
502 prometheus_error Prometheus/Thanos 查询失败,具体原因见 message
503 unavailable Kubernetes 或监控服务未配置
500 internal_error 查询部署信息失败

错误返回格式见调用方式。

建立 WebSocket 终端会话

功能介绍

将 HTTP 连接升级为 WebSocket,并在指定部署容器中建立交互式终端。单 Pod 部署可以省略 pod;存在多个 Pod 时必须指定目标。该接口可以在容器中执行命令,权限要求高于普通读取接口。

访问要求:有效 Token;需要模型部署写入权限。

URI

GET /api/v1/deployments/{id}/exec
参数 类型 必选 描述
id string 是 部署 ID

查询参数

参数 类型 必选 描述
pod string 条件必选 Pod 名称;部署当前存在多个 Pod 时必选,且必须属于该部署
container string 否 容器名称;建议使用 Pod 查询接口返回的容器名称

请求消息

客户端通过文本帧发送 JSON 消息:

字段 类型 描述
type string 消息类型:input 或 resize
data string type=input 时发送到终端的输入内容
cols integer type=resize 时的终端列数
rows integer type=resize 时的终端行数

输入示例:{"type":"input","data":"ls\n"}。调整终端大小示例:{"type":"resize","cols":120,"rows":30}。

响应消息

握手成功返回 101 Switching Protocols。服务端将终端标准输出作为 WebSocket 文本帧发送;会话结束前会发送一条包含结束原因的文本帧,随后发送正常关闭帧。

请求示例

GET wss://{endpoint}/api/v1/deployments/deployment-7f3a/exec?pod=qwen-chat-kserve-6d7c9f8b6d-abcde&container=main
x-keystone-token: <Keystone Token>
Upgrade: websocket
Connection: Upgrade

正常响应示例

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade

状态码与错误码

成功状态码:101。

以下错误发生在 WebSocket 升级前;升级后的执行错误通过终端文本帧和关闭帧返回。

HTTP error 说明
400 pod_required 部署存在多个 Pod,但未指定 pod
400 invalid_pod 指定的 Pod 不属于该部署
401 unauthorized 未认证或 Token 无效
403 forbidden 无模型部署写入权限,或 Kubernetes 拒绝操作
404 no_pods 部署当前没有工作负载 Pod
404 not_found 部署或目标 Kubernetes 对象不存在
422 invalid_backend / invalid_request 部署没有有效工作负载,或 Kubernetes 拒绝请求
502 backend_unavailable Kubernetes API 不可用
503 unavailable Kubernetes 未配置
500 internal_error 建立终端会话失败

错误返回格式见调用方式。

此篇文章对你是否有帮助?
没帮助
locked-file

您暂无权限访问该产品