🌑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...