☰
Seldon Core 深度解析 `seldon server status`:通过 CLI 查询推理服务器运行状态的完整指南
2026/10/13 6:38:36 网站建设 项目流程
  • 人工智能
  • 大模型
  • MLOps
  • LLMOps
  • 模型推理服务
  • 云原生
  • 后端

【免费下载链接】seldon-core

An MLOps framework to package, deploy, monitor and manage thousands of production machine learning models

项目地址:https://gitcode.com/gh_mirrors/se/seldon-core
点击查看免费下载

seldon server status是 Seldon Core 2 命令行工具(CLI)中用于查询单个推理服务器(Server)运行状态的子命令。它以 gRPC 客户端身份连接 Seldon Core 的调度器(Scheduler)控制面,拉取指定 Server 的副本数、已加载模型数量与资源分布等信息。读完本文,你将掌握该命令的完整参数用法、两种输出模式的差异、底层 gRPC 调用链与协议定义,以及如何通过环境变量、配置文件和 TLS 证书在本地与 Kubernetes 集群之间灵活切换连接目标。

一、命令定位:它查询的是什么

在 Seldon Core 2 中,Server是一种描述推理服务器(如 mlserver、triton 等)的资源,由 Operator 的控制器协调 Kubernetes 上的部署。官方示例 mlserver1.yaml 展示了最简形态:

apiVersion: mlops.seldon.io/v1alpha1 kind: Server metadata: name: mlserver1 spec: serverConfig: mlserver

从源码结构看,Server 的部署状态并不直接保存在 Server CR 的 status 字段里,而是由 Scheduler 维护并向订阅者广播(参见 server.go 中的ServerNotify与SubscribeServerEvents,Operator 通过StatusUpdate事件把NumLoadedModelReplicas回写到server.Status.LoadedModelReplicas)。因此,seldon server status本质上是让 CLI 作为另一个订阅者(订阅者名称固定为seldon CLI)直接向 Scheduler 请求某个 Server 的实时状态。

命令在 cobra 命令树中的注册位置见 root.go:cmdServer子命令组下挂载了status与list两个子命令(cmdServer.AddCommand(cmdServerStatus, cmdServerList)),对应 seldon server(manage servers)文档页中列出的两个入口。

二、用法与参数说明

根据 CLI 参考文档 seldon_server_status.md,命令形式与参数如下:

seldon server status [flags]
参数短选项默认值说明
--authority string—空HTTP/2 的 authority(即 virtual host),用于 gRPC 连接的 SNI/vhost 路由
--help-h—显示帮助
--scheduler-host string—0.0.0.0:9004Seldon 调度器(Scheduler)地址
--show-request-rfalse打印发送给调度器的请求内容
--show-response-otrue打印完整的响应内容(proto 转 JSON)
--verbose-vfalse详细输出(在请求打印逻辑中与-r等效)

需要注意两点细节:

  1. 命令要求至少一个位置参数——服务器名称。server_status.go 中Args: cobra.MinimumNArgs(1)且serverName := args[0],即第一个参数就是目标 Server 名:

    seldon server status mlserver1
  2. --show-request与--verbose在请求打印上是同一条路径:ServerStatus方法内部以showRequest判断是否printProto(req),而verbose在客户端构造时已注入连接层(见 server_status.go 中cli.NewSchedulerClient(schedulerHost, schedulerHostIsSet, authority, verbose))。

三、两种输出模式:摘要行与完整 JSON

这是该命令最有实战价值的一点。在 scheduler.go 的ServerStatus方法中,响应处理逻辑为:

if !showResponse { fmt.Printf("%s loaded models %d available replicas %d\n", res.ServerName, res.NumLoadedModelReplicas, res.AvailableReplicas) } else { printProto(res) }
  • 默认(-o):把整个ServerStatusResponse通过protojson.Marshal序列化为 JSON 打印,字段最完整;
  • -o=false:打印一行紧凑摘要,例如mlserver1 loaded models 2 available replicas 2,适合脚本轮询或快速巡检。

