在大家使用容器的過程中,都會有一種經(jīng)歷,容器配置項眾多大概有四五十項,且需要一定技術(shù)背景才能理解。部署過程中,用戶常常會因為對于配置參數(shù)缺乏理解,導(dǎo)致容器啟動,應(yīng)用部署或者升級時遇到各種各樣的問題。用戶如何加快對不同參數(shù)的理解并且能夠根據(jù)不同的應(yīng)用類型和場景,做相應(yīng)擴展,本文將重點要探討和解決這些問題。
容器創(chuàng)建或者應(yīng)用部署配置繁雜且存在變數(shù),為了保證系統(tǒng)靈活性和復(fù)用性,決定以模板引擎為核心,構(gòu)建統(tǒng)一的容器部署框架。本文重點講述如何構(gòu)建模板引擎以及以模板引擎為核心構(gòu)建容器部署框架的運行原理。模板引擎中,符合一定格式規(guī)范的文件是基礎(chǔ),對于可能有變化或者根據(jù)部署流程需要變化的位置,使用參數(shù)標(biāo)識站位。模板文件結(jié)尾追加參數(shù)標(biāo)識的定義,用來執(zhí)行參數(shù)標(biāo)識語義轉(zhuǎn)化。模板或者參數(shù)標(biāo)識的具體內(nèi)容,可以通過特定配置文件讀取或者接收客戶端請求參數(shù)。
模板引擎
模板引擎由模板定義,模板解析,模板轉(zhuǎn)換,模板執(zhí)行四個模塊組成。模板定義依賴于容器集群的管理框架,是非可執(zhí)行的文件。模板解析器負(fù)責(zé)把模板一分為二:一部分形成非可執(zhí)行的部署模板;一部分形成部署模板中參數(shù)的定義說明,參數(shù)定義說明通過唯一的站位標(biāo)識符與部署模板中的站位標(biāo)識符一一對應(yīng)。模板轉(zhuǎn)換器接受參數(shù)值,香港云服務(wù)器 美國云主機,結(jié)合解析器中生成的部署模板,參數(shù)值標(biāo)識與模板中占位標(biāo)識關(guān)聯(lián),參數(shù)值通過占位標(biāo)識替換,生成可執(zhí)行文件。模板執(zhí)行器負(fù)責(zé)根據(jù)模板創(chuàng)建對象,一般有調(diào)度框架或者容器引擎承擔(dān)。
模板引擎的執(zhí)行原理如圖1所示:
圖1 模板引擎的執(zhí)行原理
模板定義
模板定義包括兩類信息:部署模板;參數(shù)標(biāo)識。
以kubernetes的部署模板為例,部署模板涉及到4種不同類型定義,分別是:資源、版本、信息說明、數(shù)據(jù)配置。
1.資源:表示kubernetes中定義的對象類型。
2.版本:表示對象的版本
3.信息說明:包括對象名稱,標(biāo)簽,注釋等,為對象查找或者調(diào)度提供索引。
4.數(shù)據(jù)配置:負(fù)責(zé)定義容器處于運行態(tài)遵循的標(biāo)準(zhǔn),包括端口、環(huán)境變量、資源、調(diào)度、健康檢查等。
參數(shù)標(biāo)識由6個屬性組成,分別是parameters、name、description、displayname、value、type。
1.parameters:參數(shù)定義起始標(biāo)志
2.description:參數(shù)的提示信息
3.displayname:具體語義信息
4.name:與引用參數(shù)名稱對應(yīng),表示描述信息為對應(yīng)的引用參數(shù)
5.value:參數(shù)默認(rèn)值
6.type:代表不同的樣式,客戶端根據(jù)type類型,呈現(xiàn)具體樣式
以kubernetes中的namespace對象為例,模板的完整定義如下代碼所示:
由上述代碼中,包含兩部分內(nèi)容:部署模板,參數(shù)說明。
部署模板如下代碼塊所示:
部署模板定義對象創(chuàng)建的所有內(nèi)容,模板中字段含義描述如下:
1.apiVersion:通用選項,定義版本信息
2.Kind:定義對象類型,區(qū)別不同的對象
3.Metadata:定義部署時指定的參數(shù)鍵值對
4${}:表示參數(shù)的引用值,即可替代參數(shù)
參數(shù)標(biāo)識,定義了客戶端動態(tài)獲取參數(shù)后的展現(xiàn)形態(tài),下面代碼示例參數(shù)標(biāo)識定義:
參數(shù)標(biāo)識定義統(tǒng)一的格式。通過語義轉(zhuǎn)化,把繁雜的配置轉(zhuǎn)變?yōu)橛脩粢子诶斫獾姆绞健?蛻舳俗x取到Parameters標(biāo)識,通過模板解析器抽象可輸入?yún)?shù),展示需要的Form表單,提供用戶輸入的功能。
模板定義由對Kubernetes或者Docker熟悉的專業(yè)人員編寫。可以根據(jù)具體的業(yè)務(wù)場景,進行實時和動態(tài)調(diào)整,保證部署的靈活性和擴展性。同時,系統(tǒng)根據(jù)不同的對象,提供基礎(chǔ)模板。用戶在具備一定知識背景的基礎(chǔ)上同樣可以進行模板制作和維護。
模板解析器
通過輸入輸出流獲取模板中參數(shù)標(biāo)識,進行語義轉(zhuǎn)化,得到易于理解的配置參數(shù)。模板解析器的工作原理如下圖2所示:
圖2 模板解析器的工作原理
客戶端發(fā)起創(chuàng)建對象請求,服務(wù)端收到請求以后,會根據(jù)請求的對象類型自關(guān)聯(lián)基礎(chǔ)模板。通過文件流的方式,讀取基礎(chǔ)模板,讀取過程中以Parameters標(biāo)志為起始點,獲取參數(shù)描述信息。解析完成,參數(shù)以Json串的方式返回客戶端,客戶端根據(jù)Json串,動態(tài)生成需要用戶填寫的表單,用戶根據(jù)表單內(nèi)容完成參數(shù)輸入操作。