Docker管理工具-Swarm的概念介紹和部署


1.簡介

Docker Swarm 是 Docker原生的集群管理工具。它將 Docker 主機池轉變為單個虛擬 Docker 主機。 Docker Swarm 提供了標准的 Docker API,所有任何已經與 Docker 守護程序通信的工具都可以使用 Swarm 輕松地擴展到多個主機。

 

 

 Swarm項目正是這樣,通過把多個Docker Engine聚集在一起,形成一個大的docker-engine,對外提供容器的集群服務。同時這個集群對外提供Swarm API,用戶可以像使用Docker Engine一樣使用Docker集群。

Swarm使用標准的Docker API接口作為其前端訪問入口,換言之,各種形式的Docker Client(docker client in Go, docker_py, docker等)均可以直接與Swarm通信。Swarm幾乎全部用Go語言來完成開發,Swarm0.2版本增加了一個新的策略來調度集群中的容器,使得在可用的節點上傳播它們,以及支持更多的Docker命令以及集群驅動。Swarm deamon只是一個調度器(Scheduler)加路由器(router),Swarm自己不運行容器,它只是接受docker客戶端發送過來的請求,調度適合的節點來運行容器,這意味着,即使Swarm由於某些原因掛掉了,集群中的節點也會照常運行,當Swarm重新恢復運行之后,它會收集重建集群信息。

2.Swarm關鍵概念

1.Swarm

集群的管理和編排是使用嵌入到docker引擎的SwarmKit,可以在docker初始化時啟動swarm模式或者加入已存在的swarm

2.Node

一個節點(node)是已加入到swarm的Docker引擎的實例 ,可以在一台物理機上運行多個node,node分為manager nodes 也就是管理節點; worker nodes 也就是工作節點.。當部署應用到集群,你將會提交服務定義到管理節點,接着Manager管理節點調度任務到worker節點,manager節點還執行維護集群的狀態的編排和群集管理功能,worker節點接收並執行來自manager節點的任務。通常,manager節點也可以是worker節點,worker節點會報告當前狀態給manager節點. 

->  manager node管理節點:執行集群的管理功能,維護集群的狀態,選舉一個leader節點去執行調度任務。
->  worker node工作節點:接收和執行任務。參與容器集群負載調度,僅用於承載task。

3.服務(Service)

一個服務是工作節點上執行任務的定義。創建一個服務,指定了容器所使用的鏡像和容器運行的命令。service是運行在worker nodes上的task的描述,service的描述包括使用哪個docker 鏡像,以及在使用該鏡像的容器中執行什么命令。

4.任務(Task)

任務是在docekr容器中執行的命令,task是service的執行實體,task啟動docker容器並在容器中執行任務。Manager節點根據指定數量的任務副本分配任務給worker節點。

3.Swarm架構和特點

1.架構

Swarm作為一個管理Docker集群的工具,首先需要將其部署起來,可以單獨將Swarm部署於一個節點。另外,自然需要一個Docker集群,集群上每一個節點均安裝有Docker。具體的Swarm架構圖可以參照下圖:

 

 Swarm架構中最主要的處理部分自然是Swarm節點,Swarm管理的對象自然是Docker Cluster,Docker Cluster由多個Docker Node組成,而負責給Swarm發送請求的是Docker Client。

2.特點

Docker的Swarm (集群) 模式,集成很多工具和特性,比如:跨主機上快速部署服務,服務的快速擴展,集群的管理整合到docker引擎,分散設計,聲明式的服務模型,可擴展,狀態協調處理,多主機網絡,分布式的服務發現,負載均衡,滾動更新,安全(通信的加密)。

1) 對外以Docker API接口呈現,這樣帶來的好處是,如果現有系統使用Docker Engine,則可以平滑將Docker Engine切到Swarm上,無需改動現有系統。
2) Swarm對用戶來說,之前使用Docker的經驗可以繼承過來。非常容易上手,學習成本和二次開發成本都比較低。同時Swarm本身專注於Docker集群管理,非常輕量,占用資源也非常少。簡單說,就是插件化機制,Swarm中的各個模塊都抽象出了API,可以根據自己一些特點進行定制實現。
3)  Swarm自身對Docker命令參數支持的比較完善,Swarm目前與Docker是同步發布的。Docker的新功能,都會第一時間在Swarm中體現。

 

