【k8s深入理解之 Scheme 补充-6】理解资源外部版本之间的优先级

代码

go 复制代码
// 路径 mod/k8s.io/kubernetes@v1.29.0/pkg/apis/apps/install/install.go
// Package install installs the apps API group, making it available as
// an option to all of the API encoding/decoding machinery.
package install

import (
	"k8s.io/apimachinery/pkg/runtime"
	utilruntime "k8s.io/apimachinery/pkg/util/runtime"
	"k8s.io/kubernetes/pkg/api/legacyscheme"
	"k8s.io/kubernetes/pkg/apis/apps"
	"k8s.io/kubernetes/pkg/apis/apps/v1"
	"k8s.io/kubernetes/pkg/apis/apps/v1beta1"
	"k8s.io/kubernetes/pkg/apis/apps/v1beta2"
)

func init() {
	Install(legacyscheme.Scheme)
}

// Install registers the API group and adds types to a scheme
func Install(scheme *runtime.Scheme) {
	utilruntime.Must(apps.AddToScheme(scheme))
	utilruntime.Must(v1beta1.AddToScheme(scheme))
	utilruntime.Must(v1beta2.AddToScheme(scheme))
	utilruntime.Must(v1.AddToScheme(scheme))
	utilruntime.Must(scheme.SetVersionPriority(v1.SchemeGroupVersion, v1beta2.SchemeGroupVersion, v1beta1.SchemeGroupVersion))
}

附录1 | observedVersions 记录注册顺序,versionPriority 记录优先级

observedVersionsversionPriority 的区别及作用

observedVersionsversionPriority 都是 Kubernetes Scheme 中用于管理 API 版本的字段,但它们有不同的用途和行为:

  1. observedVersions :
    • observedVersions 是一个记录已注册版本顺序的列表。它用于追踪哪些版本已经注册到 Scheme 中,并按注册的顺序维护一个列表。
    • 该字段的主要作用是记录版本的 注册顺序 。它帮助 Kubernetes 确定在执行版本转换(如 ConvertToVersion)时,应该按哪个顺序处理不同版本的类型。
    • 顺序observedVersions 确实有顺序,它的顺序是根据 API 版本注册的顺序来确定的。这意味着版本的顺序反映了它们在 Scheme 中被注册的时间先后。
  2. versionPriority :
    • versionPriority 是一个映射(map),记录每个组(Group)内的 API 版本的优先级顺序。它帮助 Kubernetes 确定在面对多个版本时,应该优先使用哪个版本。
    • 这个字段的作用是 管理版本的优先级 ,例如,当客户端或其他系统发起请求时,versionPriority 可以用于选择优先使用的版本。
    • 该字段的值是一个切片,表示版本的优先级顺序,优先级高的版本会排在前面,优先级低的版本排在后面。

observedVersionsversionPriority 的关系

  • observedVersions 记录了版本的注册顺序,并不直接涉及版本的优先级。它只关心版本是否已被注册以及注册的顺序。
  • versionPriority 则专注于版本之间的优先级关系,帮助确定在面对多个版本时,应该优先使用哪个版本。它是一个优先级映射,与版本的注册顺序无关。

举例说明

假设有如下的版本和优先级:

  • 注册的版本顺序为:v1, v2beta1, v1beta1
  • versionPriority 设定的优先级为:v2beta1 > v1 > v1beta1
observedVersions 示例

observedVersions 中,记录的是版本的注册顺序。比如:

go 复制代码
observedVersions := []schema.GroupVersion{
    {Group: "apps", Version: "v1"},
    {Group: "apps", Version: "v2beta1"},
    {Group: "apps", Version: "v1beta1"},
}
  • 这表示版本 v1 被最早注册,v2beta1 其次,v1beta1 是最后注册的。
  • 它仅仅记录了版本注册的顺序。
versionPriority 示例

versionPriority 中,记录的是版本的优先级顺序。例如:

go 复制代码
versionPriority := map[string][]string{
    "apps": {"v2beta1", "v1", "v1beta1"},
}
  • 这表示对于 apps 组,优先使用版本 v2beta1,其次是 v1,最后是 v1beta1
  • 这里的顺序反映了优先级,而非注册顺序。

哪个记录优先级?

  • versionPriority 是专门用来记录版本的 优先级 的。它定义了当有多个版本可用时,应该优先使用哪个版本。
  • observedVersions 只是记录了版本的 注册顺序,没有涉及优先级。

结论

  • observedVersions 有顺序,它记录了 API 版本被注册到 Scheme 中的先后顺序。
  • versionPriority 记录了版本的优先级,决定了在面对多个版本时哪个版本应该被优先选择。
  • 优先级versionPriority 管理,而 顺序observedVersions 管理。
相关推荐
我是谁??2 小时前
ubuntu22.04 通过docker部署vLLM(Qwen3-0.6B)大模型+New API+OpenWebUI
docker·容器·vllm
Patrick_Wilson2 小时前
K8s 探针避坑:Next.js 不同部署模式下的健康检查实践
kubernetes·node.js·next.js
运维瓦工2 小时前
DevOps 生态介绍(十):Docker Compose 核心 YAML 配置详解与常用命令大全
spring cloud·docker·容器
Plastic garden3 小时前
K8s(10)NFS 的动态 PV 创建数据库给k8s的mysql和redis
docker·容器·kubernetes
Plastic garden3 小时前
k8s(11) Pod 控制器,服务发现与存储管理
kubernetes
与海boy3 小时前
docker compose minio
docker·容器·eureka
星辰徐哥4 小时前
云原生核心特性:容器化、微服务与DevOps的通俗解读
微服务·云原生·devops
武子康4 小时前
调查研究-167 Docker Compose 详解:从单容器到多服务编排的工程化入口
运维·docker·云原生·容器·kubernetes·k8s·docker-compose
heimeiyingwang5 小时前
【架构实战】分布式会话:从Session到JWT的演进
微服务·云原生·架构