什么是CRD
CRD的全稱為CustomResourceDefinitions,即自定義資源。k8s擁有一些內(nèi)置的資源,比如說(shuō)Pod,Deployment,ReplicaSet等等,而CRD則提供了一種方式,使用戶可以自定義新的資源,以擴(kuò)展k8s的功能。使用CRD可以在不修改k8s源代碼的基礎(chǔ)上方便的擴(kuò)展k8s的功能,比如騰訊云TKE使用CRD:logcollectors.ccs.cloud.tencent.com以添加日志收集服務(wù),而Istio也大量使用到了CRD。值得一提的是,另一種擴(kuò)展k8s的方式是apiservice,通過(guò)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中使用的資源簡(jiǎn)稱
- APIGROUP:API所使用的組名稱
- NAMESPACED:是否具有namespace屬性
- KIND:資源文件需要,用以識(shí)別資源
kube-controller-manager組件提供了多種內(nèi)置控制器,比如說(shuō):cronjob,daemonset,deployment,namespace等等,它們監(jiān)聽(tīng)資源的創(chuàng)建/更新/刪除,且做出相應(yīng)的動(dòng)作。而對(duì)于CRD來(lái)說(shuō),也可以編寫(xiě)相應(yīng)的控制器來(lái)完成對(duì)應(yīng)的功能。CRD使用
在k8s中CRD本身也是資源,大于1.7.0版本的集群可以使用apiextensions.k8s.io/v1beta1API訪問(wèn)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# 開(kāi)啟/關(guān)閉該APIserved: true# 有且只能有一個(gè)版本要將storage設(shè)置為truestorage: true# Namespaced/Cluster,表示該CRD是命令空間屬性還是集群屬性scope: Namespacednames:# API中使用的名稱:/apis// / plural: crontabs# 單數(shù)名稱,cli中使用singular: crontab# 往往是首字母大寫(xiě)的單數(shù)名稱,資源文件中需要用到kind: CronTab# cli中的簡(jiǎn)稱shortNames:- ct# 阻止無(wú)法識(shí)別的字段,集群版本1.15以上才可使用preserveUnknownFields: false# 創(chuàng)建資源文件時(shí)需驗(yàn)證的字段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)建完成??梢酝ㄟ^(guò)URL:https://169.254.128.15:60002/apis/staight.k8s.io/v1/namespaces/default/crontabs訪問(wèn)到crontab資源。
創(chuàng)建自定義對(duì)象
在創(chuàng)建CRD之后,即可創(chuàng)建其資源的對(duì)象了。資源文件示例:# 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
接著即可看到該對(duì)象:
[]NAME AGEnew-crontab 28s
小結(jié)
-
CRD用來(lái)自定義資源,是擴(kuò)展k8s最常用的方式。
-
只創(chuàng)建CRD并沒(méi)有實(shí)際意義,想要CRD工作還需創(chuàng)建控制器,監(jiān)聽(tīng)資源變動(dòng)并做出相應(yīng)動(dòng)作。
-
資源
+關(guān)注
關(guān)注
0文章
59瀏覽量
18341 -
CRD
+關(guān)注
關(guān)注
0文章
14瀏覽量
4208 -
kubernetes
+關(guān)注
關(guān)注
0文章
256瀏覽量
9412
原文標(biāo)題:如何用 Kubernetes 自定義資源?一文聊聊 CRD
文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
Allegro正負(fù)片的概念及相關(guān)設(shè)置說(shuō)明
中斷的概念及51單片機(jī)的中斷系統(tǒng)
USB基本概念及從機(jī)編程方法介紹
嵌入式系統(tǒng)的概念及特點(diǎn)
嵌入式系統(tǒng)的概念及特點(diǎn)
相位噪聲和抖動(dòng)的概念及其估算方法
地和接地的概念及區(qū)別
基于RF射頻知識(shí)基本概念及DTD無(wú)線產(chǎn)品介紹

CRD的概念及使用
評(píng)論