1. 程式人生 > >docker-swarm架構與組成

docker-swarm架構與組成

swarm號稱docker三劍客之一,用來實現docker的叢集服務。

docker swarm對於docker來說是一個本地化叢集,它把多個的docker hosts聚集在一起,對外只提供一個虛擬化的docker主機,由於docker swarm遵從標準的dockerAPI,任何可以與dockers組合的應用都可以用swarm透明的擴充套件多個服務。
(Docker Swarm is native clustering for Docker. It turns a pool of Docker hosts into a single, virtual Docker host. Because Docker Swarm serves the standard Docker API, any tool that already communicates with a Docker daemon can use Swarm to transparently scale to multiple hosts. )

本文將介紹docker swarm的基本架構,以及各個模組的功能

swarm架構

這裡寫圖片描述
最上層的對外介面包括:
docker API用於管理映象的生命週期。
swarm CLI 用於叢集管理。
LeaderShip提供叢集的HA(high avaliable),防止單點故障,具體實施請參見官網(High avilability for docker swarm
discovery service是warm的發現服務,它會在每個node中註冊一個angent將各個節點的IP埠上報,manager會從發現服務讀取各節點資訊,發現服務的實現方式有四種:

Hosted Discovery with Docker Hub,Docker Hub提供的發現服務,需要連線外網。

docker run -d -p <manager_port>:2375 swarm manage token://<cluster_id>

基於KV分散式儲存系統,支援etcd,consul,zookeeper

swarm join --advertise=<node_ip:2375> consul://<consul_addr>/<optional path prefix>

靜態檔案描述

swarm manage -H tcp://<swarm_ip:swarm_port> file:///tmp/my_cluster

靜態IP列表

swarm manage -H <swarm_ip:swarm_port> nodes://<node_ip1:2375>,<node_ip2:2375>

schedule排程模組,用於容器排程時選擇最優節點,主要分如下兩步(filter和strategy)。

  1. filter(過濾),當建立或執行容器時,它會告訴排程器哪些節點是可用的(符合要求的)。filter可以分為兩類,節點過濾和基於容器配置的過濾。

    節點過濾:
    Constraints,約束過濾器,可以根據當前作業系統型別、核心版本、儲存型別等條件進行過濾,當然也可以自定義約束,在啟動Daemon的時候,通過Label來指定當前主機所具有的特點。

    Health filter,會根據節點狀態進行過濾,會去除故障節點。

    基於容器配置的過濾:
    Affnity,親和性過濾器,支援容器親和性和映象親和性,比如一個web應用,我想將DB容器和Web容器放在一起,就可以通過這個過濾器來實現。

    Dependency,依賴過濾器。如果在建立容器的時候使用了–volume-from/–link/–net某個容器,則建立的容器會和依賴的容器在同一個節點上。

    Ports filter,會根據埠的使用情況過濾。

  2. strategy 根據策略選擇最優節點:

    Binpack,在同等條件下,選擇資源使用最多的節點,通過這一個策略,可以將容器聚集起來。

    Spread,在同等條件下,選擇資源使用最少的節點,通過這一個策略,可以將容器均勻分佈在每一個節點上。

    Random,隨機選擇一個節點。