Kubernetes operator 零散知识篇【持续更新中】

云原生学习路线导航页(持续更新中)

  • 本文是 Kubernetes operator学习 系列零散知识篇,在学习过程中发现 operator开发 有很多零碎的知识,所以单独用一篇文章记录
  • Kubernetes operator学习系列 快捷链接
    • Kubernetes operator 前置知识篇
    • Kubernetes operator(一)client-go篇
    • Kubernetes operator(二)CRD篇
    • Kubernetes operator(三)code-generator 篇
    • Kubernetes operator(四)controller-tools 篇
    • Kubernetes operator(五)api 和 apimachinery 篇
    • Kubernetes operator(六)CRD控制器 开发实战篇
    • Kubernetes operator(七) kubebuilder 的安装及简单使用 篇
    • Kubernetes operator(八) kubebuilder 实战演练之deploy-image插件的使用
    • Kubernetes operator(九) kubebuilder 实战演练 之 自定义CronJob
    • Kubernetes operator 零散知识篇

1.kubebuilder

1.1.kubebuilder 的 标记学习

1.1.1.//+kubebuilder:object:root=true

  • 标记
    • //+kubebuilder:object:root=true
  • 使用位置
    • 在 kubebuilder 生成的 types.go文件 中,Kind 和 KindList 的 struct 上方一般都会有这个标记
  • 标记含义
    • 该标记是告诉 controller-tools,下面的struct是一个Kind,在代码生成的时候,需要为其生成 runtime.Object 的实现,即自动生成 GetObjectKind()DeepCopyObject() 方法
  • 使用示例
    //+kubebuilder:object:root=true
    //+kubebuilder:subresource:status// CronJob is the Schema for the cronjobs API
    type CronJob struct {metav1.TypeMeta   `json:",inline"`metav1.ObjectMeta `json:"metadata,omitempty"`Spec   CronJobSpec   `json:"spec,omitempty"`Status CronJobStatus `json:"status,omitempty"`
    }//+kubebuilder:object:root=true// CronJobList contains a list of CronJob
    type CronJobList struct {metav1.TypeMeta `json:",inline"`metav1.ListMeta `json:"metadata,omitempty"`Items           []CronJob `json:"items"`
    }
    

1.1.2.//+kubebuilder:subresource:status

  • 标记
    • //+kubebuilder:subresource:status
  • 使用位置
    • 在 kubebuilder 生成的 types.go文件 中,Kind 的 struct 上方一般都会有这个标记
  • 标记含义
    • 该标记是告诉 controller-tools,下面的 struct 是允许存在子资源的,即 允许有其他资源的ownerReferences设置成自己
    • 添加了此标记,运行 make manifests 时,在生成的CRD yaml文件 config/crd/bases/...yaml 中,一般会有这么一段
      subresources:status: {}
      
  • 使用示例
    //+kubebuilder:object:root=true
    //+kubebuilder:subresource:status// CronJob is the Schema for the cronjobs API
    type CronJob struct {metav1.TypeMeta   `json:",inline"`metav1.ObjectMeta `json:"metadata,omitempty"`Spec   CronJobSpec   `json:"spec,omitempty"`Status CronJobStatus `json:"status,omitempty"`
    }
    

