天天看點

雲原生時代必須具備的核心技能之Docker進階篇(Swarm)1.Swarm介紹2.Swarm叢集搭建3.Raft一緻性協定4.Service5.overlay6.WordPress實戰

雲原生時代必須具備的核心技能之Docker進階篇(Swarm)1.Swarm介紹2.Swarm叢集搭建3.Raft一緻性協定4.Service5.overlay6.WordPress實戰

解決叢集問題 k8s

官網位址:

https://docs.docker.com/engine/swarm/

1.Swarm介紹

Swarm是Docker官方提供的一款叢集管理工具,其主要作用是把若幹台Docker主機抽象為一個整體,并且通過一個入口統一管理這些Docker主機上的各種Docker資源。Swarm和Kubernetes比較類似,但是更加輕,具有的功能也較kubernetes更少一些

雲原生時代必須具備的核心技能之Docker進階篇(Swarm)1.Swarm介紹2.Swarm叢集搭建3.Raft一緻性協定4.Service5.overlay6.WordPress實戰

管理節點

管理節點處理叢集管理任務:

使用

Raft

實作,管理器維護整個 swarm 及其上運作的所有服務的一緻内部狀态。出于測試目的,可以使用單個管理器運作 swarm。如果單管理器群中的管理器出現故障,您的服務會繼續運作,但您需要建立一個新叢集來恢複。

為了利用 swarm 模式的容錯特性,Docker 建議您根據組織的高可用性要求實作奇數個節點。當您有多個管理器時,您可以在不停機的情況下從管理器節點的故障中恢複。

  • 三個管理器的群體最多可以容忍一個管理器的損失。
  • 一個五管理器群可以容忍最大同時丢失兩個管理器節點。
  • 一個

    N

    管理器叢集最多可以容忍管理器的丢失

    (N-1)/2

  • Docker 建議一個群最多有七個管理器節點。

工作節點

工作節點也是 Docker 引擎的執行個體,其唯一目的是執行容器。Worker 節點不參與 Raft 分布式狀态,不做出排程決策,也不為 swarm 模式 HTTP API 提供服務。

您可以建立一個由一個管理器節點組成的群,但是如果沒有至少一個管理器節點,您就不能擁有一個工作節點。預設情況下,所有經理也是勞工。在單個管理器節點叢集中,您可以運作類似指令

docker service create

,排程程式将所有任務放在本地引擎上。

為防止排程程式将任務放置在多節點群中的管理器節點上,請将管理器節點的可用性設定為

Drain

。排程器在

Drain

mode 中優雅地停止節點上的任務并排程

Active

節點上的任務 。排程程式不會将新任務配置設定給具有

Drain

可用性的節點。

2.Swarm叢集搭建

環境準備

雲原生時代必須具備的核心技能之Docker進階篇(Swarm)1.Swarm介紹2.Swarm叢集搭建3.Raft一緻性協定4.Service5.overlay6.WordPress實戰

準備3個節點,通過vagrant新增加兩個節點

需要單獨指定hostname

config.vm.hostname="work01-node"      

還有就是每個節點需要具備Docker環境

叢集環境搭建

1> 建立manager節點

進入manager節點,manager node也可以作為worker node提供服務

docker swarm init -advertise 192.168.56.10      

注意觀察日志,拿到worker node加入manager node的資訊

docker swarm join --token SWMTKN-1-0a5ph4nehwdm9wzcmlbj2ckqqso38pkd238rprzwcoawabxtdq-arcpra6yzltedpafk3qyvv0y3 192.168.56.10:2377      
雲原生時代必須具備的核心技能之Docker進階篇(Swarm)1.Swarm介紹2.Swarm叢集搭建3.Raft一緻性協定4.Service5.overlay6.WordPress實戰

2>進入兩個Worker

docker swarm join --token SWMTKN-1-0a5ph4nehwdm9wzcmlbj2ckqqso38pkd238rprzwcoawabxtdq-arcpra6yzltedpafk3qyvv0y3 192.168.56.10:2377      

3>進入manager node 檢視叢集情況

docker node ls      

4>node類型轉換

可以将worker提升成manager,進而保證manager的高可用

docker node promote worker01-node
docker node promote worker02-node

#降級可以用demote
docker node demote worker01-node      

線上Swarm示範:

http://labs.play-with-docker.com

通過Dock Hub 的賬号密碼登入即可,有效會話4個小時

3.Raft一緻性協定

Raft一緻性協定:保證manager節點半數存活叢集環境可用

一主兩從

還是參考上面的案例直接操作

雲原生時代必須具備的核心技能之Docker進階篇(Swarm)1.Swarm介紹2.Swarm叢集搭建3.Raft一緻性協定4.Service5.overlay6.WordPress實戰

我們停掉manager節點,那麼整個叢集環境是不可用的

雲原生時代必須具備的核心技能之Docker進階篇(Swarm)1.Swarm介紹2.Swarm叢集搭建3.Raft一緻性協定4.Service5.overlay6.WordPress實戰

我們将一個work節點提升等級

