三、Docker 集群管理與應用

(一)項目案例

1、準備主機

(1)關閉防火墻,或者開放TCP端口2377(用于集群管理通信)、TCP/UPD端口7946(用于節點之間的通信)、UDP端口4789(用于overlay網絡流量監控)

(2)安裝docker

(3)設置靜態ip

(4)修改主機名

2、創建Swarm集群

(1)主節點創建新的Swarm集群

[root@manager01 ~]# docker swarm init --advertise-addr 192.168.75.129
Swarm initialized: current node (y8rm15jh2qs5e3qsh6n13cxfh) is now a manager.To add a worker to this swarm, run the following command:docker swarm join --token SWMTKN-1-48xia8024q8de6jxhca3whxenfeayo7hx8tdvg7lb1c28i4zfo-e8m7203crmlpwsmdfn3afyyss 192.168.75.129:2377To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

(2)第一個工作節點加入集群

[root@worker01 ~]# docker swarm join --token SWMTKN-1-48xia8024q8de6jxhca3whxenfeayo7hx8tdvg7lb1c28i4zfo-e8m7203crmlpwsmdfn3afyyss 192.168.75.129:2377

(3)第二個工作節點加入集群

[root@worker02 ~]# docker swarm join --token SWMTKN-1-48xia8024q8de6jxhca3whxenfeayo7hx8tdvg7lb1c28i4zfo-e8m7203crmlpwsmdfn3afyyss 192.168.75.129:2377
This node joined a swarm as a worker.

(4)查看集群節點信息

[root@manager01 ~]# docker info

3、查看節點信息

[root@manager01 ~]# docker node inspect worker01 --pretty

注:

(1)STATUS列表示節點當前狀態,Ready表示正常,Down表示已宕機

(2)AVAILABILITY列表示該節點的可用性狀態,有3種狀態

  • 活動(Active):調度器能夠安排任務到該節點。
  • 暫停(Pause):調度器不能安排任務到該節點。但是已經存在的任務會繼續運行
  • 候選者(Drain):調度器不能安排任務到該節點,且會停止已存在的任務,并將這些任務分配到其他處于活動狀態的節點中。

(3)MANAGER STATUS列表示管理器狀態,共有以下4中狀態

  • 領導者(Leader):為Swarm集群做出所有管理和編排的主要管理器節點
  • 候選者(Reachable):如果領導節點變為不可用,則候選者節點有資格成為新的領導者節點。
  • 不可用(Unavailable):該節點不能和其他管理節點產生任何聯系,這種情況下,應該添加一個新的管理器節點到集群中,或者將一個工作節點升級為管理器節點。
  • 空白:表明該節點是工作者節點

4、讓節點脫離集群

(1)在工作節點執行,使worker02脫離集群,要在worker02主機上執行

[root@worker02 ~]# docker swarm leave

(2)在主節點查看worker02的信息,并刪除該節點

[root@manager01 ~]# docker node ls
ID                            HOSTNAME    STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
y8rm15jh2qs5e3qsh6n13cxfh *   manager01   Ready     Active         Leader           23.0.2
f0aw8dor6hlkth9kzy4m3k0vt     worker01    Ready     Active                          23.0.2
xjpsue874nrm0hm3tw39mvwhl     worker02    Down      Active                          23.0.2
[root@manager01 ~]# docker node rm worker02
worker02
[root@manager01 ~]#

5、讓節點以管理器角色加入集群

(1)獲取加入管理角色的命令

[root@manager01 ~]# docker swarm join-token manager
To add a manager to this swarm, run the following command:docker swarm join --token SWMTKN-1-48xia8024q8de6jxhca3whxenfeayo7hx8tdvg7lb1c28i4zfo-3davlb9zjkr6gvvkrtu8mz3w2 192.168.75.129:2377[root@manager01 ~]# 

(2)worker02加入集群的管理節點

