主頁 > 軟體設計 > Docker swarm實戰總結

Docker swarm實戰總結

2020-09-14 01:44:13 軟體設計

 

 


一、簡介

Swarm 是 Docker 官方提供的一款集群管理工具,其主要作用是把若干臺 Docker 主機抽象為一個整體,并且通過一個入口統一管理這些 Docker 主機上的各種 Docker 資源,

Docker Swarm 包含兩方面:一個企業級的 Docker 安全集群,以及一個微服務應用編排引擎,

集群方面,Swarm 將一個或多個 Docker 節點組織起來,使得用戶能夠以集群方式管理它們,可以自如地添加或洗掉節點

編排方面,Swarm 提供了一套豐富的 API 使得部署和管理復雜的微服務應用變得易如反掌,通過將應用定義在宣告式組態檔中,就可以使用原生的 Docker 命令完成部署,

此外,甚至還可以執行滾動升級、回滾以及擴縮容操作,同樣基于簡單的命令即可完成,

以往,Docker Swarm 是一個基于 Docker 引擎之上的獨立產品,自 Docker 1.12 版本之后,它已經完全集成在 Docker 引擎中,執行一條命令即可啟用,

到2018年,除了原生 Swarm 應用,它還可以部署和管理 Kubernetes 應用,Swarm 和 Kubernetes 比較類似,但是更加輕,具有的功能也較 kubernetes 更少一些,

集群管理:  docker swarm 子命令有 init, join, leave, update (docker swarm --help查看幫助)

節點管理:  docker node子 命令有 accept, promote, demote, inspect, update, tasks, ls, rm (docker node --help查看幫助)

配置管理:  docker config 子命令有 create, inspect, ls, rm (docker config--help查看幫助)

服務管理:  docker service 子命令有 create, inspect, update, remove, tasks, ls, rm, ps (docker service--help查看幫助)

堆疊管理:  docker stack 子命令有 deploy, services, ps, rm (docker stack--help查看幫助)

 


二、部署

  前期作業

  準備幾臺機器,安裝docker v1.12+,添加私有鏡像倉庫源

/etc/docker/daemon.json

{ "insecure-registries":["xxx.xxx.xxx.xxx:5000"] }

    集群節點之間保證TCP 2377、TCP/UDP 7946和UDP 4789埠通信(或者直接關閉防火墻 systemctl stop firewalld)

firewall-cmd --zone=public --add-port=2377/tcp --permanent    # 集群管理埠

firewall-cmd --zone=public --add-port=7946/tcp --permanent    # 節點之間通訊埠
firewall-cmd --zone=public --add-port=7946/udp --permanent

firewall-cmd --zone=public --add-port=4789/tcp --permanent    # overlay網路通訊埠
firewall-cmd --zone=public --add-port=4789/udp --permanent

firewall-cmd --reload

  

  初始化swarm

docker swarm init \        # 默認初始化節點為manager

--advertise-addr 192.168.89.14 \   # 多網卡的情況下,指定需要使用的ip

