0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Kubernetes開(kāi)發(fā)指南之深入理解CRD

馬哥Linux運(yùn)維 ? 來(lái)源:稀土掘金 ? 2023-12-13 18:19 ? 次閱讀

CRD本身是Kubernetes內(nèi)置的資源類型,全稱是CustomResourceDefinition,可以通過(guò)命令查看,kubectl get查看集群內(nèi)定義的CRD資源。


NAME                         CREATED AT
apps.app.o0w0o.cn            2019-07-25T07:02:47Z
microservices.app.o0w0o.cn   2019-07-25T07:02:47Z

在與人們談?wù)揅RD時(shí),我發(fā)現(xiàn)人們對(duì)CRD存在一些常見(jiàn)的誤解,因此需要提前澄清一些概念:

在 Kubernetes 中,一切都稱為資源,如 Yaml 中的 Kind 項(xiàng)所述。

但除了 Deployment 等常見(jiàn)的內(nèi)置資源之外,Kube 還允許用戶定義資源(CR)。

CRD 并不是真正的自定義資源,而是自定義資源的定義(描述我們定義的資源的樣子)

對(duì)于 CRD,它本質(zhì)上是一個(gè) Open Api 架構(gòu),正如 Kuber 博客文章 ( kubernetes.io/blog/2019/0…) 所說(shuō),R 和 CR 都需要 Yaml。但是如何保證Yaml描述的資源是規(guī)范的、合法的,這就是schema的作用,而CRD的作用就是向集群注冊(cè)一個(gè)新的資源,并告訴ApiServer這個(gè)資源是如何合法定義的。

控制器模式

在詳細(xì)介紹 CRD 之前,我們先簡(jiǎn)要解釋一下控制器模型。如果你對(duì) Kubernetes 有了解的話,就知道我們可以通過(guò)創(chuàng)建 Deployment 來(lái)管理 Pod,但是 Deployment 并不是直接創(chuàng)建 Pod,而是 Deployment 管理 RS,RS 管理 Pod,這實(shí)際上就是控制器模式。

0c34693a-999c-11ee-8b88-92fbcf53809c.png

控制器模式允許基于現(xiàn)有資源定義更高階的控制器,以實(shí)現(xiàn)更復(fù)雜的功能,當(dāng)然,具體細(xì)節(jié)肯定會(huì)更復(fù)雜。

CRD 可以做什么

總的來(lái)說(shuō),我們用CRD定義的CR是一個(gè)新的控制器,我們可以自定義Controller的邏輯來(lái)完成一些Kubernetes集群原生不支持的功能。

舉個(gè)具體的例子,我使用 Kubebulder 創(chuàng)建了一個(gè)簡(jiǎn)單的 CRD(github.com/Coderhypo/K…),嘗試將微服務(wù)管理構(gòu)建到 Kubernetes 集群中。

我創(chuàng)建了兩個(gè)資源,一個(gè)名為App,負(fù)責(zé)管理整個(gè)應(yīng)用程序生命周期,另一個(gè)名為MicroService,負(fù)責(zé)管理微服務(wù)的生命周期。

具體邏輯結(jié)構(gòu)可以理解如下

0c3998ce-999c-11ee-8b88-92fbcf53809c.png

App可以直接管理多個(gè)MicroServices,每個(gè)都MicroService支持多個(gè)版本,并且得益于控制器模型,MicroService可以Deployment為每個(gè)版本創(chuàng)建一個(gè),允許多個(gè)版本同時(shí)部署。

如果管理應(yīng)用部署過(guò)于簡(jiǎn)單,MicroService支持創(chuàng)建Service并Ingress為每個(gè)微服務(wù)啟用四層負(fù)載均衡和七層負(fù)載均衡。

0c51e776-999c-11ee-8b88-92fbcf53809c.png

