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

資訊專欄INFORMATION COLUMN

Docker Swarm在生產(chǎn)環(huán)境中的進(jìn)階指南

galaxy_robot / 3098人閱讀

摘要:應(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,或者已經(jīng)在單臺(tái)生產(chǎn)服務(wù)器上部署Docker,卻發(fā)現(xiàn)它不足以支撐更多的流量。應(yīng)該如何解決?本文將給出若干提示,如何在生產(chǎn)環(huán)境中使用Docker Swarm。

附:如果對(duì)Swarm不熟悉,請(qǐng)查看之前的文章《你可能需要知道的關(guān)于Docker Swarm的經(jīng)驗(yàn)分享》

閱讀官方文檔

這里不重復(fù)官方Swarm的入門教程和文檔。入門教程很簡(jiǎn)短,它會(huì)讓你明白Swarm是如何工作的。這里也不講解設(shè)置和部署Swarm環(huán)境,網(wǎng)上有很多初級(jí)的教程,可供參考如——

Digitalocean上的教程 :(https://www.digitalocean.com/...)

或者google搜索相關(guān)教程。

附:一個(gè)牛X的: Ansible role (
https://galaxy.ansible.com/at...

Docker Swarm用法實(shí)例

就觀察而言,用于Swarm內(nèi)部信息共享和調(diào)度的Cpu開銷確實(shí)很低。得益于此,管理節(jié)點(diǎn)同時(shí)也可以是工作節(jié)點(diǎn)。如果要跑一個(gè)1000+個(gè)節(jié)點(diǎn)的大集群,管理節(jié)點(diǎn)開銷需要非常多的資源,但當(dāng)集群是小規(guī)模到中等規(guī)模時(shí),這種資源消耗和開銷是可以忽略不計(jì)的。參考這里——
(https://sematext.com/blog/201...)Swarm3k, 一個(gè)運(yùn)行4700個(gè)節(jié)點(diǎn)的集群實(shí)驗(yàn)。

路由匹配(服務(wù)發(fā)現(xiàn)、負(fù)載均衡、跨容器通訊)非常可靠。在單個(gè)端口上運(yùn)行一個(gè)服務(wù),Swarm節(jié)點(diǎn)的任意主機(jī)都可以訪問,負(fù)載均衡完全在后臺(tái)實(shí)現(xiàn)。之前遇到過一些難題,但使用Docker1.13版本后,問題得到解決。

在配置初始化完成后,只需要幾行命令作為日常運(yùn)維。下面是日常使用的命令:

# let"s create new service  創(chuàng)建一個(gè)新的服務(wù)
docker service create   
  --image nginx 
  --replicas 2 
  nginx 

# ... update service ...   更新服務(wù)
docker service update   
  --image nginx:alpine 
  nginx 

# ... and remove   刪除服務(wù)
docker service rm nginx

# but usually it"s better to scale down 但是更好的辦法是縮容,而不是直接刪除服務(wù)
docker service scale nginx=0

# you can also scale up   擴(kuò)容
docker service scale nginx=5

# show all services 列出所有的服務(wù)
docker service ls

# show containers of service with status   列出一個(gè)服務(wù)的所有實(shí)例(包括服務(wù)的健康狀況)
docker service ps nginx

# detailed info  服務(wù)的詳細(xì)信息
docker service inspect nginx

服務(wù)零宕機(jī),是完美的持續(xù)部署方案。

# lets build new version and push to the registry 創(chuàng)建新版本的鏡像,并且推送到registry
docker build -t hub.docker.com/image .  
docker push hub.docker.com/image

# and now just update (on a master node) 現(xiàn)在更新服務(wù)(在master節(jié)點(diǎn)上)
docker service update --image hub.docker.com/image service

易于啟動(dòng):分布式系統(tǒng)本身就很復(fù)雜。相比于其他解決方案(Mesos, Kubernetes), Swarm簡(jiǎn)單易學(xué),即便無任何Swarm的知識(shí),從單臺(tái)服務(wù)器Docker-compose方式的部署,擴(kuò)展到20臺(tái)服務(wù)器,分布式可伸縮的解決方案,也只需要大約一周。

無需修改。容器實(shí)例同時(shí)跑在多臺(tái)服務(wù)器上。修改任何東西,需要打包一個(gè)新的鏡像,適當(dāng)?shù)臏y(cè)試和部署是成功的關(guān)鍵。

Docker Swarm上的容器選擇
并不是所有的應(yīng)用都適合跑在Docker swarm上,比如,數(shù)據(jù)庫(kù)和一些有狀態(tài)的服務(wù)。

從理論上而言,可以使用標(biāo)簽的方式固定某個(gè)容器跑在某個(gè)特定的資源上,但是,更難的是從Swarm集群外部來訪問這個(gè)容器提供的服務(wù)。(在Docker1.12版本里面沒有簡(jiǎn)單的方式來實(shí)現(xiàn),在Docker1.13+版本可以使用附加的Overlay 網(wǎng)絡(luò)模式)。

比如,想開放一個(gè)數(shù)據(jù)庫(kù)服務(wù)給外部訪問,讓外部所有節(jié)點(diǎn)都可以訪問數(shù)據(jù)庫(kù),但是這不是真正想要實(shí)現(xiàn)的結(jié)果(只想讓特定節(jié)點(diǎn)訪問數(shù)據(jù)庫(kù))
。
又如,Swarm里面的跨主機(jī)存儲(chǔ)卷掛載幾個(gè)月之前還不可靠,用戶上傳文件這樣簡(jiǎn)單的操作也會(huì)引發(fā)問題。

適用于容器化的是那些由環(huán)境變量驅(qū)動(dòng)無狀態(tài)的應(yīng)用容器。是時(shí)候準(zhǔn)備自己使用過的開源軟件Docker鏡像了,例如配置完善的Nginx鏡像。

跑在swarm上的服務(wù)

web服務(wù)器(Django channels - Daphne and workers)

反向代理(Nginx)

Periodic workers (Celery)

指標(biāo)收集器 (Sensu)

不跑在swarm上的容器

數(shù)據(jù)庫(kù)(Postgres)

Redis

由于獲取真實(shí)IP的問題(https://github.com/moby/moby/...),也會(huì)把Sginx多帶帶移出來不跑在Swarm模式下,至少應(yīng)該使用Nost網(wǎng)絡(luò)模式,但在Docker 1.12版本下,這是唯一的選擇。

設(shè)置好Docker倉(cāng)庫(kù)

Docker倉(cāng)庫(kù)或是自己的服務(wù)器,也許是Dockerhub、 Gitlab.com(作者選擇這個(gè))此類。在服務(wù)器上創(chuàng)建鏡像已經(jīng)不適用了,因?yàn)橛刑喾?wù)器且在創(chuàng)建服務(wù)時(shí)( Docker service create)要指明鏡像。如果倉(cāng)庫(kù)是私有倉(cāng)庫(kù),記得增加--with-registry-auth 這個(gè)參數(shù),否則其他節(jié)點(diǎn)無法拉取鏡像。同時(shí)應(yīng)該使用Tag來標(biāo)明發(fā)布的版本號(hào),這樣發(fā)現(xiàn)問題時(shí)可以快速回滾。

改造無狀態(tài)化應(yīng)用容器

“部分有狀態(tài)”是指有一些共享而不重要的文件??梢試L試使用共享存儲(chǔ)卷掛載,更好的方法是遷移到亞馬遜S3或者其他云存儲(chǔ)。記住,擴(kuò)張的時(shí)候,云是最佳選擇。

如例子中,不得不創(chuàng)建自己有合適參數(shù)的Nginx鏡像。通過共享存儲(chǔ)卷掛載在以前非常不可靠、不方便。

準(zhǔn)備日志收集服務(wù)

集中式的日志和指標(biāo)是使用分布式文件系統(tǒng)的必須項(xiàng),如ELK,Graphana,Graylog 等等。

這里有許多可選項(xiàng),有開源項(xiàng)目,也有SaaS類服務(wù)。這些打造和整合成可靠的服務(wù)是復(fù)雜且艱難的。建議先使用云端服務(wù)(如Loggly, Logentries), 當(dāng)成本上漲的時(shí)候,再開始架設(shè)自己的日志收集服務(wù)。
例:ELK 棧日志處理配置:

docker service update   
  --log-driver gelf 
  --log-opt gelf-address=udp://monitoring.example.com:12201 
  --log-opt tag=example-tag 
  example-service
創(chuàng)建可附加的網(wǎng)絡(luò)

記得使用它,否則無法在Docker Swarm下一條命令跑起一個(gè)容器。這是Docker1.13+新功能。如果使用舊版本的Docker, 最好升級(jí)下。

代碼:

docker network create --driver=overlay --attachable core
增加環(huán)境變量

如果創(chuàng)建Docker鏡像的時(shí)候,遵循了最佳實(shí)踐原則(https://rock-it.pl/how-to-wri...),允許在運(yùn)行的時(shí)候通過環(huán)境變量設(shè)置一切配置項(xiàng),那么把應(yīng)用遷到Swarm的過程完全沒有問題。

例,有用的命令:

docker service create   
  --env VAR=VALUE 
  --env-file FILENAME 
  ...

docker service update   
  --env-add VAR=NEW_VALUE 
  --env-rm VAR 
  ..

下一個(gè)級(jí)別就是使用非公開的API掛載文件像掛載秘鑰那樣(Authorized keys, SSL certs 等)。作者暫時(shí)還未使用此功能,不能詳述,但這個(gè)功能特性絕對(duì)值得思考和使用。

設(shè)置適當(dāng)實(shí)例和批量更新

保持適當(dāng)數(shù)量的實(shí)例,以應(yīng)對(duì)高流量和實(shí)例或者節(jié)點(diǎn)不可用的情況。同時(shí)太多的實(shí)例數(shù)也會(huì)占用CPU和內(nèi)存,并且導(dǎo)致爭(zhēng)搶CUP資源。

update-parallelism的默認(rèn)值是1,默認(rèn)只有一個(gè)實(shí)例在運(yùn)行。但這個(gè)更新速度太慢了,建議是 replicas / 2。

相關(guān)命令:

docker service update   
  --update-parallelism 10 
  webapp

# You can scale multiple services at once
docker service scale redis=1 nginx=4 webapp=20

# Check scaling status
docker service ls

# Check details of a service (without stopped containers)
docker service ps webapp | grep -v "Shutdown"
把Swarm配置保存為代碼

最好使用Docker Compose v3版本的語(yǔ)法(https://docs.docker.com/compo...)。

他允許使用代碼指定幾乎所有的服務(wù)選項(xiàng)。作者在開發(fā)的時(shí)候使用 Docker-compose.yml,在生產(chǎn)環(huán)境(swarm)配置使用 Docker-compose.prod.yml . 部署Docker-compose文件中所描述的服務(wù),需要Docker stack deploy 命令(屬于新版本 Stack命令集合中的一部分[https://docs.docker.com/engin...)

Docker compose v3例子:

# docker-compose.prod.yml
version: "3"  
services:  
  webapp:
    image: registry.example.com/webapp
    networks:
      - ingress
    deploy:
      replicas: ${WEBAPP_REPLICAS}
      mode: replicated
      restart_policy:
        condition: on-failure

  proxy:
    image: registry.example.com/webapp-nginx-proxy
    networks:
      - ingress
    ports:
      - 80:80
      - 443:443
    deploy:
      replicas: ${NGINX_REPLICAS}
      mode: replicated
      restart_policy:
        condition: on-failure

networks:  
  ingress:
    external: true

部署的例子(創(chuàng)建或者更新服務(wù)):

export NGINX_REPLICAS=2 WEBAPP_REPLICAS=5

docker login registry.example.com  
docker stack deploy   
  -c docker-compose.prod.yml
  --with-registry-auth 
  frontend

提示:Docker-compose文件支持環(huán)境變量 (${VARIABLE}), 所以,可以動(dòng)態(tài)調(diào)整配置作為測(cè)試等。

設(shè)置限制

就經(jīng)驗(yàn)而言,可以為所有服務(wù)設(shè)置CPU使用限制。當(dāng)某一個(gè)容器應(yīng)用占用掉所有主機(jī)資源時(shí),此限制可以避免這種情況發(fā)生。

當(dāng)想把所有容器均勻地發(fā)布在所有主機(jī)上或是想確保有足夠的資源來響應(yīng)操作時(shí),需使用Reserve-cpu這個(gè)參數(shù)。

例如:

docker service update  
  --limit-cpu 0.25
  --reserve-cpu 0.1
  webapp
監(jiān)控連接

曾經(jīng)在Swarm網(wǎng)絡(luò)上遇到過一些問題。很多次所有的流量都被路由到同一個(gè)容器實(shí)例上,而同時(shí)有9個(gè)容器實(shí)例正常且健康的。這種情況下——即流量持續(xù)導(dǎo)到一個(gè)實(shí)例上,做擴(kuò)容或者縮容操作的時(shí)候,加上這個(gè)參數(shù)--endpoint-mode 。

在沒有適當(dāng)?shù)募惺饺罩緯r(shí),要發(fā)現(xiàn)這個(gè)問題還真不容易。

原文作者: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/26895.html

相關(guān)文章

  • 代碼級(jí)干貨 | 進(jìn)階Docker 1.12,全新的分布式應(yīng)用捆綁包

    摘要:利用分布式應(yīng)用捆綁包簡(jiǎn)稱部署服務(wù)相較于利用大量參數(shù)創(chuàng)建網(wǎng)絡(luò)及服務(wù),這里我們選擇使用一個(gè)文件。 在Docker 1.12版本中,全新的Swarm捆綁包相較于原有編排及調(diào)度機(jī)制做出了巨大改進(jìn)。它不再需要運(yùn)行一組獨(dú)立的Swarm容器,這部分容器已經(jīng)被直接捆綁在Docker Engine當(dāng)中,故障轉(zhuǎn)移策略更為可靠,服務(wù)發(fā)現(xiàn)機(jī)制實(shí)現(xiàn)內(nèi)置,新的網(wǎng)絡(luò)功能極為順暢……看起來很棒是不是? 數(shù)人云這...

    2i18ns 評(píng)論0 收藏0
  • 生產(chǎn)環(huán)境中使用Docker Swarm的一些建議

    摘要:譯者按實(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ù)載均衡以及容器間通信非常可靠。負(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原...

    loonggg 評(píng)論0 收藏0
  • Docker 實(shí)踐(五):生產(chǎn)環(huán)境容器化

    摘要:不要用百度搜索中文資料,一定要看最新的英文資料。感謝感謝能容忍我無數(shù)次搞掛生產(chǎn)環(huán)境的老板。群蝸牛大神所建中文交流群,基本配置過程中遇到的問題都能得到解決。 前言 最近花了將近一個(gè)月的時(shí)間研究了 Docker 在生產(chǎn)環(huán)境中的使用,作為新手,期間走了無數(shù)的彎路,這里紀(jì)錄一下,希望給別人帶來微小的幫助。 前面幾部分,介紹了在搭建集群之前需要做的一些工作,后面 一塊結(jié)合實(shí)際應(yīng)用,介紹如何架構(gòu)...

    sydMobile 評(píng)論0 收藏0
  • 代碼級(jí)操作指南 | 如何Docker Swarm中運(yùn)行服務(wù)

    摘要:節(jié)點(diǎn)管理器將利用該聲明該集群服務(wù)。在本示例當(dāng)中,我們將部署一項(xiàng)服務(wù)。此標(biāo)記用于告知公布端口作為該服務(wù)的可用端口。將此稱為入口負(fù)載均衡。當(dāng)外部系統(tǒng)調(diào)用某項(xiàng)服務(wù)時(shí),接收節(jié)點(diǎn)會(huì)接受流量并利用提供的內(nèi)部服務(wù)對(duì)其進(jìn)行負(fù)載均衡。 最新版本Docker Engine v1.12中,包含了多項(xiàng)與Docker Swarm緊密相關(guān)的功能變更。在今天的文章中,數(shù)人云將和大家探討如何利用Docker的Swar...

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

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

0條評(píng)論

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