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

資訊專欄INFORMATION COLUMN

Docker Swarm介紹

番茄西紅柿 / 3187人閱讀

摘要:后續(xù)將其他節(jié)點加入集群都會用到這個值將節(jié)點加入集群查看節(jié)點信息相關命令創(chuàng)建服務更新服務刪除服務減少服務實例增加服務實例查看所有服務查看服務的容器狀態(tài)查看服務的詳細信息。

前言

本篇是Docker第十三篇,Docker的使用至此就介紹完成,接下來繼續(xù)Kubernetes。

Docker系列文章:
  1. 為什么要學習Docker
  2. Docker基本概念
  3. Docker鏡像基本原理
  4. Docker容器數(shù)據(jù)卷
  5. Dockerfile
  6. Docker單機網(wǎng)絡上
  7. Docker單機網(wǎng)絡下
  8. Docker單機網(wǎng)絡實戰(zhàn)
  9. Docker隔離技術
  10. Docker限制
  11. Docker Compose
  12. Docker多機網(wǎng)絡

為什么需要Docker Swarm

  1. 我們從Docker到Docker Compose都是在單機上完成,這樣會帶來一個很現(xiàn)實的問題就是高可用的問題,如果只部署到一臺機器是無法做到高可用的,這樣就不具備生產(chǎn)的條件;

  2. Docker Compose只是簡單做了單機服務的編排、擴容,對于多機器的管理、發(fā)布、服務發(fā)現(xiàn)、負載均衡都沒有很好的解決;

  3. 目前我們所有的容器都是在單個宿主機上進行網(wǎng)絡通信,多機情況的網(wǎng)絡通信也沒有解決方案;

針對以上三點,Docker給出了Docker Swarm的解決方案,Docker swarm可以讓用戶輕松在多個機器上發(fā)布和管理應用,并且我們不需要關注每個容器實例具體落在哪一個節(jié)點,Docker swarm把我們的應用以服務的形式暴露出去,并內(nèi)置服務發(fā)現(xiàn)和負載均衡,讓運行在多個節(jié)點上的容器集群感覺就像只有一個應用在跑一樣簡單,可以輕松實現(xiàn)擴容和自動容錯。Docker swarm集群通常有幾個工作程序節(jié)點和至少一個管理程序節(jié)點,負責高效地處理工作程序節(jié)點的資源并確保集群有效地運行,提高了應用可用性。

Docker Swarm概念介紹

Manager Node

Manger 節(jié)點是負責管理工作的,從名字就可以看出,注意負責以下事情:

  1. 維護集群的狀態(tài);

  2. 對 Services 進行調(diào)度;

  3. 為 Swarm 集群提供外部可調(diào)用的 API 接口;

  4. 提供服務注冊發(fā)現(xiàn)、負責均衡等功能;

Manager 節(jié)點需要時刻維護和保存當前 Swarm 集群中各個節(jié)點的一致性狀態(tài),在保證一致性上,Manager 節(jié)點采用 Raft 協(xié)議來保證分布式場景下的數(shù)據(jù)一致性;

Worker Node

Worker 節(jié)點是用來執(zhí)行 Task 的;默認情況下 Manager 節(jié)點也同樣是 Worker 節(jié)點,同樣可以執(zhí)行 Task;

Service

Services 是指一組任務的集合,服務定義了任務的屬性,比如任務的個數(shù)、服務策略、鏡像的版本號等等,服務有兩種模式:

  1. replicated services 按照一定規(guī)則在各個工作節(jié)點上運行指定個數(shù)的任務;
  2. global services 每個工作節(jié)點上運行一個任務;

Task

Task是 Swarm 集群中的最小的調(diào)度單位,任務包含一個Docker容器和在容器內(nèi)運行的命令,如果某一個任務奔潰,那么協(xié)調(diào)器將創(chuàng)建一個新的副本任務,該任務將生成一個新的容器;

Task調(diào)度

Task調(diào)度主要分為兩部分: Manager節(jié)點的任務分配和Worker節(jié)點的任務執(zhí)行;

Manager節(jié)點的任務分配主要有以下四步:

  1. 用戶通過 Docker Engine Client 使用命令 docker service create 提交 Service 定義;

  2. Manager節(jié)點根據(jù)定義創(chuàng)建相應的 Task,并分配IP地址;

  3. 將Task分發(fā)到對應的節(jié)點上;

  4. 節(jié)點進行相應的初始化使得它可以執(zhí)行Task;

Worker節(jié)點的任務執(zhí)行主要有兩步:

  1. 連接Manager節(jié)點的分配器檢查該Task相關定義的信息;
  2. 驗證通過以后,開始在 Worker 節(jié)點上執(zhí)行Task;

