一、需求背景
人生苦短,我用.NET Core!阿笨對Docker是這樣評價的:Docker在手,環(huán)境我有!Docker出手,集群我有!前面的Doc基礎(chǔ)課程我們學(xué)習(xí)了如何使用Docker來部署搭建單機(jī)容器應(yīng)用。當(dāng)一臺服務(wù)器的處理能力、存儲空間不足時,不要企圖去換更強(qiáng)大的服務(wù)器,對大型網(wǎng)站而言,不管多么強(qiáng)大的服務(wù)器,都滿足不了網(wǎng)站持續(xù)增長的業(yè)務(wù)需求。實踐中會發(fā)現(xiàn),生產(chǎn)環(huán)境中使用單個 Docker 節(jié)點是遠(yuǎn)遠(yuǎn)不夠的,搭建 Docker 集群勢在必行。然而,面對 Kubernetes, Mesos等眾多容器集群系統(tǒng),我們該如何選擇呢?它們之中,Docker Swarm 是 Docker 原生的,同時也是最簡單,最易學(xué),最節(jié)省資源的,比較適合中小型公司使用。今天給大家分享一下如何使用Docker-Swarm來搭建負(fù)載均衡集群容器環(huán)境應(yīng)用。
1.1、本次分享課程適合人群如下:
1)、本課程一定需要具備Docker基礎(chǔ)知識。(零基礎(chǔ)學(xué)者止步慎入!)
2)、學(xué)習(xí)和了解ASP.Net Core跨平臺開發(fā)技術(shù)。
3)、喜歡阿笨分享的干貨課程童鞋們。本課程不是零基礎(chǔ)教學(xué),側(cè)重點主要是講解Docker Swarm與ASP.NET Core實戰(zhàn)運用,大家務(wù)必根據(jù)自身的實際情況進(jìn)行選擇學(xué)習(xí)。
如果您在學(xué)習(xí)過程中遇到任何的課程問題,請先私下直接找阿笨老師進(jìn)行在線的溝通和交流。謝謝大家的理解和支持,預(yù)祝大家學(xué)習(xí)快樂!
如果您是一個開發(fā)老鳥,那么本次課程完全不建議您進(jìn)行學(xué)習(xí)!
1.2、一句話總結(jié)今天我們學(xué)習(xí)達(dá)到的目標(biāo)
如何使用Docker-Swarm部署高可用ASP.NET Core負(fù)載均衡集群容器環(huán)境應(yīng)用。
如果您同樣對本次分享《ASP.NET Core使用Docker-Swarm集群部署實現(xiàn)負(fù)載均衡實戰(zhàn)演練》課程感興趣的話,那么請跟著阿笨一起學(xué)習(xí)吧。廢話不多說,直接上干貨,我們不生產(chǎn)干貨,我們只是干貨的搬運工。



