《三個生產(chǎn)環(huán)境中使用Docker的案例》要點:
本文介紹了三個生產(chǎn)環(huán)境中使用Docker的案例,希望對您有用。如果有疑問,可以聯(lián)系我們。
在2017年1月17日的Helsinki的首屆Docker線下見面會中,Solita、Zalando和Pipedrive公司分別介紹了Docker在生產(chǎn)環(huán)境中的實踐,包括案例及相應(yīng)的輸入輸出.同時,也介紹了Docker在生產(chǎn)環(huán)境中的優(yōu)點、缺點和痛點.
Solita在Docker上運行了多種app,包括火車司機導(dǎo)航系統(tǒng)、通知系統(tǒng)和交通控制app.Heikki特別提到在鐵路管理系統(tǒng)中減少系統(tǒng)停機維護時間的重要性.他的原話是:“anything over a 3-5 min downtime causes delays for trains, but nobody dies.”
他們在使用Docker過程中遇到的大部分問題大致包含以下幾個方面:構(gòu)建鏡像、創(chuàng)建私有倉庫、移除或者啟動容器以及app中存在的bug.總的來說,他們使用Docker過程中一直是穩(wěn)定的,并且是零停機維護.
他們之前遇到的問題在升級Docker版本之后或減少或解決.他們正期待Docker1.12穩(wěn)定版本在RedHat官方渠道上的發(fā)布.
在Zalando Helsinki的辦公地,這里有超過100多名工作人員和多個團隊,他們負責(zé)不同的生產(chǎn)系統(tǒng)、相關(guān)探索研究、持續(xù)交付等工作,采用敏捷開發(fā)的方式開發(fā)他們的平臺.
每個自主團隊均有獨立的AWS賬號,而且無視了不可以在生產(chǎn)環(huán)境運行Docker的建議.據(jù)Rami介紹,在Zalando內(nèi),任何運行在AWS上的程序都采用了Docker運行,Docker被認為是唯一允許用于部署生產(chǎn)環(huán)境的工具.他們同樣有獨立的Docker資源庫(Pierone),他們自主的Docker基礎(chǔ)鏡像和每個實例運行一個全棧容器.
有很多領(lǐng)域還存在改進的空間,包括如下內(nèi)容:部署太慢,他們丟失了Docker中層通信的優(yōu)勢,每個實例運行一個容器的代價很高,導(dǎo)致存在數(shù)千個實例;另一個問題在于Docker經(jīng)常拖垮Pierone.
他們目前正調(diào)研使用Kubernetes,它看起來可以降低成本,對AWS賬號和基礎(chǔ)設(shè)施要求更低,更高效的利用容器間通信和快速簡單的部署.他們在技術(shù)周進行了技術(shù)演練,并計劃在第二季度用于生產(chǎn)環(huán)境灰度發(fā)布.
最后,Renno Reiurm討論了Pipedrive公司在使用Docker中的收獲與痛點.這是家致力于幫助小微企業(yè)控制復(fù)雜銷售流程的公司,成立于2010年,目前擁有30000家付費客戶,并有200多名雇員和Tallinn、Tartu和New York有三處辦公地.
Pipedrive采用Docker并感受到了隨著業(yè)務(wù)增長,Chef帶來的各種問題.由于很少去編寫配置單,使得容易遺忘Chef的工作原理,而學(xué)習(xí)一門新的語言和工具又存在一個準入門檻.
他們最初的Docker平臺是在Vagrant虛機環(huán)境中,后來他們遷移到定制化docker宿主機,最近遷移到了Docker4Mac.
Docker構(gòu)建的第一個版本使用的是Codeship Docker CI beta版本,并且首次使用了Tutum(Docker Cloud)作為編排服務(wù).
這次測試使用有很多缺點,包括Codeship的CI處理速度很慢,Docker構(gòu)建本身就需要15分鐘.此外,Docker Tutum集群的部署需要10分鐘.有時候,他們慢得都不能確認它是否還在工作.他們還遇到了穩(wěn)定性的問題,包括‘‘?dāng)?shù)據(jù)丟失’’和‘‘服務(wù)宕機’’.
由于需要提高CI過程的速度,并且提高Docker基礎(chǔ)設(shè)施的可靠性,Docker基礎(chǔ)設(shè)施2.0誕生了.
在運行Docker時,管道驅(qū)動的缺點包括:構(gòu)建、測試和部署容器所需的時間;消費者只需要連接到健康服務(wù);日常維護Jenkins工作,以前容器處理10,000個連接和連續(xù)的高負載.
使用Docker的好處包括:應(yīng)用程序的演進–他們變得足夠通用,可以再多個地區(qū)和環(huán)境中運行;從想法到上線可以從兩周減少到一天;服務(wù)器與服務(wù)之間的管理是異步的.
Pipedirve容器采用持續(xù)增長:從去年10月以來,有70家公司的Docker服務(wù),90個Docker容器鏡像,500個容器運行,3200個容器部署.Pipedrive上每天有30個容器部署,1個新增容器產(chǎn)生.
最后,Jari Kolehmainen的想法引發(fā)了關(guān)于Docker的演講:優(yōu)點、缺點和痛點,這讓人想到了如何在生產(chǎn)環(huán)節(jié)中使用Docker時避免“缺點和痛點”.其中一種方法是使用Kontena容器和微服務(wù)平臺——就像它在任何云上工作一樣,易于設(shè)置和使用.
Jari提到,在生產(chǎn)環(huán)境中使用Docker的第一步是“像一個過山車,有起有伏”,但它的好處超過了這個,而“最終你將會取得巨大的成功”.
對于那些還沒有在生產(chǎn)環(huán)境中運行Docker的人來說,也許您正在測試環(huán)境中運行它,那么第一步就是選擇正確的路徑,這對于向生產(chǎn)轉(zhuǎn)移是至關(guān)重要的.通常情況下,這條路是預(yù)先確定的,無論是項目限制(你必須使用數(shù)據(jù)中心或一些云服務(wù)等),但如果你可以自由選擇,那么你就有三個主要的選擇:DIY,租一個真正的云服務(wù),或者你可以使用一個預(yù)制的平臺,比如Kontena.
在DIY模式中,你有一個引擎,比如Docker引擎,你試著調(diào)整并與你的團隊或你自己建立真正的“汽車”.
一般來說,這聽起來像是一件有趣的事情,你可以控制所有的事情,而且它是有效的.花了一些時間在實際的引擎上調(diào)優(yōu)后,然后你就可以把所有的東西都放在生產(chǎn)環(huán)境上,有時候你可能會得到一輛有引擎的汽車,有很多管道膠帶、空調(diào)控制系統(tǒng),但是你永遠不知道它什么時候會壞.
Jari的建議是“不要做”.在生產(chǎn)環(huán)境中,如果你是運行Docker的新手,DIY選項可能是一個有用的學(xué)習(xí)工具,但最好不要自己動手,因為你很可能只希望通過DIY過程完成自己的工作.
云租賃服務(wù)包括AWS、Azure、Kubernetes等提供商提供的一切服務(wù),所有這些都是不錯的選擇.就像坐出租車一樣,你只需要支付一筆錢,你就可以讓整個系統(tǒng)準備好,而不需要維護任何東西.這可能比其他的方案更適合于個人使用.
但是,如果您的項目需要在一個數(shù)據(jù)中心或者某個沒有這些選項的地方運行,那么第三個選項很可能是正確的.
推薦的平臺包括:Docker集群(新)、Kubernetes、Kontena和DCOS.當(dāng)你不想自己動手的時候,所有這些都是不錯的選擇.你可以選擇其中一種或另一種,但不推薦DIY.
像Kontena這樣的平臺,就像“預(yù)先準備完畢,做好開車的準備”,這讓你可以把注意力集中在你的應(yīng)用上,而不是在汽車的外殼上.其中包括你需要完成日常任務(wù)的大部分功能以及不同的焦點,比如Kontena專注于易用性和易于維護,其他服務(wù)可能會關(guān)注可伸縮性.
如果你不想改變默認的設(shè)置,Jari強烈建議你使用一個專為容器做的發(fā)行版.一個不錯的選擇是Core OS,它叫做容器Linux;Red Hat有自己的原子發(fā)行平臺;SUSE也有自己定制的容器配置.通常,這些類型的發(fā)行版會有更好的默認值,這些默認值實際上可能在生產(chǎn)環(huán)境中起作用.
您必須檢查的一個關(guān)鍵問題是圖形驅(qū)動程序,如果您使用的是最近的內(nèi)核版本,您可以使用Overlay2.這是“今天的熱門話題”,但隨著下一個內(nèi)核版本的發(fā)布,這種情況可能會有所改變.它是最快的選擇,你不應(yīng)該使用它來解決很多問題,大多數(shù)發(fā)行版都是Overlay1.
默認的Overlay有一些缺點,但是您仍然可以在生產(chǎn)環(huán)境中使用它.如果你使用的是Ubuntu那么你可能會切換到Aufs,當(dāng)你為核安裝了額外的軟件包后,可以切換到它,它也可以和Overlay2一樣工作.
“最痛點”的部分是設(shè)備映射,Jari認為這仍然是來源于Red Hat且通常會引起痛點的地方.如果您知道如何配置設(shè)備映射的內(nèi)部關(guān)系,那么可以使用設(shè)備映射器.
Docker引擎有一個很酷的功能叫做“插件”.插件可以用來提供Overlay網(wǎng)絡(luò),并為引擎提供容量存儲,但是有一個缺點:你不能在一個容器中運行這些插件,盡管他們說你可以,實際上你不能.所以盡量避免它.
從Docker版本1.13開始,插件架構(gòu) v0.2 被引入進來,它應(yīng)該可以解決大部分的問題.
在構(gòu)建階段,您不應(yīng)該在自己的機器上構(gòu)建或運行這些映像.相反,應(yīng)該有一個CI系統(tǒng)來構(gòu)建、測試并最終將它們部署到正確的環(huán)境中.
一些有用的建議:您應(yīng)該將構(gòu)建到測試,再到部署的所有內(nèi)容(這不是容器特定的)放入腳本中.此外,擁有的配置和腳本都應(yīng)該由版本控制管理.如果您沒有這樣做,那么在生產(chǎn)環(huán)境中運行時,就會遇到麻煩.最后,不要將關(guān)鍵信息放入配置文件中;這不是個好實踐.
在這個管道示例中,我們構(gòu)建自己的云服務(wù)時,senor開發(fā)人員正在嘗試以類似于Kontena的方式使用管道.
開發(fā)人員正在打包下一件重要的事情,當(dāng)他將變更推送到GitHub時,drone就會集成在那里,獲取we hook,觸發(fā)構(gòu)建,在容器內(nèi)的管道內(nèi)運行測試.如果一切正常,它將把實際的Docker鏡像推送到內(nèi)部注冊中心.最后,它將觸發(fā)對Kontena的部署,取決于它是否是一個發(fā)布版本等等.通常情況下,它可能只需要幾分鐘的時間,就可以從Git-push部署到生產(chǎn)環(huán)境中.Kontena平臺在此過程中充當(dāng)中介,它將負責(zé)所有的滾動部署,并處理負載均衡器的配置.因此,您不需要手動地將每個部件組裝起來.
在生產(chǎn)中使用容器的前幾次,您可能會很高興有一些在生產(chǎn)中運行的東西,您可能不會真正考慮安全性以及應(yīng)該如何處理它.但是,應(yīng)該從測試和預(yù)發(fā)環(huán)境中考慮這一點.
審計跟蹤
安全補丁
值得推薦作為容器本地操作系統(tǒng)使用,例如,CoreOS將自動更新主機,并在更新完成時重新啟動.您還可以使用配置管理工具,如Chef、Ansible或Puppet來處理安全補丁.您應(yīng)該為鏡像掃描服務(wù)投入一些時間,幫助識別您的Docker映像中的安全問題.例如,Docker Hub和CoreOS的Quay.io 均提供了這種功能.
一些平臺提供網(wǎng)絡(luò)安全功能(如Kontena做的).它們可能會加密主機之間或數(shù)據(jù)中心之間的所有通信.一些平臺包括的額外安全措施包括:創(chuàng)建網(wǎng)絡(luò)段、定義策略,以及作為最后的手段:配置防火墻.
為混亂做準備
混亂是生活的一個真實寫照,包括宿主機故障,引擎故障,容器失敗,應(yīng)用程序崩潰.為“混亂可控”做好準備,意味著當(dāng)事情發(fā)生的時候,這將不是什么大不了的事情.
在計劃生產(chǎn)環(huán)境時,強烈建議您這樣做,這樣您就可以在任何時候“殺死”任何主機、任何節(jié)點,這樣至少一個主機就可以被完全的暴力所強制,而其他服務(wù)一切都還正常.另一個建議是,如果您使用前面提到的任何一個平臺,請信任調(diào)度程序,使用集群數(shù)據(jù)庫,并盡可能將狀態(tài)開放,以盡可能流暢的運行Docker.
Kontena公司是Kontena的創(chuàng)始人,它是一個開源的、開發(fā)人員友好的容器和微服務(wù)平臺.Kontena 通過簡化在任何基礎(chǔ)設(shè)施上的Docker化應(yīng)用程序,包括在私有云、公有云或混合云,以達到最大化開發(fā)人員幸福的目的.它為任何規(guī)模的公司提供了完整的解決方案.Kontena于2015年3月成立,被認為是今年第8屆年度“黑天鵝”最佳新開源項目之一.更多信息,請訪問:www.kontena.io.
文章來自微信公眾號:Docker
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/2727.html