雲原生時代必須具備的核心技能之Docker進階篇(Swarm)1.Swarm介紹2.Swarm叢集搭建3.Raft一緻性協定4.Service5.overlay6.WordPress實戰

二主一從

除了上面的

promote

提升到 主的案例意外,我們還可用從新來搭叢集處理

我們可以在init後直接在 manager節點執行如下指令

docker swarm join-token manager      

三主0從

雲原生時代必須具備的核心技能之Docker進階篇(Swarm)1.Swarm介紹2.Swarm叢集搭建3.Raft一緻性協定4.Service5.overlay6.WordPress實戰

停止其中一個整個叢集還是可用

雲原生時代必須具備的核心技能之Docker進階篇(Swarm)1.Swarm介紹2.Swarm叢集搭建3.Raft一緻性協定4.Service5.overlay6.WordPress實戰
雲原生時代必須具備的核心技能之Docker進階篇(Swarm)1.Swarm介紹2.Swarm叢集搭建3.Raft一緻性協定4.Service5.overlay6.WordPress實戰

但是停止掉兩個後就不可用使用了

雲原生時代必須具備的核心技能之Docker進階篇(Swarm)1.Swarm介紹2.Swarm叢集搭建3.Raft一緻性協定4.Service5.overlay6.WordPress實戰
雲原生時代必須具備的核心技能之Docker進階篇(Swarm)1.Swarm介紹2.Swarm叢集搭建3.Raft一緻性協定4.Service5.overlay6.WordPress實戰

4.Service

(1)建立一個tomcat的service

docker service create --name my-tomcat tomcat      

(2)檢視目前swarm的service

docker service ls      

(3)檢視service的啟動日志

docker service logs my-tomcat      

(4)檢視service的詳情

docker service inspect my-tomcat      

(5)檢視my-tomcat運作在哪個node上

docker service ps my-tomcat      
雲原生時代必須具備的核心技能之Docker進階篇(Swarm)1.Swarm介紹2.Swarm叢集搭建3.Raft一緻性協定4.Service5.overlay6.WordPress實戰

日志

ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE           ERROR               PORTS
u6o4mz4tj396        my-tomcat.1         tomcat:latest       worker01-node       Running             Running 3 minutes ago        

(6)水準擴充service

docker service scale my-tomcat=3
docker service ls
docker service ps my-tomcat      

日志

:可以發現,其他node上都運作了一個my-tomcat的service

[root@manager-node ~]# docker service ps my-tomcat
ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE            ERROR               PORTS
u6o4mz4tj396        my-tomcat.1         tomcat:latest       worker01-node       Running             Running 8 minutes ago                        
v505wdu3fxqo        my-tomcat.2         tomcat:latest       manager-node        Running             Running 46 seconds ago                       
wpbsilp62sc0        my-tomcat.3         tomcat:latest       worker02-node       Running             Running 49 seconds ago        

此時到worker01-node上:docker ps,可以發現container的name和service名稱不一樣,這點要知道

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
bc4b9bb097b8        tomcat:latest       "catalina.sh run"   10 minutes ago      Up 10 minutes       8080/tcp            my-tomcat.1.u6o4mz4tj3969a1p3mquagxok      
(7)如果某個node上的my-tomcat挂掉了,這時候會自動擴充
[worker01-node]
docker rm -f containerid

[manager-node]
docker service ls
docker service ps my-tomcat      
(8)删除service
docker service rm my-tomcat      

5.overlay

Overlay 在網絡技術領域,指的是一種網絡架構上疊加的虛拟化技術模式,其大體架構是對基礎網絡不進行大規模修改的條件下,實作應用在網絡上的承載,并能與其它網絡業務分離,并且以基于IP的基礎網絡技術為主

VXLAN(Virtual eXtensible LAN)技術是目前最為主流的Overlay标準

雲原生時代必須具備的核心技能之Docker進階篇(Swarm)1.Swarm介紹2.Swarm叢集搭建3.Raft一緻性協定4.Service5.overlay6.WordPress實戰

6.WordPress實戰

1> 建立MySQL service

docker service create --name mysql --mount type=volume,source=v1,destination=/var/lib/mysql --env MYSQL_ROOT_PASSWORD=examplepass --env MYSQL_DATABASE=db_wordpress --network my-overlay-net mysql:5.6      

2>建立WordPress的Service

docker service create --name wordpress --env WORDPRESS_DB_USER=root --env WORDPRESS_DB_PASSWORD=examplepass --env WORDPRESS_DB_HOST=mysql:3306 --env WORDPRESS_DB_NAME=db_wordpress -p 8080:80 --network my-overlay-net wordpress      

3>通路測試

雲原生時代必須具備的核心技能之Docker進階篇(Swarm)1.Swarm介紹2.Swarm叢集搭建3.Raft一緻性協定4.Service5.overlay6.WordPress實戰

4>檢視my-overlay-net

雲原生時代必須具備的核心技能之Docker進階篇(Swarm)1.Swarm介紹2.Swarm叢集搭建3.Raft一緻性協定4.Service5.overlay6.WordPress實戰

搞定~

繼續閱讀