[root@worker02 ~]# docker swarm join --token SWMTKN-1-48xia8024q8de6jxhca3whxenfeayo7hx8tdvg7lb1c28i4zfo-3davlb9zjkr6gvvkrtu8mz3w2 192.168.75.129:2377

(3)查看集群節點信息

[root@manager01 ~]# docker node ls
ID                            HOSTNAME    STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
y8rm15jh2qs5e3qsh6n13cxfh *   manager01   Ready     Active         Leader           23.0.2
f0aw8dor6hlkth9kzy4m3k0vt     worker01    Ready     Active                          23.0.2
pgm7vq62akim0ms9kz8duguru     worker02    Ready     Active         Reachable        23.0.2
[root@manager01 ~]# 

6、降級和升級節點

(1)在管理節點降級為工作節點,在管理節點執行

[root@worker02 ~]# docker node demote worker02

(2)在工作節點升級為管理節點,在工作節點執行

[root@worker02 ~]# docker node promote worker02

(二)Docker Swarm 集群部署和管理服務

1、將服務部署到Swarm集群中

(1)創建服務

# docker service create --name swarm-web01 nginx

(2)使用docker service ls 命令查看正在運行的服務列表

# docker service ls
ID             NAME          MODE         REPLICAS   IMAGE          PORTS
r5wx100nb2t6   swarm-web01   replicated   1/1        nginx:latest 
REPLICAS列為m/n:n代表副本數,m代表正在運行的副本

(3)使用 docker service ps 命令查看顯示任務列表信息,查看每個副本運行節點的狀態信息

[root@master01 ~]# docker service ps swarm-web01

(4)使用docker service inspect 顯示有關服務的詳細信息,–pretty選項表示易于閱讀的格式

[root@master01 ~]# docker service inspect --pretty swarm-web01ID:		r5wx100nb2t6vrtdsobnc1deg     #服務ID
Name:		swarm-web01               #服務名稱
Service Mode:	Replicated            #服務模式,這里為復制模式Replicas:	1                         #副本數
Placement:                            #服務配置
UpdateConfig:Parallelism:	1On failure:	pauseMonitoring Period: 5sMax failure ratio: 0Update order:      stop-first
RollbackConfig:                       #回滾配置Parallelism:	1On failure:	pauseMonitoring Period: 5sMax failure ratio: 0Rollback order:    stop-first
ContainerSpec:                        #容器定義Image:		nginx:latest@sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31Init:		false
Resources:
Endpoint Mode:	vip                   #端點模式

2、伸縮服務

(1)增加服務副本數
# docker service scale  swarm-web01=5 

查看任務列表(管理節點)

# docker service ps swarm-web01
(2)減少文件副本數
# docker service scale swarm-web01=3

3、刪除swarm服務

# docker service rm swarm-web01

4、對服務的任務進行滾動更新

(1)部署nginx到集群中,并配置8秒的更新延遲策略
# docker service create --replicas 3 --name my-web01 --update-delay 8s nginx

–update-delay 選項用于配置更新一個或多個任務之間的延遲時間,時間可以使用的單位有秒(s)、分鐘(min)或小時(h)、還可以組合使用更多單位的時間,如5min30s,表示延遲5分鐘30秒

默認情況下,調度器一次更新一個任務,可以通過 --update-parallelism 選項來配置調度器同事(并發)更新的最大服務任務數。

默認情況下,當對單個任務的更新完成并返回運行狀態時,調度器會調度另一個任務來更新,直到所有任務被更新。如果在任務更新期間的任何時間都返回失敗(FAILED)狀態,則調度器會暫停更新。可以使用 --update-failure-action 選項來控制 docker service create 或 docker service update 命令的行為。

