【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 管理。
相关推荐
U***e635 小时前
PHP在微服务中的Mezzio
微服务·云原生·架构
间彧6 小时前
Kubernetes滚动发布详解
kubernetes
间彧7 小时前
在实际生产环境中,Kubernetes声明式API如何实现蓝绿部署、金丝雀发布等高级部署策略?
kubernetes
间彧7 小时前
Kubernetes声明式API相比传统命令式API在故障恢复场景下的具体优势有哪些?
kubernetes·github
间彧7 小时前
为什么说Kubernetes的API设计是其成功的关键因素之一?
kubernetes
间彧7 小时前
Kubernetes Deployment 配置简化实战:从复杂到高效
kubernetes
u***u6858 小时前
Vue云原生
前端·vue.js·云原生
可爱的小小小狼10 小时前
k8s:服务网格Service Mesh(服务网格)istio和envoy
kubernetes·istio·service_mesh
gggg远12 小时前
docker详解
运维·docker·容器
ALex_zry13 小时前
Consul全方位入门指南:第二阶段—— 实操。Consul核心功能与项目集成
运维·docker·微服务·云原生·架构