0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

CRD的概念及使用

马哥Linux运维 来源:staight.github.io 作者:staight.github.io 2022-09-07 09:49 次阅读

什么是CRD

CRD的全称为 CustomResourceDefinitions,即自定义资源。k8s拥有一些内置的资源,比如说Pod,Deployment,ReplicaSet等等,而CRD则提供了一种方式,使用户可以自定义新的资源,以扩展k8s的功能。使用CRD可以在不修改k8s源代码的基础上方便的扩展k8s的功能,比如腾讯云TKE使用CRD:logcollectors.ccs.cloud.tencent.com以添加日志收集服务,而Istio也大量使用到了CRD。值得一提的是,另一种扩展k8s的方式是apiservice,通过API:metrics.k8s.io自定义HPA是其最典型的应用。可以使用kubectl api-resources命令查看集群中已定义的资源:

	
[root@node k8s]# kubectl api-resources NAME                              SHORTNAMES   APIGROUP                       NAMESPACED   KINDconfigmaps                        cm                                          true         ConfigMapendpoints                         ep                                          true         Endpointsevents                            ev                                          true         Eventnamespaces                        ns                                          false        Namespacepersistentvolumes                 pv                                          false        PersistentVolumepods                              po                                          true         Podpodtemplates                                                                  true         PodTemplatestorageclasses                    sc           storage.k8s.io                 false        StorageClass...
从如上输出中可以略窥一二,CRD至少包括如下属性:
  • NAME:CRD的复数名称
  • SHORTNAMES:cli中使用的资源简称
  • APIGROUP:API所使用的组名称
  • NAMESPACED:是否具有namespace属性
  • KIND:资源文件需要,用以识别资源
另外,CRD提供了定义资源的方式,不过想要让其具有实际意义还需控制器的配合。k8s的kube-controller-manager组件提供了多种内置控制器,比如说:cronjobdaemonsetdeploymentnamespace等等,它们监听资源的创建/更新/删除,且做出相应的动作。而对于CRD来说,也可以编写相应的控制器来完成对应的功能。

CRD使用

在k8s中CRD本身也是资源,大于1.7.0版本的集群可以使用apiextensions.k8s.io/v1beta1API访问CRD,大于1.16.0版本则可以使用apiextensions.k8s.io/v1API

创建CRD

CRD资源文件示例:


	
# crd-test.ymlapiVersion: apiextensions.k8s.io/v1beta1kind: CustomResourceDefinitionmetadata:  # 名称必须符合如下格式:.  name: crontabs.staight.k8s.iospec:  # 组名,表示使用该API: /apis//  group: staight.k8s.io  # version列表,表示该CRD支持的版本  versions:    - name: v1      # 开启/关闭该API      served: true      # 有且只能有一个版本要将storage设置为true      storage: true  # Namespaced/Cluster,表示该CRD是命令空间属性还是集群属性  scope: Namespaced  names:    # API中使用的名称:/apis///    plural: crontabs    # 单数名称,cli中使用    singular: crontab    # 往往是首字母大写的单数名称,资源文件中需要用到    kind: CronTab    # cli中的简称    shortNames:    - ct  # 阻止无法识别的字段,集群版本1.15以上才可使用  preserveUnknownFields: false  # 创建资源文件时需验证的字段  validation:    openAPIV3Schema:      type: object      properties:        spec:          type: object          properties:            cronSpec:              type: string            image:              type: string            replicas:              type: integer

然后创建该CRD:


	
[root@node k8s]# kubectl create -f crd-test.yml customresourcedefinition.apiextensions.k8s.io/crontabs.staight.k8s.io created

接着就能查到该CRD:


	
[root@node k8s]# kubectl get crd crontabs.staight.k8s.ioNAME                      CREATED ATcrontabs.staight.k8s.io   2019-10-08T1009Z

CRD创建完成。可以通过URL:https://169.254.128.15:60002/apis/staight.k8s.io/v1/namespaces/default/crontabs访问到crontab资源。

创建自定义对象

在创建CRD之后,即可创建其资源的对象了。资源文件示例:

	
# crontab.ymlapiVersion: "staight.k8s.io/v1"kind: CronTabmetadata:  name: new-crontabspec:  cronSpec: "* * * * *"  image: new-image

