现在个人做网站或者app还有收益/免费人脉推广
标记语法
Empty
+kubebuilder:validation:Optional:空标记像命令行中的布尔标记位-- 仅仅是指定他们来开启某些行为。
Anonymous
+kubebuilder:validation:MaxItems=2:匿名标记使用单个值作为参数。
Multioption
+kubebuilder:printcolumn:JSONPath=".status.replicas",name=Replicas,type=string:多选项标记使用一个或多个命名参数。第一个参数与名称之间用冒号隔开,而后面的参数使用逗号隔开。参数的顺序没有关系。有些参数是可选的。
标记的参数可以是字符,整数,布尔,切片,或者 map 类型。 字符,整数,和布尔都应该符合 Go 语法
// +kubebuilder:validation:ExclusiveMaximum=false
// +kubebuilder:validation:Format="date-time"
// +kubebuilder:validation:Maximum=42
为了方便,在简单的例子中字符的引号可以被忽略,尽管这种做法在任何时候都是不被鼓励使用的,即便是单个字符:
// +kubebuilder:validation:Type=string
切片可以用大括号和逗号分隔来指定。
// +kubebuilder:webhooks:Enum={"crackers, Gromit, we forgot the crackers!","not even wensleydale?"}
或者,在简单的例子中,用分号来隔开。
// +kubebuilder:validation:Enum=Wallace;Gromit;Chicken
Maps 是用字符类型的键和任意类型的值(有效地map[string]interface{})来指定的。一个 map 是由大括号({})包围起来的,每一个键和每一个值是用冒号(:)隔开的,每一个键值对是由逗号隔开的。
// +kubebuilder:validation:Default={magic: {numero: 42, stringified: forty-two}}
CRD生成
放在最外层, 如printcolumn
修改完成后
make manifests
然后delete crd再apply crd
printcolumn
//+kubebuilder:object:root=true
//+kubebuilder:printcolumn:name="foo",type="string",JSONPath=".spec.foo",description="The Foo name"
//+kubebuilder:printcolumn:name="Age",type="date",JSONPath=".metadata.creationTimestamp"
name: 展示的列的名称
type: 展示的列的类型, 包括integer、number、string、boolean 和 date
JSONPath: 在清单中的路径
description: 描述
priority <int>: 当前列的优先级
效果如下:
$ kubectl get tenant
NAME FOO AGE
tenant-sample zoo 1s
resource
//+kubebuilder:resource:scope=Cluster,shortName=tnt
scope=Cluster:非命名空间资源, 若不加则为命名空间资源, 改成Cluster后需要先运行自定义控制器, 否则创建CR时会报错找不到CRD, 因为创建CR时如果不指定namespace, 默认会去default命名空间找
效果如下:
$ kubectl get tnt
NAME FOO AGE
tenant-sample zoo 3s
status
开启status子资源, 即可使用r.Status().Update()更新状态
// +kubebuilder:subresource:status
skipversion
忽略该版本
//+kubebuilder:skipversion
storageversion
在多版本crd做转换的时候标记其为存储版本
//+kubebuilder:storageversion
scale
开启scale子资源
//+kubebuilder:subresource:scale:specpath=.spec.replicas,statuspath=.status.replicas
selectorpath 指labelSelectorPathScale 对象的属性,该值jsonpath定义了对应的自定义资源内部的 JSONPath Scale.Status.Selector。这是个可选的选项。
statuspath 指statusReplicasPathScale 对象的属性。并且jsonpath它的值定义了对应于Scale.Status.Replicas. 这是一个必填字段。
specpath 指specReplicasPathScale 对象的属性,valuejsonpath定义了对应的自定义资源内部的 JSONPath Scale.Spec.Replicas。这是一个必填字段。
需要在spec中添加replicas字段
效果如下:
$ kubectl scale tnt tenant-sample --replicas=3
tenant.tenant.example.io/tenant-sample scaled
unservedversion
不提供此版本
//+kubebuilder:unservedversion
groupName
//+groupName=xx
覆盖此包的 API 组版本(默认为包名称)
versionName
//+versionName=xx
即
group name to use for REST API: /apis/<group>/<version>
CRD验证
放在特定字段上方表示针对该字段, 或者结构体上方表示针对该结构体, 还可以放在包级别, 可以配合使用, 比如在包级别设置为true, 在字段级别设置为false从而达到单独给某个字段做限制的作用
default
默认值, 不在spec中定义则使用默认值
//+kubebuilder:default=defaultname
DefaultTest string `json:"defaultTest,omitempty"`
支持boolean: true, string: Cluster, numerical: 1.24, array: {1,2}, object: {policy: "delete"}
XEmbeddedResource
使用 apiVersion、Kind和metadata字段将字段标记为嵌入式资源。并与preserve-unknown-fields: true结合不会修剪该字段,并且该字段里面包含一个完整的对象。
默认情况下,定制资源的所有版本中的所有未规定的字段都会被剪裁掉。 通过在结构化的 OpenAPI v3 检查模式定义 中为特定字段的子树添加 x-kubernetes-preserve-unknown-fields: true 属性, 可以选择不对其执行剪裁操作。
// +kubebuilder:validation:XEmbeddedResource
// +kubebuilder:validation:XPreserveUnknownFields
type RawExtension struct {runtime.RawExtension `json:",inline"`
}type XXXSpec struct {//+kubebuilder:default=defaultnameDefaultTest string `json:"defaultTest,omitempty"`RawItems []RawExtension `json:"rawItems,omitempty"`
}
crd新增:
defaultTest:default: defaultnametype: string
rawItems:items:type: objectx-kubernetes-embedded-resource: truex-kubernetes-preserve-unknown-fields: truetype: array
cr使用:
defaultTest: "asdf"
rawItems:- apiVersion: v1kind: Secretmetadata:name: secret-1- apiVersion: v1kind: Secretmetadata:name: secret-2- apiVersion: v1kind: Secretmetadata:name: secret-3
EmbeddedResource
功能同XEmbeddedResource, 建议使用EmbeddedResource
// +kubebuilder:validation:EmbeddedResource
// +kubebuilder:validation:PreserveUnknownFields
type RawExtension struct {runtime.RawExtension `json:",inline"`
}type XXXSpec struct {//+kubebuilder:default=defaultnameDefaultTest string `json:"defaultTest,omitempty"`RawItems []RawExtension `json:"rawItems,omitempty"`
}
crd中如下
rawItems:items:type: objectx-kubernetes-preserve-unknown-fields: truetype: array
cr使用同XEmbeddedResource
Enum
枚举
// +kubebuilder:validation:Enum=Wallace;Gromit;Chicken
type Food stringtype xxxSpec struct {Food Food `json:"food"`
}
当填写一个其他数据时, 报错如下
The Tenant "tenant-sample" is invalid: spec.food: Unsupported value: "asdf": supported values: "Wallace", "Gromit", "Chicken"
Minimum / Maximum
最大值,最小值
// +kubebuilder:validation:Minimum=1
// +kubebuilder:validation:Maximum=3
MaxMinTest int `json:"maxMinTest"`
ExclusiveMaximum / ExclusiveMinimum
最大值"达到"但不包括该值(最小值同) , 需要和Max和Min配合使用, 以下表示最大值为3, 但是ExclusiveMaximum限制了不包括3, 所以最大值为2
// +kubebuilder:validation:Minimum=1
// +kubebuilder:validation:Maximum=3
// +kubebuilder:validation:ExclusiveMaximum=true
// +kubebuilder:validation:ExclusiveMinimum=false
ExclusiveMaximumTest int `json:"exclusiveMaximumTest"`
配置错误会报错
The Sample "sample" is invalid: spec.exclusiveMaximumTest: Invalid value: 3: spec.exclusiveMaximumTest in body should be less than 3
MaxItems / MinItems / UniqueItems
列表最大/最小数量, 是否唯一, 现已禁用UniqueItems, 因为会导致验证的复杂度变成2次方
https://groups.google.com/g/kubernetes-sig-api-machinery-proposals/c/Rn7QaNojCO4
也已说明UniqueItem不可设置为true
https://kubernetes.io/zh-cn/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/#validation
// +kubebuilder:validation:MaxItems=3
// +kubebuilder:validation:MinItems=1
// +kubebuilder:validation:UniqueItems=false
ItemsTest []string `json:"itemsTest,omitempty"`
数量错误会报错
The Sample "sample" is invalid: spec.itemsTest: Too many: 3: must have at most 2 items
MaxLength / MinLength
字段value最大/最小长度
// +kubebuilder:validation:MaxLength=3
// +kubebuilder:validation:MinLength=1
LengthTest string `json:"lengthTest"`
MultipleOf
value必须是该值的倍数, 比如设置为3, 则value必须是6, 9等3的倍数
//+kubebuilder:validation:MultipleOf=3
MultipleOfTest int `json:"multipleOfTest,omitempty"`
错误配置报错如下
multipleOfTest: 10The Sample "sample" is invalid: spec.multipleOfTest: Invalid value: 10: spec.multipleOfTest in body should be a multiple of 3
Optional
表示该字段是可选的, 即使没有在结构体tag中加omitempty tag, 也可不在cr spec中定义
// +kubebuilder:validation:Optional
OptionalTest int `json:"optionalTest"`
也可省略如下, 相同的功能
// +optional
OptionalTest int `json:"optionalTest"`
Pattern
value值必须包含该值
// +kubebuilder:validation:Pattern="sample"
PatternTest string `json:"patternTest"`
比如
patternTest: "asdfsample"
Required
表示该字段为i必须的, 但是omitempty优先级更高, 只要配置了omitempty, 即变为非必须, 而不配omitempty就是必须
// +kubebuilder:validation:Required
RequiredTest int `json:"requiredTest,omitempty"`
Type
覆盖该字段的类型(默认为 Go 类型的等价物), 这通常必须与自定义序列化配对, 例如,metav1.Time 字段将被标记为"type: string"和"format: date-time"
Nullable
允许该value为空, 不像只配置为omitempty, 如果value为空, yaml结果中不会展示该字段
// +nullable
NullTest int `json:"nullTest"`
cr配置
nullTest:
yaml结果
nullTest: null
CRD处理
PreserveUnknownFields
使用方式及说明见 CRD验证 EmbeddedResource
// +kubebuilder:pruning:PreserveUnknownFields
XPreserveUnknownFields
使用方式及说明见 CRD验证 XEmbeddedResource, 已被PreserveUnknownFields取代
https://github.com/kubernetes-sigs/controller-tools/pull/422
WebHook
failurePolicy <string>: 指定如果 API 服务器无法访问 webhook 时的策略, 可选参数为 fail 和 ignore
groups <[]string>: 指定此 webhook 接收请求的 API 组
matchPolicy <string>: 定义"规则"列表用于如何匹配传入请求, 允许的值为"Exact"(仅当它与指定规则完全匹配时才匹配)或"Equivalent"(如果请求修改了规则中列出的资源,则匹配请求,即使是通过另一个 API 组或版本)
mutating <bool>: 启用mutating webhook
name <string>: 此webhook的名称
path <string>: 指定 API 服务器应连接到此 webhook 的路径。 必须以 '/validate-' 或 '/mutate-' 为前缀,具体取决于类型,然后是 $GROUP-$VERSION-$KIND,其中所有值都是小写的,组中的句点用连字符代替。 例如,类型 batch.tutorial.kubebuilder.io/v1,Kind=CronJob 的验证 webhook 路径为 /validate-batch-tutorial-kubebuilder-io-v1-cronjob
resources <[]string>: 设置监控的api资源 例如:deployments
sideEffects <string>: 指定调用 webhook 是否会有副作用。 这对dry run和 `kubectl diff` 有影响:如果 sideEffect 是"Unknown"(默认)或"Some",那么 API 服务器将不会在空运行请求上调用 webhook,而是失败。 如果值为"None",则 webhook 没有副作用,API 服务器将在试运行时调用它。 如果该值为"NoneOnDryRun",则 Webhook 负责检查请求中发送的 AdmissionReview 的"dryRun"属性,dryRun被设置为"true"时没有副作用
verbs <[]string>: 指定此 webhook 接收请求的 Kubernetes API 动作。可以是"create"、"update"、"delete"、"connect"或"*"(适用于所有)
versions <[]string>: 指定此 webhook 接收请求的 API 版本
admissionReviewVersions <[]string>: 可接受的 AdmissionReview 对象版本 , 比如"v1", "v1beta1"
示例
//+kubebuilder:webhook:path=/validate-sample-example-io-v1-sample,mutating=false,sideEffects=None,admissionReviewVersions=v1,failurePolicy=fail,groups="*",resources="*",verbs=create;update;delete,versions="*",name=sample.validate.example.io
Object/DeepCopy
generate
启用或禁用此类对象的深拷贝生成, true / false
可作用于结构体或者整个包, 比如可以在整个包作用域下设置为true(可在groupversion_info.go中设置), 但对特定的结构体设置为false
// +kubebuilder:object:generate=true
root
为该类型生成object接口
//+kubebuilder:object:root=true
RBAC
groups <[]string>: 指定api 组, 比如 deployment 属于apps组
namespace: 如果指定了命名空间, 则作用在该命名空间, 否则作用在全局
resourceNames <[]string>: 包含的 API 资源的名称, 比如abc-deployment
resources <[]string>: 包含的资源类型, 比如deployments
urls <[]string>: 访问非资源的URL
verbs <[]string>: 对资源的操作,比如get;list;watch;create;update;patch
// +kubebuilder:rbac:groups=sample.example.io,resources=samples,verbs=get;list;watch;create;update;patch;delete
相关文章:

kubebuilder注释
标记语法Empty kubebuilder:validation:Optional:空标记像命令行中的布尔标记位-- 仅仅是指定他们来开启某些行为。Anonymous kubebuilder:validation:MaxItems2:匿名标记使用单个值作为参数。Multioption kubebuilder:printcolumn:JSONPath".statu…...

java日志
日志是软件开发的重要组成部分。一个精心编写的日志代码提供快速的调试,维护方便,以及应用程序的运行时信息结构化存储。日志记录确实也有它的缺点。它可以减缓的应用程序Log4jLog4j是Apache的一个开放源代码项目,通过使用Log4j,我…...

研发中台拆分过程的一些心得总结
背景在 21 年,中台拆分在 21 年,以下为中台拆分的过程心得,带有一定的主观,偏向于中小团队中台建设参考(这里的中小团队指 3-100 人的团队),对于大型团队不太适用,毕竟大型团队人中 …...

HTTP介绍
HTTP1、简介HTTP概念:HyperText Transfer Protocol,超文本传输协议,规定了浏览器和服务器之间数据传输的规则。数据传输的规则指的是请求数据和响应数据需要按照指定的格式进行传输。如果想知道具体的格式,可以打开浏览器…...

10 卷积神经网络及python实现
1 卷积神经网络简介 卷积神经网络(Convolutional Neural Network, CNN)由LeCun在上世纪90年代提出。 LeCun Y., Bottou L., Bengio Y., and Haffner P., Gradient-based learning applied to document recognition, Proceedings of the IEEE, pp. 1-7, 1998. 卷积核和特征图&…...

