search
尋找貓咪~QQ 地點 桃園市桃園區 Taoyuan , Taoyuan

模板引擎配置管理,一個可供參考的容器部署框架

作者|李寧編輯|木環

繁雜的部署配置

在大家使用容器的過程中,都會有一種經歷,容器配置項眾多大概有四五十項,且需要一定技術背景才能理解。部署過程中,常常會因為使用者對配置參數缺乏理解,導致容器啟動、應用部署或者升級時遇到各種各樣的問題。如何加快對不同參數的理解並且能夠根據不同的應用類型和場景,做相應擴展,是本文重點要探討和解決的問題。本文重點講述如何構建模板引擎,以及以模板引擎為核心構建容器部署框架的運行原理。

容器部署框架

容器創建或者應用部署配置繁雜且存在變數,為了保證系統靈活性和復用性,我們決定模板引擎為核心,構建統一的容器部署框架。模板引擎中,符合一定格式規範的文件是基礎,對於可能有變化或者根據部署流程需要變化的位置,使用參數標識站位。模板文件結尾追加參數標識的定義,用來執行參數標識語義轉化。模板或者參數標識的具體內容,可以通過特定配置文件讀取或者接收客戶端請求參數。

模板引擎由模板定義、模板解析、模板轉換、模板執行四個模塊組成。模板定義依賴於容器集群的管理框架,是非可執行的文件。模板解析器負責把模板一分為二:一部分形成非可執行的部署模板;一部分形成部署模板中參數的定義說明,參數定義說明通過唯一的站位標識符與部署模板中的站位標識符一一對應。模板轉換器接受參數值,結合解析器中生成的部署模板,參數值標識與模板中佔位標識關聯,參數值通過佔位標識替換,生成可執行文件。模板執行器負責根據模板創建對象,一般有調度框架或者容器引擎承擔。

模板引擎的執行原理如圖 1 所示:

模板定義

模板定義包括兩類信息:部署模板;參數標識。

以 kubernetes 的部署模板為例,部署模板涉及到 4 種不同類型定義,分別是:資源,版本,信息說明,數據配置。

  • 資源表示 kubernetes 中定義的對象類型。

  • 版本表示對象的版本

  • 信息說明包括對象名稱,標籤,註釋等,為對象查找或者調度提供索引。

  • 數據配置負責定義容器處於運行態遵循的標準,包括埠、環境變數、資源、調度、健康檢查等。

參數標識由 6 個屬性組成,分別是 parameters,name,description,displayname,value,type。

  • parameters:參數定義起始標誌

  • description:參數的提示信息

  • displayname:具體語義信息

  • name:與引用參數名稱對應,表示描述信息為對應的引用參數

  • value:參數默認值

  • type:代表不同的樣式,客戶端根據 type 類型,呈現具體樣式

以 kubernetes 中的 namespace 對象為例,模板的完整定義如下代碼所示:

apiVersion: v1 kind: Namespace metadata: name: ${name } --- {"parameters": [ { "description": "命名空間", "displayName": "命名空間", "name": "name", "value": "", "type": "String" } ]}

由上述代碼中,包含兩部分內容:部署模板,參數說明。部署模板如下代碼塊所示:

apiVersion: v1 kind: Namespace metadata: name: ${name }

部署模板定義對象創建的所有內容,模板中欄位含義描述如下:

  • apiVersion:通用選項,定義版本信息

  • Kind:定義對象類型,區別不同的對象

  • Metadata:定義部署時指定的參數鍵值對

  • ${}: 表示參數的引用值,即可替代參數

參數標識,定義了客戶端動態獲取參數后的展現形態,下面代碼示例參數標識定義:

{"parameters": [ { "description": "命名空間", "displayName": "命名空間", "name": "name", "value": "", "type": "String" } ]}

參數標識定義統一的格式。通過語義轉化,把繁雜的配置轉變為用戶易於理解的方式。客戶端讀取到 parameters 標識,通過模板解析器抽象可輸入參數,展示需要的 form 表單,提供用戶輸入的功能。

模板定義由對 kubernetes 或者 docker 熟悉的專業人員編寫。可以根據具體的業務場景,進行實時和動態調整,保證部署的靈活性和擴展性。同時,系統根據不同的對象,提供基礎模板。用戶在具備一定知識背景的基礎上同樣可以進行模板製作和維護。

