<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
Custom Resource Define简称 CRD,是 Kubernetes(v1.7+)为提高可延伸性,让开发者去自定义资源的一种方式。
CRD 资源可以动态注册到丛集中,注册完毕后,用户可以通过 kubectl 来建立存取这个自定义的资源物件,类似于操作 Pod 一样。
不过需要注意的是 CRD 仅仅是资源的定义而已,需要一个对应的控制器去监听 CRD 的各种事件来新增自定义的业务逻辑。
如果说只是对 CRD 资源本身进行 CRUD 操作的话,不需要 Controller 也是可以实现的,相当于就是只有资料存入了 etcd 中,而没有对这个资料的相关操作而已。
比如我们可以定义一个如下所示的 CRD 资源清单档案:
apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: # name 必须匹配下面的spec栏位:<plural>.<group> name: foos.crd.example.com # for more information on the below annotation, please see # https://github.com/kubernetes/enhancements/blob/master/keps/sig-api-machinery/2337-k8s.io-group-protection/README.md annotations: "api-approved.kubernetes.io": "unapproved, experimental-only; please get an approval from Kubernetes API reviewers if you're trying to develop a CRD in the *.k8s.io or *.kubernetes.io groups" spec: # group 名用于 REST API 中的定义: /apis/<group>/<version> group: crd.example.com # 列出自定义资源的所有 API 版本 versions: - name: v1 # 版本名称,比如v1,v1beta1 served: true # 是否开启通过 REST APIs存取 `/apis/<group>/<version>/...` storage: true # 必须将一个且只有一个版本标记为储存版本 schema: # 定义自定义物件的宣告规范 # schema used for validation openAPIV3Schema: type: object properties: spec: type: object properties: deploymentName: type: string replicas: type: integer minimum: 1 maximum: 10 status: type: object properties: availableReplicas: type: integer names: # kind 是 sigular 的一个驼峰形式的定义,在资源清单中会使用 kind: Foo # plural 名字用于 REST API 中的定义:/apis/<group>/<version>/<plural> plural: foos # singular 名称用于 CLI 操作或显示的一个别名 singular: foo # shortNames 相当于缩写形式 shortNames: - fo scope: Namespaced
这个地方的定义和我们定义普通的资源物件比较类似,我们可以随意定义一个自定义的资源物件,但是在建立资源的时候,肯定不是任由我们随意去编写 YAML 档案的,当我们把上面的 CRD 档案提交给 Kubernetes 之后,Kubernetes 会对我们提交的宣告档案进行校验,从定义可以看出 CRD 是基于OpenAPI v3 schem进行规范的。
当然这种校验只是对于栏位的型别进行校验,比较初级,如果想要更加复杂的校验,这个时候就需要通过 Kubernetes 的 admission webhook 来实现了。关于校验的更多用法,可以前往官方文件检视。
现在我们可以直接使用kubectl来建立这个CRD资源清单:
$ kubectl apply -f crd.example.com_foos.yaml customresourcedefinition.apiextensions.k8s.io/foos.crd.example.com created
这个时候我们可以检视到丛集中已经有我们定义的这个CRD资源物件了:
$ kubectl get crd | grep example foos.crd.example.com 2022-05-11T05:28:51Z
这个时候一个新的 namespace 级别的 RESTful API 就会被建立:
/apis/crd/example.com/v1/namespaces/*/foos/...
接着我们就可以使用这个 API 端点来建立和管理自定义的物件,这些物件的型别就是上面建立的 CRD 物件规范中的foo
。
现在在 Kubernetes 丛集中我们就多了一种新的资源叫做foos.crd.example.com,我们就可以使用它来定义一个Foo
资源物件了,这个自定义资源物件里面可以包含的栏位我们在定义的时候通过schema
进行了规范,比如现在我们来建立一个如下所示的资源清单:
apiVersion: crd.example.com/v1 kind: Foo metadata: name: example-foo spec: deploymentName: example-foo replicas: 1
建立完成后我们就可以用kubectl来管理我们这里建立的Foo物件了,比如:
kubectl get foo NAME AGE example-foo 20m
在使用 kubectl 的时候,资源名称是不区分大小写的,我们可以使用 CRD 中定义的单数或者复数形式以及任何简写。
kubectl get foo example-foo -o yaml apiVersion: crd.example.com/v1 kind: Foo metadata: annotations: kubectl.kubernetes.io/last-applied-configuration: | {"apiVersion":"crd.example.com/v1","kind":"Foo","metadata":{"annotations":{},"name":"example-foo","namespace":"default"},"spec":{"deploymentName":"example-foo","replicas":1}} creationTimestamp: "2022-05-11T05:40:38Z" generation: 1 name: example-foo namespace: default resourceVersion: "37605212" uid: 56d5b1d3-f6f9-4106-90c4-a0e3c7d130c0 spec: deploymentName: example-foo replicas: 1
就如上面我们说的,现在我们自定义的资源建立完成了,但是也只是单纯的把资源清单资料存入到了 etcd 中而已,并没有什么其他用处,因为我们没有定义一个对应的控制器来处理相关的业务逻辑。
以上就是自定义资源CRD使用介绍的详细内容,更多关于自定义资源CRD的资料请关注it145.com其它相关文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45