【立体匹配论文阅读】AANet: Adaptive Aggregation Network for Efficient Stereo Matching
Authors: Haofei Xu, Juyong Zhang Link: https://arxiv.org/abs/2004.09548 Years: 2020 Credit Novelty and Question set up 主流的立体匹配模型的代价聚合操作主要用了3D卷积,这部分操作的算力和内存消耗过大,因此作者提出一种新的模型AANet&#x…...

服务器防入侵攻击,安全加固措施
服务器防入侵攻击,安全加固措施当服务器被入侵,被攻击的时候,很多服务器维护人员不懂得如何去防止入侵,防止黑客的攻击,只能眼巴巴的看着服务器被任意的攻击,给服务器上的网站造成严重的经济损失࿰…...

解读:“出境标准合同”与“出境安全评估”要点与异同
《数据安全法》第四条及《个人信息保护法》第三章对数据出境、个人信息跨境提出明确要求,《数据安全法》与《个人信息保护法》存在互相包含、被包含、衔接、特性、独立性、相互补充等内涵。本文通过上位法互相衔接、关联、特性的思路,去观察《个人信息出…...

python带你成功复刻热门手机游戏——飞翔的小鸟
前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 飞翔的小鸟(游戏英文名:Flappy Bird) 一款由越南独立开发者开发的手机游戏,是之前非常流行的一款手机游戏 小游戏目标:让小鸟穿过管子,不要碰到任何物体…...

