在Kubernetes中,像Pod、Service和Deployment這樣的資源是由內(nèi)置的資源類型如Pod、Service和Deployment表示的。
而CustomResourceDefinition(CRD)允許你定義和創(chuàng)建自己的資源類型,以滿足您的應(yīng)用程序或基礎(chǔ)設(shè)施需求。
一旦定義了CRD,可以通過(guò)Kubernetes API服務(wù)器創(chuàng)建和管理自定義資源的實(shí)例,就像處理任何其他本機(jī)資源一樣。
這意味著您可以使用熟悉的Kubernetes工具如kubectl或Kubernetes控制器與管理您的自定義資源進(jìn)行交互。
CRD提供了一種擴(kuò)展Kubernetes平臺(tái)以適應(yīng)特定要求的方式,并能夠構(gòu)建自定義的運(yùn)算符或控制器來(lái)自動(dòng)化管理自定義資源。
運(yùn)算符可以監(jiān)視自定義資源的更改并相應(yīng)地采取操作,例如提供額外的資源、擴(kuò)展或執(zhí)行自定義操作。
CRD已成為擴(kuò)展Kubernetes的流行機(jī)制,在Kubernetes生態(tài)系統(tǒng)中的各種項(xiàng)目和框架中廣泛使用,如Prometheus、Istio和Knative。 示例:
cat > crd-example.yaml << EOF apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: name: myresources.example.com spec: group: example.com versions: - name: v1 served: true storage: true schema: openAPIV3Schema: description: Define CronTab YAML Spec type: object properties: spec: type: object properties: name: type: string age: type: integer scope: Namespaced names: plural: myresources singular: myresource kind: MyResource shortNames: - mr EOF
說(shuō)明:
和我們定義普通的資源對(duì)象比較類似,這里可以隨意定義一個(gè)自定義的資源對(duì)象,但是在創(chuàng)建資源的時(shí)候,肯定不是任由我們隨意去編寫 YAML 文件的,當(dāng)我們把上面的 CRD 文件提交給 Kubernetes 之后,Kubernetes 會(huì)對(duì)我們提交的聲明文件進(jìn)行校驗(yàn),從定義可以看出 CRD 是基于 OpenAPI v3 schem 進(jìn)行規(guī)范的。
apiVersion:指定所使用的 CRD API 的版本,此示例使用了 apiextensions.k8s.io/v1 版本。
kind:定義資源類型為 CustomResourceDefinition。
metadata:定義元數(shù)據(jù),其中 name 字段指定了 CRD 的名稱為 myresources.example.com。
spec:定義了 CRD 的規(guī)范。
group:指定 CRD 所屬的 API 組,此示例中為 example.com。
versions:定義 CRD 的版本列表。
name:指定版本的名稱,此示例中為 v1。
served:指定此版本是否由 API 服務(wù)器提供服務(wù),設(shè)為 true 表示提供服務(wù)。
storage:指定此版本是否持久化存儲(chǔ)數(shù)據(jù),設(shè)為 true 表示持久化存儲(chǔ)。
openAPIV3Schema:指定自定義資源的 OpenAPI v3 架構(gòu)定義
type:定義類型
properties:定義對(duì)象屬性
name/age:自定義具體屬性的名字
scope:指定資源的作用域,此示例中為 Namespaced,表示資源在命名空間級(jí)別進(jìn)行管理。
names:定義了資源的名稱相關(guān)信息。
plural:指定資源的復(fù)數(shù)形式名稱,此示例中為 myresources。
singular:指定資源的單數(shù)形式名稱,此示例中為 myresource。
kind:指定資源的類型名稱,此示例中為 MyResource。
shortNames:指定資源的縮略名稱列表,此示例中只包含一個(gè)縮略名稱 mr。
應(yīng)用
kubectl apply -f crd-example.yaml查看crd
kubectl get crd一旦創(chuàng)建完自定義的CRD,那么就會(huì)生成一個(gè)自定義的API
/apis/example.com/v1/namespaces/*/myresources/...創(chuàng)建自定義資源實(shí)例,基于前面CRD定義的資源
cat > myresource-instance.yaml <應(yīng)用 kubectl apply -f myresource-instance.yaml查看MyResourcekubectl get MyResource #或者用短名稱 kubectl get mr
以上定義的CRD,僅僅是寫入到了etcd中,并沒(méi)有其它用處,要想讓它有進(jìn)一步作用,還得去定義Controller
而Controller更多的是開(kāi)發(fā)范疇的事情,咱們暫時(shí)先不涉及。
審核編輯:劉清
-
控制器
+關(guān)注
關(guān)注
112文章
16361瀏覽量
178043 -
存儲(chǔ)器
+關(guān)注
關(guān)注
38文章
7492瀏覽量
163833 -
CRD
+關(guān)注
關(guān)注
0文章
14瀏覽量
4015 -
YAML
+關(guān)注
關(guān)注
0文章
21瀏覽量
2325
原文標(biāo)題:K8S API資源對(duì)象--CRD
文章出處:【微信號(hào):aming_linux,微信公眾號(hào):阿銘linux】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論