摘要:后續將其他節點加入集群都會用到這個值將節點加入集群查看節點信息相關命令創建服務更新服務刪除服務減少服務實例增加服務實例查看所有服務查看服務的容器狀態查看服務的詳細信息。
本篇是Docker第十三篇,Docker的使用至此就介紹完成,接下來繼續Kubernetes。
我們從Docker到Docker Compose都是在單機上完成,這樣會帶來一個很現實的問題就是高可用的問題,如果只部署到一臺機器是無法做到高可用的,這樣就不具備生產的條件;
Docker Compose只是簡單做了單機服務的編排、擴容,對于多機器的管理、發布、服務發現、負載均衡都沒有很好的解決;
目前我們所有的容器都是在單個宿主機上進行網絡通信,多機情況的網絡通信也沒有解決方案;
針對以上三點,Docker給出了Docker Swarm的解決方案,Docker swarm可以讓用戶輕松在多個機器上發布和管理應用,并且我們不需要關注每個容器實例具體落在哪一個節點,Docker swarm把我們的應用以服務的形式暴露出去,并內置服務發現和負載均衡,讓運行在多個節點上的容器集群感覺就像只有一個應用在跑一樣簡單,可以輕松實現擴容和自動容錯。Docker swarm集群通常有幾個工作程序節點和至少一個管理程序節點,負責高效地處理工作程序節點的資源并確保集群有效地運行,提高了應用可用性。
Manger 節點是負責管理工作的,從名字就可以看出,注意負責以下事情:
維護集群的狀態;
對 Services 進行調度;
為 Swarm 集群提供外部可調用的 API 接口;
提供服務注冊發現、負責均衡等功能;
Manager 節點需要時刻維護和保存當前 Swarm 集群中各個節點的一致性狀態,在保證一致性上,Manager 節點采用 Raft 協議來保證分布式場景下的數據一致性;
Worker 節點是用來執行 Task 的;默認情況下 Manager 節點也同樣是 Worker 節點,同樣可以執行 Task;
Services 是指一組任務的集合,服務定義了任務的屬性,比如任務的個數、服務策略、鏡像的版本號等等,服務有兩種模式:
Task是 Swarm 集群中的最小的調度單位,任務包含一個Docker容器和在容器內運行的命令,如果某一個任務奔潰,那么協調器將創建一個新的副本任務,該任務將生成一個新的容器;
Task調度主要分為兩部分: Manager節點的任務分配和Worker節點的任務執行;
Manager節點的任務分配主要有以下四步:
用戶通過 Docker Engine Client 使用命令 docker service create 提交 Service 定義;
Manager節點根據定義創建相應的 Task,并分配IP地址;
將Task分發到對應的節點上;
節點進行相應的初始化使得它可以執行Task;
Worker節點的任務執行主要有兩步:
注意,上述 Task 的執行過程是一種單向機制,比如它會按順序的依次經歷 assigned, prepared 和 running 等執行狀態,不過在某些特殊情況下,在執行過程中,某個 Task 執行失敗了,Manager 的編排器會直接將該 Task 以及它的 Container 給刪除掉,然后在其它節點上另外創建并執行該 Task;
Overlay Network:管理 Swarm 中 Docker 守護進程間的通信。你可以將服務附加到一個或多個已存在的 overlay 網絡上,使得服務與服務之間能夠通信;
Ingress Network:一個特殊的 overlay 網絡,用于服務節點間的負載均衡。當任何 Swarm 節點在發布的端口上接收到請求時,它將該請求交給一個名為 IPVS 的模塊。IPVS 跟蹤參與該服務的所有IP地址,選擇其中的一個,并通過 ingress 網絡將請求路由到它。初始化或加入 Swarm 集群時會自動創建 ingress 網絡,大多數情況下,用戶不需要自定義配置,但是 docker 17.05 和更高版本允許你自定義;
Docker Gwbridge Network:一種橋接網絡,將 overlay 網絡連接到一個多帶帶的 Docker 守護進程的物理網絡。默認情況下,服務正在運行的每個容器都連接到本地 Docker 守護進程主機的 docker_gwbridge 網絡,一種橋接網絡,將 overlay 網絡(包括 ingress 網絡)連接到一個多帶帶的 Docker 守護進程的物理網絡。默認情況下,服務正在運行的每個容器都連接到本地 Docker 守護進程主機的 docker_gwbridge 網絡;
Docker Swarm 數據流量分為兩個層面:
節點全部使用CentOS8.2版, 這邊準備了兩個node節點和一個master節點:
保證每個主機之間都能相互ping通并且2377端口可以telnet保持暢通, 每個節點都安裝了Docker。
docker swarm init --advertise-addr 172.16.0.191
docker swarm join --token SWMTKN-1-3cap7omkvmyuf0q1ybm868880eo5reoil8pcbovmejfzw6pil8-73hc367s4gitudqivrdirvu63 172.16.0.191:2377
docker node ls
# 創建服務 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 # 查看服務的容器狀態 docker service ps nginx # 查看服務的詳細信息。 docker service inspect nginx
docker service create --replicas 2 --name nginx --publish 8080:80 nginx
docker service ps swarm-nginx
curl 172.16.0.45:8080 curl 192.168.0.231:8080
Internal容器與容器之間通過overlay網絡進行訪問,通過service name進行通信,但是service name所對應的ip不是真實ip而是VIP,我們可以下面這個案例進行驗證:
docker network create --driver overlay swarm-overlay #查看網絡狀況 docker network ls
docker service create --name nginx -p 8080:80 --network swarm-overlay -d nginx
docker service create --name busybox -d --network swarm-overlay busybox:1.28.3 sh -c while true; do sleep 7200; done
docker service ls
docker exec -it 2f55d73adfb4 sh ping nginx
當在任何一個Swarm節點去訪問端口服務的時候會通過本節點的IPVS ( ip virtual service )到真正的Swarm節點上。提供以下三種功能:
外部訪問的均衡負載;
服務端口暴露到各個Swarm節點;
內部通過IPVS進行均衡負載;
接著Internal案例繼續進行探索,Swarm節點內部是如何進行轉發的;
iptables -nL -t nat
brctl show
docker network inspect docker_gwbridge
#查找ingress_sbox位置 ls /var/run/docker/netns #進入ingress_sbox nsenter --net=/var/run/docker/netns/ingress_sbox #查看ingress_sbox iptables iptables -nL -t mangle
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/125378.html
摘要:不要用百度搜索中文資料,一定要看最新的英文資料。感謝感謝能容忍我無數次搞掛生產環境的老板。群蝸牛大神所建中文交流群,基本配置過程中遇到的問題都能得到解決。 前言 最近花了將近一個月的時間研究了 Docker 在生產環境中的使用,作為新手,期間走了無數的彎路,這里紀錄一下,希望給別人帶來微小的幫助。 前面幾部分,介紹了在搭建集群之前需要做的一些工作,后面 一塊結合實際應用,介紹如何架構...
摘要:譯者按實踐中會發現,生產環境中使用單個節點是遠遠不夠的,搭建集群勢在必行。集群的網絡通信服務發現,負載均衡以及容器間通信非常可靠。負載均衡也是由提供的。 譯者按: 實踐中會發現,生產環境中使用單個Docker節點是遠遠不夠的,搭建Docker集群勢在必行。然而,面對Kubernetes, Mesos以及Swarm等眾多容器集群系統,我們該如何選擇呢?它們之中,Swarm是Docker原...
摘要:由于沒有了中心化的負載均衡器,集群不會因某臺機器異常而導致整個服務對外不可用,很好的避免了單點問題,同時也帶了可擴展性。 Mesos/Marathon 折騰久了,我們一直希望有機會深入到 Swarm 內部一探究竟。 另外, Mesos 這一套東西雖然是久經企業級考驗的, 但是安裝、部署和使用相對復雜,上手有門檻。同時,在今年的 DockerCon 上,內置了Swarm 功能的 Dock...
摘要:首先啟動該命令。這項機制在實際生產當中無疑非常重要。那么下面我們回顧一下之前了解到的信息我們創建了一款小型動態微服務應用,完全由構成。在多數情況下,這能夠為應用后端服務建立起獨立的代理機制。 這次數人云與大家分享的文章里,主要介紹了Docker Swarm如何憑借革新對整體場景進一步加以簡化。事實上,如今我們已經可以輕松且直觀地構建起一套Docker Swarm集群,快來一起體驗一下吧...
閱讀 713·2023-04-25 19:43
閱讀 3910·2021-11-30 14:52
閱讀 3784·2021-11-30 14:52
閱讀 3852·2021-11-29 11:00
閱讀 3783·2021-11-29 11:00
閱讀 3869·2021-11-29 11:00
閱讀 3557·2021-11-29 11:00
閱讀 6105·2021-11-29 11:00