【k8s基础篇】k8s scheme1 之内外部版本

2023-11-08

参考

内外部版本

1 | 简介

众所周知,在 kubernetes 中所有的 resource 都是基于 group 分组的,例如 apps group 中定义了我们熟悉并常用的 deployment, statefullset, daemonset 等 resource,rbac group 中定义了我们经常用到的 role, role binding, clusterrole, clusterrolebinding 等等 resource。对于不同的 group 中的 resource 又有不同的 version,例如 apps group 中又分为 v1, v1beta1, v1beta2 等不同版本。所以在 kubernetes 中去定位一种 resource 我们就会需要 group (例如 apps), version (例如 v1),kind (例如 deployment),也就是我们常常说的 GVK,如下图例。

img

2 | 为什么要有版本的概念

  • 其实在 kubernetes 中对于 resource 之所以会有 version 的概念,是因为方便持续的渐进演化。
    • 例如一个 deployment 在 v1 里有功能 A, 那么在 v1beta1 里就可能会对功能 A 来进行 enhancement 或者去增加新功能 B, 然后在 v1beta2 中又会有更多的特性加入。
  • 从设计角度上看 kubernetes 引入的 internal version 的概念,在同一个 group 之中的所有 version 的 resource 都会转化成 internal version, 然后来持久化在 etcd cluster 之中。反之从 etcd cluster 中读取数据的时候,就会从 internal version来转化成相应的对外 version,也就是如下所示:

img

  • 引入 internal version 的概念就是希望其它所有的 version 在转化的过程中仅仅会和 internal version 产生关联依赖,不会相互关联依赖。而 internal version 并不会暴露给外面使用,完全交由 kuberbetes 研发团队来维护。如果没有 internal version 那么就需要如下图来提供所有 version 之间的相互转换,这样就极大的增加了演进的复杂度,所以并没有采用如下的设计。

img

3 | 不同版本所在位置

// 外部版本所在位置
kubernetes/staging/src/k8s.io/api/
// 内部版本所在位置
kubernetes/pkg/apis/

接下来我们来看一下不同 version 的 resource 都定义在什么地方:

  • 对于各个资源组外部版本的定义在如下源码位置:

img

  • 我们以 apps group 资源组为例,对于其外部版本的 resource 定义如下:

img

  • 对于各个资源组 internal version 的定义在如下源码位置:

img

  • 同样我们还是以 apps 资源组为例,其 internal version 的 resource 定义如下:

img

从源码的角度来看,我们以 apps group 中的 v1 version 的 deployment resource 为例,它在 staging/src/k8s.io/api/apps/v1/types.go 中被定义:

type Deployment struct {
  metav1.TypeMeta `json:",inline"`
  metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"`
  Spec DeploymentSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"`
  Status DeploymentStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"`
}

同样对于 apps 资源组中的 internal version 的 deployment resource 来说,它的具体定义在 /pkg/apis/apps/types.go 文件中:

