什么是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 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
...
- 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.yml
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
# 名稱必須符合如下格式:
. name: crontabs.staight.k8s.io
spec:
# 組名,表示使用該API: /apis/
/ group: staight.k8s.io
# version列表,表示該CRD支持的版本
versions:
- name: v1
# 開(kāi)啟/關(guān)閉該API
served: true
# 有且只能有一個(gè)版本要將storage設(shè)置為true
storage: true
# Namespaced/Cluster,表示該CRD是命令空間屬性還是集群屬性
scope: Namespaced
names:
# 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: object
properties:
spec:
type: object
properties:
cronSpec:
type: string
image:
type: string
replicas:
type: integer
然后創(chuàng)建該CRD:
[root@node k8s]# kubectl create -f crd-test.yml
customresourcedefinition.apiextensions.k8s.io/crontabs.staight.k8s.io created
接著就能查到該CRD:
[root@node k8s]# kubectl get crd crontabs.staight.k8s.io
NAME CREATED AT
crontabs.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.yml
apiVersion: "staight.k8s.io/v1"
kind: CronTab
metadata:
name: new-crontab
spec:
cronSpec: "* * * * *"
image: new-image
注意spec中的字段應(yīng)符合CRD的要求,創(chuàng)建它:
[ ]
crontab.staight.k8s.io/new-crontab created
接著即可看到該對(duì)象:
[ ]
NAME AGE
new-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瀏覽量
17832 -
CRD
+關(guān)注
關(guān)注
0文章
14瀏覽量
4041 -
kubernetes
+關(guān)注
關(guān)注
0文章
227瀏覽量
8757
原文標(biāo)題:如何用 Kubernetes 自定義資源?一文聊聊 CRD
文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
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)品介紹
![基于RF射頻知識(shí)基本<b class='flag-5'>概念及</b>DTD無(wú)線產(chǎn)品介紹](https://file.elecfans.com/web2/M00/4A/20/pYYBAGKhvJ2ADlfNAAAvMHUXz7k003.png)
評(píng)論