天天看點

Docker與Traefik助微服務騰飛

本文講的是<b>Docker與Traefik助微服務騰飛</b>【編者的話】Govind Fichtner是一位從業15年的德國IT老兵。先後擔任過開發工程師、系統管理者、咨詢師、架構師、靈活訓練師、項目經理、部門經理甚至CTO。白天他是一位勤奮的DevOps,晚上則變身為狂熱的ARM裝置愛好者。他現在為Hypriot成員,該組織成員以“Docker海盜”自稱,釋出了多款ARM架構中的Docker應用。他們的身上完美的展現了Geek精神。

你發現了這個動态特性的重要性了嗎?

Traefik真正與衆不同的特點是,它能通過監聽Docker事件來增加或移除容器後端服務。是以當一個Docker容器啟動或停止時,Traefik都可以知道這個情況并能将将容器添加到它的活動後端服務清單中。

Docker與Traefik助微服務騰飛

是以讓我向你展示一個小例子來說明開始使用Traefik是多麼簡單的事情...

你能看到下面的架構圖中我們有一個簡單的HTTP服務來響應請求。

我們有多個後端服務,因為要做高可用和負載均衡,它們運作在多個實體節點上。Traefik作為前端代理将請求均勻分發給可用的後端服務上。

Traefik同時作為一個後端服務運作在Docker Swarm叢集中的容器内。在這個例子中每個後端服務将會響應所在的獨立的容器ID,以此來區分到底是哪個服務做出的響應。

Docker與Traefik助微服務騰飛

在開始之前我們需要運作一套Docker Swarm叢集。

因為Cluster Lab已經預裝在樹莓派作業系統HypriotOS的“Barbossa”發行版中,我将向你展示怎樣使用它去設定Swarm叢集。

為了能跟上我的操作,你至少需要三台樹莓派主機。我将會使用具有五個節點的Pico-Cluster。

Docker與Traefik助微服務騰飛

第一步是将HypriotOS鏡像燒錄到SD中。

将Hypriot倉庫克隆到你作為燒錄機的作業系統中合适的目錄裡。

使用flash指令,我們可以為我們的主節點準備好SD卡。

為從節點重複此過程。

當從節點還在燒錄時,你就可以啟動主節點了。

SSH到主節點并切換到root使用者:

為了能使Cluster Lab與Traefik進行工作,我們需要更新它到最新版本:

然後啟動Hypriot Cluster Lab,并使用verbose參數來啟用日志輸出功能:

當主節點準備好後,是時候啟動其他的從節點了,步驟也是先更新然後使用相同的方式啟動Cluster Lab。現在你可以嘗試做做看,當一切搞定後我們再繼續。

好了,我們可以執行下面的指令檢查我們是否已經有了五個健康的Swarm Cluster 節點:

瞧我們的叢集中真的有了五個節點了。恭喜恭喜!

當你完成了以上的步驟,那麼剩下的就是小菜一碟了!

我們的微服務示例由兩部分組成。Traefik前端和WhoAmI後端應用。對于這兩部分我已經為你準備好了Docker鏡像,你可以從Docker Hub中拉取到本地。

因為這兩個Dockerfile也是Go語言為基礎的鏡像的好示例,我将會在這裡解釋一下其中的内容。

“rpi-traefik”的Dockerfile:

它表示我們剛剛在Alpine linux鏡像之中增加了Traefik的可執行檔案。這個鏡像非常精巧僅僅隻有41MB。如果你靜态編譯Traefik可執行檔案到一個空鏡像中,它的體積将會更小。

你将會在下面的WhoAmI鏡像的Dockerfile中看到這是怎麼做的:

“rpi-whoami”的Dockerfile:

僅僅隻有3MB的鏡像,這真是非常的小。

好了,現在是時候将元件放入一個Docker Compose應用中了。

克隆下面的倉庫到你的叢集主節點中:

當克隆結束後切換到‘traefik’目錄,并使用Docker Compose在我們的微型Docker Swarm叢集中啟動我們的應用:

這些指令将會使Docker Compose啟動兩個容器。一個主節點中Traefik容器,另一個是在四個從節點中啟動一個WhoAmI容器。

讓我們檢視一下是否真是如此:

看起來不錯。那麼讓我們發送一些HTTP請求到前端來測試一下我們的應用:

正如你所見,所有的響應全部來自于同一個後端容器,并且這正是我所期望的。

接下來我們将會在Docker Compose scale指令的幫助下增加後端容器的數量。

我們觀察到Docker Compose通知Docker Swarm增加了更多的容器。

讓我們再次檢查一下是否現在已經有五個後端容器運作了:

非常好。很顯然Traefik剛才識别出了我們已經啟動了更多的容器并且使他們自動與前端相連。

我們能通過Traefik容器的日志觀察到具體的執行過程:

通過日志我們能清楚的看到Traefik是怎麼擷取Docker事件并作出反應的。

這難道不很帥嗎?

好了。這就是我們的快速設定Docker和Traefik的簡單微服務例子。

剩下唯一要做的就是再次清理容器。

你們注意到了“-v”參數了嗎?這應該對清除所有的容器,包括overlay網絡都非常的重要。沒有“-v”參數,我們在下次使用Docker Compose啟動應用的時候會産生一個錯誤。

在你關閉樹莓派之前停止所有的節點中的Cluster Lab也是一個必要的步驟。

是以在所有節點上執行一下<code>$ cluster-lab stop</code>指令。

在這麼短小的一篇部落格中使用了這麼多有趣的技術是非常棒的一件事情。并且使它們運作起來一點都不難,是不是?

===========================================

譯者介紹

高洪濤,當當網架構師,開源資料庫分庫分表中間件Sharding-JDBC作者。目前從事Docker相關研究工作。

原文釋出時間為:2016-06-17

本文作者:高洪濤

本文來自雲栖社群合作夥伴Dockerone.io,了解相關資訊可以關注Dockerone.io。

原文标題:Docker與Traefik助微服務騰飛