天天看點

使用Rancher-Gen動态更新配置檔案

Docker和Rancher讓大家能更輕易地部署和管理基于微服務的應用程式。然而,如果有些服務是依賴于其他動态服務的,那該如何管理它們的配置?你是否時常覺得,要是有方法能自動檢測後端服務的變化,并實作配置檔案的動态更新就好了?本文給你答案。

前言

Docker和Rancher讓大家能更輕易地部署和管理基于微服務的應用程式。然而,有一個關鍵的挑戰是,如果有些服務是依賴于其他動态服務的,那該如何管理它們的配置?

試想以下情形:您有多個運作Web應用程式的後端容器,和一些将所有的請求都代理到這些後端容器的nginx容器。現在,你必須要部署一個新版本的Web應用程式,這意味着你需要建構和部署新版本的後端容器。在這些部署工作完成之後,nginx的配置需要更改為指向新的後端容器。那麼,你該怎樣處理nginx呢?改變其配置,建構一個新的容器并部署它?此刻的你是不是會覺得,要是有方法能自動檢測後端服務的變化,并實作nginx的動态更新就好了?

這就是Rancher-Gen要閃亮登場的時刻!

Rancher-Gen是一個Python的工具,它能監聽的Rancher服務的變化,并呈現一個使用者指定的Jinja2模闆。這允許使用者為現有的、并基于這些變化的服務生成配置檔案。另外,Rancher-Gen提供了一種機制,在模闆呈現之後會運作通知指令。下面的教程會介紹如何自動生成運作ghost部落格平台後端服務的nginx配置檔案 。

教程

下面介紹的所有配置檔案都可以在Rancher-Gen庫中的示範目錄下找到。

第1步 – 部署Ghost服務

為簡單起見,我們打算使用Docker hub中的官方ghost鏡像。是以,建立一個docker-compose.yml 檔案,并添加以下的ghost服務:

<a href="https://s5.51cto.com/wyfs02/M00/8C/CB/wKiom1h4PdiwaAsqAAAoGh7hmF4534.jpg" target="_blank"></a>

現在,用Rancher Compose部署ghost服務:

<a href="https://s1.51cto.com/wyfs02/M00/8C/C7/wKioL1h4PeiB4VNTAAAjyfXEyRU950.jpg" target="_blank"></a>

第2步 – 用Rancher-Gen建立nginx鏡像

下面是用以搭建nginx鏡像的Dockerfile:

<a href="https://s5.51cto.com/wyfs02/M01/8C/CB/wKiom1h4PhigM9IOAAIHO-uWiPM554.jpg" target="_blank"></a>

讓我們來一步一步拆解Dockerfile。步驟1和2不言自明:隻需安裝nginx、Python和Rancher-Gen。

第3步要設定鏡像啟動時運作的服務。第一個服務是nginx,它用/etc/servce/nginx檔案運作。該檔案的内容是:

<a href="https://s3.51cto.com/wyfs02/M02/8C/CB/wKiom1h4PjzCvyk1AACm1XAUnP4463.jpg" target="_blank"></a>

注意一下在通知步驟之後,我們是怎樣通過名為 /nginxconf/default.j2 和/etc/nginx/sites-available/default 的這兩個路徑的。前者是Jinjia2模闆,後者是渲染模闆的輸出位置。以下是在default.j2檔案的内容:

<a href="https://s4.51cto.com/wyfs02/M00/8C/C7/wKioL1h4Pm3i6jCpAAEAIt_3Y2M955.jpg" target="_blank"></a>

Dockerfile的第4步和第5步在鏡像中設定了運作指令“/sbin/my_init”并暴露端口80和443。

現在是時候建構鏡像了:

<a href="https://s2.51cto.com/wyfs02/M01/8C/CB/wKiom1h4PomxPA5vAAApjXzgc-g116.jpg" target="_blank"></a>

第3步 – 建立并部署nginx服務

現在我們已有了nginx鏡像,就可以開始向我們在第1步中建立的docker-compose.yml檔案中添加nginx服務了。

<a href="https://s3.51cto.com/wyfs02/M02/8C/CB/wKiom1h4PqTjzZNwAAEARssfiVk749.jpg" target="_blank"></a>

上述可變的RANCHER_GEN_OPTIONS環境是用于向Rancher-Gen傳遞附加指令行選項的 。你可以在Rancher-Gen文檔中檢視這些選項的說明。

現在運作rancher-compose來啟動nginx服務:

<a href="https://s3.51cto.com/wyfs02/M00/8C/CB/wKiom1h4Pr6A7-R4AAAlOK5e4bU174.jpg" target="_blank"></a>

此時,ghost和nginx服務都啟動并運作了:

<a href="https://s5.51cto.com/wyfs02/M00/8C/C7/wKioL1h4Psvw60nCAAAIyZgNAnM213.jpg" target="_blank"></a>

而且,将浏覽器指向運作中的nginx容器中主機的IP位址,你就可以通路ghost了:

<a href="https://s2.51cto.com/wyfs02/M01/8C/C7/wKioL1h4PtiB4DWhAACL85rex-Q763.jpg" target="_blank"></a>

如果你使用shell來檢查nginx容器,并打開渲染的檔案 /etc/nginx/sites-enabled/default,你将會看到以下的輸出:

<a href="https://s5.51cto.com/wyfs02/M02/8C/C7/wKioL1h4PvvDEUczAAC8xGlsWtY123.jpg" target="_blank"></a>

正如預期的那樣,這是在運作rancher-gen指令時的基于指定模闆的渲染輸出。此時,如果你要更新ghost服務,并再次檢視渲染檔案,你會發現上遊部分下的IP位址已經改變了。

結論

總結來說,Rancher-Gen是一個自動化工具,可用于生成檔案,并運作通知指令。借助Jinja2的模闆表現力,及其整潔的指令行界面,Rancher-Gen可用于生成大多數配置檔案,并自動解決那些對大多數系統管理者和軟體工程師而言繁瑣和重複的工作。

本文轉自 RancherLabs 51CTO部落格,原文連結:http://blog.51cto.com/12462495/1891685

繼續閱讀