4.Swarm工作方式

1.Node

 

2.Service(服務, 任務, 容器)

 

3.任務與調度

命令--->管理節點--->調用API--->通過調度算法進行調度--->工作節點(執行task創建容器和維護)

邏輯圖如下

4.服務副本與全局服務

邏輯圖如下

 

 服務是Swarm集群中最重要的一個概念,服務分為服務副本服務,和全局服務,服務副本服務根據我們指定的副本數,然后再根據調度算法,把具體的容器跑在調度后的節點上。

然后全局服務就是他會把后台容器運行在集群里的全部節點上,不根據調度算法進行調度。

這里還要提一個概率就是在Swarm集群中真正提供服務的是Service。客戶端真正訪問的是你通過Swarm創建的服務。他不管你這個服務后面跑了幾個容器,和跑在了哪些服務器上。屏蔽了底層的差異。概念圖如下

 

 

 

5.Swarm調度策略

Swarm在scheduler節點(leader節點)運行容器的時候,會根據指定的策略來計算最適合運行容器的節點,目前支持的策略有:spread, binpack, random.

1.Random(隨機算法)

顧名思義,就是隨機選擇一個Node來運行容器,一般用作調試用,spread和binpack策略會根據各個節點可用的CPU, RAM以及正在運行的容器數量來計算應該運行容器的節點。

2.Spread(資源平均算法)

在同等條件下,Spread策略會選擇運行容器最少的那台節點來運行新的容器,binpack策略會選擇運行容器最集中的那台機器來運行新的節點。使用Spread策略會使得容器會均衡的分布在集群中的各個節點上運行,一旦一個節點掛掉了只會損失少部分的容器。

3.Binpack(資源集中算法)

Binpack策略最大化的避免容器碎片化,就是說binpack策略盡可能的把還未使用的節點留給需要更大空間的容器運行,盡可能的把容器運行在一個節點上面。

 

6.Swarm Cluster模式的特性和集群的內部創建過程

1.批量創建服務

建立容器之前先創建一個overlay的網絡,用來保證在不同主機上的容器網絡互通的網絡模式

2.強大的集群的容錯性

當容器副本中的其中某一個或某幾個節點宕機后,cluster會根據自己的服務注冊發現機制,以及之前設定的值--replicas n,在集群中剩余的空閑節點上,重新拉起容器副本。整個副本遷移的過程無需人工干預,遷移后原本的集群的load balance(負載均衡)依舊好使!不難看出,docker service其實不僅僅是批量啟動服務這么簡單,而是在集群中定義了一種狀態。Cluster會持續檢測服務的健康狀態並維護集群的高可用性。

3.服務節點的可擴展性

Swarm Cluster不光只是提供了優秀的高可用性,同時也提供了節點彈性擴展或縮減的功能。當容器組想動態擴展時,只需通過scale參數即可復制出新的副本出來。仔細觀察的話,可以發現所有擴展出來的容器副本都run在原先的節點下面,如果有需求想在每台節點上都run一個相同的副本,方法其實很簡單,只需要在命令中將"--replicas n"更換成"--mode=global"即可!其中:
復制服務(--replicas n)將一系列復制任務分發至各節點當中,具體取決於您所需要的設置狀態,例如“--replicas 3”。
全局服務(--mode=global)適用於集群內全部可用節點上的服務任務,例如“--mode global”。如果在 Swarm 集群中設有 7 台 Docker 節點,則全部節點之上都將存在對應容器。

4.調度機制

所謂的調度其主要功能是cluster的server端去選擇在哪個服務器節點上創建並啟動一個容器實例的動作。它是由一個裝箱算法和過濾器組合而成。每次通過過濾器(constraint)啟動容器的時候,swarm cluster 都會調用調度機制篩選出匹配約束條件的服務器,並在這上面運行容器。

5.Swarm cluster的創建過程

1)發現Docker集群中的各個節點,收集節點狀態、角色信息,並監視節點狀態的變化
2)初始化內部調度(scheduler)模塊
3)創建並啟動API監聽服務模塊

一旦創建好這個cluster,就可以用命令docker service批量對集群內的容器進行操作,非常方便!

