摘要:首先我們簡要說明一下的相關啟動腳本及配置文件是核心的腳本用來啟動服務,文件則是該服務的配置文件。官方手冊鏈接在此結合,我們來看具體的是如何創建的吧。
Keepalived的作用是檢測服務器的狀態,如果有一臺web服務器死機,或工作出現故障,Keepalived 將檢測到,并將有故障的服務器從系統中剔除,當服務器工作正常后Keepalived自動將服務器加入到服務器群中,這些工作全部自動完成,不需要人工干涉,需要人工做的只是修復故障的服務器。
首先我們簡要說明一下Keepalived 的相關啟動腳本及配置文件:keepalived.sh是核心的腳本用來啟動服務,keepalived.conf文件則是該服務的配置文件。對于 Keepalived,我們需要關心的幾個重要參數如下:
虛擬IP地址及其掩碼
VRRP所偵聽檢測的端口(也就是HA針對具體哪一個端口做健康檢查)
VRRP基于哪個網卡接口發布。
我相信Rancher的官方手冊已經對Catalog的制作流程做了詳盡的說明,但是仍然有一些朋友看了Rancher手冊上Catalog那一節,暈暈乎乎,不懂如何制作應用的 Catalog。
(官方手冊鏈接在此):http://docs.rancher.com/ranch...
結合Keepalived,我們來看具體的Catalog是如何創建的吧。
首先,你需要在github或者你自己的gitlab上創建一個項目,這個項目只要能被git clone指令正常處理就 OK。 例如我們在github網站上創建的項目結構如下圖所示:
templates目錄里對應的是我們Rancher里Cattle環境的Catalog。kubernetes-templates和swarm-templates以及mesos-templates則對應不同環境的模板。進入這個templates,我們可以看見在Rancher Catalog頁面對應的那些軟件模板名。
我們進入Keepalived文件夾看個究竟,就會很容易的了解官方文檔對Catalog編制的流程指引。
這個catalogIcon-keepalived.png圖正是我們看見的它:
config.yml文件則是該catalog的基礎描述;0目錄是指第一個版本,那么下一次你發新版的Catalog,則需另建立一個1目錄。
每個版本文件夾例如0里面均包含了三個文件。
這正是我們創建一個Stack所需要的docker-compose.yml以及rancher-compose.yml,當然還有一個README.md 文件,用以對Stack進行詳細描述。
對于這個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你可需要花點功夫了,你需要處理正確的環境變量、參數的傳遞。否則我們在Rancher Catalog里看到的這些參數傳遞一旦出現問題,那么服務肯定跑不起來了,用于制作image的Dockerfile內容如下 :
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"]
這些自定義配置選項是如何實現的呢?
官方文檔告訴我們,是在 rancher-compose文件里來定義。還是以我們的Keepalived服務為例子:
.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小節里定義了很多UI對象的屬性(例如:變量名、數據類型、是否必選項、標簽、描述、默認值等等),而在answers.txt文件中則相應的給出了這些項目的默認值狀態。
以實際的Keepalived服務而言,我們可以看見docker-compose.yml文件里定義了四個環境變量 (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}"
以上四個環境變量是可以被容器的shell所直接調用的,例如keepalived.sh腳本中就調用了這四個變量,而這四個變量的具體賦值正是在Catalog制作階段完成的,其值由rancher-compose.yml文件里的變量進行輸出,也就是:
VIRTUAL_IP由virtual_ip傳值而來(具體值由用戶在 UI 里填寫) CHECK_PORT由check_port傳值而來(具體值由用戶在 UI 里填寫) INTERFACE由network_interface傳值而來(具體值由用戶在 UI 里填寫)NETMASK_BIT由netmask_bit傳值而來(具體值由用戶在 UI 里填寫)
特別需要注意的是 keepalived.sh 腳本在運行期是需要讀取配置文件 keepalived.conf 文件里的參數的,特別是上述這四個參數,那么由于 keepalived.conf 文件必須在 images 生成之前在 Dockerfile 里寫好,因此在 Dockerfile 里,它們一定是變量,而在容器運行起來之后,keepalive.sh 運行之前需要把變量賦值,這些值正是用戶填寫的。我們看一下 keepalived.sh 是如何實現的呢?
通過關鍵的四句 sed 指令配合正則表達式:
keepalived.sh腳本成功的將容器運行期的 keepalived.conf配置文件中的變量參數替換為了常量(這個常量由容器的環境變量傳遞進 Linux Shell 環境)。
這樣一個完整的Catalog創建流程包括如何處理環境變量與自定義參數的傳遞機制就解釋清晰了,按照這種思路,我們可以很方便地創建各種不同的應用模板,以實現 Rancher 的一鍵部署功能。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/28009.html
摘要:用戶訪問通過使用負載均衡服務的和端口。的負載均衡服務,需要做源會話保持配置。其次,自身沒有基于角色權限訪問控制,所有可以訪問負載均衡服務的用戶都能隨意的推送和拉取鏡像。 在正文之前,我們先來看一下,如果沒有容器,通常會如何部署 Docker Registry?關于這個問題,我簡單畫了一個草圖: showImg(https://segmentfault.com/img/bVGld7?w...
摘要:提供了許多可重用的預先構建好的程序棧的模板。從我們的目的來看,是一個能夠部署基于容器的程序棧并管理其生命周期的開源的軟件。注意和棧被展開以顯示每一個程序棧中的多個容器。文件是與模板相關的元數據的初始資源。 Rancher提供了許多可重用的、預先構建好的程序棧的模板。拓展這些已有的模板或者創建并分享已完成的新模板,是參與Rancher用戶社區的好方式。同時,這也可以幫助你的組織更高效地利...
摘要:提供了許多可重用的預先構建好的程序棧的模板。從我們的目的來看,是一個能夠部署基于容器的程序棧并管理其生命周期的開源的軟件。注意和棧被展開以顯示每一個程序棧中的多個容器。文件是與模板相關的元數據的初始資源。 Rancher提供了許多可重用的、預先構建好的程序棧的模板。拓展這些已有的模板或者創建并分享已完成的新模板,是參與Rancher用戶社區的好方式。同時,這也可以幫助你的組織更高效地利...
摘要:本次分享給大家帶來與能夠融合使用的一些玩法。計算節點的進程不能在運行在中。部署的過程需要拉取很多鏡像,需要耐心的等待。之前的計劃應該是在版會添加的支持,差不多就是今年月份左右。 OpenStack是開源Iaas云的事實標準,功能大而全,除了能管理虛機同時也能管理容器,OpenStack項目中的Magnum、Kuryr、Kolla、Murano、Nova-docker等都是與容器場景很不...
閱讀 3114·2023-04-25 15:44
閱讀 1887·2019-08-30 13:11
閱讀 2847·2019-08-30 11:11
閱讀 3065·2019-08-29 17:21
閱讀 1317·2019-08-29 15:38
閱讀 959·2019-08-29 12:49
閱讀 1807·2019-08-28 18:19
閱讀 3232·2019-08-26 14:01