網站首頁 編程語言 正文
什么是CRD
CRD的全稱為?CustomResourceDefinitions
,即自定義資源。k8s擁有一些內置的資源,比如說Pod,Deployment,ReplicaSet等等,而CRD則提供了一種方式,使用戶可以自定義新的資源,以擴展k8s的功能。
使用CRD可以在不修改k8s源代碼的基礎上方便的擴展k8s的功能,比如騰訊云TKE使用CRD:logcollectors.ccs.cloud.tencent.com
以添加日志收集服務,而Istio也大量使用到了CRD。
值得一提的是,另一種擴展k8s的方式是apiservice,通過API:metrics.k8s.io自定義HPA是其最典型的應用。
可以使用kubectl api-resources
命令查看集群中已定義的資源:
[root@node k8s]# kubectl api-resources 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 ...
從如上輸出中可以略窺一二,CRD至少包括如下屬性:
- NAME:CRD的復數名稱
- SHORTNAMES:cli中使用的資源簡稱
- APIGROUP:API所使用的組名稱
- NAMESPACED:是否具有namespace屬性
- KIND:資源文件需要,用以識別資源
另外,CRD提供了定義資源的方式,不過想要讓其具有實際意義還需控制器的配合。k8s的kube-controller-manager
組件提供了多種內置控制器,比如說:cronjob
,daemonset
,deployment
,namespace
等等,它們監聽資源的創建/更新/刪除,且做出相應的動作。而對于CRD來說,也可以編寫相應的控制器來完成對應的功能。
CRD使用
在k8s中CRD本身也是資源,大于1.7.0版本的集群可以使用apiextensions.k8s.io/v1beta1API
訪問CRD,大于1.16.0版本則可以使用apiextensions.k8s.io/v1API
。
創建CRD
CRD資源文件示例:
# crd-test.yml apiVersion: apiextensions.k8s.io/v1beta1 kind: CustomResourceDefinition metadata: # 名稱必須符合如下格式:<plural>.<group> name: crontabs.staight.k8s.io spec: # 組名,表示使用該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.io NAME CREATED AT crontabs.staight.k8s.io 2019-10-08T10:21:09Z
CRD創建完成。可以通過URL:https://169.254.128.15:60002/apis/staight.k8s.io/v1/namespaces/default/crontabs訪問到crontab資源。
創建自定義對象
在創建CRD之后,即可創建其資源的對象了。資源文件示例:
# crontab.yml apiVersion: "staight.k8s.io/v1" kind: CronTab metadata: name: new-crontab spec: 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 crontab NAME AGE new-crontab 28s
小結
CRD用來自定義資源,是擴展k8s最常用的方式。
只創建CRD并沒有實際意義,想要CRD工作還需創建控制器,監聽資源變動并做出相應動作。
總結
原文鏈接:https://staight.github.io/2019/10/08/Kubernetes-CRD%E7%AE%80%E4%BB%8B/
相關推薦
- 2022-10-26 python連接sql?server數據庫的方法實戰_python
- 2022-08-31 C#泛型語法詳解_C#教程
- 2022-04-27 解決linux下redis數據庫overcommit_memory問題_Redis
- 2022-07-13 Docker技術_Docker與傳統虛擬機以及傳統容器的差異
- 2022-08-03 Django框架中模型的用法_python
- 2022-03-17 .NET?6開發TodoList應用實現系列背景_實用技巧
- 2022-10-31 關于Golang標準庫flag的全面講解_Golang
- 2022-03-29 Python函數裝飾器的使用詳解_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支