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

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

云和虚拟化 来源:互联网 作者:佚名 发布时间: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/
相关文章
  • 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则提供了一种方
  • 部署k8s集群的实践步骤

    部署k8s集群的实践步骤
    1、部署k8s的两种方式: 目前生产部署Kubernetes集群主要有两种方式: kubeadm Kubeadm是一个K8s部署工具,提供kubeadm init和kubeadm join,用于快速部
  • docker启动jenkins环境的问题介绍

    docker启动jenkins环境的问题介绍
    【注意:】jenkins的docker镜像,需要从官网进入直接获取,其他地方获取到的docker镜像,可能因为Jenkins版本过低,导致后续插件安装失败等问
  • Docker容器搭建Kafka集群的教程

    Docker容器搭建Kafka集群的教程
    一、Kafka集群的搭建 1.拉取相关镜像 1 2 docker pull wurstmeister/kafka docker pull zookeeper 2.运行zookeeper 1 docker run -d --name zookeeper -p 2181:2181 -t zookeeper
  • 详解Docker容器之间数据传输

    详解Docker容器之间数据传输
    1.从容器中将文件拷贝到宿主机上。 在宿主机你想要接收文件的地方,运行下面的指令 1 docker cp 容器id:home/test . 1 2 3 4 5 6 7 8 9 10 11 12 13 14
  • KVM介绍及作用

    KVM介绍及作用
    一、虚拟化 1、背景 美国环境保护EPA报告中曾经统计过一组统计数据:EPA研究服务器和数据中心得能源效率时发现,实际上服务器只有5%得时
  • 碎片拼接技术恢复XenServer服务器SQL Server数据库数

    碎片拼接技术恢复XenServer服务器SQL Server数据库数
    环境:? Dell PowerEdge服务器; XenServer虚拟化平台; 4块希捷2T STAT硬盘用RAID卡组成的RAID10; XenServer虚拟机操作系统:Windows Server系统; 虚拟机
  • Docker私有仓库Harbor介绍和部署方法介绍

    Docker私有仓库Harbor介绍和部署方法介绍
    Docker容器应用的开发和运行离不开可靠的镜像管理,虽然Docker官方也提供了公共的镜像仓库,但是从安全和效率等方面考虑,部署我们私有
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计