什么是CRD
CRD的全稱為CustomResourceDefinitions,即自定義資源。k8s擁有一些內(nèi)置的資源,比如說Pod,Deployment,ReplicaSet等等,而CRD則提供了一種方式,使用戶可以自定義新的資源,以擴(kuò)展k8s的功能。使用CRD可以在不修改k8s源代碼的基礎(chǔ)上方便的擴(kuò)展k8s的功能,比如騰訊云TKE使用CRD:logcollectors.ccs.cloud.tencent.com以添加日志收集服務(wù),而Istio也大量使用到了CRD。值得一提的是,另一種擴(kuò)展k8s的方式是apiservice,通過API:metrics.k8s.io自定義HPA是其最典型的應(yīng)用。可以使用kubectl api-resources命令查看集群中已定義的資源:從如上輸出中可以略窺一二,CRD至少包括如下屬性:[]NAME SHORTNAMES APIGROUP NAMESPACED KINDconfigmaps cm true ConfigMapendpoints ep true Endpointsevents ev true Eventnamespaces ns false Namespacepersistentvolumes pv false PersistentVolumepods po true Podpodtemplates true PodTemplatestorageclasses sc storage.k8s.io false StorageClass...
- NAME:CRD的復(fù)數(shù)名稱
- SHORTNAMES:cli中使用的資源簡稱
- APIGROUP:API所使用的組名稱
- NAMESPACED:是否具有namespace屬性
- KIND:資源文件需要,用以識別資源
kube-controller-manager組件提供了多種內(nèi)置控制器,比如說:cronjob,daemonset,deployment,namespace等等,它們監(jiān)聽資源的創(chuàng)建/更新/刪除,且做出相應(yīng)的動作。而對于CRD來說,也可以編寫相應(yīng)的控制器來完成對應(yīng)的功能。CRD使用
在k8s中CRD本身也是資源,大于1.7.0版本的集群可以使用apiextensions.k8s.io/v1beta1API訪問CRD,大于1.16.0版本則可以使用apiextensions.k8s.io/v1API。創(chuàng)建CRD
CRD資源文件示例:
# crd-test.ymlapiVersion: apiextensions.k8s.io/v1beta1kind: CustomResourceDefinitionmetadata:# 名稱必須符合如下格式:. name: crontabs.staight.k8s.iospec:# 組名,表示使用該API: /apis// group: staight.k8s.io# version列表,表示該CRD支持的版本versions:- name: v1# 開啟/關(guān)閉該APIserved: true# 有且只能有一個版本要將storage設(shè)置為truestorage: true# Namespaced/Cluster,表示該CRD是命令空間屬性還是集群屬性scope: Namespacednames:# API中使用的名稱:/apis// / plural: crontabs# 單數(shù)名稱,cli中使用singular: crontab# 往往是首字母大寫的單數(shù)名稱,資源文件中需要用到kind: CronTab# cli中的簡稱shortNames:- ct# 阻止無法識別的字段,集群版本1.15以上才可使用preserveUnknownFields: false# 創(chuàng)建資源文件時需驗證的字段validation:openAPIV3Schema:type: objectproperties:spec:type: objectproperties:cronSpec:type: stringimage:type: stringreplicas:type: integer
然后創(chuàng)建該CRD:
[root@node k8s]# kubectl create -f crd-test.ymlcustomresourcedefinition.apiextensions.k8s.io/crontabs.staight.k8s.io created
接著就能查到該CRD:
[root@node k8s]# kubectl get crd crontabs.staight.k8s.ioNAME CREATED ATcrontabs.staight.k8s.io 2019-10-08T1009Z
CRD創(chuàng)建完成??梢酝ㄟ^URL:https://169.254.128.15:60002/apis/staight.k8s.io/v1/namespaces/default/crontabs訪問到crontab資源。
創(chuàng)建自定義對象
在創(chuàng)建CRD之后,即可創(chuàng)建其資源的對象了。資源文件示例:# crontab.ymlapiVersion: "staight.k8s.io/v1"kind: CronTabmetadata:name: new-crontabspec:cronSpec: "* * * * *"image: new-image
注意spec中的字段應(yīng)符合CRD的要求,創(chuàng)建它:
[]crontab.staight.k8s.io/new-crontab created
接著即可看到該對象:
[]NAME AGEnew-crontab 28s
小結(jié)
-
CRD用來自定義資源,是擴(kuò)展k8s最常用的方式。
-
只創(chuàng)建CRD并沒有實際意義,想要CRD工作還需創(chuàng)建控制器,監(jiān)聽資源變動并做出相應(yīng)動作。
-
資源
+關(guān)注
關(guān)注
0文章
59瀏覽量
18350 -
CRD
+關(guān)注
關(guān)注
0文章
14瀏覽量
4213 -
kubernetes
+關(guān)注
關(guān)注
0文章
256瀏覽量
9438
原文標(biāo)題:如何用 Kubernetes 自定義資源?一文聊聊 CRD
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄

CRD的概念及使用
評論