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

如何使用Kubernetes自定义资源(CRD)详解

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

北京

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

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

看不清楚,换张图片

免费获取短信验证码

如何使用Kubernetes自定义资源(CRD)详解

什么是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   KIND
configmaps                        cm                                          true         ConfigMap
endpoints                         ep                                          true         Endpoints
events                            ev                                          true         Event
namespaces                        ns                                          false        Namespace
persistentvolumes                 pv                                          false        PersistentVolume
pods                              po                                          true         Pod
podtemplates                                                                  true         PodTemplate
storageclasses                    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.yml
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
  # 名称必须符合如下格式:<plural>.<group>
  name: crontabs.staight.k8s.io
spec:
  # 组名,表示使用该API: /apis/<group>/<version>
  group: staight.k8s.io
  # version列表,表示该CRD支持的版本
  versions:
    - name: v1
      # 开启/关闭该API
      served: true
      # 有且只能有一个版本要将storage设置为true
      storage: true
  # Namespaced/Cluster,表示该CRD是命令空间属性还是集群属性
  scope: Namespaced
  names:
    # API中使用的名称:/apis/<group>/<version>/<plural>
    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.io
NAME                      CREATED AT
crontabs.staight.k8s.io   2019-10-08T10:21:09Z

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

创建自定义对象

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

# crontab.yml
apiVersion: "staight.k8s.io/v1"
kind: CronTab
metadata:
  name: new-crontab
spec:
  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 crontab
NAME          AGE
new-crontab   28s

小结

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

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

总结

到此这篇关于如何使用Kubernetes自定义资源(CRD)的文章就介绍到这了,更多相关Kubernetes自定义资源使用内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

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

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

如何使用Kubernetes自定义资源(CRD)详解

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

下载Word文档

猜你喜欢

自定义资源CRD如何使用

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

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

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

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

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

如何将 Kubernetes 自定义资源规范与 GO 控制器中的预期规范进行比较?

最近发现不少小伙伴都对Golang很感兴趣,所以今天继续给大家介绍Golang相关的知识,本文《如何将 Kubernetes 自定义资源规范与 GO 控制器中的预期规范进行比较?》主要内容涉及到等等知识点,希望能帮到你!当然如果阅读本文时存
如何将 Kubernetes 自定义资源规范与 GO 控制器中的预期规范进行比较?
2024-04-04

Java中自定义注解如何使用

本文小编为大家详细介绍“Java中自定义注解如何使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java中自定义注解如何使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。什么是注解在早期的工作的时候 ,自定义
2023-07-05

一文详解uniapp中如何使用easycom自定义组件

easycom是uniapp的一种组件自动引入的规则,使用这种规则可以使满足规则的组件无需注册直接使用,下面这篇文章主要给大家介绍了关于uniapp中如何使用easycom自定义组件的相关资料,需要的朋友可以参考下
2023-05-18

详解Java中自定义注解的使用

Annontation是Java5开始引入的新特征,中文名称叫注解,它提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程序元素(类、方法、成员变量等)进行关联。本文主要介绍了自定义注解的使用,希望对大家有所帮助
2023-03-20

详解React Native中如何使用自定义的引用路径

这篇文章主要为大家介绍了React Native中如何使用自定义的引用路径详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2022-11-13

Android自定义Toolbar使用方法详解

本篇文章介绍: 如何使用Toolbar; 自定义Toolbar; 先来看一看效果,了解一下toolbar;布局文件:
2022-06-06

详解SpringBoot如何创建自定义Starter

本文详述了如何创建自定义SpringBootStarter。Starter可以简化基于SpringBoot的应用程序开发。创建Starter包括以下步骤:准备模块信息、定义依赖项、创建SpringBoot配置类、提供自动配置条件、声明Starter元数据、打包和发布Starter、使用Starter。通过遵循这些步骤,开发人员可以创建和使用自定义Starter,从而简化应用程序开发流程。
详解SpringBoot如何创建自定义Starter
2024-04-02

如何使用SpringBoot自定义starter

这篇文章主要介绍了如何使用SpringBoot自定义starter,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。springboot是什么springboot一种全新的编程规
2023-06-14

编程热搜

目录