注意spec中的字段应符合CRD的要求,创建它:


	
[root@node k8s]# kubectl create -f crontab.yml crontab.staight.k8s.io/new-crontab created

接着即可看到该对象:


	
[root@node k8s]# kubectl get crontabNAME          AGEnew-crontab   28s

小结

  • CRD用来自定义资源,是扩展k8s最常用的方式。

  • 只创建CRD并没有实际意义,想要CRD工作还需创建控制器,监听资源变动并做出相应动作。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 资源
    +关注

    关注

    0

    文章

    59

    浏览量

    17775
  • CRD
    CRD
    +关注

    关注

    0

    文章

    14

    浏览量

    4005
  • kubernetes
    +关注

    关注

    0

    文章

    223

    浏览量

    8695

原文标题:如何用 Kubernetes 自定义资源?一文聊聊 CRD

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Allegro正负片的概念及相关设置说明

     Allegro正负片的概念及相关设置说明
    发表于 05-12 21:22

    中断的概念及51单片机的中断系统

    中断的概念及51单片机的中断系统13-1. 演示范例——声控小车13-2. 中断的概念13-3. P89V51RD2单片中断系统的构成 
    发表于 03-29 10:27

    FPGA与CPLD的概念及其区别PDF

    FPGA与CPLD的概念及其区别
    发表于 08-15 15:46

    串口通讯的概念及接口电路解析,不看肯定后悔

    串口通讯的概念及接口电路解析,不看肯定后悔
    发表于 05-27 06:01

    USB基本概念及从机编程方法介绍

    慕课苏州大学.嵌入式开发及应用.第四章.较复杂通信模块.USB基本概念及从机编程方法0 目录4 较复杂通信模块4.4 USB基本概念及从机编程方法4.4.1 课堂重点4.4.2 测试与作业5 下一
    发表于 11-08 09:14

    嵌入式系统的概念及特点

    文章目录嵌入式系统概要嵌入式系统的概念及特点嵌入式系统硬件嵌入式系统软件嵌入式系统的编程模式微控制器的程序开发方式嵌入式系统概要嵌入式系统的概念及特点1. 概念国外的定义:用于控制、监视或者辅助操作
    发表于 12-22 06:36

    嵌入式系统的概念及特点

    嵌入式系统概要嵌入式系统概要1.嵌入式系统的概念及特点2.嵌入式硬件3.嵌入式系统软件4.嵌入式系统编程模式5.微控制器的程序开发方式嵌入式系统概要1.嵌入式系统的概念及特点2.嵌入式硬件3.嵌入式系统软件4.嵌入式系统编程模式5.微控制器的程序开发方式...
    发表于 12-22 07:21

    相位噪声和抖动的概念及其估算方法

    相位噪声和抖动的概念及其估算方法 时钟频率的不断提高使相位噪声和抖动在系统时序上占据日益重要的位置。本文介其概念及其对系统性能的影
    发表于 12-27 13:30 2693次阅读
    相位噪声和抖动的<b class='flag-5'>概念及</b>其估算方法

    地和接地的概念及区别

    地和接地的概念及区别 1.地 (1)电气地 大地是一个电阻非常低、电容量非常大的物体,拥有吸收无限电荷的
    发表于 12-31 11:09 3425次阅读

    基于RF射频知识基本概念及DTD无线产品介绍

    基于RF射频知识基本概念及DTD无线产品介绍
    发表于 10-25 08:38 8次下载
    基于RF射频知识基本<b class='flag-5'>概念及</b>DTD无线产品介绍

    移动基站天线有关概念及选型原则

    移动基站天线有关概念及选型原则概述。
    发表于 06-16 09:48 15次下载

    智能电网的概念及通信技术详解

    智能电网的概念及通信技术详解
    发表于 11-21 20:41 1191次阅读

    工业网络通信新概念及FLEX产品介绍

    工业网络通信新概念及FLEX产品介绍
    的头像 发表于 03-08 10:57 1808次阅读
    工业网络通信新<b class='flag-5'>概念及</b>FLEX产品介绍

    S参数的概念及应用

    电子发烧友网站提供《S参数的概念及应用.pdf》资料免费下载
    发表于 08-12 14:29 0次下载

    谐波的概念及应用

    本文简单介绍了谐波的概念及应用。
    的头像 发表于 10-18 14:14 248次阅读
    谐波的<b class='flag-5'>概念及</b>应用