二、Docker-Swarm概念介紹
1、什么是Docker Swarm
Docker Swarm是Docker公司開發(fā)的容器集群管理服務(wù)。 從1.12.0版本開始,已經(jīng)是Docker安裝后自帶的一部分(捆綁軟件)了,又稱為Swarm Mode,無需額外安裝。Swarm 是?Docker?官方提供的一款集群管理工具,其主要作用是把若干臺 Docker 主機(jī)抽象為一個整體,并且通過一個入口統(tǒng)一管理這些 Docker 主機(jī)上的各種 Docker 資源。使用它,用戶可以將多個 Docker 主機(jī)封裝為單個大型的虛擬 Docker 主機(jī),快速打造一套容器云平臺。
2、Docker Swarm核心概念解釋
1、集群節(jié)點分為兩類:管理節(jié)點,工人節(jié)點。
2、一個集群必須有一個首領(lǐng)。首領(lǐng)也是管理節(jié)點。
2、一個集群有多個管理節(jié)點(建議為基數(shù)個,比如1,3,5)和多個工人節(jié)點。
3、管理節(jié)點可以降級demote為工人節(jié)點,工人節(jié)點可以升級promote為管理節(jié)點。
3、DockerSwarm特點
1. Docker Engine集成集群管理
使用Docker Engine CLI 創(chuàng)建一個Docker Engine的Swarm模式,在集群中部署應(yīng)用程序服務(wù)。
2. 去中心化設(shè)計
Swarm角色分為Manager和Worker節(jié)點,Manager節(jié)點故障不影響應(yīng)用使用。
3. 擴(kuò)容縮容
可以聲明每個服務(wù)運行的容器數(shù)量,通過添加或刪除容器數(shù)自動調(diào)整期望的狀態(tài)。
4. 期望狀態(tài)協(xié)調(diào)
Swarm Manager節(jié)點不斷監(jiān)視集群狀態(tài),并調(diào)整當(dāng)前狀態(tài)與期望狀態(tài)之間的差異。例如,設(shè)置一個服務(wù)運行10個副本容器,如果兩個副本的服務(wù)器節(jié)點崩潰,Manager將創(chuàng)建兩個新的副本替代崩潰的副本。并將新的副本分配到可用的worker節(jié)點。
5. 多主機(jī)網(wǎng)絡(luò)
可以為服務(wù)指定overlay網(wǎng)絡(luò)。當(dāng)初始化或更新應(yīng)用程序時,Swarm manager會自動為overlay網(wǎng)絡(luò)上的容器分配IP地址。
6. 服務(wù)發(fā)現(xiàn)
Swarm manager節(jié)點為集群中的每個服務(wù)分配唯一的DNS記錄和負(fù)載均衡VIP??梢酝ㄟ^Swarm內(nèi)置的DNS服務(wù)器查詢集群中每個運行的容器。
7. 負(fù)載均衡
實現(xiàn)服務(wù)副本負(fù)載均衡,提供入口訪問。也可以將服務(wù)入口暴露給外部負(fù)載均衡器再次負(fù)載均衡。
8. 安全傳輸
Swarm中的每個節(jié)點使用TLS相互驗證和加密,確保安全的其他節(jié)點通信。
9. 滾動更新
升級時,逐步將應(yīng)用服務(wù)更新到節(jié)點,如果出現(xiàn)問題,可以將任務(wù)回滾到先前版本。
三、Docker-Swarm環(huán)境安裝
可以通過Docker官方提供的docker-machine來快速創(chuàng)建一個docker容器環(huán)境的,它搭建和管理多個docker 主機(jī)同時搭建swarm集群。本期分享課程阿笨這里采用是直接模擬通過創(chuàng)建虛擬主機(jī)的方式來搭建我們的Docker Swarm集群環(huán)境。
Swarm是Docker原生的集群管理軟件,與Kubernetes比起來比較簡單。
對于沒有集群使用經(jīng)驗的小白,用Docker Swarm起步,是一個很好的選擇。Docker 可以看做集裝箱把雜亂的貨物一個個整理歸類, Compose 則是用于編排這些集裝箱,最后 Swarm 就是多提供幾條船,掛掉一兩條還能繼續(xù)走,提高穩(wěn)定性。
四、Docker-Swarm搭建ASP.NET Core集群應(yīng)用環(huán)境

五、Docker-Swarm集群部署Nginx實現(xiàn)ASP.NET Core應(yīng)用負(fù)載均衡
集群要提供高可用性就必須要有某種機(jī)制去保證,常用的機(jī)制為failover(故障轉(zhuǎn)移),簡單說就是通過一定的heartbeat檢測是否有故障,一旦故障發(fā)生備份節(jié)點則接管故障節(jié)點的工作。
Swarm使用了Raft協(xié)議來保證多個Manager之間狀態(tài)的一致性?;赗aft協(xié)議,Manager Node具有一定的容錯功能,假設(shè)Swarm集群中有個N個Manager Node,那么整個集群可以容忍最多有(N-1)/2個節(jié)點失效。如果是一個三Manager Node的Swarm集群,則最多只能容忍一個Manager Node掛掉。
重要說明:添加更多manager并不意味著增加可伸縮性或更高的性能。一般來說,情況恰恰相反!

六、思考與總結(jié)
1、思考
? 在大型公司中,都有專職負(fù)責(zé)基礎(chǔ)支撐技術(shù)的開發(fā)或運維人員,而在中小型企業(yè)可能就很少有這類團(tuán)隊或者壓根沒有,需要開發(fā)人員自行解決。現(xiàn)在很多崗位的招聘需求上都有寫需要了解或者掌握?Docker,或者將掌握?Docker?等容器技術(shù)作為加分項目,并且這個要求不局限于運維或者后端開發(fā)等崗位。搞技術(shù)的千萬不能有一個錯誤的思想,這個東西我用不上,就算用不上,也不能停止學(xué)習(xí)的腳步。所以一句話Docker作為開發(fā)人員還是很有必要進(jìn)行學(xué)習(xí)的!2、總結(jié)
Docker如果只是會幾個指令和根據(jù)dockerfile文件構(gòu)建自定義鏡像的話,那僅僅停留在基礎(chǔ)入門階段。有人說docker是屬于運維工程師的事情,阿笨并不這么認(rèn)為。作為開發(fā)人員不學(xué)習(xí)新的東西,視野怎么能打開,開發(fā)人員一定也要懂點運維方面的那些事,這樣有助于我們更加的理解和了解架構(gòu)設(shè)計!
希望本次分享課程能夠讓大家有所收獲和幫助!最后送大家一句話:希望大家在.NET Core的學(xué)習(xí)道路上一直跟著阿笨堅持下去。