在啟動容器后,docker 會根據當前每個swarm節點的負載判斷,在負載最優的節點運行這個task任務,用"docker service ls" 和"docker service ps + taskID"
可以看到任務運行在哪個節點上。容器啟動后,有時需要等待一段時間才能完成容器創建。

 

7.Swarm集群的部署和使用

1.環境介紹和准備

#機器環境
172.31.46.38              swarm的manager節點1       manager-node1
172.31.46.78              swarm的manager節點2       manager-node2
172.31.46.22              swarm的node節點               node1
172.31.46.115            swarm的node節點               node2
#設置主機名
[root@linux-test-no ~]# hostnamectl --static set-hostname manager-node1
[root@gitlab ~]# hostnamectl --static set-hostname manager-node2
[root@gitlab ~]# hostnamectl --static set-hostname node1
[root@centos-test4-no ~]# hostnamectl --static set-hostname node2
#在三台機器上都要設置hosts,均執行如下命令
[root@linux-test-no ~]# vim /etc/hosts
172.31.46.38              manager-node1
172.31.46.78              manager-node2
172.31.46.22              node1
172.31.46.115             node2
#關閉三台機器上的防火牆。如果開啟防火牆,則需要在所有節點的防火牆上依次放行2377/tcp(管理端口)、7946/udp(節點間通信端口)、4789/udp(overlay 網絡端口)端口。
[root@manager-node1 ~]# systemctl disable firewalld.service
[root@manager-node1 ~]# systemctl stop firewalld.service

2.分別在manager節點和node節點上安裝docker,並下載swarm鏡像

[root@manager-node1 ~]# yum install -y docker
  
#配置docker,注意修改管理節點上的docker的以下配置時,管理節點最好是在內網,或者做好嚴格的防火牆策略,因為此配置會暴露端口,這是不安全的。
[root@manager-node1 ~]# vim /etc/sysconfig/docker
......
OPTIONS='-H 0.0.0.0:2375 -H unix:///var/run/docker.sock'    //在OPTIONS參數項后面的''里添加內容. 或者使用'-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock'
  
[root@manager-node1 ~]# systemctl restart docker
  
#下載swarm鏡像
[root@manager-node1 ~]# docker pull swarm
[root@manager-node1 ~]# docker images #注意這些操作每台機器上都要做

3.創建swarm

#執行下面命令,創建swarm集群,會初始化此節點為主管理節點,並生成一個集群token,獲取全球唯一的 token,作為集群唯一標識。
后續將其他節點加入集群都會用到這個token值。其中,--advertise-addr參數表示其它swarm中的worker節點使用此ip地址與manager
聯系。命令的輸出包含了其它節點如何加入集群的命令。
[root@manager-node1 ~]# docker swarm init --advertise-addr 172.31.46.38
Swarm initialized: current node (6usguns6poiaj9t5d0k2c4qxm) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-0sxi3xn7ebz59r7scvsy8xp4jss78xq25e86m2ikk3xot8oa71-ahklh8z5cftatplqi3skr7hja 172.31.46.38:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

溫馨提示:
如果再次執行上面啟動swarm集群的命令,會報錯說這個節點已經在集群中了
Error response from daemon: This node is already part of a swarm. Use "docker swarm leave" to leave this swarm and join another one.
解決辦法:
[root@manager-node ~] # docker swarm leave --help           //查看幫助
[root@manager-node ~] # docker swarm leave --force
 
使用docker info 或 docker node ls 查看集群中的相關信息
[root@manager-node1 ~]# docker info
Swarm: active
  NodeID: chz1o1jfusf64y3z2xo4cf5hj
  Is Manager: true
  ClusterID: ipozawcrtpgxqu83oomnw0jfc
  Managers: 1
  Nodes: 1
  Default Address Pool: 10.0.0.0/8
  SubnetSize: 24
  Data Path Port: 4789
  Orchestration:
   Task History Retention Limit: 5
........
#node ID旁邊那個*號表示現在連接到這個節點上。
[root@manager-node1 ~]# docker node ls
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
chz1o1jfusf64y3z2xo4cf5hj *   manager-node1       Ready               Active              Leader              19.03.12

4.添加節點到swarm集群中

