構建微型數據中心——在laptop上運行Rancher

對於開發人員而言,他們的最終目標是擁有自己的數據中心(data center),使他們能夠在貼近真實情況的副本上測試他們的服務。然而,開發人員的開發過程中卻充滿了妥協。因爲,數據要麼是個簡化集,要麼被匿名,這加大了開發人員的開發難度。並且公司也還沒有準備好爲每一位開發人員搭建一個數據中心。


wKiom1jImCXRzkSFAADGflpb3KM457.png


今天,我將提供一個過程摘要來闡明如何使用Rancher和本地計算機減少開發人員在開發時的妥協。我們的目標是爲開發人員提供儘可能具有代表性的環境,以至於其可被用於真實的生產環境中,我們將使用Docker和Rancher來做到這一點。


如果您遇到過下列任何一項煩惱:


  • 共享的開發環境因多個問題而崩潰

  • 測試數據不一致

  • 網絡問題拖延開發進度


我希望能夠提供給您一些解決這些問題的想法。


Rancher and Docker can Help


一個所有服務都在裸機上運行的數據中心,無法將其複製到筆記本上。選擇使用虛機方式遷移則有助於這個過程,部分原因在於虛擬化可以讓用戶運行多個(agent)服務。這樣一來,硬件環境隨即成爲問題的關鍵所在。無論是磁盤的輸入輸出不足以支持服務還是沒有足夠的內存,都會使得搭建一個產品級的生產環境副本以失敗告終。然而Docker和Rancher卻可以幫您解決這些難題。Docker幫您快速啓動容器,Rancher幫您解決編排、網絡和負載均衡等一系列問題。


通過這種組合,在您的筆記本電腦上運行數據中心逐漸變爲可能。這個想法在最近的六個月來變得非常受歡迎,因爲許多大型機構已經開始爲開發人員提供一個完整的docker management layer以讓數據中心能夠在本地運行。許多公司正在進行這項投資,因爲他們能夠獲得各種各樣的好處,其中包括:


  • 開發人員在看到問題時更熟悉如何使用工具解決

  • 開發人員在交付代碼之前能夠找出問題

  • 開發人員能夠獨立工作,甚至離線工作

  • 新的開發者可以在幾分鐘內進行工作,而不需要花費幾天或是幾周來適應開發環境

  • DevOps工作的主機永遠不會宕機。


那麼,我們該如何做呢?出於寫這個博客的目的,我會假設正在Mac或Windows上使用Docker Toolbox。下載安裝和說明文件可以在這裏找到https://www.docker.com/products/docker-toolbox。


首先,讓我們來看看它長什麼樣子:


wKiom1jImHqThIUCAACe8aCeZjI603.png


我們將運行兩個虛擬機,一個虛擬機只運行Rancher Server,另一個虛擬機作爲主機運行並運行應用程序堆棧。用這樣的配置有幾個原因。首先,它對於真正的情形比較有代表性。其次,一旦出現問題,您的應用程序無法使Rancher因資源不足而發生飢餓現象。


所以,首先第一件事,讓我們創建一個具有512 GB和8 GB磁盤的VirtualBox虛擬機。

docker-machine create rancher --driver virtualbox --virtualbox-cpu-count "-1" --virtualbox-disk-size "8000" --virtualbox-memory "512" --virtualbox-boot2docker-url=https://github.com/boot2docker/boot2docker/releases/download/v1.10.3/boot2docker.iso

我們指定的URL指向的是Rancher能夠運行的Docker v1.10.3版本。


Docker Toolbox是在本地運行Docker的理想選擇,但運行它確實有一些挑戰性。原因之一是它使用了DHCP協議,如果你不想託管靜態服務的話,這將是一個不錯的選擇。但是,要繞開這個ssh協議連接到Rancher虛擬機的話,加上下面的這一行代碼到/var/lib/boot2docker/profile:

sudo cat /var/run/udhcpc.eth1.pid | xargs sudo killsudo ifconfig eth1 <ip address to assign> netmask <subnet mask> broadcast <broadcast address> up

此時,您將在docker-machine中出現一個關於IP地址不匹配的錯誤。您可以在主機操作系統上運行以下命令來解決這個問題:

docker-machine regenerate-certs rancher -f

這將給我們的Rancher服務器分配一個靜態IP地址。然後,您可以運行:

docker run -d --restart=always -p 8080:8080 rancher/server

幾分鐘後,將有一個Rancher服務器在您指定的IP地址的8080端口上運行。保持Rancher服務器的IP地址不變很重要,因爲這是我們部署的任何主機代理都需要訪問的地方。


登錄到Rancher服務器之後,轉到“添加主機(add host)”並生成自定義代理命令。複製這個命令並保留它,因爲我們將使用這個命令來添加主機。


現在讓我們創建第二個虛擬機。使用與上述相同的命令,您可以自行調整虛擬機的名稱、內存和磁盤空間,以滿足您的開發需求。


等待虛擬機再一次啓動後,您可以進入併爲其分配一個靜態IP地址。


現在,我們遇到了boot2docker虛擬機的另一個限制:其數據持久性的限制。


如果我們向主機添加一個Rancher代理,它會創建一個/var/lib/rancher文件夾並在其中存儲一些信息。如果重新啓動虛擬機,這些信息將被銷燬。因此,當代理再次出現時,主機會認爲它是一個新的服務器,之前的服務器信息在那時就全部丟失了。


幸運的是,面對這樣的窘境有一個解決方法。在運行Rancher代理腳本日誌到主機上之前,運行以下命令:

sudo mkdir /mnt/sda1/var/lib/rancher

這將創建一個文件夾,這個文件夾在重新啓動時能被保留下來。現在,在每次啓動時,我需要將此文件夾映射到/var/lib/rancher。因此,我們需要再次編輯/var/lib/boot2docker/profile並添加以下內容:

sudo mkdir /var/lib/ranchersudo mount -r /mnt/sda1/var/lib/rancher /var/lib/rancher

這將確保我們的代理狀態在重新啓動之間能被保留。


通過ssh協議連接到機器,並運行您從Rancher服務器獲得的自定義代理字符串。


現在您已經有了一個Rancher服務器,它的主機完全在本地運行,它的應用程序棧準備完畢等待您的部署。


在此,是否將它提高到一個新的水平取決於您自己。但現在,您有了一個可運轉的Rancher / Docker環境。您能夠從外部存儲庫拉取數據,編寫腳本在本地構建應用程序或者運行目錄中的條目。


雖然這種開發方式並不完美,但對於大多數情況來說是“足夠好”的了,並且這樣的開發方式值得分析參考,並以此作爲繼續改進開發的方法。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章