我的编程空间,编程开发者的网络收藏夹
学习永远不晚

自定义资源CRD使用介绍

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

自定义资源CRD使用介绍

介绍

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的资料请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

自定义资源CRD使用介绍

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

自定义资源CRD如何使用

今天小编给大家分享一下自定义资源CRD如何使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。介绍Custom Resourc
2023-06-30

Android 自定义View的使用介绍

在项目开发中,可能系统自带的一些widget不能满足我们的需求,这时就需要自定义View。 通过查看系统中的常用widget如Button,TextView,EditText,他们都继承自View,所以我们在继承自定义View的时候也自然的
2022-06-06

自定义的PHPRedis操作类使用介绍

在《Redis协议详解》这篇文章中,介绍了Redis协议的内部情况。接着用了一些时间,用PHP封装了一个Redis的操作类,功能虽说比不上专业的PHPRedis这类PHP的第三方扩展强大,但是对于理解Redis应该有很大的帮助。下面来介绍一
自定义的PHPRedis操作类使用介绍
2024-02-27

Vue自定义指令的使用实例介绍

作为使用Vue的开发者,我们对Vue指令一定不陌生,诸如v-model、v-on、等,同时Vue也为开发者提供了自定义指令的api,熟练的使用自定义指令可以极大的提高了我们编写代码的效率,让我们可以节省时间开心的摸鱼
2023-05-16

使用 go Kubernetes 客户端创建自定义资源

php小编小新为大家带来了关于使用go Kubernetes客户端创建自定义资源的介绍。随着云原生技术的发展,越来越多的企业开始采用Kubernetes作为容器编排平台。而创建自定义资源(CRD)则是Kubernetes的一个重要特性,它能
使用 go Kubernetes 客户端创建自定义资源
2024-02-08

wordpress获取自定义字段get_post_meta函数使用介绍

wordpress可以设置自定义字段,方便扩展功能,wordpress利用巧妙的数据库表设计达到这一目的,posts表存放文章,页面和附件等,与之对应的postmeta表用来存储自定义的字段,采用post_id,key,value这样的设计
2022-06-12

Android AIDL使用介绍(2)自定义数据类型的传递

1.背景 默认情况下,AIDL只支持下列数据类型: Java八种基础数据类型(如 int、long、char、boolean 等); String字符串; CharSequence字符序列; List列表,List中的所有元素须是前面提到的
2022-06-06

Android控件系列之XML静态资源使用介绍

学习目的: 1、了解在Android中如何设置和调用XML资源 2、掌握如何利用XML和JAVA代码进行协同开发界面 3、理解R文件的作用 开发Android时,总能看到一个系统自动生成的R.java文件: 您必须了解一下几个要点: 1、
2022-06-06

linux shell自定义函数(定义、返回值、变量作用域)介绍

一、定义shell函数(define function) 语法:[ function ] funname [()] { action; [return int;] } 说明: 1、可以带function fun() 定义,
2022-06-04

Android 自定义View时使用TypedArray配置样式属性详细介绍

Android 自定义View时使用TypedArray配置样式属性详细介绍 在自定义view时为了提高复用性和扩展性,可以为自定义的view添加样式属性的配置,比如自定义图片资源、文字大小、控件属性等,就这需要用到Typed
2022-06-06

是否可以使用 Go 将现有的 CRD 添加到自定义 Kubernetes 运算符中?

欢迎各位小伙伴来到编程网,相聚于此都是缘哈哈哈!今天我给大家带来《是否可以使用 Go 将现有的 CRD 添加到自定义 Kubernetes 运算符中?》,这篇文章主要讲到等等知识,如果你对Golang相关的知识非常感兴趣或者正在自学,都可以
是否可以使用 Go 将现有的 CRD 添加到自定义 Kubernetes 运算符中?
2024-04-05

编程热搜

目录