#在docker swarm init 完了之后,會提示如何加入新機器到集群,如果當時沒有注意到,也可以通過下面的命令來獲知 如何加入新機器到集群。
#下面這個命令就是獲知從管理節點如何加入集群。
[root@manager-node1 ~]# docker swarm join-token manager
To add a manager to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-37f9hi4mgyw1lmvk91m4fzwop0llz4xcxj66afpm71vt045ax8-9uxgmoz208dybs2l84m1sorgb 172.31.46.38:2377 #下面命令就是獲知工作節點如何加入集群。
[root@manager-node1 ~]# docker swarm join-token worker
To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-37f9hi4mgyw1lmvk91m4fzwop0llz4xcxj66afpm71vt045ax8-6m4yrfnzqguwke99prkyph37u 172.31.46.38:2377

現在我們按照上面的提示,把工作節點和從管理節點加入Swarm集群中

[root@manager-node2 ~]# docker swarm join --token SWMTKN-1-37f9hi4mgyw1lmvk91m4fzwop0llz4xcxj66afpm71vt045ax8-9uxgmoz208dybs2l84m1sorgb 172.31.46.38:2377
This node joined a swarm as a manager.
[root@node1 ~]# docker swarm join --token SWMTKN-1-37f9hi4mgyw1lmvk91m4fzwop0llz4xcxj66afpm71vt045ax8-6m4yrfnzqguwke99prkyph37u 172.31.46.38:2377
This node joined a swarm as a worker.
[root@node2 ~]# docker swarm join --token SWMTKN-1-37f9hi4mgyw1lmvk91m4fzwop0llz4xcxj66afpm71vt045ax8-6m4yrfnzqguwke99prkyph37u 172.31.46.38:2377
This node joined a swarm as a worker.
#如果想要將其他更多的節點添加到這個swarm集群中,添加方法如上一致!
#然后在manager-node管理節點上看一下集群節點的狀態,這里我們看到兩個管理節點和工作節點都已經加入集群了。
[root@manager-node1 ~]# docker node ls
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
chz1o1jfusf64y3z2xo4cf5hj *   manager-node1       Ready               Active              Leader              19.03.12
imnk5zo056q2hvqhizrc6fmof     manager-node2       Ready               Active              Reachable           19.03.12
rn69cydbcwinf1bjf8mmefdry     node1               Ready               Active                                  1.13.1
zjjh4qgpmgz0xnycoo05i1hsl     node2               Ready               Active                                  1.13.1
#注意在Swarm集群中,節點的高可用用的是Raft協議,此協議保證大多數節點存活,但是有個要求就是節點數量要>1。意思就是集群數量要大於3台,
所以生產中,管理節點數量最少都得3台,不然起不到高可用的作用。可以通過實驗進行驗證。

 

節點可用性狀態的變更和節點的下線

swarm集群中node的availability狀態可以為 active或者drain,其中:
active狀態下,node可以接受來自manager節點的任務分派;
drain狀態下,node節點會結束task,且不再接受來自manager節點的任務分派(也就是下線節點)。
#將node1節點下線。如果要刪除node1節點,命令是"docker node rm --force node1"
[root@manager-node1 ~]# docker node update --availability drain node1
[root@manager-node1 ~]# docker node ls
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
chz1o1jfusf64y3z2xo4cf5hj *   manager-node1       Ready               Active              Leader              19.03.12
imnk5zo056q2hvqhizrc6fmof     manager-node2       Ready               Active              Reachable           19.03.12
rn69cydbcwinf1bjf8mmefdry     node1               Ready               Drain                                   1.13.1
zjjh4qgpmgz0xnycoo05i1hsl     node2               Ready               Active                                  1.13.1
#如上,當node1的狀態改為drain后,那么該節點就不會接受task任務分發,就算之前已經接受的任務也會轉移到別的節點上。
 
#再次修改為active狀態(及將下線的節點再次上線)
[root@manager-node1 ~]# docker node update --availability active node1

 

5.在Swarm中部署服務和動態擴縮容服務(這里以nginx服務為例)

部署服務

 