(2)查看my-web01服務的詳細信息
[root@master01 ~]# docker service inspect my-web01 --prettyID:		c5k770ixaswchg3p96lsh9g3p
Name:		my-web01
Service Mode:	ReplicatedReplicas:	3
Placement:
UpdateConfig:                     #更新配置Parallelism:	1                 #同時更新的最大任務數Delay:		8s                    #更新之間的延遲操作時間On failure:	pause             #更新失敗后的操作Monitoring Period: 5s            #每個任務更新后的延遲時間Max failure ratio: 0             #更新期間容許的失敗率Update order:      stop-first    #更新順序
RollbackConfig:Parallelism:	1On failure:	pauseMonitoring Period: 5sMax failure ratio: 0Rollback order:    stop-first
ContainerSpec:                    #容器定義Image:		nginx:latest@sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31Init:		false
Resources:
Endpoint Mode:	vip
(3)使用 docker service update 命令更新容器鏡像
# docker service update --image nginx:latest my-web01
(4)手動回滾到前一個版本
# docker service update --rollback my-web01

(三)配置和管理Docker Swarm網絡

1、創建自定義overlay網絡

# docker network create -d overlay nginx-net01

查看創建的overlay網絡

# docker network ls

2、將swarm服務連接到自定義overlay網絡

部署服務時,如果不使用 --network 選項顯示聲明,則服務將連接到默認的ingress網絡,在生產環境下,建議使用自定義 overlay 網絡。

(1)創建服務并連接到 nginx-net01 網絡

# docker service create --name my-nginx01 --publish published=8000,target=80 --replicas=3 --network nginx-net01 nginx

(2)查看該服務的詳細信息

[root@master01 ~]# docker service inspect my-nginx01 --prettyID:		qxmmj8przpjlrdulxm57sz1l6
Name:		my-nginx01
Service Mode:	ReplicatedReplicas:	3
Placement:
UpdateConfig:Parallelism:	1On failure:	pauseMonitoring Period: 5sMax failure ratio: 0Update order:      stop-first
RollbackConfig:Parallelism:	1On failure:	pauseMonitoring Period: 5sMax failure ratio: 0Rollback order:    stop-first
ContainerSpec:Image:		nginx:latest@sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31Init:		false
Resources:
Networks: nginx-net01 
Endpoint Mode:	vip
Ports:PublishedPort = 8000         #發布端口Protocol = tcp              #發布協議TargetPort = 80             #目標端口PublishMode = ingress       #發布模式

注:自定義 overlay 網絡的服務發布模式仍然為ingress,即通過路由網發布。

(2)為 swarm 服務更換overlay 網絡連接。

創建新的網絡

# docker network create -d overlay nginx-net100

為服務添加overlay網絡

# docker service update --network-add nginx-net100 my-nginx01

(3)overlay 網絡在工作節點上會隨著服務的刪除而自動刪除,但在管理器節點上并不會自動刪除,在管理器節點上一次執行以下命令刪除上述服務和網絡

# docker service rm my-nginx01
# docker network rm nginx-net01 nginx-net100

3、驗證swarm服務發布模式

  • ipgress:路由網模式,不管該節點有沒有部署該服務,都能通過該節點訪問該服務
  • host:主機模式,如果該節點沒有部署該服務,這 curl http://未部署節點ip:80 無法訪問

(1)創建2個副本的服務,并以路由網模式對外發布端口

# docker service create --name my-nginx01 --publish published=8088,target=80 --replicas 2 nginx

(2)訪問worker02 節點上的服務(目前在worker02 節點未運行該服務),發現可以訪問

[root@master01 ~]# curl http://192.168.65.141:8088

(3)創建2個副本的服務,并以主機模式對外發布端口

# docker service create --name my-nginx02 --publish published=8080,target=80,mode=host --replicas 2 nginx

(4)查看服務的發布模式

[root@master01 ~]# docker service inspect my-nginx02 --pretty
...
...
Ports:PublishedPort = 8080Protocol = tcpTargetPort = 80PublishMode = host   #發布模式

(5)訪問worker02 節點上的服務(目前在worker02 節點未運行該服務),發現訪問被拒絕

[root@master01 ~]# curl http://192.168.65.141:8080
curl: (7) Failed connect to 192.168.65.141:8080; 拒絕連接

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/73065.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/73065.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/73065.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

