Keepalived的作用是檢測(cè)服務(wù)器的狀態(tài),如果有一臺(tái)web服務(wù)器死機(jī),或工作出現(xiàn)故障,Keepalived 將檢測(cè)到,并將有故障的服務(wù)器從系統(tǒng)中剔除,當(dāng)服務(wù)器工作正常后Keepalived自動(dòng)將服務(wù)器加入到服務(wù)器群中,這些工作全部自動(dòng)完成,不需要人工干涉,需要人工做的只是修復(fù)故障的服務(wù)器。
成都創(chuàng)新互聯(lián)公司是專業(yè)的黃州網(wǎng)站建設(shè)公司,黃州接單;提供成都網(wǎng)站建設(shè)、成都網(wǎng)站制作,網(wǎng)頁設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行黃州網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!
首先我們簡(jiǎn)要說明一下Keepalived 的相關(guān)啟動(dòng)腳本及配置文件:keepalived.sh是核心的腳本用來啟動(dòng)服務(wù),keepalived.conf文件則是該服務(wù)的配置文件。對(duì)于 Keepalived,我們需要關(guān)心的幾個(gè)重要參數(shù)如下:
虛擬IP地址及其掩碼
VRRP所偵聽檢測(cè)的端口(也就是HA針對(duì)具體哪一個(gè)端口做健康檢查)
VRRP基于哪個(gè)網(wǎng)卡接口發(fā)布。
我相信Rancher的官方手冊(cè)已經(jīng)對(duì)Catalog的制作流程做了詳盡的說明,但是仍然有一些朋友看了Rancher手冊(cè)上Catalog那一節(jié),暈暈乎乎,不懂如何制作應(yīng)用的 Catalog。
(官方手冊(cè)鏈接在此):http://docs.rancher.com/rancher/latest/en/catalog/private-catalog/
結(jié)合Keepalived,我們來看具體的Catalog是如何創(chuàng)建的吧。
首先,你需要在github或者你自己的gitlab上創(chuàng)建一個(gè)項(xiàng)目,這個(gè)項(xiàng)目只要能被git clone指令正常處理就 OK。 例如我們?cè)趃ithub網(wǎng)站上創(chuàng)建的項(xiàng)目結(jié)構(gòu)如下圖所示:
templates目錄里對(duì)應(yīng)的是我們Rancher里Cattle環(huán)境的Catalog。kubernetes-templates和swarm-templates以及mesos-templates則對(duì)應(yīng)不同環(huán)境的模板。進(jìn)入這個(gè)templates,我們可以看見在Rancher Catalog頁面對(duì)應(yīng)的那些軟件模板名。
我們進(jìn)入Keepalived文件夾看個(gè)究竟,就會(huì)很容易的了解官方文檔對(duì)Catalog編制的流程指引。
這個(gè)catalogIcon-keepalived.png圖正是我們看見的它:
config.yml文件則是該catalog的基礎(chǔ)描述;0目錄是指第一個(gè)版本,那么下一次你發(fā)新版的Catalog,則需另建立一個(gè)1目錄。
每個(gè)版本文件夾例如0里面均包含了三個(gè)文件。
這正是我們創(chuàng)建一個(gè)Stack所需要的docker-compose.yml以及rancher-compose.yml,當(dāng)然還有一個(gè)README.md 文件,用以對(duì)Stack進(jìn)行詳細(xì)描述。
對(duì)于這個(gè)Keepalived,其 docker-compose.yml特別的簡(jiǎn)單:
不過這里的p_w_picpath你可需要花點(diǎn)功夫了,你需要處理正確的環(huán)境變量、參數(shù)的傳遞。否則我們?cè)赗ancher Catalog里看到的這些參數(shù)傳遞一旦出現(xiàn)問題,那么服務(wù)肯定跑不起來了,用于制作p_w_picpath的Dockerfile內(nèi)容如下 :
這些自定義配置選項(xiàng)是如何實(shí)現(xiàn)的呢?
官方文檔告訴我們,是在 rancher-compose文件里來定義。還是以我們的Keepalived服務(wù)為例子:
在rancher-compse.yml文件的question小節(jié)里定義了很多UI對(duì)象的屬性(例如:變量名、數(shù)據(jù)類型、是否必選項(xiàng)、標(biāo)簽、描述、默認(rèn)值等等),而在answers.txt文件中則相應(yīng)的給出了這些項(xiàng)目的默認(rèn)值狀態(tài)。
以實(shí)際的Keepalived服務(wù)而言,我們可以看見docker-compose.yml文件里定義了四個(gè)環(huán)境變量 (VIRTUAL_IP、 CHECK_PORT、 INTERFACE、 NETMASK_BIT)以及一個(gè)常量VRID:
以上四個(gè)環(huán)境變量是可以被容器的shell所直接調(diào)用的,例如keepalived.sh腳本中就調(diào)用了這四個(gè)變量,而這四個(gè)變量的具體賦值正是在Catalog制作階段完成的,其值由rancher-compose.yml文件里的變量進(jìn)行輸出,也就是:
特別需要注意的是 keepalived.sh 腳本在運(yùn)行期是需要讀取配置文件 keepalived.conf 文件里的參數(shù)的,特別是上述這四個(gè)參數(shù),那么由于 keepalived.conf 文件必須在 p_w_picpaths 生成之前在 Dockerfile 里寫好,因此在 Dockerfile 里,它們一定是變量,而在容器運(yùn)行起來之后,keepalive.sh 運(yùn)行之前需要把變量賦值,這些值正是用戶填寫的。我們看一下 keepalived.sh 是如何實(shí)現(xiàn)的呢?
通過關(guān)鍵的四句 sed 指令配合正則表達(dá)式:
keepalived.sh腳本成功的將容器運(yùn)行期的 keepalived.conf配置文件中的變量參數(shù)替換為了常量(這個(gè)常量由容器的環(huán)境變量傳遞進(jìn) Linux Shell 環(huán)境)。
這樣一個(gè)完整的Catalog創(chuàng)建流程包括如何處理環(huán)境變量與自定義參數(shù)的傳遞機(jī)制就解釋清晰了,按照這種思路,我們可以很方便地創(chuàng)建各種不同的應(yīng)用模板,以實(shí)現(xiàn) Rancher 的一鍵部署功能。
原文來源:Rancher Labs