#Docker 1.12版本開始提供服務的Scaling、health check、滾動升級等功能,並提供了內置的dns、vip機制,實現service的服務發現和負載均衡能力。
在啟動容器之前,先來創建一個覆蓋網絡,用來保證在不同主機上的容器網絡互通的網絡模式
[root@manager-node1 ~]# docker network create -d overlay ngx_net
98uvwubk9tdavnuk773vld2cs
[root@manager-node1 ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
cb7dc85b72db        bridge              bridge              local
2b17077d3733        docker_gwbridge     bridge              local
79232f7835db        host                host                local
w0z1t4vgkctw        ingress             overlay             swarm
98uvwubk9tda        ngx_net             overlay             swarm
58d353d474cd        none                null                local
#在manager-node節點上使用上面這個覆蓋網絡創建nginx服務:
其中,--replicas 參數指定服務由幾個實例組成。
注意:不需要提前在節點上下載nginx鏡像,這個命令執行后會自動下載這個容器鏡像(比如此處創建tomcat容器,就將下面命令中的鏡像改為tomcat鏡像)。
以下命令就創建了一個具有一個副本(--replicas 1 )的nginx服務,使用鏡像nginx
[root@manager-node1 ~]# docker service create --replicas 1 --network ngx_net --name my-test -p 80:80 nginx
#使用 docker service ls 查看正在運行服務的列表
[root@manager-node1 ~]# docker service ls

ID                  NAME                MODE                REPLICAS            IMAGE               PORTS

l5m69s1p88ae        my-test             replicated          1/1                 nginx:latest        *:80->80/tcp
#查詢Swarm中服務的信息 -pretty 使命令輸出格式化為可讀的格式,不加 --pretty 可以輸出更詳細的信息:
[root@manager-node1 ~]# docker service inspect --pretty my-test

ID: l5m69s1p88aegop9gp8z56nrm
Name: my-test
Service Mode: Replicated
Replicas: 1
Placement:
UpdateConfig:
Parallelism: 1
On failure: pause
Monitoring Period: 5s
Max failure ratio: 0
Update order: stop-first
RollbackConfig:
Parallelism: 1
On failure: pause
Monitoring Period: 5s
Max failure ratio: 0
Rollback order: stop-first
ContainerSpec:
Image: nginx:latest@sha256:4cf620a5c81390ee209398ecc18e5fb9dd0f5155cd82adcbae532fec94006fb9
Init: false
Resources:
Networks: ngx_net
Endpoint Mode: vip
Ports:
PublishedPort = 80
Protocol = tcp
TargetPort = 80
PublishMode = ingress

#查詢服務在哪個節點正在運行該服務。如下該容器被調度到manager-node1節點上啟動了,然后訪問http://172.31.46.38即可訪問這個容器應用(如果調度到其他節點,訪問也是如此)

[root@manager-node1 ~]# docker service ps my-test
ID             NAME         IMAGE         NODE            DESIRED STATE          CURRENT STATE       ERROR    PORTS
nb8f24ab7byc   my-test.1    nginx:latest  manager-node1   Running Running        19 hours ago                                                      

 

 

在Swarm中動態擴展服務(scale)

當然,如果只是通過service啟動容器,swarm也算不上什么新鮮東西了。Service還提供了復制(類似kubernetes里的副本)功能。可以通過 docker service scale 命令來設置服務中容器的副本數:

#比如將上面的my-test容器動態擴展到5個,命令如下:
[root@manager-node1 ~]# docker service scale my-test=5
#查看服務的運行節點情況,可以看到,之前my-test容器只在manager-node1節點上有一個實例,而現在又增加了4個實例。
這5個副本的my-test容器分別運行在這4個節點上,登陸這4個節點,就會發現已經存在運行着的my-test容器。
[root@manager-node1 ~]# docker service ps my-test
ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE           ERROR               PORTS
nb8f24ab7byc        my-test.1           nginx:latest        manager-node1       Running             Running 19 hours ago
sg957wty6pec        my-test.2           nginx:latest        node2               Running             Running 3 minutes ago
k54lm9gpqzra        my-test.3           nginx:latest        manager-node2       Running             Running 3 minutes ago
qtn9abnt8mjr        my-test.4           nginx:latest        node1               Running             Running 3 minutes ago
ksihqnoa6k8l        my-test.5           nginx:latest        node2               Running             Running 3 minutes ago
特別需要清楚的一點:
如果一個節點宕機了(即該節點就會從swarm集群中被踢出),則Docker應該會將在該節點運行的容器,調度到其他節點,以滿足指定數量的副本保持運行狀態。
比如:
將node1宕機后或將node1的docker服務關閉,那么它上面的task實例就會轉移到別的節點上。當node1節點恢復后,它轉移出去的task實例不會主動轉移回來 只能等別的節點出現故障后轉移task實例到它的上面。
即在swarm cluster集群中啟動的容器,在worker node節點上刪除或停用后,該容器會自動轉移到其他的worker node節點上

 

在Swarm中動態縮容服務

#如下,將my-test容器變為1個。
[root@manager-node1 ~]# docker service scale my-test=1
[root@manager-node1 ~]# docker service ps my-test
ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE            ERROR               PORTS
nb8f24ab7byc        my-test.1           nginx:latest        manager-node1       Running             Running 19 hours ago
sg957wty6pec        my-test.2           nginx:latest        node2               Remove              Running 30 seconds ago
qtn9abnt8mjr        my-test.4           nginx:latest        node1               Remove              Running 30 seconds ago
ksihqnoa6k8l        my-test.5           nginx:latest        node2               Remove              Running 30 seconds ago
#登錄node2節點,使用docker ps查看,會發現容器被stop而非rm,即Swarm縮容只是停掉對應容器,而非刪除#刪除容器服務,如下這樣就會把所有節點上的所有容器(task任務實例)全部刪除了
[root@manager-node1 ~]# docker service rm my-test

 

除了上面使用scale進行容器的擴容或縮容之外,還可以使用docker service update 命令。 可對 服務的啟動 參數 進行 更新/修改。

#使用如下命令,也可以對容器的規模進行更新。
[root@manager-node1 ~]# docker service update --replicas 3 my-test
#也可用於直接 升級 鏡像
[root@manager-node1 ~]# docker service update --image nginx:new my-test

 

6.Swarm中使用Volume

方法1:

#通過下面創建數據卷,默認會在/var/lib/docker/volumes/目錄下創建你要的數據卷目錄。
[root@manager-node1 ~]# docker volume create --name myvolume
#使用下面命令,Swarm創建service的時候指定數據卷。參數src表示指定的數據卷,寫成source也可以;dst表示容器內的路徑,也可以寫成destination
 [root@manager-node ~]# docker service create --replicas 2 --network ngx_net --mount type=volume,src=myvolume,dst=/wangshibo --name test-nginx nginx

1) 掛載volume后,宿主機和容器之間就可以通過volume進行雙向實時同步.
2) 如果replicas是多份,則每個節點宿主機上都會有一個volume路徑,即每個節點宿主機的/var/lib/docker/volumes/myvolume/_data和分布到它上面的
    容器里的/wangshibo進行實時同步.