注意,上述 Task 的執(zhí)行過程是一種單向機制,比如它會按順序的依次經(jīng)歷 assigned, prepared 和 running 等執(zhí)行狀態(tài),不過在某些特殊情況下,在執(zhí)行過程中,某個 Task 執(zhí)行失敗了,Manager 的編排器會直接將該 Task 以及它的 Container 給刪除掉,然后在其它節(jié)點上另外創(chuàng)建并執(zhí)行該 Task;

Docker Swarm網(wǎng)絡

核心概念介紹

  1. Overlay Network:管理 Swarm 中 Docker 守護進程間的通信。你可以將服務附加到一個或多個已存在的 overlay 網(wǎng)絡上,使得服務與服務之間能夠通信;

  2. Ingress Network:一個特殊的 overlay 網(wǎng)絡,用于服務節(jié)點間的負載均衡。當任何 Swarm 節(jié)點在發(fā)布的端口上接收到請求時,它將該請求交給一個名為 IPVS 的模塊。IPVS 跟蹤參與該服務的所有IP地址,選擇其中的一個,并通過 ingress 網(wǎng)絡將請求路由到它。初始化或加入 Swarm 集群時會自動創(chuàng)建 ingress 網(wǎng)絡,大多數(shù)情況下,用戶不需要自定義配置,但是 docker 17.05 和更高版本允許你自定義;

  3. Docker Gwbridge Network:一種橋接網(wǎng)絡,將 overlay 網(wǎng)絡連接到一個多帶帶的 Docker 守護進程的物理網(wǎng)絡。默認情況下,服務正在運行的每個容器都連接到本地 Docker 守護進程主機的 docker_gwbridge 網(wǎng)絡,一種橋接網(wǎng)絡,將 overlay 網(wǎng)絡(包括 ingress 網(wǎng)絡)連接到一個多帶帶的 Docker 守護進程的物理網(wǎng)絡。默認情況下,服務正在運行的每個容器都連接到本地 Docker 守護進程主機的 docker_gwbridge 網(wǎng)絡;

流量分類

Docker Swarm 數(shù)據(jù)流量分為兩個層面:

  1. 控制管理流量(control and management plane traffic): 包括 Swarm 管理消息,例如加入/退出 Swarm 的請求,這些流量總是被加密的;
  1. 應用數(shù)據(jù)流量(Application data plane traffic): 包括容器之間的數(shù)據(jù)交換,以及容器與外部網(wǎng)絡的數(shù)據(jù)交換,關于這塊的原理探討放在實踐的地方;

集群搭建

資源準備

節(jié)點全部使用CentOS8.2版, 這邊準備了兩個node節(jié)點和一個master節(jié)點:

  1. IP:172.16.0.191 主機名:demo-master-1 擔任角色:Swarm Manager
  2. IP:172.16.0.45 主機名:demo-slave-1  擔任角色:Swarm Node
  3. IP:192.168.0.231 主機名:demo-slave-2:Swarm Node

保證每個主機之間都能相互ping通并且2377端口可以telnet保持暢通, 每個節(jié)點都安裝了Docker。

集群安裝

  1. 初始化Master節(jié)點,命令執(zhí)行后,該機器自動加入到swarm集群。這個會創(chuàng)建一個集群token,獲取全球唯一的 token,作為集群唯一標識。后續(xù)將其他節(jié)點加入集群都會用到這個token值;
docker swarm init --advertise-addr 172.16.0.191
  1. 將Node節(jié)點加入集群;
docker swarm join --token SWMTKN-1-3cap7omkvmyuf0q1ybm868880eo5reoil8pcbovmejfzw6pil8-73hc367s4gitudqivrdirvu63 172.16.0.191:2377
  1. 查看Master節(jié)點信息;
docker node ls
  1. 相關命令;
# 創(chuàng)建服務
docker service create /  
  --image nginx /
  --replicas 2 /
  nginx 

# 更新服務
docker service update /  
  --image nginx:alpine /
  nginx 

# 刪除服務
docker service rm nginx

# 減少服務實例
docker service scale nginx=0

# 增加服務實例
docker service scale nginx=5

# 查看所有服務
docker service ls

# 查看服務的容器狀態(tài)
docker service ps nginx

# 查看服務的詳細信息。
docker service inspect nginx

實戰(zhàn)

  1. 在Manager節(jié)點部署Nginx服務,服務數(shù)量為2個,對外暴露的端口是8080映射容器內(nèi)部的80端口,使用Nginx鏡像;
docker service create --replicas 2 --name nginx --publish 8080:80  nginx
  1. 查看容器分布狀況;
docker service ps swarm-nginx
  1. 訪問服務;
curl 172.16.0.45:8080
curl 192.168.0.231:8080

Internal

Internal容器與容器之間通過overlay網(wǎng)絡進行訪問,通過service name進行通信,但是service name所對應的ip不是真實ip而是VIP,我們可以下面這個案例進行驗證:

  1. 開始實驗前移除創(chuàng)建的服務,創(chuàng)建一個overlay的Network;
