摘要:配置網(wǎng)絡(luò)參照生產(chǎn)環(huán)境配置中的和子網(wǎng)章節(jié)。特別注意觀察和的子網(wǎng)是否與已有網(wǎng)絡(luò)沖突如果有沖突則參考網(wǎng)絡(luò)的中的方法修改子網(wǎng)。部署使用的是的監(jiān)控方案。創(chuàng)建應(yīng)用網(wǎng)絡(luò)創(chuàng)建你也可以改成自己的名字參考網(wǎng)絡(luò)的檢查子網(wǎng)與是否配置正確。
原文
大綱本文只是一種實際部署方案的例子,涉及到的技術(shù)有(除Docker/Docker Swarm外):
Docker overlay network
Fluentd
Prometheus stack
vegasbrianc的Prometheus監(jiān)控方案
步驟大綱:
部署Docker machine
基本配置
配置網(wǎng)絡(luò)
啟動Fluentd日志服務(wù)
部署Docker swarm集群
配置網(wǎng)絡(luò)
添加Node
部署Prometheus stack
給Node打Label
創(chuàng)建監(jiān)控網(wǎng)絡(luò)
啟動service
部署應(yīng)用
識別stateless與stateful
創(chuàng)建應(yīng)用網(wǎng)絡(luò)
給Node打Label
啟動service
1 部署Docker machine 1.1 基本配置準備若干Linux服務(wù)器(本例使用Ubuntu 16.04),參照Docker CE 鏡像源站提到的步驟安裝Docker CE。
參照Docker Daemon生產(chǎn)環(huán)境配置。
1.2 配置bridge網(wǎng)絡(luò)參照Docker Daemon生產(chǎn)環(huán)境配置中的mtu和子網(wǎng)章節(jié)。
1.3 啟動Fluentd日志服務(wù)參考使用Fluentd收集Docker容器日志。
2 部署Docker swarm集群到一臺機器上執(zhí)行docker swarm init,這個機器將作為manager node。
執(zhí)行docker node ls會看到類似下面的結(jié)果:
$ docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS dxn1zf6l61qsb1josjja83ngz * manager1 Ready Active Leader
如果你計劃不會把工作負載跑在manager node上,那么使用docker drain:
docker node update --availability drain
可參考Docker Swarm基本命令清單。
2.1 配置網(wǎng)絡(luò)MTU和子網(wǎng)參考Docker Overlay網(wǎng)絡(luò)的MTU。
特別注意
觀察docker_gwbridge和ingress的子網(wǎng)是否與已有網(wǎng)絡(luò)沖突:
$ docker network inspect -f "{{json .IPAM}}" docker_gwbridge {"Driver":"default","Options":null,"Config":[{"Subnet":"172.18.0.0/16","Gateway":"172.18.0.1"}]} $ docker network inspect -f "{{json .IPAM}}" ingress {"Driver":"default","Options":null,"Config":[{"Subnet":"10.255.0.0/16","Gateway":"10.255.0.1"}]}
如果有沖突則參考Docker Overlay網(wǎng)絡(luò)的MTU中的方法修改子網(wǎng)。
2.2 添加Node參考Docker Swarm基本命令清單。
3 部署Prometheus stack使用的是vegasbrianc的Prometheus監(jiān)控方案。
整個監(jiān)控方案包含一下幾個組件:
Prometheus
Node-exporter,運行在每個node上
Alertmanager
cAdvisor,運行在每個node上
Grafana
3.1 給Node打Label挑選一臺Node作為運行監(jiān)控服務(wù)的機器。給這個node打上label:
$ docker node update --label-add for-monitor-stack=13.2 創(chuàng)建監(jiān)控網(wǎng)絡(luò)
$ docker network create -d overlay --attachable monitor-net
參考參考Docker Overlay網(wǎng)絡(luò)的MTU檢查子網(wǎng)與MTU是否配置正確。
3.3 啟動serviceclone vegasbrianc的Prometheus監(jiān)控方案 項目代碼。
使用我修改過的docker-stack.yml
啟動service:
$ docker stack deploy --with-registry-auth --prune -c docker-stack.yml p8s-monitor-stack
訪問地址:
Prometheus:http://<任意swarm node ip>:9000
Node-exporter:http://<任意swarm node ip>:9010
Alertmanager:http://<任意swarm node ip>:9020
cAdvisor:http://<任意swarm node ip>:9030
Grafana:http://<任意swarm node ip>:9040,用戶名admin,密碼foobar
4 部署應(yīng)用 4.1 識別stateless與stateful如果你的應(yīng)用由多個組件(service)組成,那么在部署它們之前你得識別出哪些是stateless service哪些是stateful service。
針對每個service你自問以下三個問題:
這個service崩潰之后,是不是只需要重啟它就可以了,而不需要關(guān)心數(shù)據(jù)恢復(fù)?
這個service是否可以在node之間任意遷移,且不需要分布式存儲?
這個service是否無需固定IP?
如果上述回答都是Yes,那么這個service就是stateless的,只要有一個是No,則這個service是stateful的。
對于stateless service,你可以:
用docker stack deploy部署
用docker service create部署
對于stateful service,你可以:
用docker run部署
用docker-compose up部署
如果沒有固定IP的要求,那么你也可以用docker stack deploy/docker service create部署,前提是你得保證這個service只會固定在一臺機器上運行。
有時候你的應(yīng)用既有stateless service又有stateful service,這時需要把他們掛載到同一個overlay網(wǎng)絡(luò)里,這樣它們之間就能夠互相通信了。
4.2 創(chuàng)建應(yīng)用網(wǎng)絡(luò)創(chuàng)建app-net(你也可以改成自己的名字)
$ docker network create -d overlay --attachable app-net
參考Docker Overlay網(wǎng)絡(luò)的MTU檢查子網(wǎng)與MTU是否配置正確。
4.3 給Node打Label如果你對于Service部署在哪個Node上有要求,那么你得給Node打上Label:
$ docker node update --label-add=1
然后在docker-compose.yaml里添加約束條件:
version: "3.7" services: busybox: image: busybox deploy: placement: constraints: - node.labels.4.4 啟動service== 1
對于stateless service,編寫docker-compose.yaml,里面寫了同時掛載app-net和monitor-net,比如:
version: "3.7" services: busybox: image: busybox networks: app-net: monitor-net: aliases: - busybox ... networks: app-net: external: true monitor-net: external: true
注意上面設(shè)置了busybox service在monitor-net中的別名,這是因為如果你用docker stack deploy部署,那么busybox的名字默認是
然后用docker stack deploy部署:
$ docker stack deploy --with-registry-auth --prune -c docker-compose.yaml
如果用docker service create則:
$ docker service create --network app-net --network monitor-net --name... 其他參數(shù)
下面舉例docker run啟動stateful service的方法:
$ docker run -d --name--network app-net ... 其他參數(shù) # 然后再掛載到monitor-net上 $ docker network connect monitor-net
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/28093.html
摘要:當(dāng)然此時的局限性較大,比如沒有副本和負載均衡的概念,這導(dǎo)致服務(wù)無法高可用當(dāng)然也更不存在什么服務(wù)網(wǎng)絡(luò)管理和跨節(jié)點數(shù)據(jù)存儲這些東西沒有服務(wù)模型集群中服務(wù)間關(guān)系和啟動順序編排也很復(fù)雜于是就有了下面的的誕生。 showImg(https://segmentfault.com/img/remote/1460000015317037?w=1885&h=1153); 概述 在我的《Docker S...
摘要:雖然可以使用相同的方式部署應(yīng)用到云端,使用外部負載均衡器,但動態(tài)添加或者減少負載均衡節(jié)點依舊是痛點。這對使用外部負載均衡器幫助巨大。 數(shù)人云今天帶來的本篇文章將分享Docker在應(yīng)用程序生命周期每個階段中所扮演的角色,以及遷移到Swarm集群時需要考慮的問題。 利用Docker來開發(fā) Docker讓工作更輕松。如需要一個部署安裝MySQL數(shù)據(jù)庫,或者安裝Ghost,又或者Redis數(shù)據(jù)...
摘要:其一將用于代理與面向公開的服務(wù)之間的通信。數(shù)據(jù)庫上線并開始運行后,我們接下來部署后端?,F(xiàn)在,會幫助我們完成全部負載均衡工作。這樣所有來自代理的請求都將指向網(wǎng)絡(luò),并由后者跨越全部實例執(zhí)行負載均衡。 七夕大家過得怎么樣?今天數(shù)人云帶大家回歸技術(shù)和干貨。雖然我們能夠在Swarm集群當(dāng)中部署任意數(shù)量的服務(wù),但這并不代表各項服務(wù)全部可為用戶所訪問。而新的Swarm網(wǎng)絡(luò)使得各項服務(wù)之間能夠更為輕松...
摘要:本文將以多主機網(wǎng)絡(luò)環(huán)境為基礎(chǔ),探討如何利用內(nèi)置編排工具模式對各主機上的容器加以管理。在本文中,我們將立足于臺主機與在負載均衡之上部署應(yīng)用程序容器,同時將其接入一套覆蓋網(wǎng)絡(luò)。管理節(jié)點會利用負載均衡以將服務(wù)公布至集群之外。 本文將以多主機網(wǎng)絡(luò)環(huán)境為基礎(chǔ),探討如何利用內(nèi)置編排工具 Docker Swarm模式對各主機上的容器加以管理。 Docker Engine – Swarm模式 在...
閱讀 2225·2019-08-30 15:53
閱讀 2454·2019-08-30 12:54
閱讀 1204·2019-08-29 16:09
閱讀 730·2019-08-29 12:14
閱讀 757·2019-08-26 10:33
閱讀 2483·2019-08-23 18:36
閱讀 2960·2019-08-23 18:30
閱讀 2121·2019-08-22 17:09