方法2:

#命令格式如下,其中,參數destination表示容器里面的路徑,source表示本地硬盤路徑
docker service create --mount type=bind,source=/host_data/,destination=/container_data/ #注意此方法設置后,在容器里的同步目錄下沒有寫權限,更新內容時只要放到宿主機的掛在目錄下即可!

 

8.總結

Swarm上手很簡單,Docker swarm可以非常方便的創建類似kubernetes那樣帶有副本的服務,確保一定數量的容器運行,保證服務的高可用。
然而,光從官方文檔來說,功能似乎又有些簡單;

swarm、kubernetes、messos總體比較而言:
1)Swarm的優點和缺點都是使用標准的Docker接口,使用簡單,容易集成到現有系統,但是更困難支持更復雜的調度,比如以定制接口方式定義的調度。
2)Kubernetes 是自成體系的管理工具,有自己的服務發現和復制,需要對現有應用的重新設計,但是能支持失敗冗余和擴展系統。
3)Mesos是低級別 battle-hardened調度器,支持幾種容器管理框架如Marathon, Kubernetes, and Swarm,現在Kubernetes和Mesos穩定性超過Swarm,在擴展性方面,Mesos已經被證明支持超大規模的系統,比如數百數千台主機,但是,如果你需要小的集群,比如少於一打數量的節點服務器數量,Mesos也許過於復雜了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM