成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

如何使用Docker、Docker-Compose和Rancher搭建部署Pipeline(四)

13651657101 / 1242人閱讀

摘要:注冊(cè)器監(jiān)視每個(gè)守護(hù)進(jìn)程的事件,并在生命周期事件期間自動(dòng)更新。條件可以包括親和規(guī)則否定至軟強(qiáng)制意味著盡可能地避免。當(dāng)使用通用標(biāo)記如或部署服務(wù)時(shí),可能會(huì)出現(xiàn)意外的后果。月日,北京海航萬豪酒店,容器技術(shù)大會(huì)即將舉行。

在這篇文章中,我們將討論如何用Rancher實(shí)現(xiàn)consul的服務(wù)發(fā)現(xiàn)。

如果你還沒有準(zhǔn)備好,推薦你閱讀本系列中先前的文章:
第一篇:CI /CD和Docker入門
第二篇:使部署邏輯向使用Docker Compose更進(jìn)一步
第三篇:借力Rancher完成容器編排

在這構(gòu)建部署流水線系列的最后一篇文章中,我們將探討在轉(zhuǎn)換到Rancher進(jìn)行集群調(diào)度時(shí)面臨的一些挑戰(zhàn)。在之前的文章中,我們通過使用Rancher執(zhí)行調(diào)度,讓運(yùn)維人員無須再負(fù)責(zé)選擇每一次容器運(yùn)行的位置。要使用這個(gè)新方案,我們必須讓環(huán)境的其他部分知道調(diào)度程序放置這些服務(wù)的位置,以及如何訪問它們。我們還將討論如何使用標(biāo)簽來操作調(diào)度程序,以調(diào)整容器放置位置,并避免端口綁定沖突。最后,我們將通過利用Rancher的回滾功能優(yōu)化我們的升級(jí)過程。

在引入Rancher之前,我們的環(huán)境是一個(gè)相當(dāng)靜態(tài)的環(huán)境。我們總是將容器部署到相同的主機(jī)上,而部署到不同的主機(jī)則意味著我們需要更新一些配置文件以反映新位置。例如,如果我們要添加"java-service-1"應(yīng)用程序的一個(gè)附加實(shí)例,我們還需要更新load balancer以指向附加實(shí)例的IP。使用調(diào)度器讓我們無法預(yù)測(cè)容器部署的位置,并且我們需要?jiǎng)討B(tài)配置環(huán)境,使其能自動(dòng)適應(yīng)變化。為此,我們需要使用服務(wù)注冊(cè)和服務(wù)發(fā)現(xiàn)。

服務(wù)注冊(cè)表為我們提供了應(yīng)用程序在環(huán)境中的位置的單一來源。和硬編碼服務(wù)位置不同,我們的應(yīng)用程序可以通過API查詢服務(wù)注冊(cè)表,并在我們的環(huán)境發(fā)生變化時(shí)自動(dòng)重新配置。Rancher使用Rancher的DNS和元數(shù)據(jù)服務(wù)提供了開箱即用的服務(wù)發(fā)現(xiàn)。然而,混合使用Docker和非Docker應(yīng)用程序時(shí),我們不能完全依賴Rancher來處理服務(wù)發(fā)現(xiàn)。我們需要一個(gè)獨(dú)立的工具來跟蹤我們所有服務(wù)的位置,consul就符合這個(gè)要求。

我們不會(huì)詳細(xì)說明如何在您的環(huán)境中設(shè)置Consul,但是,我們將簡要描述我們?cè)贏BC公司使用Consul的方式。在每個(gè)環(huán)境中,我們都有一個(gè)部署為容器的Consul集群。我們?cè)诃h(huán)境中的每個(gè)主機(jī)上都部署一個(gè)Consul代理,如果主機(jī)正在運(yùn)行Docker,我們還會(huì)部署一個(gè)注冊(cè)器容器。注冊(cè)器監(jiān)視每個(gè)守護(hù)進(jìn)程的Docker事件API,并在生命周期事件期間自動(dòng)更新Consul。例如,在新容器被部署后,注冊(cè)器會(huì)自動(dòng)在Consul中注冊(cè)該服務(wù)。當(dāng)容器被刪除時(shí),注冊(cè)器撤銷它的注冊(cè)。

Consul服務(wù)列表

在Consul中注冊(cè)所有服務(wù)后,我們可以在負(fù)載均衡器中運(yùn)行consul-template,根據(jù)Consul中存儲(chǔ)的服務(wù)數(shù)據(jù)動(dòng)態(tài)填充上游列表。對(duì)于我們的NGINX負(fù)載均衡器,我們可以創(chuàng)建一個(gè)模板來填充’java-service-1’應(yīng)用程序的后端:

# upstreams.conf
upstream java-service-1 { 
{{range _, $element := service "java-service-1"}}    
       server {{.Address}}:{{.Port}}; 
{{else}}     
       server 127.0.0.1:65535; # force a 502{{end}} }

此模板在Consul中查找注冊(cè)為“java-service-1”的服務(wù)的列表。然后它將循環(huán)該列表,添加具有該特定應(yīng)用程序?qū)嵗腎P地址和端口的服務(wù)線。如果在Consul中沒有注冊(cè)任何“java-service-1”應(yīng)用程序,我們默認(rèn)拋出502以避免NGINX中的錯(cuò)誤。

我們可以在守護(hù)進(jìn)程模式下運(yùn)行consul-template,使其監(jiān)控Consul的更改,在發(fā)生更改時(shí)重新渲染模板,然后重新加載NGINX以應(yīng)用新配置。

TEMPLATE_FILE=/etc/nginx/upstreams.conf.tmpl
RELOAD_CMD=/usr/sbin/nginx -s reload 
consul-template -consul consul.stage.abc.net:8500      
       -template "${TEMPLATE_FILE}:${TEMPLATE_FILE//.tmpl/}:${RELOAD_CMD}"

通過使用我們的負(fù)載均衡器設(shè)置來動(dòng)態(tài)地改變其余的環(huán)境變化,我們可以完全依賴Rancher調(diào)度器來做出我們的服務(wù)應(yīng)該在哪里運(yùn)行的復(fù)雜的決定。但是,我們的“java-service-1”應(yīng)用程序在Docker主機(jī)上綁定TCP端口8080,如果在同一主機(jī)上調(diào)度了多個(gè)應(yīng)用程序容器,則會(huì)導(dǎo)致端口綁定沖突并最終失敗。為了避免這種情況,我們可以通過調(diào)度規(guī)則來操作調(diào)度器。

通過在docker-compose.yml文件中使用容器標(biāo)簽來提出條件,是Rancher給我們的一種操作調(diào)度器的方法。條件可以包括親和規(guī)則、否定、至“軟”強(qiáng)制(意味著盡可能地避免)。在我們使用"java-service-1"應(yīng)用程序的情況下,我們知道在給定時(shí)間只有一個(gè)容器可以在主機(jī)上運(yùn)行,因此我們可以基于容器名稱設(shè)置反關(guān)聯(lián)性規(guī)則。這將使調(diào)度程序查找一個(gè)未運(yùn)行名稱為“java-service-1”的容器的Docker主機(jī)。我們的docker-compose.yml文件看起來像下面這樣:

java-service-1:   
   image: registry.abc.net/java-service-1:${VERSION}   
   container_name: java-service-1   
   ports:    
         - 8080:8080   
    labels:     
         io.rancher.scheduler.affinity:container_label_ne: io.rancher.stack_service.name=java-service-1

注意“標(biāo)簽”鍵的引入。所有調(diào)度規(guī)則都作為標(biāo)簽被添加。標(biāo)簽可以被添加到Docker主機(jī)和容器。當(dāng)我們?cè)赗ancher注冊(cè)我們的主機(jī)時(shí),我們可以將它們與標(biāo)簽關(guān)聯(lián),以后就可以切斷調(diào)度部署。例如,如果我們有一組使用SSD驅(qū)動(dòng)器進(jìn)行存儲(chǔ)優(yōu)化的Docker主機(jī),我們可以添加主機(jī)標(biāo)簽storage=ssd。

Rancher主機(jī)標(biāo)簽

需要利用優(yōu)化存儲(chǔ)主機(jī)的容器可以添加標(biāo)簽來強(qiáng)制調(diào)度程序僅在匹配的主機(jī)上部署它們。我們將更新我們的“java-service-1”應(yīng)用程序,以便只部署在存儲(chǔ)優(yōu)化的主機(jī)上:

java-service-1:

image: registry.abc.net/java-service-1:${VERSION}   
container_name: java-service-1   
ports:    
     - 8080:8080   
labels:     
     io.rancher.scheduler.affinity:container_label_ne: io.rancher.stack_service.name=java-service-1     
     io.rancher.scheduler.affinity:host_label: storage=ssd

通過使用標(biāo)簽,我們可以根據(jù)所需的容量,而不是個(gè)別主機(jī)運(yùn)行特定的容器集,來精細(xì)地調(diào)整我們的應(yīng)用程序部署。切換到Rancher進(jìn)行集群調(diào)度,即使您仍然有必須在特定主機(jī)上運(yùn)行的應(yīng)用程序。

最后,我們可以利用Rancher的回滾功能優(yōu)化我們的服務(wù)升級(jí)。在我們的部署工作流中,通過調(diào)用rancher-compose來指示Rancher在該服務(wù)堆棧上執(zhí)行升級(jí)以部署服務(wù)。升級(jí)過程大致如下:

通過拉取一個(gè)新的鏡像來啟動(dòng)升級(jí)

逐一地,現(xiàn)有容器被停止并且新容器被啟動(dòng)

部署程序登錄到UI并選擇“完成升級(jí)”時(shí),升級(jí)完成,

已停止的舊服務(wù)容器被刪除

Rancher升級(jí)

當(dāng)給定服務(wù)的部署非常少時(shí),此工作流就好了。但是,當(dāng)某個(gè)服務(wù)處于“升級(jí)”狀態(tài)(在部署者選擇“完成升級(jí)”之前)時(shí),在執(zhí)行“完成升級(jí)”或是“回滾”操作之前,你都不能對(duì)它進(jìn)行任何新的升級(jí)”。rancher-compose實(shí)用程序讓我們可以選擇以編程方式選擇要執(zhí)行的操作,以部署程序者的身份執(zhí)行操作。例如,如果您對(duì)服務(wù)進(jìn)行自動(dòng)測(cè)試,則可以在rancher-compose升級(jí)返回后調(diào)用此類測(cè)試。根據(jù)這些測(cè)試的狀態(tài),rancher-compose可以被再次調(diào)用,這次我們告訴堆?!巴瓿缮?jí)”或“回滾”。我們部署Jenkins作業(yè)的一個(gè)原始示例可能如下:

# for the full job, see part 3 of this series
/usr/local/bin/rancher-compose --verbose    
    -f ${docker_dir}/docker-compose.yml    
    -r ${docker_dir}/rancher-compose.yml    
    up -d --upgrade 
JAVA_SERVICE_1_URL=http://java-service-1.stage.abc.net:8080/api/v1/status 
if curl -s ${JAVA_SERVICE_1_URL} | grep -q "OK"; then   
   
# looks good, confirm or "finish" the upgrade   
    /usr/local/bin/rancher-compose --verbose     
         -f ${docker_dir}/docker-compose.yml      
         -r ${docker_dir}/rancher-compose.yml      
         up --confirm-upgrade 
else   

     # looks like there"s an error, rollback the containers   
     # to the previously deployed version   
     /usr/local/bin/rancher-compose --verbose      
        -f ${docker_dir}/docker-compose.yml      
        -r ${docker_dir}/rancher-compose.yml      
        up --rollback 
fi

這個(gè)邏輯將調(diào)用我們的應(yīng)用程序端點(diǎn)來執(zhí)行簡單的狀態(tài)檢查。如果輸出顯示的是‘OK’,那么我們完成升級(jí),否則我們需要回滾到以前部署的版本。如果您沒有自動(dòng)測(cè)試,另一個(gè)選擇是簡單地總是完成或“確認(rèn)”升級(jí)。

