原創(chuàng)文章源织,歡迎轉(zhuǎn)載。轉(zhuǎn)載請(qǐng)注明:轉(zhuǎn)載自IT人故事會(huì),謝謝退渗!
原文鏈接地址:『中級(jí)篇』集群服務(wù)間通信之RoutingMesh(47)
上次講了通過(guò)service create 部署了wordpress导绷,我們的這個(gè)wordpress有2個(gè)service組成一個(gè)wordpress犀勒,一個(gè)mysql。這2個(gè)service運(yùn)行在不同的機(jī)器上邊妥曲,并且他們之前是可以進(jìn)行通信的贾费,可以通過(guò)servicename的方式通信。先創(chuàng)建mysql檐盟,wordpress查找mysql就是通過(guò)servicename這種方式褂萧。懂網(wǎng)絡(luò)的老鐵應(yīng)該就知道了,這里面肯定有DNS的功勞在里面葵萎。
實(shí)驗(yàn)的方式了解這個(gè)網(wǎng)絡(luò)
- 必須創(chuàng)建overlay的network
sudo docker network create -d overlay demo
- 創(chuàng)建一個(gè)service导犹,這個(gè)service 使用whoami,這個(gè)image羡忘,這個(gè)image的作用谎痢,就是訪問(wèn)后,返回當(dāng)前訪問(wèn)的主機(jī)名稱
docker service create --name whoami -p 8000:8000 --network demo jwilder/whoami
#查看service 里面的服務(wù)
docker service ls
#查看whoami的信息
docker service ps whoami
#因?yàn)閟ervice ps whoami 在manager上運(yùn)行卷雕,直接在manager查看ps下
docker ps
#訪問(wèn)下本地manager的whoami
curl 127.0.0.1:8000
- 創(chuàng)建一個(gè)service节猿,這個(gè)service 使用busybox,之前創(chuàng)建過(guò)是一個(gè)比較簡(jiǎn)單的image爽蝴,這個(gè)是為了當(dāng)客戶端service之間的訪問(wèn)沐批。
docker service create --name client -d --network demo busybox sh -c "while true;do sleep 3600;done"
docker service ls
#運(yùn)行在swam-worker1機(jī)器上
docker service ps client
#在swam-work1上進(jìn)行運(yùn)行 172.28.128.4
docker exec -it busybox的容器ID sh
ping whoami
ping whoami ip地址是10.0.0.247
- 測(cè)試whoami的ip是否發(fā)生變化
在manager下進(jìn)行scale 擴(kuò)展為2個(gè)纫骑,查看到一個(gè)在worker2上邊,并在worker2的ps上可以查看到whoami的運(yùn)行九孩,嘗試?yán)^續(xù)ping whoami先馆,結(jié)果ip不發(fā)生變化。
#manager機(jī)器上進(jìn)行擴(kuò)展
docker service scale whoami=2
#worker2 上運(yùn)行 查看whoami 是否存在
docker ps
#worker1 上ping whoami發(fā)現(xiàn)ip沒(méi)有發(fā)生變化10.0.0.247
ping whoami
為什么呢 ip不發(fā)生變化躺彬,其實(shí)我們ping的地址是一個(gè)虛擬的ip煤墙,docker 集群默認(rèn)使用 Overlay 網(wǎng)絡(luò)驅(qū)動(dòng),Overlay 驅(qū)動(dòng)實(shí)現(xiàn)了跨主機(jī)集群內(nèi)部虛擬網(wǎng)絡(luò)宪拥。它的作用:將運(yùn)行的多個(gè)容器(不同主機(jī))仿野,附加(attach to)到一個(gè)網(wǎng)絡(luò)默認(rèn)情況下,服務(wù)發(fā)現(xiàn)為群集中的每個(gè)服務(wù)分配虛擬IP地址(VIP)和 動(dòng)態(tài) DNS她君,使其可以通過(guò)服務(wù)名稱將其提供給同一網(wǎng)絡(luò)上的容器脚作。即在一個(gè) Overlay 虛擬網(wǎng)絡(luò)內(nèi),使用服務(wù)名稱訪問(wèn)缔刹,將實(shí)現(xiàn)任務(wù)級(jí)別的負(fù)載均衡在群集中使用覆蓋網(wǎng)絡(luò)球涛,需要在群集節(jié)點(diǎn)之間打開(kāi)以下端口:
端口7946 TCP / UDP用于容器網(wǎng)絡(luò)發(fā)現(xiàn)。
端口4789 UDP用于容器覆蓋網(wǎng)絡(luò)校镐。
機(jī)器進(jìn)行遷移的時(shí)候有一套map<k,v>關(guān)系亿扁,虛擬ip 和實(shí)際的ip 有個(gè)對(duì)應(yīng)的關(guān)系,
- 輪訓(xùn)的負(fù)載機(jī)制
wget whoami:8000
more index.html
#因?yàn)槟壳熬陀?個(gè)whoami鸟廓,
#所以可以看到第三次執(zhí)行wget獲取的時(shí)候發(fā)現(xiàn)id重復(fù)了也變成了65beb6796165
Routing Mesh的體驗(yàn)
- Internal --- Container 和Container 之間的訪問(wèn)通過(guò)overlay網(wǎng)絡(luò)(通過(guò)VIP虛擬IP)
- Ingress---- 如果服務(wù)有綁定接口从祝,則此服務(wù)可以通過(guò)任意swarm節(jié)點(diǎn)的響應(yīng)接口訪問(wèn)
Load Balancing
現(xiàn)在有3臺(tái)機(jī)器1個(gè)client,2個(gè)web引谜,他們3個(gè)連通在同一個(gè)swam下牍陌,當(dāng)client訪問(wèn)web的時(shí)候其實(shí),其實(shí)是訪問(wèn)10.0.9.4煌张,然后通過(guò)負(fù)載的方式映射到10.0.9.5或者10.0.9.6上面呐赡。
PS:內(nèi)部負(fù)載均衡
當(dāng)在docker swarm集群模式下創(chuàng)建一個(gè)服務(wù)時(shí),會(huì)自動(dòng)在服務(wù)所屬的網(wǎng)絡(luò)上給服務(wù)額外的分配一個(gè)虛擬IP骏融,當(dāng)解析服務(wù)名字時(shí)就會(huì)返回這個(gè)虛擬IP。對(duì)虛擬IP的請(qǐng)求會(huì)通過(guò)overlay網(wǎng)絡(luò)自動(dòng)的負(fù)載到這個(gè)服務(wù)所有的健康任務(wù)上萌狂。這個(gè)方式也避免了客戶端的負(fù)載均衡档玻,因?yàn)橹挥袉为?dú)的一個(gè)虛擬IP會(huì)返回到客戶端,docker會(huì)處理虛擬IP到具體任務(wù)的路由茫藏,并把請(qǐng)求平均的分配給所有的健康任務(wù)误趴。
往期精彩
- docker導(dǎo)學(xué)(一)
- 容器的技術(shù)概述(二)
- docker的魅力初體驗(yàn)-5分鐘安裝wordpress不走彎路(三)
- docker官網(wǎng)介紹(四)
- 如何在mac上安裝docker(五)
- 如何在window上安裝docker(六)
- 如何在mac上通過(guò)vagrant安裝虛擬機(jī)(七)
- 如何在window上通過(guò)vagrant安裝虛擬機(jī)(八)
- docker-Machine的本地使用(九)
- docker-Machine的本地使用(十)
- 在linux/mac下通過(guò)Docker-Machine在阿里云上的使用(11)
- docker架構(gòu)和底層技術(shù)(12)
- docker Image概述(13)
- 手動(dòng)建立一個(gè)base Image(14)
- 什么是Container(15)
- 構(gòu)建自己的Docker鏡像(16)
- Dockerfile詳解(17)
- 鏡像的發(fā)布(18)
- Dockerfile實(shí)戰(zhàn)(19)
- 容器的操作(20)
- Dockerfile實(shí)戰(zhàn)CMD和ENTRTYPOINT的配合(21)
- 容器的資源限制(22)
- docker網(wǎng)絡(luò)(23)
- docker學(xué)習(xí)必會(huì)網(wǎng)絡(luò)基礎(chǔ)(24)
- Linux網(wǎng)絡(luò)命名空間(25)
- Docker Bridge詳解(26)
- 容器之間的Link(27)
- 容器的端口映射(28)
- 容器網(wǎng)絡(luò)之host和none(29)
- 多容器復(fù)雜應(yīng)用的部署(30)
- overlay網(wǎng)絡(luò)和etcd實(shí)現(xiàn)多機(jī)的容器通信(31)
- docker的數(shù)據(jù)持久化存儲(chǔ)和數(shù)據(jù)共享(32)
- windows下vagrant 通過(guò)SecureCRT連接centos7(33)
- 數(shù)據(jù)持久化之Data Volume(34)
- 數(shù)據(jù)持久化之bind Mounting(35)
- docker 使用bind Mounting實(shí)戰(zhàn)(36)
- docker容器安裝wordpress(37)
- docker Compose到底是什么(38)
- Docker Compose的安裝和基本使用(39)
- Docker 水平擴(kuò)展和負(fù)載均衡(40)
- Docker compose 部署一個(gè)復(fù)雜的應(yīng)用(41)
- 容器編排Docker Swarm介紹(42)
- docker-swarm創(chuàng)建一個(gè)多節(jié)點(diǎn)集群(43)
- play with docker 的使用(44)
- docker-swarm中的Service創(chuàng)建維護(hù)和水平擴(kuò)展(45)
-
在docker-swarm集群里通過(guò)serivce部署wordpress(46)