--listen-addr 192.168.89.14:2377   # 指定監聽的 ip 與 port

  

 

   添加作業節點

    --token 初始化時獲取,或者通過命令獲取(docker swarm join-token worker

docker swarm join \

--advertise-addr 192.168.89.15 \
--listen-addr 192.168.89.15:2377 \  # 可不加,根據實際需求

--token SWMTKN-1-29ynh5uyfiiospy4fsm4pd4xucyji2rn0oj4b4ak4s7a37syf9-ajkrv2ctjr5cmxzuij75tbrmz \  # 節點token

192.168.89.14:2377  # 管理節點

  

  管理節點

docker node ls   # 查看節點

docker node rm   # 移除節點

docker swarm leave   # 退出節點(對應節點上運行)

   更詳細部署推薦>>> Docker Swarm集群部署實踐

 


三、Docker config

17.06引入了群體服務配置,使您可以在服務映像之外或運行中的容器之外存盤非敏感資訊,例如組態檔,這使您可以保持映像盡可能通用,而無需將安裝檔案系結安裝到容器中或使用環境變數,

可以隨時在服務中添加或洗掉配置,并且服務可以共享配置,您甚至可以將配置與環境變數或標簽結合使用,以實作最大的靈活性,配置值可以是通用字串或二進制內容(最大500 kb),

注意:Docker配置僅適用于群集服務,不適用于獨立容器,

將配置添加到群集時,Docker會通過雙向TLS連接將配置發送到群集管理器,該配置存盤在Raft日志中,該日志已加密,整個Raft日志會在其他管理器之間復制,以確保對配置的高可用性保證與其他集群管理資料一樣,

當您授予對配置的新創建或正在運行的服務訪問權限時,該配置將作為檔案安裝在容器中,容器中安裝點的位置默認為/<config-name>Linux容器中的位置,

 docker config create jmdiservice-application.properties ~/local/application.properties  # 為創建服務所參考

 


四、Docker service

服務是自 Docker 1.12 后新引入的概念,并且僅適用于 Swarm 模式,

使用服務仍能夠配置大多數熟悉的容器屬性,比如容器名、埠映射、接入網路和鏡像,

此外還增加了額外的特性,比如可以宣告應用服務的期望狀態,將其告知 Docker 后,Docker 會負責進行服務的部署和管理,

更多概念推薦>>> Docker管理工具-Swarm

 

服務創建

docker service create \
--with-registry-auth \
--mode global \
--name jmdiservice \
--config source=jmdiservice-application.properties,target=/root/application.properties \
--mount type=bind,source=/opt/lib,destination=/root/lib \
--env JAVA_OPTS="-Xms1024m -Xmx1024m" \
--publish 20036:20036 \
-td xx.xx.xx.xx:5000/zwx/jmdiservice:1123    

命令詳解:

--with-registry-auth:將registry身份驗證詳細資訊發送給集群代理,

--mode global:全域模式,在這種模式下,每個節點上僅運行一個副本,
   另一種是復制模式(--replicas 3),這種模式會部署期望數量的服務副本,并盡可能均勻地將各個副本分布在整個集群中,

--name:服務名稱,(避免使用符號,容易決議錯誤)

--config:指定要向服務公開的配置,(添加配置參考docker config create)

--mount:將檔案系統掛載附加到服務,(需要保留/讀取的容器外資訊)

--env:設定環境變數,

--publish:將埠發布為節點埠,(默認把需要發布的埠映射到本地)

-td:分配偽TTY,并后臺運行,

注意:鏡像地址、名稱、標簽一定填寫正確

 

  服務更新:

docker service update --args "ping www.baidu.com" redis    # 添加引數
docker service scale redis=4    # 為服務擴(縮)容scale
docker service update --image redis:3.0.7 redis  # 更新服務的鏡像版本
docker service update --rollback redis  # 回滾服務

 


五、Docker stack

大規模場景下的多服務部署和管理是一件很難的事情,Docker Stack由此而生,

Stack 通過提供期望狀態、滾動升級、簡單易用、擴縮容、健康檢查等特性簡化了應用的管理,這些功能都封裝在一個完美的宣告式模型當中,

Stack 能夠在單個宣告檔案中定義復雜的多服務應用,還提供了簡單的方式來部署應用并管理其完整的生命周期:初始化部署 -> 健康檢查 -> 擴容 -> 更新 -> 回滾

 

步驟很簡單,在 Compose 檔案中定義應用,然后通過 docker stack deploy 命令完成部署和管理,

export logpath=/home/jhmyPro/logs      
export tag=latest              # 使用環境變數,增強可用性
docker stack deploy --with-registry-auth -c docker-compose.yml QS    

 

# file: docker-compose.yml

version: "3.7" services: JmDiService: # 服務名 image: xx.xx.xx.xx:5000/zwx/jmdiservice:${tag} environment: # 環境變數 LOG_PATH: ${logpath}     PKG_NAME: "JmDiService" JAVA_OPTS: "-Xms512m -Xmx1024m" networks: # 網路設定 overlay: ports: # 埠映射 [宿主機:容器] - 20036:20036 configs: # 讀取配置 [配置名:容器] - source: JmDiService-application.properties target: /root/application.properties volumes: # 掛載資料卷 [宿主機:容器] - ${logpath}:${logpath} - /opt/lib:/root/lib - /usr/local/nginx/html/clientexe:/usr/local/nginx/html/clientexe deploy: # 部署設定 mode: replicated replicas: 3 restart_policy: # 重啟策略 [條件,延時,最大次數,檢測時間] condition: on-failure delay: 5s max_attempts: 3 window: 30s update_config: # 升級配置 [并發數,延時,失敗處理,監聽時間,更新規則] parallelism: 1 delay: 5s failure_action: rollback monitor: 5s order: start-first resources: # 資源控制 [cpu,mem] limits: #cpus: '0.2' memory: 1024M configs:      # 定義配置 JmDiService-application.properties: external: true networks:     # 定義網路 overlay:

   更多引數定義推薦>>> docker-compose編排引數詳解

 

 

作者:Leozhanggg

出處:https://www.cnblogs.com/leozhanggg/p/12061360.html

本文著作權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利,

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/29213.html

標籤:架構設計

上一篇:分庫分表之第一篇

下一篇:Dubbo環境搭建-管理控制臺dubbo-admin實作服務監控

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more