網絡DNS怎么更改?

訪問速度慢或某些網站無法打開?改變網絡DNS設置可能會幫助解決這些問題。本文將詳細介紹如何更改網絡DNS,包括更改的原因、具體步驟。 一、為什么要更改DNS? 更改DNS的原因有很多,以下是一些主要的考慮因素:某些公共DNS服務器的響應速度比…

江科大51單片機筆記【12】DS18B20溫度傳感器(上)

寫在前言 此為博主自學江科大51單片機(B站)的筆記,方便后續重溫知識 在后面的章節中,為了防止篇幅過長和易于查找,我把一個小節分成兩部分來發,上章節主要是關于本節課的硬件介紹、電路圖、原理圖等理論…

基于springboot+vue的佳途旅行分享預約平臺

一、系統架構 前端:vue2 | element-ui | html 后端:springboot | mybatis-plus 環境:jdk1.8 | mysql | maven | node 二、代碼及數據庫 三、功能介紹 01. web端-注冊 02. web端-登錄 03. web端-系統主頁1 04. web端-系統主頁2 05. we…

【數據結構】2算法及分析

0 章節 1.4到1.5小節。 掌握算法概念、特性、描述、算法性能時間復雜度和空間復雜度; 理解遞歸含義? 掌握實現遞歸的條件和時機; 應用簡單遞歸問題的算法設計; 重點 算法…

【一起學Rust | Tauri2.0框架】基于 Rust 與 Tauri 2.0 框架實現軟件開機自啟

文章目錄 前言 一、準備工作1.1 環境搭建1.2 創建 Tauri 項目1.3 添加依賴 二、實現開機自啟的基本原理2.1 開機自啟的基本概念2.2 Tauri 應用的生命周期 三、Windows 平臺實現3.1 Windows 注冊表機制3.2 實現步驟3.3 注意事項 四、Linux 平臺實現4.1 Linux systemd 服務4.2 實…

一周熱點-OpenAI 推出了 GPT-4.5,這可能是其最后一個非推理模型

在人工智能領域,大型語言模型一直是研究的熱點。OpenAI 的 GPT 系列模型在自然語言處理方面取得了顯著成就。GPT-4.5 是 OpenAI 在這一領域的又一力作,它在多個方面進行了升級和優化。 1 新模型的出現 GPT-4.5 目前作為研究預覽版發布。與 OpenAI 最近的 o1 和 o3 模型不同,…

css中的浮動

在 CSS 中,浮動(float)是一種定位元素的方式,它允許元素脫離正常的文檔流,并向左或向右移動,直到其邊緣碰到包含塊或者另一個浮動元素的邊緣。下面從多個方面詳細介紹 CSS 浮動: 一&#xff0c…

element-plus中form表單組件的使用

1.如何讓每個表單項對齊? 問題描述:如下圖,每個表單項的輸入框/下拉框/日期選擇器是沒有對齊的,我們希望它們縱向是對齊的。 解決方案:給el-form標簽,加上label-width"100px"即可。意思就是給每個…

線性搜索算法

何時使用線性搜索算法? 當處理一個小數據集時。當搜索存儲在連續內存中的數據集時。 線性搜索算法在什么情況下優于其他搜索算法? 當列表或數組未排序時,或者當輸入的大小相對較小時,首選線性搜索算法。它易于實現,并…

踩坑記錄:yolov5環境版本要求比較嚴苛?

在安裝yolov5環境時,numpy安裝失敗報錯metadata-generation-failed 報錯如下: Collecting numpy1.18.5 (from -r /*****/yolov5-5.0/requirements.txt (line 5))Using cached https://pypi.tuna.tsinghua.edu.cn/packages/01/1b/d3ddcabd5817be02df0e6…

Java設計模式系列:單例模式的7種實現與適用場景

