如何用 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 自定義資源
- VC自定義資源
- Laravel重寫資源路由自定義URLLaravel路由
- 如何用 Downie 自定義模式抓取視訊模式
- wpf自定義控制元件新增引用資源控制元件
- BW中自定義資料來源的Delta機制
- 在VC中使用自定義資源,FindResource,LoadResource,LockResource
- FineReport中如何用JavaScript自定義地圖示籤JavaScript地圖
- mark 使用commons-pool實現自定義資源池
- 如何用 Promise 自定義一個 GET 請求的函式Promise函式
- [譯] 教你如何用 Flutter 的 GestureDetector 構建自定義滑塊Flutter
- 如何用xib自定義一個view, 在StoryBoard裡用View
- 【ASP.NET Core】自定義的配置源ASP.NET
- 如何在Kubernetes 裡新增自定義的 API 物件(一)API物件
- 自定義資料型別資料型別
- OAuth2.0實戰:認證、資源服務異常自定義!OAuth
- GridView自定義列資料繫結,和自定義頒功能View
- Spring Cloud自定義引導屬性源SpringCloud
- 自定義View:自定義屬性(自定義按鈕實現)View
- Kubernetes as Database: 使用kubesql查詢kubernetes資源DatabaseSQL
- docker筆記35-資源指標API及自定義指標APIDocker筆記指標API
- DM自定義資料型別資料型別
- PyTorch 自定義資料集PyTorch
- 國人自定義React Native開源元件ViewPagerReact Native元件Viewpager
- Kubernetes資源請求與限制
- kubernetes之常用核心資源物件物件
- 如何設定Kubernetes資源限制
- 08.Django自定義模板,自定義標籤和自定義過濾器Django過濾器
- iOS自定義控制元件:自定義TableView、CollectionView空資料佔點陣圖iOS控制元件View
- 【MySQL】自定義資料庫連線池和開源資料庫連線池的使用MySql資料庫
- MirrorSwipeLayout:自定義Layout,仿MIUI滑動返回(已開源)UI
- 聊聊如何自定義資料脫敏
- 自定義react資料驗證元件React元件
- 自定義響應資料結構資料結構
- WKWebView Cookie管理與資源自定義WebViewCookie
- echarts自定義提示框資料Echarts
- Datazen地圖Chart自定義資料地圖
- 自定義ImageView完成圓形頭像自定義View