模板解析

模板解析器,通過輸入輸出流獲取模板中參數標識,進行語義轉化,得到易於理解的配置參數。模板解析器的工作原理如下圖 2 所示:

客戶端發起創建對象請求,服務端收到請求以後,會根據請求的對象類型自關聯基礎模板。通過文件流的方式,讀取基礎模板,讀取過程中以 parameters 標誌為起始點,獲取參數描述信息。解析完成,參數以 JSON 串的方式返回客戶端,客戶端根據 JSON 串,動態生成需要用戶填寫的表單,用戶根據表單內容完成參數輸入操作。

模板解析器重點解析模板定義中的參數標識。通過語義轉化,信息提示,形成易辨識的輸入項。對用戶而言,解析完成以後能夠屏蔽繁雜的技術指標,用戶的關心點由技術轉變到業務配置。最大程度降低使用成本,增加易用性。

模板轉化器

模板轉化器是模板引擎的核心,重點解決三個問題:獲取部署模板,參數與值轉換,構建可執行文件。客戶端把模板解析器中參數賦予真實值,傳遞到服務端,服務端讀取模版內容,遇到參數的標誌位結束,把讀取的內容通過文件流寫到新文件,生成部署文件,接著用參數值對部署文件中的參數做關聯替換,生成最終的可執行文件。模板轉化器的工作原理如圖 3 所示:

獲取部署模板:由模板定義可知,模板中包含兩部分內容:部署模板和參數標識。模板轉化器首先需要部署模板,通過文件流的方式讀取模板定義中的部署模板,讀取過程中以 parameters 標識符分割,獲取部署模板。

參數值轉化:核心是解決參數與佔位符關聯和賦值問題。模板轉換器通過模板參數定義的 name 屬性 key 關聯,模板轉化器拿到參數值以後,獲取參數值對應的 key(key 在部署模板唯一),並且根據 key,替換部署模板中佔位標識,完成參數替換。

構建可執行文件:通過文件流的方式,把前兩部轉化的字元流輸出到文件,構建出可執行文件。

模板轉換器執行以後,生成的可執行文件如下所示:

apiVersion: v1 kind: Namespace metadata: name: ruffy

模板執行器

模板執行器接收可執行的部署文件,對於文件中定義的部署類型進行解析,拆分成若干個可執行任務。容器引擎根據收到的任務執行操作,最終協同完成部署工作。模板執行器往往依賴於容器調度和執行引擎。以 kubernetes 容器編排框架為例,模板轉化器生成的可執行文件,以字元流的方式傳輸到 kubernetes 的 server 端,kubernetes 根據傳入文件,自動解析文件內容,並且做出相關操作。對於模板引擎而言,無論是 kubernetes 還是 swarmkit 都能夠得到友好的支持。模板執行器的工作原理如圖 4 所示:

模板執行器執行以後的結果如圖 5 所示:

寫在最後

通過模板引擎的方式,可以對容器的配置做靈活使用,無論是容器部署還是其他資源主題對象創建,都有對應模板支持。模板處理引擎不需要根據模板的變動而不斷的修改代碼。與此同時,用戶可以從自己理解的語義關注配置信息,不需要關注具體技術細節和實現方式,簡化操作行為,降低使用成本。

作者介紹

李寧,BoCloud 博雲高級架構師,BoCloud 博雲核心產品 PaaS/DevOps 產品負責人,負責博雲產品的規劃、架構、研發等工作。

騰訊遊戲容器雲平台的技術演進之路

CNUTCon 全球運維技術大會將於 9 月 10-11 日在上海舉行,大會以「智能時代的新運維」為主題,涵蓋 AIOps、SRE、DevOps、運維監控與安全等專場,邀請了來自 Google、Uber、eBay、BAT 等公司大咖分享他們在最新運維技術實踐過程中遇到的坑與經驗,現場為你解疑答惑,點擊「閱讀原文」了解更多精彩!9 折限時優惠,報名時輸入 CNUTCon666 還可再減 200 哦!



熱門推薦

本文由 yidianzixun 提供 原文連結

寵物協尋 相信 終究能找到回家的路
寫了7763篇文章,獲得2次喜歡
留言回覆
回覆
精彩推薦