1.1.3.//+kubebuilder:validation 系列

  • 标记
    • //+kubebuilder:validation 并非一个标记,而是一系列的标记
  • 使用位置
    • 该系列标记一般用到 types.go文件 的 Spec、Status 的 struct 字段上方
  • 标记含义
    • 该标记是告诉 controller-tools,下面的 字段,值是有一些限制的
    • 添加了此标记,运行 make manifests 时,在生成的CRD yaml文件 config/crd/bases/...yaml 中,就会对 该字段 进行一些限制。
    • 比如下面 size 字段的 maximum、minimum
      spec:description: MemcachedSpec defines the desired state of Memcachedproperties:size:description: |-Size defines the number of Memcached instancesThe following markers will use OpenAPI v3 schema to validate the valueMore info: https://book.kubebuilder.io/reference/markers/crd-validation.htmlformat: int32maximum: 3minimum: 1type: integertype: object
      
  • //+kubebuilder:validation系列有哪些常用标记
    • +kubebuilder:validation:Enum:=<[]any>
      • 限制字段值 必须是…的枚举值
      • 比如:
        type MyResourceSpec struct {// +kubebuilder:validation:Enum:=pending;approved;rejectedStatus string `json:"status"`
        }
        
    • +kubebuilder:validation:ExclusiveMaximum:=<bool>
      • 限制字段值 的最大值,但是不包括最大值本身。
      • 该标记仅仅指明是否包含最大值,最大值具体是多少,由 +kubebuilder:validation:Maximum 说明
      • 比如:
        type MyResourceSpec struct {// +kubebuilder:validation:ExclusiveMaximum:=true// +kubebuilder:validation:Maximum:=100Value int64 `json:"value"`
        }
        
    • +kubebuilder:validation:ExclusiveMinimum:=<bool>
      • 限制字段值 的最小值,但是不包括最小值本身。
      • 该标记仅仅指明是否包含最小值,最小值具体是多少,由 +kubebuilder:validation:Minimum 说明
      • 比如:
        type MyResourceSpec struct {// +kubebuilder:validation:ExclusiveMinimum:=true// +kubebuilder:validation:Minimum:=100Value int64 `json:"value"`
        }
        
    • +kubebuilder:validation:Format:=<string>
      • 限制一个字符串的格式
      • 比如:
        type MyResourceSpec struct {// +kubebuilder:validation:Format:=emailEmail string `json:"email"`
        }
        
    • +kubebuilder:validation:Maximum:=<>
      • 限制字段值 的最大值,默认是包含最大值本身的
      • 比如:
        type MyResourceSpec struct {// +kubebuilder:validation:Maximum:=100Value int64 `json:"value"`
        }
        
    • +kubebuilder:validation:Minimum:=<>
      • 限制字段值 的最小值,默认是包含最小值本身的
      • 比如:
        type MyResourceSpec struct {// +kubebuilder:validation:Minimum:=100Value int64 `json:"value"`
        }
        
    • +kubebuilder:validation:MaxLength:=<int>
      • 限制字符串字段值 的最大长度
      • 比如:
        type MyResourceSpec struct {// +kubebuilder:validation:MaxLength:=10Value string `json:"value"`
        }
        
    • +kubebuilder:validation:MinLength:=<int>
      • 限制字符串字段值 的最小长度
      • 比如:
        type MyResourceSpec struct {// +kubebuilder:validation:MinLength:=0Value string `json:"value"`
        }
        

1.1.4.//+optional

  • 标记
    • //+optional
  • 使用位置
    • 字段上方
  • 标记含义
    • 标识该字段 是否为 可选字段
    • 添加了此标记,运行 make manifests 时,在生成的CRD yaml文件 config/crd/bases/...yaml 中,就会对 该字段 进行一些可选限制。
  • 使用示例
    //+kubebuilder:object:root=true
    //+kubebuilder:subresource:status// CronJob is the Schema for the cronjobs API
    type CronJob struct {// +optionalSuspend *bool `json:"suspend,omitempty"`
    }
    

1.2.kubebuilder 初始化项目

1.2.1.kubebuilder init 命令的 --repo 参数

  • 如果你的项目在$GOPATH目录下创建,那么在使用 kubebuilder init 命令时,可以不指定 --repo 参数
  • 但如果你的项目 不是在$GOPATH目录 下创建,就必须使用 --repo 参数

1.2.2.kubebuilder create api 的CRD版本问题

  • 自kubernetes的v1.16开始,kubebuilder create api 默认创建的都是 v1 版本的CRD
  • 如果您的项目打算支持 kubernetes v1.16之前 的Kubernetes集群版本,则必须使用v1beta1API ​​版本,需要明确指定 --crd-version
    kubebuilder create api --crd-version v1beta1 ...
    
  • 目前 v1beta1已弃用并在 Kubernetes v1.22 中删除,需要注意集群版本,防止出现预料之外的错误

1.3.API相关

