CRD本身是Kubernetes內置的資源類型,全稱是CustomResourceDefinition,可以通過命令查看,kubectl get查看集群內定義的CRD資源。
NAME CREATED AT apps.app.o0w0o.cn 2019-07-25T07:02:47Z microservices.app.o0w0o.cn 2019-07-25T07:02:47Z
在與人們談論CRD時,我發現人們對CRD存在一些常見的誤解,因此需要提前澄清一些概念:
在 Kubernetes 中,一切都稱為資源,如 Yaml 中的 Kind 項所述。
但除了 Deployment 等常見的內置資源之外,Kube 還允許用戶定義資源(CR)。
CRD 并不是真正的自定義資源,而是自定義資源的定義(描述我們定義的資源的樣子)
對于 CRD,它本質上是一個 Open Api 架構,正如 Kuber 博客文章 ( kubernetes.io/blog/2019/0…) 所說,R 和 CR 都需要 Yaml。但是如何保證Yaml描述的資源是規范的、合法的,這就是schema的作用,而CRD的作用就是向集群注冊一個新的資源,并告訴ApiServer這個資源是如何合法定義的。
控制器模式
在詳細介紹 CRD 之前,我們先簡要解釋一下控制器模型。如果你對 Kubernetes 有了解的話,就知道我們可以通過創建 Deployment 來管理 Pod,但是 Deployment 并不是直接創建 Pod,而是 Deployment 管理 RS,RS 管理 Pod,這實際上就是控制器模式。
控制器模式允許基于現有資源定義更高階的控制器,以實現更復雜的功能,當然,具體細節肯定會更復雜。
CRD 可以做什么
總的來說,我們用CRD定義的CR是一個新的控制器,我們可以自定義Controller的邏輯來完成一些Kubernetes集群原生不支持的功能。
舉個具體的例子,我使用 Kubebulder 創建了一個簡單的 CRD(github.com/Coderhypo/K…),嘗試將微服務管理構建到 Kubernetes 集群中。
我創建了兩個資源,一個名為App,負責管理整個應用程序生命周期,另一個名為MicroService,負責管理微服務的生命周期。
具體邏輯結構可以理解如下
App可以直接管理多個MicroServices,每個都MicroService支持多個版本,并且得益于控制器模型,MicroService可以Deployment為每個版本創建一個,允許多個版本同時部署。
如果管理應用部署過于簡單,MicroService支持創建Service并Ingress為每個微服務啟用四層負載均衡和七層負載均衡。
并且,如果啟用負載平衡,將為每個版本創建一個 SVC,因此一個服務將有 n + 1 個 SVC,其中 n 為每個版本 1 個,額外的 1 個 SVC 在運行后不會更改(名稱和 clusterIP)MicroService。微服務創建完成后,該SVC的Selector將始終與CurrentVersion SVC相同。
換句話說,存在一個穩定的SVC,它向其他組件提供當前版本的服務,而其他組件則可以訪問特定版本的服務。這種SVC+CurrentVersion使得實現藍綠發布能力變得非常容易。
除了SVC之外,MicroService還基于nginx Ingress控制器的能力實現灰度發布,通過修改canaryLoadBalance中的配置,可以通過scale/header/cookie實現灰度發布。
在這個例子中,App并MicroService沒有創建new capabilities,而是通過組合 Kubernetes 中已有的資源來實現新功能。
但是,除了快速藍綠化和灰化微服務之外,還有什么新價值嗎App?MicroService另一個看不見的價值是管理的標準化,以前應用程序下的任何操作都需要翻譯成“Kube語言”,即對Deployment或Ingress進行管理,現在可以通過統一的入口點規范化進行管理。
概括
通過一個簡單的小演示來描述 CRD 是什么,很容易概括。從我目前的想法來看,我認為CRD有兩個非常重要的能力。
首先,從功能上來說,CRD 將 Kubernetes 中已有的資源和能力變成了樂高積木,我們可以輕松地使用它來擴展 Kubernetes 原生不具備的能力。
其次,基于Kubernetes的產品不可避免地要求我們將產品術語與Kube術語保持一致,例如服務是Deployment,實例是Pod等等。但CRD讓我們可以根據產品創建自己的概念(或者資源),讓Kube現有的資源為我們的概念服務,這讓產品更專注于它解決的場景,而不是考慮如何將場景應用到Kubernetes上。
鏈接:https://juejin.cn/post/7277387014046810146
審核編輯:劉清
-
控制器
+關注
關注
112文章
16332瀏覽量
177812 -
SVC
+關注
關注
0文章
33瀏覽量
12128 -
CRD
+關注
關注
0文章
14瀏覽量
4015
原文標題:圖解Kubernetes開發指南之深入理解CRD
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論