一、單例模式核心價值與實現原則 1. 使用場景 全局配置類(如數據庫連接池)日志記錄器Spring默認Bean作用域硬件設備訪問(如打印機)2. 設計三原則 私有構造器:禁止外部實例化靜態實例持有:全局唯一訪問點延遲加載(可選):避免資源浪費二、七種單例實現方式深度解析 1.…

OpenManus-通過源碼方式本地運行OpenManus,含踩坑及處理方案,chrome.exe位置修改

前言:最近 Manus 火得一塌糊涂啊,OpenManus 也一夜之間爆火,那么作為程序員應該來嘗嘗鮮 1、前期準備 FastGithub:如果有科學上網且能正常訪問 github 則不需要下載此軟件,此軟件是提供國內直接訪問 githubGit&#…

【最新】DeepSeek 實用集成工具有那些?

deepseek 系列github倉庫地址 【主頁】deepseek-aiDeepSeek-R1DeepSeek-V3DeepSeek-VL2【本文重點介紹】awesome-deepseek-integration 注意:以下內容來自awesome-deepseek-integration DeepSeek 實用集成(awesome-deepseek-integration) 將…

開源!速度100Kb/s的有線和無線雙模ESP32S3芯片的DAP-Link調試器

開源!速度100Kb/s的有線和無線雙模ESP32S3芯片的DAP-Link調試器 目錄 開源!速度100Kb/s的有線和無線雙模ESP32S3芯片的DAP-Link調試器本項目未經授權,禁止商用!本項目未經授權,禁止商用!本項目未經授權&…

Flink測試環境Standalone模式部署實踐

1.JDK環境 參考官方文檔: https://nightlies.apache.org/flink/flink-docs-release-1.20/release-notes/flink-1.18/ 2.下載Flink:https://flink.apache.org/downloads/ 本次驗證用的是:https://www.apache.org/dyn/closer.lua/flink/flink…

在16卡服務器上使用最新版的CUDA和驅動訓練`llama - 2 - 7b`和`llama - 2 - 70b`模型,并生成訓練指標數據

要在16卡服務器上使用最新版的CUDA和驅動訓練llama - 2 - 7b和llama - 2 - 70b模型,并生成訓練指標數據,你可以按照以下步驟進行: 1. 環境準備 確保你的服務器已經安裝了最新版的CUDA和驅動,并且安裝了必要的Python庫&#xff0…

macOS 終端優化

macOS 安裝、優化、還原、升級 Oh My Zsh 完全指南 🚀 Oh My Zsh 是 macOS 終端增強的利器,它能提供強大的自動補全、主題定制和插件支持,讓你的終端更高效、更炫酷。本文將全面介紹 如何安裝、優化、還原、重新安裝和升級 Oh My Zsh&#x…

計算機網絡--訪問一個網頁的全過程

文章目錄 訪問一個網頁的全過程應用層在瀏覽器輸入URL網址http://www.aspxfans.com:8080/news/index.aspboardID5&ID24618&page1#r_70732423通過DNS獲取IP地址生成HTTP請求報文應用層最后 傳輸層傳輸層處理應用層報文建立TCP連接傳輸層最后 網絡層網絡層對TCP報文進行處…

CAAC無人機考證備考清單

一、培訓機構內部的考試大綱/備考指南 《機長筆試大綱》 《機長口試大綱》 《教員筆試大綱》 《教員口試大綱》(不同機構的文件、命名可能不同) 二、培訓機構內部題庫 題庫內容包含(仿照多旋翼題庫制作): 分類 子分…

【BUG】類文件具有錯誤的版本 61.0, 應為 52.0,請刪除該文件或確保該文件位于正確的類路徑子目錄中。

報錯: [ERROR] 類文件具有錯誤的版本 61.0, 應為 52.0 [ERROR] 請刪除該文件或確保該文件位于正確的類路徑子目錄中。 報錯截圖: 原因:Java 版本和 Spring 不兼容,顯示 Spring 版本過高 解決方法 1. 使用更高版本的 J…