CRD是什么意思_CRD的概念及使用

CRDCRD的全称是什么?CustomResourceDefinitions,即自定义资源。K8s内置了一些资源,比如Pod、Deployment、ReplicaSet等等,而CRD提供了一种用户定制新资源的方式来扩展k8s的功能。使用CRD可以方便地扩展k8s的功能,而无需修改k8s的源代码。例如,腾讯云TKE使用logcollectors.ccs.cloud.tencent.com CRD添加日志收集服务,Istio也广泛使用CRD。值得一提的是,k8s的另一种扩展方式是apiservice,通过API定制HPA:metrics . k8s . io是其最典型的应用。您可以使用kubectl api-resources命令查看群集中已定义的资源:[root @ node k8s]# ku bectl API-resources名称简称APIGROUP名称空间KINDconfigmaps cm true ConfigMapendpoints EP true endpoints events ev true event namespaces ns false namespace persistentvolumes PV false PersistentVolumepods po true podtemplates true podtemplateststorage class sc storage . k8s . io false storage class.从上面的输出中,我们可以窥见一二。CRD至少包括以下属性:名字:CRD的复数名称;CLI中使用的资源的简称;API中使用的组名;命名空间:它是否具有命名空间属性种类:资源文件需要标识资源?此外,CRD提供了一种定义资源的方法,但它需要控制器的配合才能实用。K8s的kube-controller-manager组件提供了多种内置控制器,如cronjob、daemonset、deployment、namespace等。它监视资源的创建/更新/删除并做出相应的动作。对于CRD,还可以编写相应的控制器来完成相应的功能。k8s中使用的CRD CRD本身就是一种资源。大于1.7.0版的群集可以使用apiextensions.k8s.io/v1beta1API,访问CRD,大于1.16.0版的群集可以使用apiextensions.k8s.io/v1API.创建CRDCRD资源文件的示例:

# apiextensions.k8s.io/v1beta1kind: customresourcefinitionmetadata:#该名称必须符合以下格式:name:crontabs . stand . k8s . io spec:# Group name,表示使用API:/APIs//group: stand.k8s.io #版本列表,表示CRD支持的版本:-name: v1 #打开/关闭服务的API:true #只有一个版本将存储设置为true storage:true # namespace/cluster。指示CRD是命令空间属性还是群集属性。作用域:命名空间名称:# API中使用的名称://apis///复数:crontabs #单数名称,而单数:cli中使用的crontab #通常是带大写字母的单数名称。应该在资源文件中使用缩写:-ct # in kind: CronTab # cli来阻止无法识别的字段。只有在cluster版之后才能保存eUnknownFields: false #创建资源文件时要验证的字段是validation:open apiv 3 schema:type:object properties:spec:type:object properties:cronspec:type:string image:type:string replicas:type:integer然后创建CRD:

[root @ nodek8s]# ku bectl create-fcrd-test . yml customresourcedidefinition . API extensions . k8s . io/crontabs . stand . k8s . io created然后你就可以找到crd了:

[root @ nodek8s]# ku bectl get CRD crontabs . stay . k8s . io名称创建于crontabs . stay . k8s . io 2019-10-08t 1009 zcrd已创建。可以通过URL访问crontab资源:https://169 . 254 . 128 . 15:60002/APIs/stay . k8s . io/v1/namespaces/default/crontabs。

创建一个自定义对象创建一个CRD后,你可以创建一个对象的资源。资源文件示例:# crontab . yml piversion:' height.k8s.io/v1'种类:crontab元数据:名称:new-crontab规格:cronspec:' * * * * '图像:new-image注意,规格中的字段应满足CRD的要求,并创建它:

[root @ nodek 8s]# ku bectl create-f crontab . yml crontab.staight.k8s.io/new-crontab创建的然后可以看到对象:

[root @ nodek 8s]# ku bectl get crontab name a new-crontab 28s摘要CRD用于定制资源,这是扩展k8s最常见的方式。

创造一个CRD没有实际意义。如果您希望CRD工作,您需要创建一个控制器来监视资源变化并做出相应的动作。

审计唐子红