YOLOv8初体验:检测、跟踪、模型部署
安装 YOLOv8有两种安装方式,一种是直接用pip命令安装: pip install ultralytics另外一种是通过源码安装: git clone https://github.com/ultralytics/ultralytics cd ultralytics pip install -e .[dev]安装完成后就可以通过yolo命令在命令…...

Vue 监听(watch handler)
普通监听 缺点:不能深度监听(对象属性的改变),刷新或首次加载不能执行。 watch: { carts: function (val, oldVal) { console.log(new: %s, old: %s, val, oldVal) } } 高级监…...

前端代码质量-圈复杂度原理和实践
1. 导读 你们是否也有过下面的想法? 重构一个项目还不如新开发一个项目…这代码是谁写的,我真想… 你们的项目中是否也存在下面的问题? 单个项目也越来越庞大,团队成员代码风格不一致,无法对整体的代码质量做全面的…...

汽车微控制器芯片F280039CPZRQ1、F280039CSPM、F280039CSPN规格参数
F280039CPZRQ1、F280039CSPM、F280039CSPN是C2000实时微控制器系列中的一款器件。C2000微控制器是可扩展、超低延迟器件,旨在提高电力电子设备的效率,包括但不限于:高功率密度、高开关频率,并支持使用 GaN和SiC技术。F280039CPZRQ…...