并且,如果啟用負(fù)載平衡,將為每個(gè)版本創(chuàng)建一個(gè) SVC,因此一個(gè)服務(wù)將有 n + 1 個(gè) SVC,其中 n 為每個(gè)版本 1 個(gè),額外的 1 個(gè) SVC 在運(yùn)行后不會(huì)更改(名稱和 clusterIP)MicroService。微服務(wù)創(chuàng)建完成后,該SVC的Selector將始終與CurrentVersion SVC相同。

換句話說(shuō),存在一個(gè)穩(wěn)定的SVC,它向其他組件提供當(dāng)前版本的服務(wù),而其他組件則可以訪問(wèn)特定版本的服務(wù)。這種SVC+CurrentVersion使得實(shí)現(xiàn)藍(lán)綠發(fā)布能力變得非常容易。

除了SVC之外,MicroService還基于nginx Ingress控制器的能力實(shí)現(xiàn)灰度發(fā)布,通過(guò)修改canaryLoadBalance中的配置,可以通過(guò)scale/header/cookie實(shí)現(xiàn)灰度發(fā)布。

在這個(gè)例子中,App并MicroService沒(méi)有創(chuàng)建new capabilities,而是通過(guò)組合 Kubernetes 中已有的資源來(lái)實(shí)現(xiàn)新功能。

但是,除了快速藍(lán)綠化和灰化微服務(wù)之外,還有什么新價(jià)值嗎App?MicroService另一個(gè)看不見(jiàn)的價(jià)值是管理的標(biāo)準(zhǔn)化,以前應(yīng)用程序下的任何操作都需要翻譯成“Kube語(yǔ)言”,即對(duì)Deployment或Ingress進(jìn)行管理,現(xiàn)在可以通過(guò)統(tǒng)一的入口點(diǎn)規(guī)范化進(jìn)行管理。

概括

通過(guò)一個(gè)簡(jiǎn)單的小演示來(lái)描述 CRD 是什么,很容易概括。從我目前的想法來(lái)看,我認(rèn)為CRD有兩個(gè)非常重要的能力。

首先,從功能上來(lái)說(shuō),CRD 將 Kubernetes 中已有的資源和能力變成了樂(lè)高積木,我們可以輕松地使用它來(lái)擴(kuò)展 Kubernetes 原生不具備的能力。

其次,基于Kubernetes的產(chǎn)品不可避免地要求我們將產(chǎn)品術(shù)語(yǔ)與Kube術(shù)語(yǔ)保持一致,例如服務(wù)是Deployment,實(shí)例是Pod等等。但CRD讓我們可以根據(jù)產(chǎn)品創(chuàng)建自己的概念(或者資源),讓Kube現(xiàn)有的資源為我們的概念服務(wù),這讓產(chǎn)品更專注于它解決的場(chǎng)景,而不是考慮如何將場(chǎng)景應(yīng)用到Kubernetes上。

鏈接:https://juejin.cn/post/7277387014046810146







審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 控制器
    +關(guān)注

    關(guān)注

    112

    文章

    16367

    瀏覽量

    178109
  • SVC
    SVC
    +關(guān)注

    關(guān)注

    0

    文章

    33

    瀏覽量

    12139
  • CRD
    CRD
    +關(guān)注

    關(guān)注

    0

    文章

    14

    瀏覽量

    4015