printProto的实现(scheduler.go)就是对 proto 消息做protojson编码后输出,序列化失败时打印Failed to print proto: ...而不是报错退出。

四、底层调用链与协议定义

server status的执行路径可以完整拆解为四步,全部有源码可查:

1. 构造 gRPC 客户端。NewSchedulerClient 先加载 CLI 配置文件(LoadSeldonCLIConfig),若用户没有显式传--scheduler-host且配置文件的controlplane.schedulerHost非空,则用配置值覆盖默认 host。客户端同时设置grpc.MaxCallSendMsgSize / MaxCallRecvMsgSize为math.MaxInt32,以允许较大的控制面消息。

2. 建立连接。newConnection 决定传输凭证:若配置中controlplane.keyPath为空则使用insecure.NewCredentials();否则调用loadKeyPair(scheduler.go)加载客户端证书/私钥与 CA,构造 mTLS 的credentials.NewTLS。连接层还挂了grpc_retry指数退避拦截器(起始 100ms)与grpc.WithAuthority(sc.authority),后者正是--authority参数生效的位置。

3. 发起请求。CLI 构造ServerStatusRequest并调用流式 RPCServerStatus,只取第一条消息(getServerStatus):

req := &scheduler.ServerStatusRequest{ SubscriberName: subscriberName, // "seldon CLI" Name: &serverName, }

4. 协议层定义。请求/响应消息在 scheduler.proto 中定义,RPC 声明为rpc ServerStatus(ServerStatusRequest) returns (stream ServerStatusResponse)(scheduler.proto):

message ServerStatusRequest { string subscriberName = 1; optional string name = 2; // Leave empty for all servers } message ServerStatusResponse { enum Type { StatusResponseTypeUnknown = 0; StatusUpdate = 1; NonAuthoritativeReplicaInfo = 2; ScalingRequest = 4; } Type type = 7; string serverName = 1; repeated ServerReplicaResources resources = 2; int32 expectedReplicas = 3; int32 availableReplicas = 4; int32 numLoadedModelReplicas = 5; optional KubernetesMeta kubernetesMeta = 6; } message ServerReplicaResources { uint32 replicaIdx = 1; uint64 totalMemoryBytes = 2; uint64 availableMemoryBytes = 3; int32 numLoadedModels = 4; uint32 overCommitPercentage = 5; }

从该定义可以读出默认 JSON 输出里各字段的含义:serverName是服务器名;expectedReplicas / availableReplicas分别是期望与可用副本数;numLoadedModelReplicas是已加载模型的副本数;resources是逐副本的资源明细(总内存、可用内存、已加载模型数、超卖比例overCommitPercentage)。注意name字段留空时表示“所有服务器”——这正是姊妹命令seldon server list的做法(ListServers 用同一 RPC 但省略Name,遍历全部流式结果,以表格输出server / replicas / models三列)。

Type枚举的注释也值得注意:值按 2 的幂设计,可以按位或组合,为“同一响应携带多种更新类型”保留了前向兼容空间。

五、连接目标:环境变量、配置文件与 TLS

CLI 连接 Scheduler 的地址解析遵循“显式参数 > 配置文件 > 环境变量 > 默认值”的优先级,规则集中在 flags.go 与 config.go:

来源内容
环境变量SELDON_SCHEDULE_HOST(默认值0.0.0.0:9004,即本地安装场景直接可用)
配置文件~/.config/seldon/cli/config.json中controlplane.schedulerHost;另可配tls/keyPath/crtPath/caPath
CLI 参数--scheduler-host(显式设置后配置文件不再覆盖)

CLI 总览文档 给出了一份通过 TLS 连接集群内 Scheduler 的配置示例(对应 config.go 的ControlPlane结构):

{ "controlplane": { "schedulerHost": "seldon-scheduler.svc:9044", "tls": true, "keyPath": "/home/certs/seldon-scheduler-client/tls.key", "crtPath": "/home/certs/seldon-scheduler-client/tls.crt", "caPath": "/home/certs/seldon-scheduler-client/ca.crt" } }

配置文件的日常管理可用seldon config子命令(list / add / remove / activate / deactivate)完成。在 Kubernetes 上运行该命令时,需要先把 Scheduler Service 暴露为 LoadBalancer 并导出地址:

kubectl get svc seldon-scheduler -n seldon-mesh -o jsonpath='{.status.loadBalancer.ingress[0].ip}' export SELDON_SCHEDULE_HOST=<ip>:9004

若使用集群 TLS,仓库提供了 download-k8s-certs.sh 脚本把 K8s secret 中的证书下载到本地目录:

./hack/download-k8s-certs.sh seldon-mesh seldon-scheduler-client

六、server status与server list的取舍

同一个ServerStatus流式 RPC 支撑了两个子命令,选择依据是查询范围:

场景命令行为
只看某一个 Server(name指定)seldon server status <name>取流的第一条消息,输出完整 JSON 或一行摘要
巡检全部 Serverseldon server list不传name,遍历流到 EOF,表格输出server / replicas / models

从 ListServers 的表格实现看,list输出的models列即numLoadedModelReplicas,replicas列即availableReplicas——与status的摘要行字段一一对应,可以互相印证。

七、这些状态数据在 Operator 侧的用途

理解server status的返回值时,把视角切到 Operator 一侧会更清晰。server.go 的SubscribeServerEvents长期订阅同一类ServerStatusResponse流,并按Type分派:

  • StatusUpdate:把event.NumLoadedModelReplicas写入 Server CR 的server.Status.LoadedModelReplicas并更新 K8s 状态;
  • ScalingRequest:在合法区间(minReplicas~maxReplicas,见 isValidScalingEvent)内把event.ExpectedReplicaspatch 回server.Spec.Replicas,实现调度器驱动的服务器副本伸缩。

也就是说,seldon server status让你看到的,正是 Operator 用来回写 CR 状态和触发伸缩的那份数据本身;当 Server 副本数异常时,用-o=false对比expectedReplicas与availableReplicas,再用默认 JSON 模式检查resources里各副本的availableMemoryBytes与numLoadedModels,可以快速判断是副本起不来还是内存/模型加载问题。

八、快速上手示例

综合以上信息,一条典型排查流程如下(本地安装场景,默认地址直接可用):

# 完整 JSON 状态(默认 -o) seldon server status mlserver1 # 一行摘要,适合脚本轮询 seldon server status mlserver1 -o=false # 查看发送给调度器的 gRPC 请求 seldon server status mlserver1 -r # 指定调度器地址(K8s LoadBalancer 暴露场景) seldon server status mlserver1 --scheduler-host <ip>:9004

Kubernetes 场景下若使用 TLS,则通过seldon config add / activate激活包含controlplane证书路径的配置文件(见 CLI 总览文档 的 Config file 一节),命令本身无需再传地址参数。

小结

seldon server status虽然参数简单,但它是观察 Seldon Core 2 控制面状态的直接窗口:请求经 server_status.go 进入 scheduler.go 的 gRPC 客户端,最终落在 scheduler.proto 定义的ServerStatus流式接口上;返回的副本数、已加载模型数与逐副本资源信息,与 Operator 回写 CR、驱动 Server 伸缩所消费的是同一数据源。掌握了它的两种输出模式、地址解析优先级与 TLS 配置方式,就能在本地与集群环境中对推理服务器做可脚本化的状态巡检。

  • 人工智能
  • 大模型
  • MLOps
  • LLMOps
  • 模型推理服务
  • 云原生
  • 后端

【免费下载链接】seldon-core

An MLOps framework to package, deploy, monitor and manage thousands of production machine learning models

项目地址:https://gitcode.com/gh_mirrors/se/seldon-core
点击查看免费下载

相关推荐

上一篇:KMS_VL_ALL_AIO:Windows与Office智能激活终极指南
下一篇:fabio 配置解析:registry.consul.noroutehtmlpath 实现无路由时自定义 HTML 页面

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询