1. 程式人生 > >線超博:Introduction to Swarm, a Docker-native clustering system

線超博:Introduction to Swarm, a Docker-native clustering system

Introduction to Swarm
a Docker-native clustering system

分享人:線超博
線超博(jimmyxian)
公司:西安-華為-雲端計算部門 
微博:@線超博 
微信:@線超博 
郵箱:[email protected]

Github:https://github.com/jimmyxian

Swarm專案介紹
Swarm社群現狀
Demo
QA

什麼是Swarm?
•提供容器的叢集管理
•對外以DockerAPI介面呈現
•輕量,易上手易部署
•Batteries included but swappable

•建立一個叢集(hosted discovery service)
$ swarm create
•將節點加⼊入到叢集中:
$  swarm  join--add=<node_ip> token://<token>
•啟動Swarm Manage
$ swarm manage --addr=<swarm_ip> token://<token>

採用Docker命令進行容器的建立: $ docker run -c 1 -m 1024M

服務發現支援3類後端:
(1)hosted discovery service:
Docker  Hub提供的發現服務,需要連線外網訪問
(2)KV分散式儲存系統: Etcd、Zookeeper、Consul
$ swarm manage --addr=<swarm_ip> etcd://<etcd_ip>/nodes
(3)靜態IP:本地⽂檔案 或者 直接指定節點IP
$ swarm manage --addr=<swarm_ip> node1_ip,node2_ip

Swarm建立容器,排程過程中分為兩個階段:
•1過濾: 根據條件過濾出符合要求的節點
Constraints
Affinity
Dependency
Health
Ports
•2稱重:在過濾出的節點中選擇一個最優節點
- Binpack:在同等條件下,選擇容器最多的節點
- Spread :在同等條件下,選擇容器最少的節點
- Random:隨機選擇一個

•標準的約束包含: node / storagedriver / executiondriver /
kernelversion / operatingsystem
docker run -e “constraint:operatingsystem==*fedora*” … docker run -e “constraint:storagedriver==*aufs*” …

•使用者自定義約束:啟動docker  daemon時使用label指定
docker -d --label “region=shenzhen”
docker run -e “constraint:region==shenzhen” …

•Containers affinities
docker run --name webdb mysql
docker run -e “affinity:container==webdb” nginx

•Images affinities
docker run -e “affinity:image==redis” redis

軟過濾器:在過濾過程中,如果發現根據條件過濾完後沒有符合要求的節點, 則丟掉此條件,直接根據策略選擇⼀一個節點,⽤用~來標⽰示軟過濾器
•Containers affinities
$ docker run -d --name redis1 -e constraint:region==~us* redis
•Images affinities
$ docker run -d --name redis2 -e affinity:image==~redis redis
•Constraints
$ docker run -d --name redis3 -e constraint:region==~beijing* redis

依賴過濾器包含以下三種情況:
•Shared volumes:
$ docker run --volumes-from=redis …
•Links:
$ docker run --link=redis:alias …
•Shared network stack:
$ docker run --net=container:redis …

• Port過濾器:根據端⼝口使⽤用情況過濾
$ docker run -d --expose=80 --net=host nginx

• Health過濾器:根據節點的狀態進⾏行過濾,去除狀態為Fault的節點

High Available Scheduler

可以啟多個Manager例項,通過主備方式實現HA
採用分散式鎖實現選主過程
備節點收到訊息,會轉發給主節點
支援etcd、zookeeper、consul

Swarm與周邊產品整合---Mesos
建立容器的流程:
(1)獲取Mesos Master節點資訊
(2)訪問Mesos Master,獲取滿⾜足要 求的節點資訊(cpu、memory)
(3)在Swarm內部進行二次排程,選擇 最優節點
(4)讓Mesos在對應的Slave節點上執行建立容器的任務
(5)Swarm直接訪問Docker啟動容器
備註: 只有在容器建立、刪除操作時,Swarmquorum會訪問Mesos,其他請求Swarm直接訪 問Docker Daemon

Swarm社群現狀

•Docker REST API (>85%)
•Resource management (CPU, Mem, Networking)
•Advanced scheduling with constraints and affinities
•Multiple Discovery Backends (hub, etcd, consul, zookeeper)
•TLS: Encryption & Authentication

•Docker REST API (98%)
•Swarm Manager HA
•Mesos Integration
•Enhance Hosted Node Discovery Service

•引入libnetwork
•容器的監控
•容器自身的HA
•完善API

How To Contribute