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