# for the full job, see part 3 of this series
/usr/local/bin/rancher-compose --verbose    
    -f ${docker_dir}/docker-compose.yml    
    -r ${docker_dir}/rancher-compose.yml    
    up -d --upgrade --confirm-upgrade

如果不久以后,您確定需要回滾,就使用相同的部署作業(yè)簡單地重新部署以前的版本。這確實(shí)不像Rancher的升級(jí)和回滾功能那么友好,但它通過使堆棧不處于“升級(jí)”的狀態(tài)來解鎖將來的升級(jí)。

當(dāng)服務(wù)在Rancher中回滾時(shí),容器將被重新部署到以前的版本。當(dāng)使用通用標(biāo)記如“l(fā)atest”或“master”部署服務(wù)時(shí),可能會(huì)出現(xiàn)意外的后果。例如,讓我們假設(shè)"java-service-1"應(yīng)用程序以前被部署了標(biāo)簽"latest"。對(duì)圖像進(jìn)行更改,推送到注冊(cè)表,Docker標(biāo)簽“l(fā)atest”被更新為指向此新映像我們使用標(biāo)簽“l(fā)atest”繼續(xù)升級(jí),在測(cè)試后決定應(yīng)用程序需要回滾。使用Rancher滾動(dòng)堆棧仍然會(huì)重新部署最新的映像,因?yàn)闃?biāo)簽“l(fā)atest”尚未被更新為指向上一個(gè)映像?;貪L可以在純技術(shù)術(shù)語中實(shí)現(xiàn),但是部署最近的工作副本的預(yù)期效果完全無法實(shí)現(xiàn)。在ABC公司,我們通過始終使用與應(yīng)用程序版本相關(guān)的特定標(biāo)記來避免這種情況。因此,不要使用標(biāo)記latest”部署我們的“java-service-1”應(yīng)用程序,我們可以使用版本標(biāo)簽“1.0.1-22-7e56158”。這保證回滾將始終指向我們的應(yīng)用程序在環(huán)境中的最新工作部署。

我們希望我們分享的經(jīng)驗(yàn)對(duì)你們有所幫助。這有助于我們有條不紊地采用Docker,穩(wěn)步改進(jìn)我們的流程,并讓我們的團(tuán)隊(duì)能熟悉這些概念。對(duì)更自動(dòng)化的部署工作流進(jìn)行增量更改,使組織能夠更快地實(shí)現(xiàn)自動(dòng)化的優(yōu)勢(shì),部署團(tuán)隊(duì)可以更加務(wù)實(shí)地決定他們?cè)诹魉€中需要什么。我們的經(jīng)歷證明Rancher在可行性、自動(dòng)化、甚至團(tuán)隊(duì)協(xié)作方面都是成功的。我們希望分享這些我們?cè)贒ocker應(yīng)用過程中獲得的經(jīng)驗(yàn)教訓(xùn)將有助于您自己的應(yīng)用過程。

歡迎關(guān)注Rancher官方微信公眾號(hào)(RancherLabs),獲取第一手技術(shù)干貨推送;歡迎添加客服微信(RancherLabsChina)為好友,加入Rancher官方技術(shù)交流群,獲取免費(fèi)技術(shù)支持,與數(shù)千Docker/Rancher使用者互動(dòng)。


9月27日,北京海航萬豪酒店,容器技術(shù)大會(huì)Container Day 2017即將舉行。

CloudStack之父、海航科技技術(shù)總監(jiān)、華為PaaS部門部長、恒豐銀行科技部總經(jīng)理、阿里云PaaS工程總監(jiān)、民生保險(xiǎn)CIO······均已加入豪華講師套餐!

11家已容器落地企業(yè),15位真·云計(jì)算大咖,13場(chǎng)純·技術(shù)演講,結(jié)合實(shí)戰(zhàn)場(chǎng)景,聚焦落地經(jīng)驗(yàn)。免費(fèi)參會(huì)+超高規(guī)格,詳細(xì)議程及注冊(cè)鏈接請(qǐng)戳

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/27008.html