docker network create --driver overlay swarm-overlay
#查看網(wǎng)絡狀況
docker network ls
  1. 創(chuàng)建一個nginx的service ,使用swarm-overlay網(wǎng)絡;
docker service create --name nginx -p 8080:80 --network swarm-overlay -d nginx
  1. 再創(chuàng)建一個busybox服務;
docker service create --name busybox -d --network swarm-overlay  busybox:1.28.3 sh -c while true; do sleep 7200; done
  1. 查看服務列表;
docker service ls
  1. 進入busybox服務內(nèi)部,使用ping命令訪問nginx服務,我們會發(fā)現(xiàn)可以訪問;
docker exec -it 2f55d73adfb4 sh
ping nginx

Ingress

當在任何一個Swarm節(jié)點去訪問端口服務的時候會通過本節(jié)點的IPVS ( ip virtual service )到真正的Swarm節(jié)點上。提供以下三種功能:

  1. 外部訪問的均衡負載;

  2. 服務端口暴露到各個Swarm節(jié)點;

  3. 內(nèi)部通過IPVS進行均衡負載;

接著Internal案例繼續(xù)進行探索,Swarm節(jié)點內(nèi)部是如何進行轉(zhuǎn)發(fā)的;

  1. 查看工作節(jié)點的轉(zhuǎn)發(fā)規(guī)則,我們可以看到把請求轉(zhuǎn)發(fā)到172.18.0.2:8000這個地址上去了;
iptables -nL -t nat
  1. 接下來我們查看下本機的網(wǎng)絡情況,我們找到了docker_gwbridge,可以看到兩個ip處于同一網(wǎng)段,那么172.18.0.2應該也連接上docker_gwbridge;
  1. 查看docker_gwbridge的interface 信息,我們會發(fā)現(xiàn)有多個interface;
brctl show
  1. 接下來我們查看下docker_gwbridge網(wǎng)絡信息,我們可以發(fā)現(xiàn)ingress-sbox就是我們要找的命名空間,gateway_ingress-sbox就是所屬的容器;
docker network inspect docker_gwbridge
  1. 進入ingress_sbox內(nèi)部,查看iptables規(guī)則,可以看到發(fā)送到該ip地址下的8000端口的請求被負載掉了;
#查找ingress_sbox位置
ls /var/run/docker/netns
#進入ingress_sbox
nsenter --net=/var/run/docker/netns/ingress_sbox
#查看ingress_sbox iptables 
iptables -nL -t mangle

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

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

相關文章

  • Docker 實踐(五):生產(chǎn)環(huán)境容器化

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

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

    摘要:譯者按實踐中會發(fā)現(xiàn),生產(chǎn)環(huán)境中使用單個節(jié)點是遠遠不夠的,搭建集群勢在必行。集群的網(wǎng)絡通信服務發(fā)現(xiàn),負載均衡以及容器間通信非常可靠。負載均衡也是由提供的。 譯者按: 實踐中會發(fā)現(xiàn),生產(chǎn)環(huán)境中使用單個Docker節(jié)點是遠遠不夠的,搭建Docker集群勢在必行。然而,面對Kubernetes, Mesos以及Swarm等眾多容器集群系統(tǒng),我們該如何選擇呢?它們之中,Swarm是Docker原...

    loonggg 評論0 收藏0
  • 基于 Docker 1.12 Swarm 的集群管理開發(fā)實踐

    摘要:由于沒有了中心化的負載均衡器,集群不會因某臺機器異常而導致整個服務對外不可用,很好的避免了單點問題,同時也帶了可擴展性。 Mesos/Marathon 折騰久了,我們一直希望有機會深入到 Swarm 內(nèi)部一探究竟。 另外, Mesos 這一套東西雖然是久經(jīng)企業(yè)級考驗的, 但是安裝、部署和使用相對復雜,上手有門檻。同時,在今年的 DockerCon 上,內(nèi)置了Swarm 功能的 Dock...

    My_Oh_My 評論0 收藏0
  • 代碼篇 | Docker1.12+Swarm構(gòu)建動態(tài)微服務應用

    摘要:首先啟動該命令。這項機制在實際生產(chǎn)當中無疑非常重要。那么下面我們回顧一下之前了解到的信息我們創(chuàng)建了一款小型動態(tài)微服務應用,完全由構(gòu)成。在多數(shù)情況下,這能夠為應用后端服務建立起獨立的代理機制。 這次數(shù)人云與大家分享的文章里,主要介紹了Docker Swarm如何憑借革新對整體場景進一步加以簡化。事實上,如今我們已經(jīng)可以輕松且直觀地構(gòu)建起一套Docker Swarm集群,快來一起體驗一下吧...

    JellyBool 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<