type Deployment struct {
  metav1.TypeMeta
  metav1.ObjectMeta
  Spec DeploymentSpec
  Status DeploymentStatus
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【k8s基础篇】k8s scheme1 之内外部版本 的相关文章

随机推荐

  • IDEA简介及使用

    1 Intellij IDEA简介 Eclipse IBM公司开发 1 1 Jetbrains公司介绍 IDEA是JetBrains公司的产品 这家公司总部位于捷克共和国的首都布拉格 开发人员以严谨著称的东欧程序员为主 该公司旗下还有许多其
  • 关于java中实现word转pdf

    1 java中实现word转pdf几种方式如下 1 使用jacob Java COM Bridge 操作offfice的方式 基于这种方式无论是水印还是格式都可以完美转换 但是这个方式都只是基于windos下 但有些项目是需要部署到linu
  • html 页面友情提示,设置网站404页面的正确做法

    核心提示 HTTP 404 错误意味着链接指向的网页不存在 即原始网页的URL失效 这种情况经常会发生 什么是404错误 HTTP 404 错误意味着链接指向的网页不存在 即原始网页的URL失效 这种情况经常会发生 很难避免 比如说 网页U
  • Java解析环保HJ212协议

    文章目录 什么是环保HJ212协议 自己封装了一个基于java的HJ212解析类 解析效果查看 常用的标准码说明 什么是环保HJ212协议 HJ212是由国家环保行业制定的数据传输标准协议 通常是通过TCP IP通讯方式进行数据传输的 数据
  • java如何文档生成目录

    对于现有文档 含标题 使用spire doc去生成目录 由于不是免费版 没有表格行数限制 但第一页开头有个版权声明 只需要用spire生成目录 然后用poi打开它删去第一行声明即可 spire依赖
  • sublime java插件_将SublimeText3打造成简易Java IDE

    简介与优点 使用该教程 你能使你的Sublime Text3可以作为一个精简版的JAVA IDE工具 既可以独立在cmd控制台运行也可以在Sublime自带的控制台运行 运行后不会有乱码 报错后可以在文本框中直接在对应位置显示 基于原有的j
  • Matplotlib绘图(二)

    目录 Matplotlib 二 绘制一元二次方程的曲线y x 2 绘制正弦曲线和余弦曲线 subplot函数 散点图 Matplotlib 二 绘制一元二次方程的曲线y x 2 Matplotlib有很多函数用于绘制各种曲线 其中plot函
  • Openssl 1024bit RSA算法---公私钥获取和处理(一)

    1 简介 使用OpenSSL生成公私钥文件 然后再将文件中的信息读出的操作 由于要对设备升级 需要用到RSA算法对一部分验证信息进行加密 2 使用OpenSSL获取公私钥 我在window系统尝试安装OpenSSL 但是安装不上 我们可以使
  • 如何让Hyper-V使用CIFS/SMB存储

    如何让Hyper V使用CIFS SMB存储 在我们常见配置Hyper V存储的时候常常使用到的是本地的磁盘或者iSCSI的IP SAN 在使用IP SAN时是通过Iscsi连接器将磁盘挂在为本地的磁盘来使用的 但是在某些场合下没有使用IS
  • KVM——迁移KVM虚拟机

    一 KVM虚拟机迁移的方式 KVM平台中的KVM虚拟机迁移分为以下两种 1 冷迁移 静态迁移 我们存放虚拟机磁盘的目录都是挂在的一个nfs文件系统的磁盘 进行冷迁移时 只要在目标主机上挂载这个nfs文件系统 就可以看到要迁移的那个虚拟机的磁
  • Nuxt2+echarts5报错Unexpected token export?

    当在Nuxt js中使用ECharts 5时出现 Unexpected token export 错误通常是由于Nuxt js默认使用的是CommonJS模块系统 而ECharts 5使用ES模块语法所致 为了解决这个问题 需要对ES模块语
  • esp32-S3专题一:初识esp32

    初识esp32 S3 初识esp32 使用esp32 s3这款芯片开发接近一年了 分享一下开发中的一些经验和项目中的亮点 希望后人能从中借鉴到一些经验 一 优势和缺点 使用的是esp32 s3这款芯片 硬件上搭配300k的RAM的代码运行内
  • BIO、NIO、AIO 有什么区别?

    BIO NIO AIO 有什么区别 BIO 线程发起IO请求 不管内核是否准备好IO操作 从发起请求起 线程一直阻塞 直到操作完成 NIO 线程发起IO请求 立即返回 内核在做好IO操作的准备之后 通过调用注册的回调函数通知线程做IO操作
  • www.wljx.net/forum.php,齐博CMS:主页被黑,不知漏洞在哪?

    用的是PHP168 5 0和PHPWind Forums v6 3 2的高深度整合版本 今天早上发现主页被换了 好在能进后台 能ftp 换回自己的主页 仔细检查 在 cache 文件夹多了一个yf php文件 里面代码如下 请帮忙看看 ad
  • 理解GAN对抗神经网络的损失函数和训练过程

    GAN最不好理解的就是Loss函数的定义和训练过程 这里用一段代码来辅助理解 就能明白到底是怎么回事 其实GAN的损失函数并没有特殊之处 就是常用的binary crossentropy 关键在于训练过程中存在两个神经网络和两个损失函数 n
  • C++的6个缺省函数

    一 在C 中默认产生6个类成员函数 即缺省函数 它们分别是 1 缺省构造函数 2 缺省拷贝构造函数 3 缺省析构函数 4 缺省赋值运算符 5 缺省取址运算符 6 缺省取地址运算符 二 const对于空类 编译器不会生成任何的成员函数 只会生
  • Git将本地项目推送到远程仓库

    第一步 我们需要在自己电脑中创建一个空白文件夹 这个功能就是创建一个本地的版本库 第二步 进入test文件夹 在根部执行Git Bash Here 第三步 通过命令git init把这个文件夹变成Git可管理的仓库 这时你会发现TEST里面
  • react 16新特性介绍

    目录 React v16 0 2017 年 9 月 render 支持返回数组和字符串 错误边界 componentDidCatch Fiber React v16 2 2017 年 11 月 Fragment React v16 3 20
  • VMware NSX 4.0安装、配置和升级实战

    本文通过一个Vmware NSX 4的安装配置实例 扼要说明了一个典型的NSX系统配置 升级过程需要注意的正确步骤 并列出了作者在学习过程中踩过的坑 为同行绕过提供借鉴 1 系统软硬件环境说明 本安装实例 使用了3台Dell PowerEd
  • 【k8s基础篇】k8s scheme1 之内外部版本

    参考 K8s源码分析 3 Resource Version 内外部版本 1 简介 众所周知 在 kubernetes 中所有的 resource 都是基于 group 分组的 例如 apps group 中定义了我们熟悉并常用的 deplo