Kthena v1.0.0 正式发布:面向生产环境的 Kubernetes 原生大模型推理平台 Kthena[1]是面向高扩展性模型推理的云原生 AI 服务平台。它依托 Volcano[2]在集群拓扑感知与大规模算力调度的优势结合 KV Cache 感知路由与 Prefill/Decode 分离等高级特性显著提升 GPU/NPU 资源利用率与系统吞吐实现算力与时延的极限优化高效解决生产环境中 LLM 大规模部署与服务的核心挑战全面释放模型推理与服务的算力潜能。Kthena v1.0.0 现已正式发布。这是 Kthena 在 Kubernetes 原生大模型推理领域迈出的重要一步。本次发布全面聚焦生产就绪能力提升 Gateway API 路由准确性为预填充/解码P/D分离工作负载提供原生的角色级自动扩缩容大幅提升资源利用率提供更安全的角色级滚动更新保障服务发布零中断增强Router调度性能能为多轮对话进行会话加速通过 Prometheus 指标和示例仪表盘提供更丰富的缓存感知路由可观测性进一步完善 CLI 使用体验。同时Kthena v1.0.0 对 autoscaler API 进行了重要整合正式移除AutoscalingPolicyBinding目标配置现在通过homogeneousTarget、heterogeneousTarget和disaggregatedTarget直接定义在AutoscalingPolicy中带来更纯粹易用的一站式声明配置。Kthena v1.0.0 版本亮点▍核心特性概览AutoscalingPolicy 整合与 P/D 协同式分离扩缩容移除AutoscalingPolicyBinding将自动扩缩容目标配置统一整合到AutoscalingPolicy中新增的disaggregatedTarget支持Perfill/Decode工作负载的角色级协同扩缩容。每个角色均可根据自身指标独立扩缩容同时通过比例约束将 P/D 副本比例维持在合理范围内。面向多轮对话的会话加速Router可以优先处理近期已完成会话的后续请求从而在高并发对话场景下提高 KV-Cache的命中率。路由调度与可观测性增强通过 Pod 级在途请求跟踪、基于 Redis 的多Router状态同步、可配置的 Pod 指标抓取以及缓存感知 Prometheus 指标提高调度准确性和运维可观测性。角色级滚动更新可用性控制进一步增强RoleRollingUpdate现在每个角色都可以通过maxUnavailable独立控制升级节奏。Gateway API 与 HTTPRoute 行为修正Kthena Router现在能够遵循 HTTPRoute 主机名配置在后端选择和 URL 重写过程中始终使用同一条已匹配的路由规则并修正PathPrefix语义同时遵循 Gateway 监听器的allowedRoutes配置。CLI 与 OpenAI 兼容 API 增强CLI 提供更丰富的状态信息并新增对ModelRoute和ModelServer的支持Router 新增兼容 OpenAI API 的接口。▍AutoscalingPolicy 整合与 P/D 协同式分离扩缩容Kthena v1.0.0 引入了一套更简洁、更强大的自动扩缩容 API。用户现在可以在单个AutoscalingPolicy资源中统一配置扩缩容目标、指标采集方式和扩缩容边界。新的disaggregatedTarget模式专为基于Role的工作负载部署提供P/D 协同自动扩缩容尤其适用于PD分离部署。Prefill和Decode可以分别依据自身指标作出扩缩容决策同时由自动扩缩容器应用共享约束使两侧能够协调扩缩而不会各自变化并逐渐偏离合理比例。每个角色都可以独立定义副本范围、指标和指标来源运维人员还可以配置ratioConstraint将 P/D 副本比例维持在合理区间内。disaggregatedTarget配置示例spec: disaggregatedTarget: targetRef: apiVersion: workload.serving.volcano.sh/v1alpha1 kind: ModelServing name: vllm-qwen-pd-ms roles: prefill: minReplicas: 1 maxReplicas: 8 metrics: - name: prefill_waiting_requests targetValue: 1 metricSources: prefill_waiting_requests: prometheus: serverURL: http://kube-prometheus-stack-prometheus.test.svc.cluster.local:9090 query: sum(vllm:num_requests_waiting{namespaceautoscale-demo, servicevllm-prefill}) decode: minReplicas: 1 maxReplicas: 16 metrics: - name: decode_gpu_cache_usage targetValue: 0.75 metricSources: decode_gpu_cache_usage: prometheus: serverURL: http://kube-prometheus-stack-prometheus.test.svc.cluster.local:9090 query: sum(vllm:gpu_cache_usage_perc{namespaceautoscale-demo, servicevllm-decode}) ratioConstraint: numeratorRole: prefill denominatorRole: decode minRatio: 0.25 maxRatio: 1相关变更IssueProposal of merge autoscalingPolicybingding into autoscalingPolicy #1172[3]PRmerge autoscalingpolicybinding to autoscalingpolicy #1203[4]Implementation of PD disaggregation auto-scaler #1258[5]贡献者LiZhenCheng9527▍面向多轮对话工作负载的会话加速Kthena v1.0.0 新增会话加速能力旨在优化多轮对话、智能体工作流和 RAG 链等后续请求依赖先前响应的场景。在这些工作负载中后续请求通常会复用较长的公共前缀。如果请求在无关流量之后等待过久对应后端中的 KV-Cache 可能已被淘汰进而增加 TTFT。会话加速允许 Router 跟踪近期完成的会话并在等待队列中优先处理这些会话的后续请求。使用会话加速功能相较于 llm-d router default 延迟能够降低 20%。该机制与用户公平性调度相互独立并提供专用的会话加速配置包括会话请求头选择、等待请求准入上限以及用于高级缓存命中优化的可选宽限期。此功能旨在提高并发多轮请求下的缓存复用机会但本身并不进行 KV-Cache 感知调度。若要最大限度发挥 KV-Cache 优势运维人员还应确保同时使用会话加速和 KV-Cache 感知调度。Helm 配置示例networking: kthenaRouter: sessionBoost: enabled: true header: X-Session-ID maxSessions: 4096 inflightPerPod: 16 gracePeriod: 0s相关变更IssueImprove multi-round conversation case #1190[6]PRsession boost queue to optimize multi conversation scenario #1183[7]贡献者YaoZengzeng、hzxuzhonghu、FAUST-BENCHOU、LiZhenCheng9527▍更智能的路由调度与缓存感知可观测性Router现在可以更好的利用的负载信号进行调度决策。Kthena 能够跟踪每个 Pod 的排队的请求数量并通过 Redis 在多个Router副本之间同步这些计数器使least-request插件能够依据实时全局负载作出决策而不再局限于当前Router的本地状态。缓存感知调度的可观测性也得到了显著增强。prefix-cache和kvcache-aware评分插件现在通过Router现有的/metrics端点导出 Prometheus 指标将以往仅记录在 klog 中的信息转化为可查询、带模型标签的时间序列便于开展压力测试和进行请求调度。为准确衡量缓存效果Kthena 使用匹配比例直方图取代简单的命中/未命中计数器。kthena_router_prefix_cache_match_ratio和kthena_router_kvcache_aware_match_ratio用于表示提示词中已存在于最佳匹配候选 Pod 上的数据块占比其中0表示完全未命中。运维人员既可以通过le0.0桶推导缓存命中率也可以直观了解Cache的实际复用程度。相关变更IssueObservability for prefix-cache and kvcache-aware Score Plugins[8]PRfeat(router): add per-pod in-flight request tracking with Redis sync #962[9]Add SGLang tokenizer support for KV-cache-aware scheduling #997[10]router: add observability metrics for prefix-cache and kvcache-aware score plugins #1194[11]feat(router): make pod metrics update interval configurable #1151[12]perf(router): cache parsed prompt to avoid redundant ParsePrompt call #1123[13]fix: parallelize pod metrics scraping loop with bounded concurrency #1255[14]贡献者hzxuzhonghu、blenbot、kube-gopher、rajnish-jais、nabrahma▍角色级滚动更新可用性控制Kthena v0.4.0 引入了RoleRollingUpdate但在角色更新期间系统会一次性删除 ServingGroup 中某个角色的全部旧副本。只有一个 servingGroup 的时候会导致服务在角色级发布期间暂时不可用。Kthena v1.0.0 为RoleRollingUpdate新增角色级maxUnavailable支持。运维人员现在可以使用绝对数量或百分比为每个角色独立控制更新步长。角色级滚动更新由此具备与 ServingGroup 级更新类似的可用性控制能力。角色级发布配置示例spec: rolloutStrategy: type: RoleRollingUpdate template: roles: - name: prefill replicas: 2 maxUnavailable: 1 # entryTemplate and workerTemplate omitted - name: decode replicas: 4 maxUnavailable: 25% # entryTemplate and workerTemplate omitted相关变更IssueControl the number of unavailable Role replicas in RoleRollingUpdate #1188[15]PRRole rollingupdate support maxUnavailable settings #1239[16]贡献者hzxuzhonghu、LiZhenCheng9527▍Gateway API 与 HTTPRoute 行为修正Kthena Router现在能够更准确地处理 Gateway API 流量。Router会遵循HTTPRoute.spec.hostnames在后端选择和 URL 重写过滤器处理过程中始终使用同一条已匹配的 HTTPRoute 规则并在同一路由内优先选择更具体的路径规则。由此可以避免请求误用其他链路中的后端。本次发布还修正了 Gateway API 的PathPrefix匹配语义并确保Router仅在满足 Gateway 监听器allowedRoutes约束时接纳 HTTPRoute。相关变更PRfeat: honor HTTPRoute hostnames and matched rule selection #1174[17]Fix HTTPRoute PathPrefix matching #1119[18]fix(router): respect Gateway allowedRoutes #1263[19]贡献者zhy76、Monti-27、avinxshKD▍CLI 与 OpenAI 兼容 API 增强Kthena CLI 现在能够展示更实用的状态信息并支持更多资源类型kthena get model-servings新增READY和STATUS列。kthena get model-boosters新增STATUS列。新增对kthena get model-routes和kthena get model-servers的支持。新增对kthena describe model-route和kthena describe model-server的支持。Router还新增了兼容 OpenAI API 的GET /v1/models端点以标准列表响应格式返回当前可用的模型名称。相关变更PRfeat: add STATUS and READY columns to kthena get output #978[20]feat: add CLI support for ModelRoute and ModelServer resources #981[21]feat: support /v1/models endpoint #996[22]贡献者anirudh240、madmecodes▍其他功能增强通过设置 scale 子资源标签选择器为ModelServing新增 KEDA/HPA 兼容能力。#839为 controller-manager 新增调试端口可用于查看缓存中的 ServingGroup 和 Role 配置。#900新增 SGLang Dynamo 模拟器测试覆盖与 SGLang 推理模拟器集成。#920、#1231为Router新增pprof端点支持。#1057在 Helm Chart 中新增 controller-manager 的debugPort配置。#1032改进 ModelBooster 的 GPU 与离线环境支持。#972、#1141、#1146、#945新增 GPU 使用率插件 E2E 测试覆盖。#1199更新快速入门文档并推荐用户优先从 ModelServing 开始使用 Kthena。#1260新增 DeepSeek-v4 模型服务示例。#936、#937新增 KV 缓存感知调度器插件文档。#910更加具体版本信息可以查看 Kthena v1.0.0 的 Release NoteRelease Kthena v1.0.0 · volcano-sh/kthena · GitHubKthena 诚挚邀请广大开发者、运维人员和 AI 基础设施团队体验 Kthena v1.0.0并与我们共同塑造下一代云原生大模型推理平台。相关链接[1] Kthena v1.0.0:https://kthena.volcano.sh/[2] Volcano:https://volcano.sh/[3] Proposal of mergeautoscalingPolicybingdingintoautoscalingPolicy#1172: Proposal of merge autoscalingPolicybingding into autoscalingPolicy by LiZhenCheng9527 · Pull Request #1172 · volcano-sh/kthena · GitHub[4] merge autoscalingpolicybinding to autoscalingpolicy #1203: merge autoscalingpolicybinding to autoscalingpolicy by LiZhenCheng9527 · Pull Request #1203 · volcano-sh/kthena · GitHub[5] Implementation of PD disaggregation auto-scaler #1258: Implementation of PD disaggregation auto-scaler by LiZhenCheng9527 · Pull Request #1258 · volcano-sh/kthena · GitHub[6] Improve multi-round conversation case #1190: https://github.com/volcano-sh/kthena/issues/1190[7] session boost queue to optimize multi conversation scenario #1183: https://github.com/volcano-sh/kthena/pull/1183[8] Observability for prefix-cache and kvcache-aware Score Plugins: kthena/docs/proposal/cache-observability.md at main · volcano-sh/kthena · GitHub[9] feat(router): add per-pod in-flight request tracking with Redis sync #962: feat(router): add per-pod on-flight request tracking with Redis sync by hzxuzhonghu · Pull Request #962 · volcano-sh/kthena · GitHub[10] Add SGLang tokenizer support for KV-cache-aware scheduling #997: https://github.com/volcano-sh/kthena/pull/997[11] router: add observability metrics for prefix-cache and kvcache-aware score plugins #1194: router: add observability metrics for prefix-cache and kvcache-aware score plugins by kube-gopher · Pull Request #1194 · volcano-sh/kthena · GitHub[12] feat(router): make pod metrics update interval configurable #1151: feat(router): make pod metrics update interval configurable by rajnish-jais · Pull Request #1151 · volcano-sh/kthena · GitHub[13] perf(router): cache parsed prompt to avoid redundant ParsePrompt call #1123: https://github.com/volcano-sh/kthena/pull/1123[14] fix: parallelize pod metrics scraping loop with bounded concurrency #1255: https://github.com/volcano-sh/kthena/pull/1255[15] Control the number of unavailable Role replicas in RoleRollingUpdate #1188: Control the number of unavailable Role replicas in RoleRollingUpdate. · Issue #1188 · volcano-sh/kthena · GitHub[16] Role rollingupdate support maxUnavailable settings #1239: Role rollingupdate support maxUnavailable settings by hzxuzhonghu · Pull Request #1239 · volcano-sh/kthena · GitHub[17] feat: honor HTTPRoute hostnames and matched rule selection #1174: feat: honor HTTPRoute hostnames and matched rule selection by zhy76 · Pull Request #1174 · volcano-sh/kthena · GitHub[18] Fix HTTPRoute PathPrefix matching #1119: Fix HTTPRoute PathPrefix matching by Monti-27 · Pull Request #1119 · volcano-sh/kthena · GitHub[19] fix(router): respect Gateway allowedRoutes #1263: fix(router): respect Gateway allowedRoutes by avinxshKD · Pull Request #1263 · volcano-sh/kthena · GitHub[20] feat: add STATUS and READY columns to kthena get output #978: https://github.com/volcano-sh/kthena/pull/978[21] feat: add CLI support for ModelRoute and ModelServer resources #981: feat: add CLI support for ModelRoute and ModelServer resources by anirudh240 · Pull Request #981 · volcano-sh/kthena · GitHub[22] feat: support /v1/models endpoint #996: feat: support /v1/models endpoint by madmecodes · Pull Request #996 · volcano-sh/kthena · GitHub