confd是一個(gè)輕量級(jí)的配置管理工具,支持etcd作為后端數(shù)據(jù)源,通過(guò)讀取數(shù)據(jù)源數(shù)據(jù),保證本地配置文件為最新;不僅如此 ,它還可以在配置文件更新后,檢查配置文件語(yǔ)法有效性,以重新加載應(yīng)用程序使配置生效。這里需要說(shuō)明的是,confd雖然支持rancher作為數(shù)據(jù)源,但考慮易用性和擴(kuò)展性等原因,最終我們還是選擇了etcd。
和大多數(shù)部署方式一樣,我們把confd部署在web server所在的ECS上,便于confd在監(jiān)測(cè)到數(shù)據(jù)變化后及時(shí)更新配置文件和重啟程序。confd的相關(guān)配置文件和模板文件部署在默認(rèn)路徑/etc/confd下,目錄結(jié)構(gòu)如下:
/etc/confd/ ├── conf .d├── confd .toml└── templates
confd.toml是confd的主配置文件,使用TOML格式編寫,因?yàn)槲覀僥tcd是集群部署,有多個(gè)節(jié)點(diǎn),而我又不想把confd的指令搞的又臭又長(zhǎng),所以將interval、nodes等選項(xiàng)寫到了這個(gè)配置文件里。
cond.d目錄存放web server的模板配置源文件,也使用TOML格式編寫。該文件用于指定應(yīng)用模板配置文件路徑(src)、應(yīng)用配置文件路徑(dest)、數(shù)據(jù)源的key信息(keys)等。
templates目錄存放web server下每個(gè)應(yīng)用的模板配置文件。它使用Go支持的text/template語(yǔ)言格式進(jìn)行編寫。在confd從etcd中讀取到最新應(yīng)用注冊(cè)信息后,通過(guò)下面的語(yǔ)句寫入模板配置文件中:
{{rangegetvs"/${APP_NAME}/*"}}server {{.}}; {{end}}
圖13: 應(yīng)用發(fā)現(xiàn)示意圖
通過(guò)supervisor管理confd進(jìn)程。confd在運(yùn)行后會(huì)每隔5秒對(duì)etcd進(jìn)行輪詢,當(dāng)某個(gè)應(yīng)用服務(wù)的K/V更新后,confd會(huì)讀取該應(yīng)用存儲(chǔ)在etcd中的數(shù)據(jù),寫入到模板配置文件中,生成這個(gè)應(yīng)用配置文件,最后由confd將配置文件寫入到目標(biāo)路徑下,重新加載nginx程序使配置生效。(代碼請(qǐng)參考:https://zhuanlan.zhihu.com/idevops)
總結(jié)
本文是五阿哥運(yùn)維技術(shù)團(tuán)隊(duì)針對(duì)Docker容器技術(shù)在如何在持續(xù)交付過(guò)程中探索和實(shí)踐,目前已經(jīng)將發(fā)布部署權(quán)限開放給應(yīng)用開發(fā)的owner,實(shí)現(xiàn)7*24小時(shí)“一站式”的持續(xù)交付,整體提高了公司的研發(fā)過(guò)程的交付能力。
接下來(lái)會(huì)不斷優(yōu)化持續(xù)交付過(guò)程中遇到的各種場(chǎng)景,逐漸完善容器云平臺(tái),同時(shí)會(huì)將容器云平臺(tái)各種功能,總結(jié)的經(jīng)驗(yàn)和教訓(xùn)不斷分享給大家,給大家在工作中一些參考,避免走重復(fù)的“彎路”。
作者簡(jiǎn)介:劉曉明,五阿哥鋼鐵電商平臺(tái)(wuage.com)運(yùn)維技術(shù)負(fù)責(zé)人,擁有10年的互聯(lián)網(wǎng)開發(fā)和運(yùn)維經(jīng)驗(yàn)。一直致力于運(yùn)維工具的開發(fā)和運(yùn)維專家服務(wù)的推進(jìn),賦能開發(fā),不斷提高研發(fā)效能。