🌑Knative Service 多版本管理指南

type
status
date
slug
summary
category
tags
icon
password
AI summary
Blocked by
Blocking
Category
本文档说明如何使用 Knative Service 管理 APP 的多个版本(Revision),通过 Tag 和 Header 实现版本路由。

概念映射

业务概念
Knative 概念
说明
APP
Knative Service
一个应用对应一个 Knative Service
APP 版本
Revision
每次更新 Service 的 template 会生成新的 Revision
版本标识
Tag
通过 traffic 配置中的 tag 字段标识版本

请求方式

所有版本共用同一个 Host,通过 Knative-Serving-Tag Header 区分版本:

场景一:创建新 APP

创建一个新的 Knative Service,初始版本标记为 v1。
应用后查看 Revision:
输出示例:

场景二:创建 APP 新版本

更新 Service 的 template 并添加新的 Tag。
此时:
  • 不带 Header 的请求 → 100% 路由到 v1
  • Knative-Serving-Tag: v2 的请求 → 路由到 v2
  • Knative-Serving-Tag: v1 的请求 → 路由到 v1

场景三:调整流量分配

将 v2 版本设为主版本,v1 作为备用。

场景四:停用某个版本(maxScale=0)

将某个版本的最大副本数设为 0,使其不再接收请求。
方法:通过 Revision 级别的 annotation 无法直接修改已创建的 Revision。需要通过以下方式实现:

方案 A:从 traffic 中移除该版本

移除后,v1 版本的 Pod 会自动缩容到 0(scale to zero)。

方案 B:使用 PodAutoscaler 强制缩容

如果需要保留 Tag 但强制停机,可以直接 patch 对应 Revision 的 PodAutoscaler:
注意:Revision 的 annotation 在创建后通常不可变。更可靠的方式是从 traffic 中移除。

场景五:删除某个版本

5.1 先从 traffic 中移除

5.2 删除 Revision


场景六:删除整个 APP

删除 Knative Service 会自动清理所有关联的 Revision、Configuration、Route 等资源。
验证清理完成:

完整示例:三版本共存

访问方式:

操作速查表

操作
方法
创建新 APP
创建 Knative Service,template 中定义容器,traffic 中设置 tag
创建新版本
更新 template,在 traffic 中添加新 tag 指向 latestRevision
停用版本(保留)
从 traffic 中移除该 revisionName,或设置 percent: 0 且不带 tag
删除版本
先从 traffic 移除,再 kubectl delete revision <name>
删除整个 APP
kubectl delete ksvc <name>
灰度发布
调整 traffic 中各版本的 percent 比例
回滚
将旧版本的 percent 设为 100,新版本设为 0
Prev
AI 时代下的 Kubernetes 调度器:架构、挑战与演进路径
Next
Knative + Istio 环境下的会话亲和性实现方案
Loading...
Article List
如果去做,还有一丝希望;但是不去做,就毫无希望
k8s
knative
技术分享
agentic
个人总结
istio
HAMI
Golang
转发
计算机网络
Redis
MySQL
Mysql