【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 管理。
相关推荐
Connie14511 小时前
k8s多集群管理中的联邦和舰队如何理解?
云原生·容器·kubernetes
IT成长日记6 小时前
【Docker基础】Docker数据卷管理:docker volume inspect及其参数详解
运维·docker·容器·volume·inspect
伤不起bb6 小时前
Kubernetes 服务发布基础
云原生·容器·kubernetes
ladymorgana6 小时前
【Docker】如何设置 `wiredTigerCacheSizeGB` 和 `resources.limits.memory`
运维·docker·容器
mcdx6 小时前
基于Docker构建OrangePi5 SDK环境
docker·容器
国际云,接待7 小时前
微软服务器安全问题
运维·服务器·云原生·云计算·azure
别骂我h9 小时前
Kubernetes服务发布基础
云原生·容器·kubernetes
要开心吖ZSH9 小时前
微服务架构的演进:迈向云原生
java·微服务·云原生
dyj0959 小时前
Rancher Server + Kubernets搭建云原生集群平台
云原生·rancher
weixin_3993806910 小时前
k8s一键部署tongweb企业版7049m6(by why+lqw)
java·linux·运维·服务器·云原生·容器·kubernetes