如何用 Kubernetes 自定義資源?
什麼是CRD
CustomResourceDefinitions
,即自定義資源。k8s擁有一些內建的資源,比如說Pod,Deployment,ReplicaSet等等,而CRD則提供了一種方式,使使用者可以自定義新的資源,以擴充套件k8s的功能。
logcollectors.ccs.cloud.tencent.com
以新增日誌收集服務,而Istio也大量使用到了CRD。
kubectl api-resources
命令檢視叢集中已定義的資源:[root@node k8s]# kubectl api-resources 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的複數名稱 -
SHORTNAMES:cli中使用的資源簡稱 -
APIGROUP:API所使用的組名稱 -
NAMESPACED:是否具有namespace屬性 -
KIND:資原始檔需要,用以識別資源
kube-controller-manager
元件提供了多種內建控制器,比如說:
cronjob
,
daemonset
,
deployment
,
namespace
等等,它們監聽資源的建立/更新/刪除,且做出相應的動作。而對於CRD來說,也可以編寫相應的控制器來完成對應的功能。CRD使用
apiextensions.k8s.io/v1beta1API
訪問CRD,大於1.16.0版本則可以使用
apiextensions.k8s.io/v1API
。建立CRD
CRD資原始檔示例:
# crd-test.ymlapiVersion: apiextensions.k8s.io/v1beta1kind: CustomResourceDefinitionmetadata: # 名稱必須符合如下格式:<plural>.<group> name: crontabs.staight.k8s.iospec: # 組名,表示使用該API: /apis/<group>/<version> group: staight.k8s.io # version列表,表示該CRD支援的版本 versions: - name: v1 # 開啟/關閉該API served: true # 有且只能有一個版本要將storage設定為true storage: true # Namespaced/Cluster,表示該CRD是命令空間屬性還是叢集屬性 scope: Namespaced names: # API中使用的名稱:/apis/<group>/<version>/<plural> plural: crontabs # 單數名稱,cli中使用 singular: crontab # 往往是首字母大寫的單數名稱,資原始檔中需要用到 kind: CronTab # cli中的簡稱 shortNames: - ct # 阻止無法識別的欄位,叢集版本1.15以上才可使用 preserveUnknownFields: false # 建立資原始檔時需驗證的欄位 validation: openAPIV3Schema: type: object properties: spec: type: object properties: cronSpec: type: string image: type: string replicas: type: integer
然後建立該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.ioNAME CREATED ATcrontabs.staight.k8s.io 2019-10-08T10:21:09Z
CRD建立完成。可以透過URL: 訪問到crontab資源。
建立自定義物件
# crontab.ymlapiVersion: "staight.k8s.io/v1"kind: CronTabmetadata: name: new-crontabspec: cronSpec: "* * * * *" image: new-image
注意spec中的欄位應符合CRD的要求,建立它:
[root@node k8s]# kubectl create -f crontab.yml crontab.staight.k8s.io/new-crontab created
接著即可看到該物件:
[root@node k8s]# kubectl get crontabNAME AGEnew-crontab 28s
小結
-
CRD用來自定義資源,是擴充套件k8s最常用的方式。
-
只建立CRD並沒有實際意義,想要CRD工作還需建立控制器,監聽資源變動並做出相應動作。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70013542/viewspace-2913555/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Kubernetes CRDs 自定義資源
- 改造 Kubernetes 自定義排程器
- Laravel重寫資源路由自定義URLLaravel路由
- 如何用 Downie 自定義模式抓取視訊模式
- wpf自定義控制元件新增引用資源控制元件
- 如何在Kubernetes 裡新增自定義的 API 物件(一)API物件
- 如何用 Promise 自定義一個 GET 請求的函式Promise函式
- [譯] 教你如何用 Flutter 的 GestureDetector 構建自定義滑塊Flutter
- Kubernetes as Database: 使用kubesql查詢kubernetes資源DatabaseSQL
- Spring Cloud自定義引導屬性源SpringCloud
- 【ASP.NET Core】自定義的配置源ASP.NET
- 自定義資料型別資料型別
- PyTorch 自定義資料集PyTorch
- 自定義 ocelot 中介軟體輸出自定義錯誤資訊
- OAuth2.0實戰:認證、資源服務異常自定義!OAuth
- 自定義表單系統開源是否好用?
- 如何設定Kubernetes資源限制
- kubernetes資源均衡器Descheduler
- kubernetes排程之資源配額
- kubernetes之常用核心資源物件物件
- Kubernetes資源請求與限制
- docker筆記35-資源指標API及自定義指標APIDocker筆記指標API
- 功能齊全的 WPF 自定義控制元件資源庫(收藏版)控制元件
- DM自定義資料型別資料型別
- python 自定義資料分頁Python
- [開源] Min – 小程式自定義元件解決方案元件
- 深入理解Kubernetes資源限制:CPU
- kubernetes之計算機資源管理計算機
- kubernetes排程之資源配額示例
- Kubernetes 節點的預留資源
- 使用 Elastic GPU 管理 Kubernetes GPU 資源ASTGPU
- iOS自定義控制元件:自定義TableView、CollectionView空資料佔點陣圖iOS控制元件View
- MirrorSwipeLayout:自定義Layout,仿MIUI滑動返回(已開源)UI
- 自定義react資料驗證元件React元件
- Jwtauth 自定義認證頭資訊JWT
- 自定義響應資料結構資料結構
- 自定義元件-資料、方法、屬性元件
- 自定義元件-資料監聽器元件