摘要:首先我們簡要說明一下的相關(guān)啟動腳本及配置文件是核心的腳本用來啟動服務(wù),文件則是該服務(wù)的配置文件。官方手冊鏈接在此結(jié)合,我們來看具體的是如何創(chuàng)建的吧。
Keepalived的作用是檢測服務(wù)器的狀態(tài),如果有一臺web服務(wù)器死機(jī),或工作出現(xiàn)故障,Keepalived 將檢測到,并將有故障的服務(wù)器從系統(tǒng)中剔除,當(dāng)服務(wù)器工作正常后Keepalived自動將服務(wù)器加入到服務(wù)器群中,這些工作全部自動完成,不需要人工干涉,需要人工做的只是修復(fù)故障的服務(wù)器。
首先我們簡要說明一下Keepalived 的相關(guān)啟動腳本及配置文件:keepalived.sh是核心的腳本用來啟動服務(wù),keepalived.conf文件則是該服務(wù)的配置文件。對于 Keepalived,我們需要關(guān)心的幾個重要參數(shù)如下:
虛擬IP地址及其掩碼
VRRP所偵聽檢測的端口(也就是HA針對具體哪一個端口做健康檢查)
VRRP基于哪個網(wǎng)卡接口發(fā)布。
我相信Rancher的官方手冊已經(jīng)對Catalog的制作流程做了詳盡的說明,但是仍然有一些朋友看了Rancher手冊上Catalog那一節(jié),暈暈乎乎,不懂如何制作應(yīng)用的 Catalog。
(官方手冊鏈接在此):http://docs.rancher.com/ranch...
結(jié)合Keepalived,我們來看具體的Catalog是如何創(chuàng)建的吧。
首先,你需要在github或者你自己的gitlab上創(chuàng)建一個項目,這個項目只要能被git clone指令正常處理就 OK。 例如我們在github網(wǎng)站上創(chuàng)建的項目結(jié)構(gòu)如下圖所示:
templates目錄里對應(yīng)的是我們Rancher里Cattle環(huán)境的Catalog。kubernetes-templates和swarm-templates以及mesos-templates則對應(yīng)不同環(huán)境的模板。進(jìn)入這個templates,我們可以看見在Rancher Catalog頁面對應(yīng)的那些軟件模板名。
我們進(jìn)入Keepalived文件夾看個究竟,就會很容易的了解官方文檔對Catalog編制的流程指引。
這個catalogIcon-keepalived.png圖正是我們看見的它:
config.yml文件則是該catalog的基礎(chǔ)描述;0目錄是指第一個版本,那么下一次你發(fā)新版的Catalog,則需另建立一個1目錄。
每個版本文件夾例如0里面均包含了三個文件。
這正是我們創(chuàng)建一個Stack所需要的docker-compose.yml以及rancher-compose.yml,當(dāng)然還有一個README.md 文件,用以對Stack進(jìn)行詳細(xì)描述。
對于這個Keepalived,其 docker-compose.yml特別的簡單:
Keepalived:
labels: io.rancher.scheduler.global: "true" environment: VIRTUAL_IP: "${virtual_ip}" CHECK_PORT: "${check_port}" VRID: 150 INTERFACE: "${network_interface}" NETMASK_BIT: "${netmask_bit}" tty: true image: alanpeng/rancher-keepalived stdin_open: true net: host cap_add: - NET_ADMIN - NET_BROADCAST
不過這里的image你可需要花點功夫了,你需要處理正確的環(huán)境變量、參數(shù)的傳遞。否則我們在Rancher Catalog里看到的這些參數(shù)傳遞一旦出現(xiàn)問題,那么服務(wù)肯定跑不起來了,用于制作image的Dockerfile內(nèi)容如下 :
FROM alpine:latest RUN echo "http://nl.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories && apk --update -t addkeepalived iproute2 grep bash tcpdump sed && rm -f /var/cache/apk/* /tmp/* COPY keepalived.sh /usr/bin/keepalived.sh COPY keepalived.conf /etc/keepalived/keepalived.confRUN chmod +x /usr/bin/keepalived.sh ENTRYPOINT ["/usr/bin/keepalived.sh"]
這些自定義配置選項是如何實現(xiàn)的呢?
官方文檔告訴我們,是在 rancher-compose文件里來定義。還是以我們的Keepalived服務(wù)為例子:
.catalog: name: "Keepalived for Rancher" version: 0.1 description: | Keepalived for Rancher HA-Proxy Loadbalancer questions: - variable: "virtual_ip" type: string required: true label: "Virtual Floating IP Address" description: "Virtual IP address given to the HA-Proxy Cluster" - variable: "netmask_bit" type: string required: true label: "Netmask Bit" description: "Network mask bits for the Virtual IP address"default: "16" - variable: "check_port" type: string required: true label: "Listening port" description: "The listening port of the HA-Proxy loadbalancer"default: "80" - variable: "network_interface" type: string required: true label: "Network Interface" description: "Network Interface of the Virtual Floating IP address (Host NIC)"default: "eno16777984"
在rancher-compse.yml文件的question小節(jié)里定義了很多UI對象的屬性(例如:變量名、數(shù)據(jù)類型、是否必選項、標(biāo)簽、描述、默認(rèn)值等等),而在answers.txt文件中則相應(yīng)的給出了這些項目的默認(rèn)值狀態(tài)。
以實際的Keepalived服務(wù)而言,我們可以看見docker-compose.yml文件里定義了四個環(huán)境變量 (VIRTUAL_IP、 CHECK_PORT、 INTERFACE、 NETMASK_BIT)以及一個常量VRID:
VIRTUAL_IP: "${virtual_ip}" CHECK_PORT: "${check_port}" VRID: 150 INTERFACE: "${network_interface}"NETMASK_BIT: "${netmask_bit}"
以上四個環(huán)境變量是可以被容器的shell所直接調(diào)用的,例如keepalived.sh腳本中就調(diào)用了這四個變量,而這四個變量的具體賦值正是在Catalog制作階段完成的,其值由rancher-compose.yml文件里的變量進(jìn)行輸出,也就是:
VIRTUAL_IP由virtual_ip傳值而來(具體值由用戶在 UI 里填寫) CHECK_PORT由check_port傳值而來(具體值由用戶在 UI 里填寫) INTERFACE由network_interface傳值而來(具體值由用戶在 UI 里填寫)NETMASK_BIT由netmask_bit傳值而來(具體值由用戶在 UI 里填寫)
特別需要注意的是 keepalived.sh 腳本在運行期是需要讀取配置文件 keepalived.conf 文件里的參數(shù)的,特別是上述這四個參數(shù),那么由于 keepalived.conf 文件必須在 images 生成之前在 Dockerfile 里寫好,因此在 Dockerfile 里,它們一定是變量,而在容器運行起來之后,keepalive.sh 運行之前需要把變量賦值,這些值正是用戶填寫的。我們看一下 keepalived.sh 是如何實現(xiàn)的呢?
通過關(guān)鍵的四句 sed 指令配合正則表達(dá)式:
keepalived.sh腳本成功的將容器運行期的 keepalived.conf配置文件中的變量參數(shù)替換為了常量(這個常量由容器的環(huán)境變量傳遞進(jìn) Linux Shell 環(huán)境)。
這樣一個完整的Catalog創(chuàng)建流程包括如何處理環(huán)境變量與自定義參數(shù)的傳遞機(jī)制就解釋清晰了,按照這種思路,我們可以很方便地創(chuàng)建各種不同的應(yīng)用模板,以實現(xiàn) Rancher 的一鍵部署功能。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/28009.html
摘要:用戶訪問通過使用負(fù)載均衡服務(wù)的和端口。的負(fù)載均衡服務(wù),需要做源會話保持配置。其次,自身沒有基于角色權(quán)限訪問控制,所有可以訪問負(fù)載均衡服務(wù)的用戶都能隨意的推送和拉取鏡像。 在正文之前,我們先來看一下,如果沒有容器,通常會如何部署 Docker Registry?關(guān)于這個問題,我簡單畫了一個草圖: showImg(https://segmentfault.com/img/bVGld7?w...
摘要:提供了許多可重用的預(yù)先構(gòu)建好的程序棧的模板。從我們的目的來看,是一個能夠部署基于容器的程序棧并管理其生命周期的開源的軟件。注意和棧被展開以顯示每一個程序棧中的多個容器。文件是與模板相關(guān)的元數(shù)據(jù)的初始資源。 Rancher提供了許多可重用的、預(yù)先構(gòu)建好的程序棧的模板。拓展這些已有的模板或者創(chuàng)建并分享已完成的新模板,是參與Rancher用戶社區(qū)的好方式。同時,這也可以幫助你的組織更高效地利...
摘要:提供了許多可重用的預(yù)先構(gòu)建好的程序棧的模板。從我們的目的來看,是一個能夠部署基于容器的程序棧并管理其生命周期的開源的軟件。注意和棧被展開以顯示每一個程序棧中的多個容器。文件是與模板相關(guān)的元數(shù)據(jù)的初始資源。 Rancher提供了許多可重用的、預(yù)先構(gòu)建好的程序棧的模板。拓展這些已有的模板或者創(chuàng)建并分享已完成的新模板,是參與Rancher用戶社區(qū)的好方式。同時,這也可以幫助你的組織更高效地利...
摘要:本次分享給大家?guī)砼c能夠融合使用的一些玩法。計算節(jié)點的進(jìn)程不能在運行在中。部署的過程需要拉取很多鏡像,需要耐心的等待。之前的計劃應(yīng)該是在版會添加的支持,差不多就是今年月份左右。 OpenStack是開源Iaas云的事實標(biāo)準(zhǔn),功能大而全,除了能管理虛機(jī)同時也能管理容器,OpenStack項目中的Magnum、Kuryr、Kolla、Murano、Nova-docker等都是與容器場景很不...
閱讀 3091·2023-04-25 15:44
閱讀 1876·2019-08-30 13:11
閱讀 2830·2019-08-30 11:11
閱讀 3004·2019-08-29 17:21
閱讀 1306·2019-08-29 15:38
閱讀 898·2019-08-29 12:49
閱讀 1793·2019-08-28 18:19
閱讀 3222·2019-08-26 14:01