广告位联系
返回顶部
分享到

使用Kubernetes自定义资源(CRD)的介绍

DNS服务器 来源:互联网 作者:佚名 发布时间:2022-09-07 20:46:25 人浏览
摘要

什么是CRD CRD的全称为CustomResourceDefinitions,即自定义资源。k8s拥有一些内置的资源,比如说Pod,Deployment,ReplicaSet等等,而CRD则提供了一种方式,使用户可以自定义新的资源,以扩展k8

什么是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命令查看集群中已定义的资源:

1

2

3

4

5

6

7

8

9

10

11

[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组件提供了多种内置控制器,比如说:cronjob,daemonset,deployment,namespace等等,它们监听资源的创建/更新/删除,且做出相应的动作。而对于CRD来说,也可以编写相应的控制器来完成对应的功能。

CRD使用

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

创建CRD

CRD资源文件示例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

# 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:

1

2

[root@node k8s]# kubectl create -f crd-test.yml

customresourcedefinition.apiextensions.k8s.io/crontabs.staight.k8s.io created

接着就能查到该CRD:

1

2

3

[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之后,即可创建其资源的对象了。资源文件示例:

1

2

3

4

5

6

7

8

# crontab.yml

apiVersion: "staight.k8s.io/v1"

kind: CronTab

metadata:

  name: new-crontab

spec:

  cronSpec: "* * * * *"

  image: new-image

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

1

2

[root@node k8s]# kubectl create -f crontab.yml

crontab.staight.k8s.io/new-crontab created

接着即可看到该对象:

1

2

3

[root@node k8s]# kubectl get crontab

NAME          AGE

new-crontab   28s

小结

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

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


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。

您可能感兴趣的文章 :

原文链接 : https://staight.github.io/2019/10/08/Kubernetes-CRD%E7%AE%80%E4%BB%8B/
相关文章
  • k8s集群部署时etcd容器不停重启问题以及处理介绍
    问题现象 在安装部署Kubernetes 1.26版本时,通过kubeadm初始化集群后,发现执行kubectl命令报以下错误: The connection to the server localhost:8080 was
  • docker容器中文乱码的解决教程
    docker部署java开发web项目。nohup显示打印日志出现中文乱码,中文显示为问号???。 环境 服务器系统:centos7、docker部署项目 具体操作如下
  • 云原生Docker创建并进入mysql容器的全过程

    云原生Docker创建并进入mysql容器的全过程
    本文主要讲解的是创建mysql的容器,大家都知道,在外面进入mysql都很容易,mysql -u用户名 -p密码就可以,但是是容器的mysql就没那么好进入了
  • 云原生Docker容器自定义DNS解析

    云原生Docker容器自定义DNS解析
    描述 在特定的情况下,或者在网络策略特殊定义下,需要自定义dns进行域名访问,在宿主机上配置了域名解析,对于docker容器无效。 对于局
  • 半小时实现基于ChatGPT搭建微信机器人

    半小时实现基于ChatGPT搭建微信机器人
    ChatGPT刷屏了 相信大家最近被ChatGPT刷屏了,其实在差不多一个月前就火过一次,不会那会好像只在程序员的圈子里面火起来了,并没有被大
  • docker search命令的具体使用
    一、docker search 命令选项 命令选项 描述 filter , -f 根据给定的条件进行过滤 format 自定义打印格式 limit 显示搜索结果,默认值25 no-trunc 回显结
  • docker-cli源码窥探(推荐)

    docker-cli源码窥探(推荐)
    docker-cli源码窥探 最近一直在使用docker,看了一些书和教程,但是一直停在使用的层面,但总觉得不够深入,故决定看看源码,学习优秀的项
  • kvm 透传显卡至win10虚拟机的方法

    kvm 透传显卡至win10虚拟机的方法
    环境 1 2 3 4 5 6 7 8 9 10 11 已安装nvidia 显卡 驱动 操作系统:CentOS Linux release 7.9.2009 (Core) 内核版本:Linux 5.4.135-1.el7.elrepo.x86_64 显卡 型号:rtx 6000
  • Docker Desktop常见的几种启动失败问题解决方法

    Docker Desktop常见的几种启动失败问题解决方法
    报错1,Error:Failed to restart 点Quit 然后出现提示WSL 2 is not installed 点击 Use Hyper-V 打开 启用或关闭windows功能 确保适用于Linux的Windows子系统和
  • 使用Kubernetes自定义资源(CRD)的介绍
    什么是CRD CRD的全称为CustomResourceDefinitions,即自定义资源。k8s拥有一些内置的资源,比如说Pod,Deployment,ReplicaSet等等,而CRD则提供了一种方
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计