摘要:雖然可以使用相同的方式部署應(yīng)用到云端,使用外部負(fù)載均衡器,但動(dòng)態(tài)添加或者減少負(fù)載均衡節(jié)點(diǎn)依舊是痛點(diǎn)。這對(duì)使用外部負(fù)載均衡器幫助巨大。
數(shù)人云今天帶來的本篇文章將分享Docker在應(yīng)用程序生命周期每個(gè)階段中所扮演的角色,以及遷移到Swarm集群時(shí)需要考慮的問題。
利用Docker來開發(fā)Docker讓工作更輕松。如需要一個(gè)部署安裝MySQL數(shù)據(jù)庫,或者安裝Ghost,又或者Redis數(shù)據(jù)庫,PostgreSQL,Ruby等。實(shí)際上這些都已經(jīng)被Docker化容器化和鏡像化。
只需要一條命令即可運(yùn)行:
docker run name_of_programe_you_need
下載(鏡像)—使用完—丟掉,沒有其他程序搞亂本地開發(fā)環(huán)境。
擴(kuò)展現(xiàn)有的容器十分簡(jiǎn)單,只要擁有足夠的Docker基礎(chǔ)知識(shí),就能判定從網(wǎng)上下載的Docker鏡像是否是有用的鏡像。
Docker是開發(fā)人員的利器,添加到開發(fā)環(huán)境中好處無需多言。
若熟悉Docker,? 會(huì)經(jīng)常使用Docker-compose一條命令來啟動(dòng)整個(gè)開發(fā)環(huán)境棧。
例如,很常見的Docker-compose文件是這樣:
version: "2" services: web: build: . command: npm run dev ports: - 8080:80 redis: image: redis database: image: postgres
然后運(yùn)行:
docker-compose up # --build if you want to rebuild
PostgreSQL訪問地址:postgresql://database
Redis訪問地址: http://redis
這是一種極為簡(jiǎn)便的方法,整個(gè)開發(fā)環(huán)境棧用幾行代碼描述(development stack as a code),并且內(nèi)置版本控制功能。下面來講下生產(chǎn)環(huán)境。
生產(chǎn)環(huán)境要求生產(chǎn)環(huán)境非同一般。這里例舉中等負(fù)載量的服務(wù)器要求——
可用性: 必須所有的時(shí)間點(diǎn)上,服務(wù)都是可用的,盡可能減少宕機(jī)時(shí)間。
性能: 服務(wù)器需要處理大量的訪客請(qǐng)求,故而性能也很重要。
易于部署和回滾。
收集日志和指標(biāo)。
負(fù)載均衡: 如果有某些服務(wù)或者服務(wù)器失敗了,我們期望網(wǎng)站可以正常訪問。
Docker作為一個(gè)準(zhǔn)生產(chǎn)的解決方案,實(shí)際上被非常多的人低估了。約一年前,PvP Center(https://beta.pvpc.eu/)過程中,因Docker文件系統(tǒng)問題,也經(jīng)歷了一些失?。壳埃沂褂肙verlay2文件系統(tǒng),問題不復(fù)存在),現(xiàn)在回頭想一下,這是很好的決定。
生產(chǎn)部署是使用原始Docker命令還是 Docker-compose
若遇到這個(gè)問題,配置好Ansible自動(dòng)下載新版本的應(yīng)用,然后自動(dòng)部署到容器即可(Ansible配置文件:https://rock-it.pl/managing-m... )。
接下來查看列表——
性能:Docker進(jìn)程,是正常的內(nèi)核進(jìn)程,不會(huì)產(chǎn)生顯著的資源開銷。
易于部署: 一鍵部署。因Ansible要檢查多個(gè)判斷條件, 不僅僅是是判斷容器的版本,所以需要花費(fèi)一點(diǎn)時(shí)間。
回滾: 所有的容器鏡像都使用不同的標(biāo)簽后,保存在容器倉庫中。對(duì)數(shù)據(jù)庫遷移做了向后兼容,回滾會(huì)很容易。
但以上的做法也會(huì)產(chǎn)生問題:
1、不能滿足一些非常規(guī)要求(在要求部署應(yīng)用的時(shí)候服務(wù)器零宕機(jī)) 因?yàn)橐S護(hù)后端動(dòng)態(tài)的負(fù)載均衡節(jié)點(diǎn),不能輕易的擴(kuò)容到多臺(tái)服務(wù)器上。
2、需要極聰明的手段和方法才能整合 持續(xù)集成/持續(xù)部署系統(tǒng)(CI/CD)。
3、如果分別存放特定應(yīng)用程序,滿足部署依賴在不同的架構(gòu)倉庫內(nèi) 。當(dāng)配置文件發(fā)生變化時(shí),回滾變得非常困難。
堅(jiān)持了這種做法一段時(shí)間,沒有任何問題,但是總感覺缺失了什么東西,因?yàn)榭焖俨渴鹨约芭渲梦募枰嘈薷模?Ansible部署也刺激到了我(太慢了)。但是,真正促使往Docker Swarm遷移的決定性原因是——擴(kuò)容到一臺(tái)服務(wù)器以的特性。雖然可以使用相同的方式部署應(yīng)用到云端,使用外部負(fù)載均衡器,但動(dòng)態(tài)添加或者減少負(fù)載均衡節(jié)點(diǎn)依舊是痛點(diǎn)。把特定應(yīng)用的配置文件從Ansible中移除,轉(zhuǎn)而把這些配置文件發(fā)到應(yīng)用倉庫中。
Docker SwarmDocker Swarm設(shè)計(jì)的目的是方便地使用Docker命令來管理多臺(tái)服務(wù)器之間的容器調(diào)度,是相當(dāng)前沿的新功能新特性(從Docker 1.12版本開始)。
要點(diǎn):允許同時(shí)連接到多臺(tái)運(yùn)行Docker的服務(wù)器上。
比較簡(jiǎn)單:對(duì)比Kubernetes,Docker Swarm上手更快。
高可用 – 集群中有二種不同類型的節(jié)點(diǎn): Master節(jié)點(diǎn)和Worker節(jié)點(diǎn)。
其中的一個(gè)Master節(jié)點(diǎn)是Leader, 如果當(dāng)前Leader宕機(jī)不可用,其他健康的Master中的一臺(tái)會(huì)自動(dòng)成為L(zhǎng)eader 。如果Worker節(jié)點(diǎn)宕機(jī)不可用,宕機(jī)節(jié)點(diǎn)上的容器實(shí)例會(huì)被重新調(diào)度到其他健康的Worker節(jié)點(diǎn)上。
聲明式配置:只需明確發(fā)布什么應(yīng)用以及多少份實(shí)例副本,調(diào)度系統(tǒng)會(huì)自動(dòng)調(diào)度發(fā)布這些應(yīng)用實(shí)例,并且遵循指定的限制條件等。
滾動(dòng)更新:Swarm保存了發(fā)布容器時(shí)候的配置。 若新了配置文件,容器也會(huì)批量更新,所以服務(wù)會(huì)是一直是可用的。
內(nèi)置服務(wù)發(fā)現(xiàn)和負(fù)載均衡 :與Docker-compose 實(shí)現(xiàn)的負(fù)載均衡類似??梢酝ㄟ^參考服務(wù)名,容器跑在哪里哪臺(tái)服務(wù)器上已經(jīng)完全不重要,這些負(fù)載均衡節(jié)點(diǎn)都會(huì)接收前端導(dǎo)過來的流量,默認(rèn)是輪詢策略。
Overlay網(wǎng)絡(luò):如果容器暴露了一個(gè)服務(wù)端口,這個(gè)服務(wù)端口在集群內(nèi)都可以被訪問。這對(duì)使用外部負(fù)載均衡器幫助巨大。
在什么時(shí)候才應(yīng)該考慮使用Docker Swarm
在考慮使用Docker Swarm前,先過一遍下面5個(gè)問題——
應(yīng)用是否需要擴(kuò)容到兩臺(tái)以上的服務(wù)器上?多臺(tái)服務(wù)器總是比單臺(tái)服務(wù)器復(fù)雜,或者只是想購買更高配置的單臺(tái)服務(wù)器(譯者注: 縱向擴(kuò)展)?
應(yīng)用是否有高可用的要求?
應(yīng)用容器化后是否真的是無狀態(tài)化的?在Swarm下跑容器不應(yīng)該使用存儲(chǔ)卷,雖然理論上是可以使用存儲(chǔ)卷,但是在測(cè)試使用的時(shí)候,它依舊不是穩(wěn)定可靠的。可以考慮把多媒體文件移到亞馬遜S3上,而把數(shù)據(jù)庫運(yùn)行在Docker Swarm之外。
是否有集成日志系統(tǒng),例如ELK (這個(gè)適用于所有分布式系統(tǒng))。
是否需要已經(jīng)存在于其他更成熟解決方案(如Kubernetes)中的高級(jí)功能和特性? 謹(jǐn)記,熟悉Kubernetes比熟悉Docker Swarm要難得多。
生產(chǎn)環(huán)境使用Docker Swarm經(jīng)驗(yàn)
截止目前,應(yīng)用跑在Swarm上面已經(jīng)有六個(gè)月的時(shí)間,從Docker-compose遷移到Swarm花去一周的時(shí)間(包括學(xué)習(xí)如何遷移等)。需要調(diào)整配置文件,以便讓應(yīng)用容器完全是無狀態(tài)的,使用外部集中式日志和指標(biāo)收集。高峰時(shí),共運(yùn)行了35個(gè)節(jié)點(diǎn)。對(duì)集群的管理十分方便。
例如:
docker service scale name_of_service=30 or docker service update --env-add SECRET_ENV=youdontneedtoknowit name_of_service
截屏如下:
部署流程如下圖:
在Deploy區(qū)域內(nèi),使用最新Docker-compose v3版的語法和Docker stack deploy命令。把發(fā)布應(yīng)用容器的配置文件存儲(chǔ)為VCS這項(xiàng)工作變得前所未有的簡(jiǎn)單。無需要手工修改任何配置,輕松地部署應(yīng)用容器到Swarm集群。
配置文件例子:
version: "3" services: web: image: registry.gitlab.com/example/example # you need to use external image command: npm run prod ports: - 80:80 deploy: replicas: 6 update_config: parallelism: 2 delay: 10s restart_policy: condition: on-failure
整個(gè)部署命令只有一行:docker stack deploy application . 當(dāng)然,這里使用了Gitlab.com 的流程,結(jié)果如下圖所示:
可以在Web界面上進(jìn)行回滾操作,甚至在手機(jī)上執(zhí)行回滾操作。
結(jié)語以上都是個(gè)人對(duì)Docker Swarm的觀點(diǎn)。之前考慮過使用其他選項(xiàng),但如果想讓應(yīng)用容器化,進(jìn)而伸縮擴(kuò)容到多臺(tái)服務(wù)器上,目前這種方法是最好的選擇。
原文作者:Jakub Ska?ecki
原文鏈接: https://rock-it.pl/my-experie...
歡迎關(guān)注數(shù)人云微信公眾號(hào),如有后續(xù)文章,我們會(huì)在第一時(shí)間進(jìn)行跟進(jìn)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/26903.html
摘要:譯者按實(shí)踐中會(huì)發(fā)現(xiàn),生產(chǎn)環(huán)境中使用單個(gè)節(jié)點(diǎn)是遠(yuǎn)遠(yuǎn)不夠的,搭建集群勢(shì)在必行。集群的網(wǎng)絡(luò)通信服務(wù)發(fā)現(xiàn),負(fù)載均衡以及容器間通信非??煽俊X?fù)載均衡也是由提供的。 譯者按: 實(shí)踐中會(huì)發(fā)現(xiàn),生產(chǎn)環(huán)境中使用單個(gè)Docker節(jié)點(diǎn)是遠(yuǎn)遠(yuǎn)不夠的,搭建Docker集群勢(shì)在必行。然而,面對(duì)Kubernetes, Mesos以及Swarm等眾多容器集群系統(tǒng),我們?cè)撊绾芜x擇呢?它們之中,Swarm是Docker原...
摘要:更多技術(shù)棧的包容數(shù)人云技術(shù)團(tuán)隊(duì)為了幫助廣大技術(shù)愛好者對(duì)新版本有快速直觀的感受,制作了一款基于最新特性的容器管理工具,具備一定容器開發(fā)經(jīng)驗(yàn)的開發(fā)者可以通過它在第一時(shí)間體驗(yàn)的新特性。可以說,數(shù)人云是在技術(shù)能否持續(xù)下去的爭(zhēng)論中發(fā)布的工具。 showImg(https://segmentfault.com/img/bVD5g2?w=900&h=500);中秋節(jié)前, 數(shù)人云技術(shù)團(tuán)隊(duì)推出了一...
摘要:指導(dǎo)員明伯伯?dāng)?shù)人云工程師手記相關(guān)閱讀基于的集群管理開發(fā)實(shí)踐服務(wù)發(fā)現(xiàn),負(fù)載均衡和 這是一個(gè)容器信息臃腫的時(shí)代。 Docker 鯨魚鼓著圓圓的肚子在西雅圖開了一場(chǎng)名為 DockerCon2016 的大會(huì),全球 4000 人參加, 8 大看點(diǎn)留下對(duì)容器生態(tài)的更多暢想。 數(shù)人云一直專注于以企業(yè)級(jí)的 Mesos +容器技術(shù)棧,出于對(duì)容器新技術(shù)的熱愛,我們?cè)谏鐓^(qū)版的工具上小試牛刀,距 Docker...
摘要:應(yīng)該如何解決本文將給出若干提示,如何在生產(chǎn)環(huán)境中使用。路由匹配服務(wù)發(fā)現(xiàn)負(fù)載均衡跨容器通訊非??煽?。在單個(gè)端口上運(yùn)行一個(gè)服務(wù),節(jié)點(diǎn)的任意主機(jī)都可以訪問,負(fù)載均衡完全在后臺(tái)實(shí)現(xiàn)。 上周數(shù)人云給大家分享了——《你可能需要的關(guān)于Docker Swarm的經(jīng)驗(yàn)分享》今天給大家?guī)磉@位作者大大的后續(xù)文章——《Docker Swarm在生產(chǎn)環(huán)境中的進(jìn)階指南》 當(dāng)在本地開發(fā)環(huán)境中使用Docker,或者...
摘要:既然要組集群那就涉及諸如的資源調(diào)度管理等等一系列問題。目前涉及集群的三個(gè)主要的技術(shù)無外乎三種。從本文開始作者將會(huì)一一實(shí)踐這幾種主要的集群技術(shù),話不多說,現(xiàn)在開始。完全運(yùn)行于內(nèi)存中,體積小,啟動(dòng)快。 showImg(https://segmentfault.com/img/remote/1460000015723680); 前言 相信Docker技術(shù)大家都有所了解,單個(gè)Docker能發(fā)...
閱讀 3331·2023-04-25 16:25
閱讀 3860·2021-11-15 18:01
閱讀 1619·2021-09-10 11:21
閱讀 3025·2021-08-02 16:53
閱讀 3093·2019-08-30 15:55
閱讀 2499·2019-08-29 16:24
閱讀 2110·2019-08-29 13:14
閱讀 1045·2019-08-29 13:00