禾观科技三面经历
智力题 一天中时针和分钟重合多少次 由于时针1分钟旋转的圆心角度数为0.5度(30/60min) 分针1分钟旋转的圆心角度为6度(30/5min) 当两针第一次重合时后到第二次重合,分针比时针多旋转过的圆心角度数为360度。(快的比慢的多跑一圈,也就是360度) 这类问题实际上是分针追时…...

Spring Boot 实现接口幂等性的 4 种方案
一、什么是幂等性 幂等是一个数学与计算机学概念,在数学中某一元运算为幂等时,其作用在任一元素两次后会和其作用一次的结果相同。 在计算机中编程中,一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数或幂…...

Android Studio开发APP
1.下载Android Studio 官网下载:Android Studio for Window ... 百度云下载:android-studio-bundle-141.1903250-windows.exe Android Studio 是谷歌推出的一个Android集成开发工具,基于IntelliJ IDEA. 类似 Eclipse ADT,Android Studio 提供了集成的 Android 开发工具用…...

Spring之实例化Bean _ @Resource和@Autowired实现原理(3)
目录 1. 搜集注解信息 applyMergedBeanDefinitionPostProcessor(*) 2. 将实例化的Bean放入3级缓存中 addSingletonFactory(***)为循环依赖做准备 3. 根…...

华为HCIE学习之Openstack Cinder组件(cinder对接glusterfs)
文章目录一、MQ的作用二、cinder架构图三、各组件的作用四、cinder对接glusterfs一、MQ的作用 服务内各组件交互通过MQ进行 二、cinder架构图 IET,Linux用软件做存储,CNA识别过去就是IETTGT,物理存储,CNA识别过去就是TGT 三、…...

关于Go语言的底层,你想知道的都在这里!
文章目录1. GoLang语言1.1 Slice1.2 Map1.3 Channel1.4 Goroutine1.5 GMP调度1.6 垃圾回收机制1.7 其他知识点2. Web框架Gin和微服务框架Micro2.1 Gin框架2.2 Micro框架2.3 Viper2.4 Swagger2.5 Zap2.6 JWT文章字数大约1.95万字,阅读大概需要65分钟,建议…...

