摘要:當(dāng)然此時(shí)的局限性較大,比如沒(méi)有副本和負(fù)載均衡的概念,這導(dǎo)致服務(wù)無(wú)法高可用當(dāng)然也更不存在什么服務(wù)網(wǎng)絡(luò)管理和跨節(jié)點(diǎn)數(shù)據(jù)存儲(chǔ)這些東西沒(méi)有服務(wù)模型集群中服務(wù)間關(guān)系和啟動(dòng)順序編排也很復(fù)雜于是就有了下面的的誕生。
在我的《Docker Swarm集群初探》一文中,我們實(shí)際體驗(yàn)了Docker Swarm容器集群技術(shù)的魅力,與《Kubernetes實(shí)踐錄》一文中提到的Kubernetes集群技術(shù)相比,Docker Swarm沒(méi)有Kubernetes顯得那么厚重,因此可以認(rèn)為是更加輕量級(jí)的容器集群技術(shù),這也就意味著上手更加方便快捷,使用起來(lái)也要省事很多。作為Docker集群技術(shù)三(或“四”)架馬車之一的Docker Swarm,它從一開始便是Docker官方的“親兒子”,發(fā)展到現(xiàn)在也經(jīng)歷了很多階段和迭代。作者在學(xué)習(xí)的過(guò)程中也了解了一點(diǎn)其發(fā)展歷史,發(fā)現(xiàn)有幾個(gè)概念還是挺容易混淆的,因此撰寫成文,是梳理,也是總結(jié)。
注: 本文首發(fā)于 My 公眾號(hào) CodeSheep ,可 長(zhǎng)按 或 掃描 下面的 小心心 來(lái)訂閱 ↓ ↓ ↓
早在2014年底,Docker公司就設(shè)計(jì)了容器集群的方案組合:Machine + Swarm + Compose。其中Machine主要用于快速創(chuàng)建Docker運(yùn)行環(huán)境,其支持在創(chuàng)建出來(lái)的節(jié)點(diǎn)上自動(dòng)部署Swarm,此時(shí)的Swarm我們稱為 “經(jīng)典Swarm”,它是一款整合跨節(jié)點(diǎn)網(wǎng)絡(luò)的集群式容器服務(wù),其利用Docker守護(hù)進(jìn)程的API,將多節(jié)點(diǎn)的計(jì)算資源進(jìn)行匯總,并提供兼容Docker的運(yùn)行API,使用者只需要在執(zhí)行Docker命令工具時(shí),用--host參數(shù)將目標(biāo)設(shè)置為Swarm服務(wù)的IP和端口,即可操作整個(gè)容器集群。
當(dāng)然此時(shí)的Swarm局限性較大,比如:
沒(méi)有副本和負(fù)載均衡的概念,這導(dǎo)致服務(wù)無(wú)法高可用
當(dāng)然也更不存在什么服務(wù)網(wǎng)絡(luò)管理和跨節(jié)點(diǎn)數(shù)據(jù)存儲(chǔ)這些東西
沒(méi)有服務(wù)模型:集群中服務(wù)間關(guān)系和啟動(dòng)順序編排也很復(fù)雜
于是就有了下面的SwarmKit的誕生。
在2016年2月,Docker公司開始了一個(gè)名叫 SwarmKit 的項(xiàng)目。而恰在Docker 1.12 RC之前的一段時(shí)間,Docker 發(fā)布了 Swarmkit,這是一個(gè)獨(dú)立的、開源的容器編排項(xiàng)目。SwarmKit不同于一開始的經(jīng)典Swarm,它從一開始就重新設(shè)計(jì)了一套獨(dú)立的API和模型體系,并且采用獨(dú)立的客戶端命令行工具:swarmctl
和上面的經(jīng)典Swarm模型相比,它加入了如下特性:
重新設(shè)計(jì)的一套獨(dú)立的API和模型體系
使用了自己的CLI(swarmd命令負(fù)責(zé)管理,swarmctl命令用于控制)
節(jié)點(diǎn)管理、服務(wù)模型更加自然,提供編排和調(diào)度服務(wù)
將過(guò)去Swarm依賴的外部集群一致性存儲(chǔ)組件Etcd的核心部分內(nèi)置化
然而此時(shí)的SwarmKit并沒(méi)有提供諸如服務(wù)發(fā)現(xiàn)、負(fù)載均衡和路由等功能。盡管如此,SwarmKit其實(shí)已經(jīng)是我們今天廣泛使用的Docker Swarm集群技術(shù)的基石。
Swarm Mode則更進(jìn)一步,它在Docker 1.12版本開始為大家所周知,一個(gè) docker swarm命令 紅遍大江南北,這個(gè)所謂的Swarm Mode其實(shí)就是我們今天所廣泛使用的Docker Swarm集群技術(shù)。
然而Swarm Mode并不是一個(gè)全新的東西,也并不是一個(gè)全新的模式,而是站在SwarmKit的巨人肩膀上發(fā)展起來(lái)的,是Docker中的一組與集群相關(guān)功能的統(tǒng)稱而已。Docker將SwarmKit的核心模塊內(nèi)嵌于Docker的后臺(tái)服務(wù)之中,通過(guò)不同的命令允許使用者同時(shí)以“本節(jié)點(diǎn)”和“本集群”這兩種視角來(lái)操作整個(gè)集群,增加了集群的管理、節(jié)點(diǎn)的管理、服務(wù)的管理和編排等等一系列高級(jí)特性,就像在我的《Docker Swarm集群初探》一文中體驗(yàn)的那樣。
因此總結(jié)一下Swarm Mode就是:
基于Swarmkit編寫
支持服務(wù)模型以及服務(wù)發(fā)現(xiàn)、路由和負(fù)載均衡等新功能
使用Docker原生態(tài)的CLI命令
集成到了Docker engine中(強(qiáng)大的 docker swarm 命令)
如果用一張圖來(lái)表示 Docker、經(jīng)典Swarm、SwarmKit、Swarm Mode 四個(gè)概念之間的關(guān)系,則大致可以如下圖所示:
正如圖中所示,SwarmKit 和 Swarm Mode 重疊的部分表示的是相應(yīng)的項(xiàng)目之間存在代碼層面的互相引用或組件形式的依賴,其實(shí) Swarm Mode 所創(chuàng)建的集群本質(zhì)上并無(wú)異于 SwarmKit 集群。
更細(xì)致一點(diǎn),我們從SwarmKit和Swarm Mode二者在一些常用命令操作上的比較來(lái)看看二者的區(qū)別和聯(lián)系:
1. 創(chuàng)建集群
SwarmKit方式:swarmd
SwarmMode方式:docker swarm init
2. 往集群中添加節(jié)點(diǎn)
SwarmKit方式:swarmd --hostname worknode --join-addr [IP:端口] --join-token [Token]
SwarmMode方式:docker swarm join --token [token] [IP:端口]
3. 查看集群節(jié)點(diǎn)信息
SwarmKit方式:swarmctl node ls
SwarmMode方式:docker node ls
4. 創(chuàng)建服務(wù)
SwarmKit方式:swarmctl service create --name [服務(wù)名] --image [鏡像名]
SwarmMode方式:docker service create --name [服務(wù)名] [鏡像名]
5. 服務(wù)擴(kuò)容
SwarmKit方式:swarmctl service update [服務(wù)名] --replicas [副本數(shù)目]
SwarmMode方式:docker service scale [服務(wù)名]=[副本數(shù)目]
6. 服務(wù)(鏡像)升級(jí)
SwarmKit方式:swarmctl service update [服務(wù)名] --image [鏡像名]
SwarmMode方式:docker service update [服務(wù)名] --image [鏡像名]
從命令行操作來(lái)看,Swarm Mode其實(shí)非常類似于SwarmKit,然而前者更加靠近 Docker 原生態(tài)圈的命令,因此更加人性化。
作者更多的原創(chuàng)文章在此,歡迎觀賞
My Personal Blog
作者更多的SpringBt實(shí)踐文章在此:
Spring Boot應(yīng)用監(jiān)控實(shí)戰(zhàn)
SpringBoot應(yīng)用部署于外置Tomcat容器
ElasticSearch搜索引擎在SpringBt中的實(shí)踐
初探Kotlin+SpringBoot聯(lián)合編程
Spring Boot日志框架實(shí)踐
SpringBoot優(yōu)雅編碼之:Lombok加持
如果有興趣,也可以抽點(diǎn)時(shí)間看看作者一些關(guān)于容器化、微服務(wù)化方面的文章:
利用K8S技術(shù)棧打造個(gè)人私有云 連載文章
從一份配置清單詳解Nginx服務(wù)器配置
Docker容器可視化監(jiān)控中心搭建
利用ELK搭建Docker容器化應(yīng)用日志中心
RPC框架實(shí)踐之:Apache Thrift
RPC框架實(shí)踐之:Google gRPC
微服務(wù)調(diào)用鏈追蹤中心搭建
Docker容器跨主機(jī)通信
Docker Swarm集群初探
高效編寫Dockerfile的幾條準(zhǔn)則
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/27353.html
摘要:主機(jī)名命名空間,不同的內(nèi)部可以擁有不同的主機(jī)名。此外,也是解決跨平臺(tái)部署的利器。也許看完上述介紹大家還是云里霧里,沒(méi)關(guān)系,既然叫實(shí)戰(zhàn)指南,那么必然有實(shí)戰(zhàn)部分,我們從最簡(jiǎn)單的程序開始。后續(xù)我們將介紹,如果利用運(yùn)行你自己的程序。 原文地址:Docker實(shí)戰(zhàn)指南(一):Docker介紹 Introduction 我第一次注意到Docker大概是在2014年的時(shí)候,當(dāng)時(shí)對(duì)Docker的第一印象...
摘要:微店技術(shù)團(tuán)隊(duì)公眾號(hào)容器化之路這是一套以阿里云為基礎(chǔ),為核心,第三方服務(wù)為工具的開發(fā)測(cè)試部署流程,以及內(nèi)部的代碼提交,版本管理規(guī)范。如何打造安全的容器云平臺(tái)對(duì),微服務(wù),來(lái)說(shuō)都是非常好的落地實(shí)踐技術(shù)。 在使用 flow.ci 進(jìn)行持續(xù)集成的過(guò)程中,也許你會(huì)遇到一些小麻煩。最近我們整理了一些常見問(wèn)題在 flow.ci 文檔之 FAQ,希望對(duì)你有用。如果你遇到其他問(wèn)題,也可以通過(guò)「在線消息」或...
摘要:前言我是,如果你還不認(rèn)識(shí)我,不妨先看看技術(shù)的前世今生一平靜的生活已經(jīng)有一段日子了。傳送門技術(shù)的前世今生一技術(shù)的前世今生三 前言:我是JavaScript,如果你還不認(rèn)識(shí)我,不妨先看看《Web技術(shù)的前世今生(一)》 平靜的生活已經(jīng)有一段日子了。 這一天,HTML大哥面露不悅地走過(guò)來(lái)問(wèn)我: Js,你是打算和我們分家嗎? 大哥,您這說(shuō)的哪里話,我什么地方做的不對(duì)么?我一臉茫然地回答道。 哼,...
摘要:前言我是,如果你還不認(rèn)識(shí)我,不妨先看看技術(shù)的前世今生一平靜的生活已經(jīng)有一段日子了。傳送門技術(shù)的前世今生一技術(shù)的前世今生三 前言:我是JavaScript,如果你還不認(rèn)識(shí)我,不妨先看看《Web技術(shù)的前世今生(一)》 平靜的生活已經(jīng)有一段日子了。 這一天,HTML大哥面露不悅地走過(guò)來(lái)問(wèn)我: Js,你是打算和我們分家嗎? 大哥,您這說(shuō)的哪里話,我什么地方做的不對(duì)么?我一臉茫然地回答道。 哼,...
摘要:前言我是,如果你還不認(rèn)識(shí)我,不妨先看看技術(shù)的前世今生一平靜的生活已經(jīng)有一段日子了。傳送門技術(shù)的前世今生一技術(shù)的前世今生三 前言:我是JavaScript,如果你還不認(rèn)識(shí)我,不妨先看看《Web技術(shù)的前世今生(一)》 平靜的生活已經(jīng)有一段日子了。 這一天,HTML大哥面露不悅地走過(guò)來(lái)問(wèn)我: Js,你是打算和我們分家嗎? 大哥,您這說(shuō)的哪里話,我什么地方做的不對(duì)么?我一臉茫然地回答道。 哼,...
閱讀 2234·2021-11-25 09:43
閱讀 1200·2021-11-23 09:51
閱讀 3532·2021-11-23 09:51
閱讀 3665·2021-11-22 09:34
閱讀 1601·2021-10-09 09:43
閱讀 2150·2019-08-30 15:53
閱讀 3184·2019-08-30 14:07
閱讀 597·2019-08-28 18:14