新聞中心
如何不編寫(xiě) YAML 管理 Kubernetes 應(yīng)用?
作者:郭遜 2022-09-02 15:38:06
云計(jì)算
云原生 當(dāng)你的團(tuán)隊(duì)已經(jīng)使用原生的 Kubernetes 一段時(shí)間,你多半會(huì)發(fā)現(xiàn),并非每個(gè) IT 技術(shù)人員都擅長(zhǎng)編寫(xiě)復(fù)雜的 Kubernetes 聲明式配置文件(YAML)。

成都創(chuàng)新互聯(lián)公司是一家專(zhuān)業(yè)提供嶧城企業(yè)網(wǎng)站建設(shè),專(zhuān)注與網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、H5網(wǎng)站設(shè)計(jì)、小程序制作等業(yè)務(wù)。10年已為嶧城眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專(zhuān)業(yè)的建站公司優(yōu)惠進(jìn)行中。
Kubernetes 將自身邊界內(nèi)的事物都抽象為資源。其中的主要部分,是以 Deployment、StatefulSet 為代表的 workload 工作負(fù)載控制器,其他各類(lèi)資源都圍繞這些主要的資源工作。這些資源合并起來(lái),可以為 IT 技術(shù)工作者展現(xiàn)出一個(gè)以 workload 為中心的模型。Kubernetes 中所有的資源,都通過(guò)聲明式配置文件來(lái)編輯描述,一條條的 Yaml 字段定義,給了 IT 技術(shù)人員最大的自由度的同時(shí),也對(duì)技術(shù)人員的能力提出了極高的要求。
通過(guò)應(yīng)用模型簡(jiǎn)化Kubernetes管理
當(dāng)你的團(tuán)隊(duì)已經(jīng)使用原生的 Kubernetes 一段時(shí)間,你多半會(huì)發(fā)現(xiàn),并非每個(gè) IT 技術(shù)人員都擅長(zhǎng)編寫(xiě)復(fù)雜的 Kubernetes 聲明式配置文件(YAML)。特別是對(duì)于開(kāi)發(fā)人員他們的主要職責(zé)是業(yè)務(wù)開(kāi)發(fā),學(xué)習(xí)和編寫(xiě)YAML會(huì)增加他們的負(fù)擔(dān),甚至?xí)钟|使用。
開(kāi)源項(xiàng)目Rainbond 是一個(gè) 云原生應(yīng)用管理平臺(tái),它使用 以應(yīng)用為中心 的設(shè)計(jì)模式。基于這一設(shè)計(jì)模式重新抽象出了比 workload 更高層次的應(yīng)用模型。從使用的體驗(yàn)上不需要學(xué)習(xí)和編寫(xiě)YAML,實(shí)現(xiàn)業(yè)務(wù)應(yīng)用的全生命周期管理。應(yīng)用對(duì)應(yīng)一個(gè)完整的業(yè)務(wù)系統(tǒng),由若干個(gè)可以單獨(dú)管理的服務(wù)組件組成,部署業(yè)務(wù)組件可以從源代碼和容器鏡像,通過(guò)“拖拉拽”的方式編輯服務(wù)調(diào)用關(guān)系。每一個(gè)服務(wù)組件,可以基于圖形化界面定義使用常見(jiàn)的一些運(yùn)維特征。在此基礎(chǔ)之上,用戶還可以利用應(yīng)用模型這一核心概念,做出更多高級(jí)操作,如將整個(gè)業(yè)務(wù)系統(tǒng)以應(yīng)用模板的形式發(fā)布出來(lái),業(yè)務(wù)系統(tǒng)可以基于該模板一鍵安裝/升級(jí)。在軟件交付這個(gè)領(lǐng)域,這種能力十分有用,無(wú)論最終交付環(huán)境在線或離線,都可以基于應(yīng)用模板進(jìn)行快速交付,甚至個(gè)性化交付。
Rainbond 使用的應(yīng)用模型,讓開(kāi)發(fā)人員關(guān)注應(yīng)用和業(yè)務(wù)本身,更易于被人所接受。對(duì)裁剪后保留下來(lái)的運(yùn)維特征通過(guò)圖形界面展示和交互,極大的降低了使用的難度,通過(guò)應(yīng)用模版絕大多數(shù)開(kāi)發(fā)者不必編輯復(fù)雜聲明式配置文件就可以順暢使用 Kubernetes 了。
將Kubernetes的YAML轉(zhuǎn)換成應(yīng)用模型
整個(gè)轉(zhuǎn)化的過(guò)程,可以概括為三個(gè)步驟:
- 對(duì)于開(kāi)發(fā)人員最常用Workload,可以從源碼和容器鏡像向?qū)降淖詣?dòng)生成,或?qū)胍延衁AML和運(yùn)行應(yīng)用,導(dǎo)入過(guò)程自動(dòng)識(shí)別所有可轉(zhuǎn)化的 Workload 類(lèi)型資源,包括 Deployment、StatefulSet, Job、CronJob 類(lèi)型。這些資源會(huì)被轉(zhuǎn)化成應(yīng)用模型,轉(zhuǎn)化后會(huì)以服務(wù)組件的形式運(yùn)行。
- 導(dǎo)入生成的服務(wù)組件后,基本的Workload屬性通過(guò)界面就可以查看和編輯,如環(huán)境變量、鏡像地址等。轉(zhuǎn)化過(guò)程中會(huì)將識(shí)別到的高級(jí)Workload 屬性添加給服務(wù)組件,以Key/Value 或 Yaml 形式查看和管理。
- 非 Workload 的資源類(lèi)型,如 Secret、ServiceAccount、Role 等資源,會(huì)被分類(lèi)識(shí)別和加載到應(yīng)用界面的k8s資源 頁(yè)面中,供操作人員以交互體驗(yàn)方式進(jìn)行編輯。
可被納管和轉(zhuǎn)化的 高級(jí)Workload 屬性包括:
|
屬性名稱(chēng) |
作用 |
|
nodeSelector |
節(jié)點(diǎn)選擇器:指定某種類(lèi)型節(jié)點(diǎn)調(diào)度時(shí)使用。 |
|
labels |
標(biāo)簽:用于為服務(wù)組件自定義標(biāo)簽以被選擇器使用。 |
|
volumes |
存儲(chǔ)卷:用于定義不被 Rainbond 管理的卷類(lèi)型的掛載。 |
|
volumeMounts |
掛載卷:與 volumes 搭配使用,將卷掛載給容器。 |
|
affinity |
親和性:更高級(jí)的調(diào)度方式,包括節(jié)點(diǎn)親和性和Pod親和性。 |
|
tolerations |
容忍度:與節(jié)點(diǎn)污點(diǎn)搭配使用,具備指定容忍度的Pod才可以調(diào)度到指定節(jié)點(diǎn)上。 |
|
serviceAccountName |
服務(wù)賬戶名:為服務(wù)組件指定某個(gè)已存在的SA,使對(duì)應(yīng)的Pod具備某些權(quán)限。 |
|
privileged |
特權(quán)模式:名副其實(shí)的配置,非必要不開(kāi)啟。 |
|
env |
環(huán)境變量:用于定義不被 Rainbond 管理的環(huán)境變量,支持引用操作。 |
值得注意的是,擴(kuò)展后的 RAM 模型,依然能夠發(fā)布為應(yīng)用模板,供后續(xù)一鍵安裝/升級(jí)/交付整套業(yè)務(wù)系統(tǒng)之用。
導(dǎo)入已有Kubernetes應(yīng)用的測(cè)試和實(shí)踐
以下測(cè)試是基于Rainbond v5.8進(jìn)行的,為了測(cè)試 Kubernetes 已有應(yīng)用導(dǎo)入,我計(jì)劃使用已經(jīng)在 wp 命名空間中部署完成的 Wordpress 建站系統(tǒng)來(lái)進(jìn)行一次導(dǎo)入測(cè)試。這套系統(tǒng)由以下資源組成:
[root@localhost ~]# kubectl get secret,service,deployment,statefulset,pod -n wp
NAME TYPE DATA AGE
secret/default-token-nq5rs kubernetes.io/service-account-token 3 27m
secret/mysql-secret Opaque 2 27m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/wordpress NodePort 10.43.157.408080:30001/TCP 5m19s
service/wp-mysql ClusterIP 10.43.132.2233306/TCP 27m
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/wordpress 1/1 1 1 5m19s
NAME READY AGE
statefulset.apps/wp-mysql 1/1 27m
NAME READY STATUS RESTARTS AGE
pod/wordpress-66bc999449-qv97v 1/1 Running 0 5m19s
pod/wp-mysql-0 1/1 Running 0 27m
訪問(wèn) Rainbond ,在集群處選擇導(dǎo)入,在這個(gè)頁(yè)面中,可以選擇要導(dǎo)入資源的命名空間 ??wp??。平臺(tái)會(huì)根據(jù) label 來(lái)對(duì)資源進(jìn)行分組:
Rainbond 根據(jù)資源定義的 label 來(lái)劃分應(yīng)用,如符合 app.kubernetes.io/name:wp-mysql 或 app:wordpress 的資源,會(huì)分布到圖中兩個(gè)不同的應(yīng)用中去,而不具備上述 label 的資源,則會(huì)統(tǒng)一劃分到一個(gè)未分組的應(yīng)用中去。應(yīng)用的劃分非常關(guān)鍵,因?yàn)閼?yīng)用模型的高級(jí)應(yīng)用是針對(duì)一個(gè)應(yīng)用整體而言的,所以導(dǎo)入之前一定要仔細(xì)規(guī)劃,添加合理的 label。
導(dǎo)入過(guò)程中,Rainbond 將不同的屬性,交由擴(kuò)展后的模型管理,大部分運(yùn)維操作已經(jīng)變得很易用了,而另一部分,則交由 Kubernetes 屬性頁(yè)面進(jìn)行管理。
一旦完成導(dǎo)入,wordpress 和 wp-mysql 兩個(gè)應(yīng)用就可以使用 Rainbond 進(jìn)行管理了。
- 端口管理
wordpress 在導(dǎo)入之前依靠 NodePort 類(lèi)型的 Service 對(duì)外暴露,但導(dǎo)入 Rainbond 管理之后,就可以借助網(wǎng)關(guān)對(duì)外暴露自己的 80 端口了。需要注意的是,你必須重啟一次 wordpress 服務(wù)組件,來(lái)讓訪問(wèn)策略生效。
對(duì)于某些業(yè)務(wù)而言,訪問(wèn)的入口不支持動(dòng)態(tài)指定,這就需要業(yè)務(wù)側(cè)也做出一些改動(dòng),來(lái)適應(yīng)新的訪問(wèn)入口。對(duì)于 Wordpress 而言,需要重新定義常規(guī)選項(xiàng)中的站點(diǎn)地址。
- 存儲(chǔ)管理
我部署的這套 wordpress 系統(tǒng),所有組件的存儲(chǔ)都使用的 hostpath 模式,這種配置雖說(shuō)簡(jiǎn)單,但是并不適用于 Pod 可能發(fā)生漂移的大規(guī)模 Kubernetes 環(huán)境。Rainbond 部署后,會(huì)提供易用的共享存儲(chǔ),這種存儲(chǔ)支持多個(gè) Pod 間共享數(shù)據(jù),以及 Pod 跨主機(jī)的遷移。原有的 hostpath 存儲(chǔ),可以重新進(jìn)行定義。重新定義后的存儲(chǔ)路徑會(huì)變?yōu)榭?,所以記得找到新舊不同的路徑,進(jìn)行一次數(shù)據(jù)遷移。
實(shí)際意義
通過(guò)應(yīng)用模型,讓IT 技術(shù)人員可以更多的關(guān)心業(yè)務(wù)本身,而不是底層復(fù)雜工具的使用問(wèn)題。最終的效果是簡(jiǎn)化操作成本和理解難度,讓Kubernetes更加容易落地。
當(dāng)前標(biāo)題:如何不編寫(xiě)YAML管理Kubernetes應(yīng)用?
網(wǎng)頁(yè)路徑:http://www.dlmjj.cn/article/djhdegc.html


咨詢
建站咨詢