每日一问-ChapGPT-20230308-关于技术与思考的问题
文章目录每日一问-ChapGPT系列起因每日一问-ChapGPT-20230308-关于技术与思考的问题matplotlib_venn 中 venn2函数调用时,subsets传入A list (or a tuple) containing two set objects,怎么理解plt.pie() 包含哪些参数,以及每个参数的意义mat…...

Oracle表分区的创建、新增、拆分
Oracle中为了方便管理、查询数据当数据量大于500w或者2G时最好用分区表,常见的一种是使用时间作为分区。 分区表添加新的分区有 2 种情况: (1) 原分区里边界是 maxvalue 或者 default。 这种情况下,我们需要把边界分区 drop 掉,加…...

如何快速升级Java 8 到Java11
老板让我把一个项目从 Java 8 迁移到 Java 11,我该怎么办呢? 最简单的办法,当然是直接强行升级,遇到一个错就改一个错,别看它 low,但是对于一个小型且非核心的项目来说,已经足够了。 当然,对于比较重要的项目,且代码行数不少的情况,最标准的姿势就是对着官方文档进…...

内卷把同事逼成了“扫地僧”,把Git上所有面试题整理成足足24W字Java八股文
互联网大厂更多的是看重学历还是技术?毫无疑问,是技术,技术水平相近的情况下,肯定学历高/好的会优先一点,这点大家肯定都理解。说实话,学弟学妹们找工作难,作为面试官招人也难呀!&am…...

【计组】主存储器有关知识梳理
一、主存储器 主存储器可以直接和CPU进行通信,但是只能保存临时数据,在断电后数据就消失。还有一个特点是,主存储器的容量小,速度快,造价高。 1.构成 2.主存中存储体的构造 最小的存储单位是存储元,存储元…...

QT对象树
对象模型(对象树) 在Qt中创建对象的时候会提供一个Parent对象指针,下面来解释这个parent到底是干什么的。 l QObject是以对象树的形式组织起来的。 n 当你创建一个QObject对象时,会看到QObject的构造函数接收一个QObject指针作…...

什么是B+树
B树是一种树数据结构。B树索引是B树在数据库中的一种实现,是最常见也是数据库中使用最为频繁的一种索引。 先来了解一下什么是索引? 一、索引 数据都是存储在硬盘上的,查询数据不可避免的需要进行IO操作。 索引是一种数据结构,…...

【Unity游戏破解】外挂原理分析
文章目录认识unity打包目录结构游戏逆向流程Unity游戏攻击面可被攻击原因mono的打包建议方案锁血飞天无限金币攻击力翻倍以上统称内存挂透视自瞄压枪瞬移内购破解Unity游戏防御开发时注意数据安全接入第三方反作弊系统外挂检测思路狠人自爆实战查看目录结构用il2cpp dumper例子…...

windows 关闭指定端口进程
1、首先打开cmd 注意要用管理员身份打开cmd,否则可能出现无权访问的提示。 2、输入以下命令(以端口号9098为例) 查看端口信息 netstat -ano | findstr 90983、输入以下命令关闭这个进程 taskkill -PID 39716 -F...

虚拟化系列教程:创建 KVM 虚机的几种方式
虚拟化系列教程:创建虚拟机的几种方式[TOC](虚拟化系列教程:创建虚拟机的几种方式)创建 KVM 虚机的几种方式使用 virt-install 命令创建虚拟机参数说明一般选项安装方法存储配置网络配置其它常用的选项图形配置设备选项虚拟化平台其它创建虚拟机的操作演…...

MacBook安装Golang Oracle数据库驱动程序
Golang连接Oracle 需要安装Oracle Full Client或Instant Client Oracle的Instant Client套件下载地址 #选择Instant Client for macOS (Intel x86)下载包如下: instantclient-basic-macos.x64-19.8.0.0.0dbru.zip instantclient-sdk-macos.x64-19.8.0.0.0dbru.zip instantcli…...