iis服务器助手广告广告
返回顶部
首页 > 资讯 > 服务器 >如何使用Kubernetes自定义资源(CRD)详解
  • 871
分享到

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

2024-04-02 19:04:59 871人浏览 八月长安
摘要

目录什么是CRDCRD使用小结总结什么是CRD CRD的全称为 CustomResourceDefinitions,即自定义资源。k8s拥有一些内置的资源,比如说Pod,D

什么是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自定义资源使用内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 如何使用Kubernetes自定义资源(CRD)详解

本文链接: https://www.lsjlt.com/news/166973.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • 如何使用Kubernetes自定义资源(CRD)详解
    目录什么是CRDCRD使用小结总结什么是CRD CRD的全称为 CustomResourceDefinitions,即自定义资源。k8s拥有一些内置的资源,比如说Pod,D...
    99+
    2024-04-02
  • 自定义资源CRD如何使用
    今天小编给大家分享一下自定义资源CRD如何使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。介绍Custom Resourc...
    99+
    2023-06-30
  • kubernetes k8s CRD自定义资源学习笔记
    目录CustomResourceDefinition简介:目前扩展Kubernetes API的常用方式有3种:配置规范示例1: 创建自定义CRD创造自定义CRD类型示例2: etc...
    99+
    2024-04-02
  • 自定义资源CRD使用介绍
    目录介绍定义介绍 Custom Resource Define简称 CRD,是 Kubernetes(v1.7+)为提高可扩展性,让开发者去自定义资源的一种方式。 CRD 资源可以动...
    99+
    2024-04-02
  • 使用 go Kubernetes 客户端创建自定义资源
    php小编小新为大家带来了关于使用go Kubernetes客户端创建自定义资源的介绍。随着云原生技术的发展,越来越多的企业开始采用Kubernetes作为容器编排平台。而创建自定义资...
    99+
    2024-02-08
  • 是否可以使用 Go 将现有的 CRD 添加到自定义 Kubernetes 运算符中?
    欢迎各位小伙伴来到编程网,相聚于此都是缘哈哈哈!今天我给大家带来《是否可以使用 Go 将现有的 CRD 添加到自定义 Kubernetes 运算符中?》,这篇文章主要讲到等等知识,如果你对Golan...
    99+
    2024-04-05
  • 使用SpringBoot自定义starter详解
    目录一、新建一个工程二、xxx-sprig-boot-starter-configure模块自动配置编码2.1 服务层编码2.2 属性配置类编码2.3 starter自动配置类编码2...
    99+
    2024-04-02
  • 详解SpringBoot如何自定义Starter
    目录阅读收获本章源码下载什么是Starter为什么使用StarterSpringboot自动配置spring.factoriesStarter开发常用注解Full全模式和Lite轻量...
    99+
    2024-04-02
  • 如何将 Kubernetes 自定义资源规范与 GO 控制器中的预期规范进行比较?
    最近发现不少小伙伴都对Golang很感兴趣,所以今天继续给大家介绍Golang相关的知识,本文《如何将 Kubernetes 自定义资源规范与 GO 控制器中的预期规范进行比较?》主要内容涉及到等等...
    99+
    2024-04-04
  • Android 自定义开源库 EasyView实现详解
    目录配置EasyView1. 工程build.gradle 或 settings.gradle配置2. 使用模块的build.gradle配置使用EasyView一、MacAddre...
    99+
    2023-05-17
    Android自定义EasyView Android EasyView开源库
  • Java中自定义注解如何使用
    本文小编为大家详细介绍“Java中自定义注解如何使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java中自定义注解如何使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。什么是注解在早期的工作的时候 ,自定义...
    99+
    2023-07-05
  • 详解Java中自定义注解的使用
    目录什么是注解注解的注意事项注解的本质自定义注解使用使用方式 1使用方式 2什么是注解 在早期的工作的时候 ,自定义注解写的比较多,可大多都只是因为 这样看起来 不会存在一堆代码耦合...
    99+
    2023-03-20
    Java自定义注解使用 Java自定义注解 Java 注解
  • 详解Vue自定义指令及使用
    目录一、什么是指令vue 中常用的一些内置 v- 指令v-if 和 v-show 的对比二、自定义指令的钩子函数三、全局指令四、局部指令五、带参数的自定义指令六、函数简写七、应用实例...
    99+
    2024-04-02
  • 一文详解uniapp中如何使用easycom自定义组件
    目录一、全局注册二、局部注册第一种:传统vue规范第二种:通过uni-app的easycom规则第三种方法:通过npm安装总结一、全局注册 uni-app 支持配置全局组件,需在 m...
    99+
    2023-05-18
    uniapp easycom uniapp 自定义组件 uniapp easycom自定义组件
  • 详解React Native中如何使用自定义的引用路径
    目录RN的相对路径地狱RN的自定义路径需要的依赖解决自定义引用路径导致的eslint报错问题RN的相对路径地狱 我刚接触RN时,就发现所有的demo中给出来的路径都是相对路径,我自己...
    99+
    2022-11-13
    React Native自定义引用路径 React Native
  • 详解Java如何实现自定义注解
    目录概念作用JDK中预定义的一些注解注解生成文档案例自定义注解格式本质属性:接口中的抽象方法元注解:用于描述注解的注解在程序使用(解析)注解:获取注解中定义的属性值案例:通过自定义注...
    99+
    2024-04-02
  • kubernetes(k8s)安装metrics-server实现资源使用情况监控方式详解
    1. Metrics Server 与 kubenetes版本 Metrics Server    Metrics API group/version&...
    99+
    2024-04-02
  • 详解Flutter如何完全自定义TabBar
    目录前言实现过程完整代码总结前言 在App中TabBar形式交互是非常常见的,但是系统提供的的样式大多数又不能满足我们产品和UI的想法,这篇就记录下在Flutter中我在实现自定义T...
    99+
    2024-04-02
  • Vue.js源码分析之自定义指令详解
    前言 除了核心功能默认内置的指令 (v-model 和 v-show),Vue 也允许注册自定义指令。 官网介绍的比较抽象,显得很高大上,我个人对自定义指令的理解是:当自定义指令作用...
    99+
    2024-04-02
  • Win10如何自定义设置文件资源管理器打开位置
    这篇文章给大家分享的是有关Win10如何自定义设置文件资源管理器打开位置的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。具体方法如下:在记事本中写入如下图命令(“X:\你的文件夹”改为你想要自定义的位置):WScr...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作