1.3.1.kubernetes API设计规范

  • API 字段序列化 命名规范
    • 创建完API,修改 Spec 和 Status 结构体时,字段 序列化 的值,需要是 camelCase 命名法,即 首字母小写,后面单词首字母大写
    • 如:json:camelCase
  • 序列化时不需要 的 空字段
    • 使用 omitempty 标记序列化时不需要 的 空字段
  • API 中 数量类型
    • “k8s.io/apimachinery/pkg/api/resource” 的 resource.Quantity,支持两种基数:2进制、10进制
    • 2进制:1Ki,表示 1024
    • 10进制:1K,表示 1000
    • 另外:1m=千分之1=0.001
  • metav1.Time和time.Time的区别
    • metav1.Time 是 Kubernetes API 中的一种时间表示类型,包含一个 Time 字段,被广泛用于 资源对象的元数据(metadata)中
    • time.Time 是 Go 语言标准库中的时间表示类型,位于 time 包中。它也是一个结构体,包含了年、月、日等时间信息,以及更精细的时、分、秒、纳秒等时间分量

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/721122.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于SpringBoot的物业管理系统

** &#x1f345;点赞收藏关注 → 私信领取本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345;** 一 、设计说明 1.1 研究…

Springboot 过滤器、拦截器、全局异常处理

Springboot 过滤器、拦截器、全局异常处理 一 过滤器&#xff08;Filter&#xff09; 过滤器是JavaWeb三大组件&#xff08;Servlet&#xff0c;Filter&#xff0c;Listener&#xff09;之一。 Filter可以把对资源的请求拦截下来&#xff0c;从而实现一些功能。 注意&#…

低代码工具APEX的入门使用(未包含安装)

第一次使用APEX是2019年&#xff0c;这个技术成名已久只是我了解的比较晚。请看Oracle ACE的网站&#xff0c;这就是用APEX做的。实际上有一次我看O记的人操作他们的办公流程&#xff0c;都是用APEX做的。 那一年&#xff0c;我用APEX做了一个CMDB的管理系统。那时候还没有流行…

美摄科技实时语音数字人解决方案

随着科技的飞速发展&#xff0c;数字人技术已经逐渐渗透到我们生活的各个角落。作为数字人技术的先驱者&#xff0c;美摄科技凭借其卓越的实时语音数字人解决方案&#xff0c;正引领着企业步入一个全新的交互时代。 美摄科技的实时语音数字人解决方案&#xff0c;是基于语音和…

为什么在下一个 IT 项目中选择使用 PostgreSQL

在数据库管理系统这个充满活力的领域中&#xff0c;为你的项目选择合适的平台是一项至关重要的决策。面对众多可选项&#xff0c;每个选项都针对特定的需求&#xff0c;做出选择可能会是一项艰巨的任务。这篇博客将概述为什么 PostgreSQL 可能是你正在寻找的关系数据库解决方案…

HCIA-Datacom题库(自己整理分类的)_33_DHCP协议多选【7道题】

1.使用动态主机配置协议DHCP分配IP地址有哪些优点? 可以实现IP地址重复利用 工作量大且不好管理 配置信息发生变化(如DNS),只需要管理员在DHCP服务器上修改,方便统一管理 避免IP地址冲突 2.网络中部署了一台DHCP服务器,但是管理员发现部分主机并没有正确获取到该DHCP服务…

产品说明书模板帮你写好了,快来抄作业

想要写好产品说明书&#xff0c;想在网络上参考&#xff0c;信息繁杂且各有不同&#xff0c;东拼西凑也写不出一个好的产品说明书。这时候&#xff0c;如果有产品说明书模板&#xff0c;不仅可以可以提高工作效率&#xff0c;还能保持产品说明书的一致性、提供参考和指导&#…

Mysql删除重复项:力扣196. 删除重复的电子邮箱

题目链接&#xff1a;196. 删除重复的电子邮箱 - 力扣&#xff08;LeetCode&#xff09; 题目描述 sql语句 # Write your MySQL query statement below delete a from person as a inner join person as b where a.email b.email and a.id > b.id 思路&#xff1a;内连接…

Windows下JDK下载、配置Java环境变量配置及多个JDK使用

Windows下JDK下载、配置Java环境变量配置及多个JDK使用 1. Windows下配置Java-JDK环境变量 1.1 下载Windows版本JDK 下载地址&#xff1a;(https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html) 1.2 Windows下安装JDK 双击进行安装 下一步&#xf…

3.8焕新周什么值得入手?索尼耳机选购指南帮你挑