相關(guān)文章

  • 如何使用Docker、Docker-ComposeRancher搭建部署Pipeline(三)

    摘要:當(dāng)面臨這些挑戰(zhàn)在短短半天的時(shí)間里,使用和現(xiàn)有的主機(jī),我們已經(jīng)將部署好并成功運(yùn)行。使用來創(chuàng)建應(yīng)用并定義服務(wù)。 在這一部分,我們將一步步的走進(jìn)Rancher,細(xì)致的探討Rancher將如何解決在部署與容器管理時(shí)出現(xiàn)的種種的問題?;仡櫧坛痰牡诙糠?,你會(huì)發(fā)現(xiàn)我們已經(jīng)將應(yīng)用的部署遷移至Docker Compose,并且已經(jīng)建立了一系列工作步驟來部署我們的應(yīng)用。這將使得開發(fā)人員能夠輕松的對(duì)他們的...

    Enlightenment 評(píng)論0 收藏0
  • 如何使用Docker、Docker-ComposeRancher搭建部署Pipeline(二)

    摘要:目前我們正采取措施,通過逐步改善現(xiàn)有過程來實(shí)現(xiàn)持續(xù)部署。在這篇文章中,我們將看看如何使用和來改善此設(shè)計(jì)。通過使用,在未來我們可以輕松地將構(gòu)建和部署任務(wù)集成起來,從而得到額外的好處。月日,北京海航萬豪酒店,容器技術(shù)大會(huì)即將舉行。 在這一系列文章的第一篇中,我們分享了只用Docker時(shí)我們開發(fā)的初步的工作流,如何創(chuàng)建一個(gè)基礎(chǔ)的構(gòu)建和部署流水線。容器的部署方式不再是在登陸server的時(shí)候從...

    LancerComet 評(píng)論0 收藏0
  • 學(xué)習(xí)使用Docker、Docker-ComposeRancher搭建部署Pipeline(一)

    摘要:工程師選擇了環(huán)境中的一臺(tái)當(dāng)前沒有在負(fù)載均衡器中被激活的主機(jī)。工程師登陸到這臺(tái)主機(jī)并從注冊(cè)表中獲取新的版本。在生產(chǎn)維護(hù)窗口中,更新負(fù)載均衡器使其指向更新過的主機(jī)。然而將部署代碼化的問題仍然存在。 這篇文章是一系列文章的第一篇,在這一系列文章中,我們想要分享我們?nèi)绾问褂肈ocker、Docker-Compose和Rancher完成容器部署工作流的故事。我們想帶你從頭開始走過pipeline...

    mikyou 評(píng)論0 收藏0
  • 超長干貨:基于Docker的DevOps CI/CD實(shí)踐——來自iHealth的分享

    摘要:在貓屎氤氳的霧氣里角仰望天花板,手機(jī)微信提醒這次構(gòu)建成功或失敗,并附帶污言穢語。這時(shí)他可以開始往工位走,坐下時(shí),微信又會(huì)提醒本次部署到成功或失敗。與企業(yè)微信的集成在決定使用之前,需要知道的是,是一個(gè)高度依賴社區(qū)的項(xiàng)目。 前言 相信我,一切事情的發(fā)生都是趕鴨子上架,沒有例外。人類所有偉大的變革都是迫不得已,可又是那么順其自然。比如容器(docker)技術(shù)的誕生,比如箭在弦上的創(chuàng)業(yè),比如野...

    Dongjie_Liu 評(píng)論0 收藏0
  • 使用RancherDroneCI建立超高速Docker CI/CD流水線

    摘要:本文作者為的架構(gòu)師,他分享了使用和建立超高速流水線的經(jīng)驗(yàn)。月日,北京海航萬豪酒店,容器技術(shù)大會(huì)即將舉行。 Higher Education(highereducation.com)是一個(gè)連接學(xué)生與高校的入學(xué)申請(qǐng)平臺(tái),通過引入高意圖和高質(zhì)量的潛在學(xué)生,以及明確、有效的操作,為網(wǎng)站合作的大學(xué)吸引學(xué)生入學(xué)。每年Higher Education為其大學(xué)合作伙伴招收超過15000名在線學(xué)生入學(xué)申...

    dreamtecher 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<