原文標(biāo)題:圖解Kubernetes開(kāi)發(fā)指南之深入理解CRD

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    深入理解Android

    深入理解Android
    發(fā)表于 08-20 15:30

    深入理解和實(shí)現(xiàn)RTOS_連載

    和trcohili的帖子。深入理解和實(shí)現(xiàn)RTOS_連載1_RTOS的前生今世今天發(fā)布的是第一篇,"RTOS的前生今世"。通過(guò)軟件系統(tǒng)結(jié)構(gòu)的比對(duì)簡(jiǎn)要的介紹rtos為何而生。如果讀者對(duì)RTOS
    發(fā)表于 05-29 11:20

    深入理解和實(shí)現(xiàn)RTOS_連載

    和trcohili的帖子。trochili rtos完全是作者興趣所在,且行且堅(jiān)持,比沒(méi)有duo。深入理解和實(shí)現(xiàn)RTOS_連載1_RTOS的前生今世今天發(fā)布的是第一篇,"RTOS的前生今世"
    發(fā)表于 05-30 01:02

    深入理解lte-a

    深入理解LTE-A
    發(fā)表于 02-26 10:21

    如何深入理解ES6函數(shù)

    深入理解ES6函數(shù)
    發(fā)表于 05-22 07:40

    深入理解STM32

    時(shí)鐘系統(tǒng)是處理器的核心,所以在學(xué)習(xí)STM32所有外設(shè)之前,認(rèn)真學(xué)習(xí)時(shí)鐘系統(tǒng)是必要的,有助于深入理解STM32。下面是從網(wǎng)上找的一個(gè)STM32時(shí)鐘框圖,比《STM32中文參考手冊(cè)》里面的是中途看起來(lái)清晰一些:重要的時(shí)鐘:PLLCLK,SYSCLK,HCKL,PCLK1,...
    發(fā)表于 08-12 07:46

    深入理解SQLite3sqlite3_exec及回調(diào)函數(shù)sqlite3

    深入理解SQLite3sqlite3_exec及回調(diào)函數(shù)sqlite3:深入理解sqlite3_stmt 機(jī)制sqlite3: sqlite3_step 函數(shù)sqlite3
    發(fā)表于 11-04 07:11

    對(duì)棧的深入理解

    為什么要深入理解棧?做C語(yǔ)言開(kāi)發(fā)如果棧設(shè)置不合理或者使用不對(duì),棧就會(huì)溢出,溢出就會(huì)遇到無(wú)法預(yù)測(cè)亂飛現(xiàn)象。所以對(duì)棧的深入理解是非常重要的。注:動(dòng)畫如果看不清楚可以電腦看更清晰啥是棧先來(lái)看一段動(dòng)畫:沒(méi)有
    發(fā)表于 02-15 07:01

    為什么要深入理解

    [導(dǎo)讀] 從這篇文章開(kāi)始,將會(huì)不定期更新關(guān)于嵌入式C語(yǔ)言編程相關(guān)的個(gè)人認(rèn)為比較重要的知識(shí)點(diǎn),或者踩過(guò)的坑。為什么要深入理解棧?做C語(yǔ)言開(kāi)發(fā)如果棧設(shè)置不合理或者使用不對(duì),棧就會(huì)溢出,溢出就會(huì)遇到無(wú)法
    發(fā)表于 02-15 06:09

    深入理解Android資源文件

    深入理解Android資源文件
    發(fā)表于 01-22 21:11 ?22次下載

    深入理解Android》文前

    深入理解Android》文前
    發(fā)表于 03-19 11:23 ?0次下載

    深入理解Android:卷I》

    深入理解Android:卷I》
    發(fā)表于 03-19 11:23 ?0次下載

    深入理解Android網(wǎng)絡(luò)編程

    深入理解Android網(wǎng)絡(luò)編程
    發(fā)表于 03-19 11:26 ?1次下載

    深入理解MOS管電子版資源下載

    深入理解MOS管電子版資源下載
    發(fā)表于 07-09 09:43 ?0次下載

    深入理解LED開(kāi)發(fā)過(guò)程

    不知道你是否想過(guò),一個(gè)LED燈點(diǎn)亮過(guò)程的本質(zhì)是什么。當(dāng)你是一個(gè)小白的時(shí)候,點(diǎn)亮一個(gè)LED燈,IDE都會(huì)幫你做好所有的事情,你只需要點(diǎn)擊一下編譯即可。但是,當(dāng)你成長(zhǎng)到一定程度時(shí),就需要好好想想,一個(gè)LED的點(diǎn)亮,其實(shí)是對(duì)單片機(jī)中背后原理機(jī)制真正的深入理解。今天我就帶你,來(lái)深入理解
    發(fā)表于 12-22 19:08 ?9次下載
    <b class='flag-5'>深入理解</b>LED<b class='flag-5'>開(kāi)發(fā)</b>過(guò)程