由于簡書圖片上傳失敗轿曙,可以通過 https://www.guyu.me/blog/2022-02-15-kdl/ 訪問本文弄捕。
在網(wǎng)上搜索規(guī)范化的 K8S 的部署架構(gòu)圖畫法時,發(fā)現(xiàn)了 Redhat 的一篇博客导帝。覺得非常不錯守谓,遂翻譯分享之。
原文: https://github.com/raffaelespazzoli/kdl
介紹
這篇博文介紹了 Kubernetes API 對象的圖形表示法:Kubernetes 部署語言(簡稱 KDL)您单。 Kubernetes API 對象可被用于描述如何在 Kubernetes 中部署一個解決方案斋荞。
筆者認(rèn)為有必要描述和記錄如何在 Kubernetes 中部署應(yīng)用程序,特別是當(dāng)應(yīng)用程序用到了多個不同的 Kuberenetes 組件時虐秦。
筆者想創(chuàng)建一個簡單的圖形符號約定來描述這些應(yīng)用程序的部署平酿,以便這些圖形可以輕松地在白板或文檔中繪制。
為了更好地解釋該符號體系的目標(biāo)悦陋,我們可以將其與 UML比較蜈彼。UML 有幾種圖形語言來描述應(yīng)用程序架構(gòu)的不同方面。 不過俺驶,與 UML 的不同之處在于幸逆,在 KDL 中,我們沒有進(jìn)行正向或逆向工程的目標(biāo)(即我們不轉(zhuǎn)換 yaml 文件中的圖表,反之亦然)秉颗。 這樣痢毒,我們就有機(jī)會管理要在圖表中顯示的信息量送矩。 作為一般經(jīng)驗(yàn)法則蚕甥,我們只會顯示與架構(gòu)相關(guān)的信息。
您還可以下載KDL 的 visio模板栋荸。
目標(biāo)
該圖形符號體系的目標(biāo)如下:
- 創(chuàng)建一種通用的圖形語言來描述如何在 Kubernetes 中部署應(yīng)用程序菇怀。
- 表示 Kubernetes API 對象與架構(gòu)最相關(guān)的方面。
- 簡單地說晌块,在理想情況下爱沟,一個擁有白板和一些彩色便利貼的人應(yīng)該能夠創(chuàng)建這些圖表。
以下內(nèi)容不是該符號體系的目標(biāo):
- 自動生成 API 對象定義
顏色編碼
一般來說匆背,Kubernetes API 對象涵蓋以下范疇:
范疇 | 顏色約定 | 例子 |
---|---|---|
Kubernetes 集群 | 紅 | Kubernetes 解決方案中包含的若干個集群 |
計(jì)算 | 綠 | 部署 |
網(wǎng)絡(luò) | 黃 | 服務(wù) |
存儲 | 藍(lán) | 持久卷申領(lǐng)(PersistentVolumeClaim)呼伸,持久卷(PersistentVolume) |
Kubernetes 集群
Kubernetes 集群可以簡單地表示為一個紅色的矩形:
所有其他 API 對象都存在于集群內(nèi)部或集群邊緣。
永遠(yuǎn)不需要顯式表現(xiàn) Kubernetes 集群內(nèi)的各個節(jié)點(diǎn)钝尸。
您可以用其它的圖形表示集群外部的組件以及它們?nèi)绾闻c集群內(nèi)部的組件連接括享。 此圖形約定不含集群外的組件的展示方式。
計(jì)算
計(jì)算對象是最復(fù)雜的圖形珍促。 通常铃辖,它們由一個帶有組件標(biāo)識的矩形表示,用于展示計(jì)算對象的附加信息猪叙。 這是一個模板:
圖片的中心部分代表一個 Pod娇斩。 在其中我們可以看到一個或多個容器。 Pod 和容器都應(yīng)該有一個名稱穴翩。
在 Pod 的左側(cè)犬第,我們有額外的計(jì)算附加信息。 頂部標(biāo)記指定此 Pod 的控制器類型芒帕。 以下是控制器的類型及其縮寫:
控制器類型 | 縮寫 |
---|---|
Replication Controller | RC |
Replica Set | RS |
Deployment | D |
DeploymentConfig (OpenShift only) | DC |
DaemonSet | DS |
StatefulSet | SS |
Job | J |
Cron Job | J |
在底部歉嗓,我們有該 Pod 實(shí)例的基數(shù)。 根據(jù)控制器的類型副签,該字段具有不同的含義和格式遥椿,這里有一個參考表格:
控制器類型 | 格式 |
---|---|
Replication Controller | 一個數(shù)字或者數(shù)字范圍 (例如 3 或 2:5) |
ReplicaSet | 一個數(shù)字或者數(shù)字范圍 (例如 3 或 2:5) |
Deployment | 一個數(shù)字或者數(shù)字范圍 (例如 3 或 2:5) |
DeploymentConfig (只有 OpenShift 有) | 一個數(shù)字或者數(shù)字范圍 (例如 3 或 2:5) |
DaemonSet | 節(jié)點(diǎn)選擇器: 例如 storage-node=true |
StatefulSet | 一個數(shù)字: 例如 3 |
Job | 一個表示并行度的數(shù)字: 例如 3 |
Cron Job | 一個表示并行度的數(shù)字: 例如 3 |
在 pod 的頂部,是暴露的端口淆储。 您可以使用小矩形僅顯示端口號或添加端口名稱冠场。 這是一個例子:
這些小矩形是黃色的,因?yàn)榇砭W(wǎng)絡(luò)配置本砰。您可以將每個端口與實(shí)際暴露該端口相關(guān)的容器連接起來碴裙。 但在大多數(shù)情況下,這不是必需的,因?yàn)榇蠖鄶?shù) pod 只有一個容器舔株。
在 pod 的底部莺琳,我們有 附加卷。 卷的名稱應(yīng)顯示在矩形中载慈。 在大多數(shù)情況下惭等,這些將是持久卷。 如果卷類型不是持久卷办铡,則顯示它可能是相關(guān)的辞做。 此外,有時顯示安裝點(diǎn)也很重要寡具。 以下是卷的符號示例:
在 Pod 的右側(cè)秤茅,具有與 Pod 的配置相關(guān)的卷:secrets 和 configmaps。 對于數(shù)據(jù)卷童叠,應(yīng)該指明卷的名稱框喳,通常區(qū)分configmaps和secret很重要,所以還應(yīng)該指明卷的類型厦坛,如果需要還可以顯示掛載點(diǎn)五垮。 這里有些例子:
網(wǎng)絡(luò)
網(wǎng)絡(luò)對象有兩種: services 和 ingresses (routes 在 OpenShift 里有).
服務(wù)
服務(wù)可以用橢圓表示,如下圖所示:
左側(cè)有一個代表服務(wù)類型的小矩形粪般。 以下是縮寫:
類型 | 縮寫 |
---|---|
Cluster IP | CIP |
Cluster IP, ClusterIP: None | HS a.k.a. Headless Service |
Node Port | NP |
LoadBalancer | LB |
External Name (OpenShift only) | EN |
External IP | EIP |
在服務(wù)的頂部有暴露的端口拼余。 此處適用與計(jì)算對象端口相同的約定。
該服務(wù)應(yīng)連接到計(jì)算對象亩歹。 這將隱式定義服務(wù)選擇器匙监,因此無需在圖片中指示它。
如果服務(wù)允許從集群外部到內(nèi)部 pod 的流量(例如負(fù)載均衡器或節(jié)點(diǎn)端口或外部 IP)小作,則應(yīng)在集群邊緣進(jìn)行描述亭姥。
相同的概念適用于調(diào)節(jié)出站流量(例如外部名稱)的服務(wù),盡管在這種情況下它們可能會出現(xiàn)在 Kubernetes 集群矩形的底部顾稀。
Ingress
Ingress 可以用平行四邊形表示达罗,如下圖:
Ingress 顯示 Ingress 名稱以及可選的 host。 Ingress 將連接到服務(wù)(相同的規(guī)則適用于 OpenShift 路由)静秆。
Ingress 始終顯示在 OpenShift 集群的邊緣粮揉。
路由 (OpenShift)
OpenShift 路由使用與 Ingress 相同的符號表示。
存儲
存儲用于指示持久卷抚笔。 存儲的顏色是藍(lán)色的扶认,它的形狀是一個桶,部署如下圖:
存儲應(yīng)指明持久卷名和存儲提供程序(例如 NFS殊橙、gluster 等)辐宾。
存儲始終位于集群的邊緣狱从,因?yàn)樗侵赶蛲獠靠捎么鎯Φ呐渲谩?/p>
Putting it all together
在本節(jié)中,我們將通過一個示例來說明如何使用此表示法來描述應(yīng)用程序的部署叠纹。
我們的應(yīng)用程序是一個銀行服務(wù)應(yīng)用程序季研,它使用 mariadb 數(shù)據(jù)庫作為其數(shù)據(jù)存儲。 作為銀行應(yīng)用程序誉察,一切都必須在 HA 中与涡。
以下是部署圖:
請注意,mariadb pod 使用 StatefulSet 和一個持久卷來存儲其數(shù)據(jù)冒窍。 這個 pod 沒有暴露給集群外部递沪,但它的服務(wù)被 BankService 應(yīng)用程序使用豺鼻。
BankService 應(yīng)用程序是一個由部署配置控制的無狀態(tài) pod综液,該部署配置具有用于訪問數(shù)據(jù)庫的憑據(jù)的機(jī)密。 它還有一個服務(wù)和一個路由儒飒,以便它可以接受來自集群外部的入站連接谬莹。