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