一年一度的女王节活动即将来临&#xff0c;春暖花开好时候&#xff0c;女生们的购物欲想必也开始蠢蠢欲动。如果想要购入一款降噪耳机&#xff0c;索尼这个品牌是你必须要考虑的选择之一。索尼作为在音频行业耕耘70余年的音频世家&#xff0c;秉持“For The MUSIC为音乐而生”的…

Leetcode面试经典150题(一)

27. 移除元素 public int removeElement(int[] nums, int val) {int res 0;for (int i 0; i < nums.length; i) {if(nums[i]!val){nums[res] nums[i];}}return res;} 26. 删除有序数组中的重复项 class Solution {public int removeDuplicates(int[] nums) {int j 0;fo…

什么是生活?(2024-2-26)

能够被记录下来的思绪&#xff0c;从来都不能百分百传达作者心中所想。 1. 开头 在我很小的时候&#xff0c;我曾思考&#xff1a;什么是宇宙&#xff0c;宇宙的尽头是什么&#xff1b;在我年龄大一些的时候&#xff0c;我曾思考&#xff1a;人为什么或者、人类存在的意义、什么…

解决uni-app中使用webview键盘弹起遮挡input输入框问题

这个平平无奇的回答&#xff0c;可能是全网最靠谱的解决方案。 这里我用的是vue3 setup .vue文件的方式 <view> <web-view :fullscreen"false" :webview-styles"{top: statusBarHeight40,height:height,progress: {color: green,height:1px } }"…

哪里有优质短视频素材网站?分享高质量的短视频素材网站资源

嘿&#xff0c;小伙伴们&#xff0c;是不是在做短视频的时候总觉得少点什么味道&#xff1f;那肯定是因为缺少了那些能让你的视频“味道”更足的素材啦。不用愁&#xff0c;今天我来给大家分享几个超给力的短视频素材网站&#xff0c;保证让你的创作更上一层楼 1蛙学府资源 这…

【C++】String常用的函数总结

一、string的构造函数方式&#xff1a; 代码形式&#xff1a; void Test1() {string s1(); // 空字符串string s2("Hello World"); // 字符串初始化为 "Hello World" string s3(s2); //拷贝构造: 将s2复制给s3、 输出为: Hello Worldstring s4(s2,…

[DevOps云实践] IaaC:通过CloudWatch Agent和自定义Metric监视服务器

[DevOps云实践] IaaC:通过CloudWatch Agent和自定义Metric监视服务器 现在有许多第三方工具可以用于监控EC2实例。尽管事实如此,我想为您提供使用AWS原生资源和工具(如AWS CloudWatch、CloudWatch Agent和CloudFormation)快速设置EC2监控所需的所有信息。 首先,您应该知…

常用通讯协议的理解

一、通讯的一些基本认知 1、什么是异步或同步通信 异步通信在发送字符时&#xff0c;所发送的字符之间的时间间隔可以是任意的。发送端可以在任意时刻开始发送字符&#xff0c;因此必须在每一个字符的开始和结束的地方加上标志&#xff0c;即加上开始位和停止位&#xff0c;以…

Redis 由浅入深 (7) - 集群操作手册

目录 Redis运维查询命令登录redis集群&#xff08;登录任意一台即可&#xff09;查询redis集群信息&#xff08;登录之后&#xff09;通过客户端执行命令&#xff08;redis-cli&#xff09;查询正则“pattern”所有的key redis 启动和创建的命令Redis 常用命令redis 手动命令设…

【深度学习】脑部MRI图像分割

案例4&#xff1a;脑部MRI图像分割 相关知识点&#xff1a;语义分割、医学图像处理&#xff08;skimage, medpy&#xff09;、可视化&#xff08;matplotlib&#xff09; 1 任务目标 1.1 任务简介 本次案例将使用深度学习技术来完成脑部MRI(磁共振)图像分割任务&#xff0c…

ETH网络权益证明(PoS)

权益证明 - POS 权益证明是一种证明验证者已经将有价值物品质押到网络上的方法。如果验证者有失信行为&#xff0c;这些物品可能会被销毁。 在以太坊的权益证明机制下&#xff0c;验证者明确地通过以太币将资产质押到以太坊上的智能合约中。 之后&#xff0c;验证者负责检查在网…