1、什麼是Swarm
Swarm這個項目名稱特別貼切。在Wiki的解釋中,Swarm behavior是指動物的羣集行爲。好比咱們常見的蜂羣,魚羣,秋天往南飛的雁羣均可以稱做Swarm behavior。
Swarm項目正是這樣,經過把多個Docker Engine彙集在一塊兒,造成一個大的docker-engine,對外提供容器的集羣服務。同時這個集羣對外提供Swarm API,用戶能夠像使用Docker Engine同樣使用Docker集羣。
Swarm 特色
▲對外以Docker API接口呈現,這樣帶來的好處是,若是現有系統使用Docker Engine,則能夠平滑將Docker Engine切到Swarm上,無需改動現有系統。
▲Swarm對用戶來講,以前使用Docker的經驗能夠繼承過來。很是容易上手,學習成本和二次開發成本都比較低。同時Swarm自己專一於Docker集羣管理,很是輕量,佔用資源也很是少。 *「Batteries included but swappable」,簡單說,就是插件化機制,Swarm中的各個模塊都抽象出了API,能夠根據本身一些特色進行定製實現。
▲Swarm自身對Docker命令參數支持的比較完善,Swarm目前與Docker是同步發佈的。Docker的新功能,都會第一時間在Swarm中體現。
Docker自誕生以來,其容器特性以及鏡像特性給DevOps愛好者帶來了諸多方便。然而在很長的一段時間內,Docker只能在單host上運行,其跨host的部署、運行與管理能力頗受外界詬病。跨host能力的薄弱,直接致使Docker容器與host的緊耦合,這種狀況下,Docker容器的靈活性很難使人滿意,容器的遷移、分組等都成爲很難實現的功能點。
Swarm是Docker公司在2014年12月初新發布的容器管理工具。和Swarm一塊兒發佈的Docker管理工具還有Machine以及Compose。
Swarm是一套較爲簡單的工具,用以管理Docker集羣,使得Docker集羣暴露給用戶時至關於一個虛擬的總體。Swarm使用標準的Docker API接口做爲其前端訪問入口,換言之,各類形式的Docker Client(dockerclient in go, docker_py, docker等)都可以直接與Swarm通訊,Swarm幾乎所有用Go語言來完成開發。
2、Swarm 關鍵概念
1)Swarm
集羣的管理和編排是使用嵌入到 docker 引擎的 SwarmKit,能夠在 docker 初始化時啓動 swarm 模式或者加入已存在的 swarm
2)Node
一個節點(node)是已加入到 swarm 的 Docker 引擎的實例 當部署應用到集羣,你將會提交服務定義到管理節點,接着 Manager
管理節點調度任務到 worker 節點,manager 節點還執行維護集羣的狀態的編排和羣集管理功能,worker 節點接收並執行來自
manager 節點的任務。一般,manager 節點也能夠是 worker 節點,worker 節點會報告當前狀態給 manager 節點
3)服務(Service)
服務是要在 worker 節點上要執行任務的定義,它在工做者節點上執行,當你建立服務的時,你須要指定容器鏡像
4)任務(Task)
任務是在 docekr 容器中執行的命令,Manager 節點根據指定數量的任務副本分配任務給 worker 節點
——————————————————————————————————–
docker swarm:集羣管理,子命令有 init, join, leave, update。(docker swarm –help 查看幫助)
docker service:服務建立,子命令有 create, inspect, update, remove, tasks。(docker service–help 查看幫助)
docker node:節點管理,子命令有 accept, promote, demote, inspect, update, tasks, ls, rm。(docker node –help 查看幫助)
node 是加入到 swarm 集羣中的一個 docker 引擎實體,能夠在一臺物理機上運行多個 node,node 分爲:
manager nodes,也就是管理節點
worker nodes,也就是工做節點
1)manager node 管理節點:執行集羣的管理功能,維護集羣的狀態,選舉一個 leader 節點去執行調度任務。
2)worker node 工做節點:接收和執行任務。參與容器集羣負載調度,僅用於承載 task。
3)service 服務:一個服務是工做節點上執行任務的定義。建立一個服務,指定了容器所使用的鏡像和容器運行的命令。
service 是運行在 worker nodes 上的 task 的描述,service 的描述包括使用哪一個 docker 鏡像,以及在使用該鏡像的容器中執行什麼命令。
4)task 任務:一個任務包含了一個容器及其運行的命令。task 是 service 的執行實體,task 啓動 docker 容器並在容器中執行任務。
3、環境準備
3.1 環境說明
服務器版本:
CentOS Linux release 7.5.1804 (Core)
Docker版本:
Client:
Version: 1.13.1
API version: 1.26
Package version: docker-1.13.1-88.git07f3374.el7.centos.x86_64
Go version: go1.9.4
Git commit: 07f3374/1.13.1
Built: Fri Dec 7 16:13:51 2018
OS/Arch: linux/amd64
Server:
Version: 1.13.1
API version: 1.26 (minimum version 1.12)
Package version: docker-1.13.1-88.git07f3374.el7.centos.x86_64
Go version: go1.9.4
Git commit: 07f3374/1.13.1
Built: Fri Dec 7 16:13:51 2018
OS/Arch: linux/amd64
Experimental: false
集羣節點:
swarm01 192.168.0.1
swarm02 192.168.0.2
3.二、安裝docker
3.三、修改主機名
分別修改兩臺機器的主機名,更改爲swarm01,swarm02
hostnamectl set-hostname swarm01
hostnamectl set-hostname swarm01
3.4 關閉SELinux
[root@swaram01 ~]# getenforce
Disabled
[root@swaram01 ~]# /usr/sbin/sestatus -v
SELinux status: disabled
若disabled不是disabled
vi /etc/selinux/config
將SELINUX=enforcing改成SELINUX=disabled
注意: 設置後須要重啓才能生效
3.五、編輯hosts文件
vi /etc/hosts
設置兩臺主機的對應關係
192.168.0.1 swarm01
192.168.0.2 swarm02
3.6 關閉防火牆
systemctl stop firewalld.service #中止firewall
systemctl disable firewalld.service #禁止firewall開機啓動
3.7 修改docker監聽端口
Swarm是經過監聽2375端口進行通訊的,因此在使用Swarm進行集羣管理以前,須要設置一下2375端口的監聽。全部主機節點docker開啓2375,2377(swarm集羣)監聽,docker版本不一樣,配置方式不同
vim /lib/systemd/system/docker.service
在ExecStart加入:
-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
3.八、重啓docker服務
systemctl daemon-reload ##使配置文件生效
systemctl restart docker
4、Swarm安裝和集羣建立
4.一、Swarm鏡像下載
在兩臺機器上分別安裝Swarm,docker pull swarm
4.2 初始化Swarm
docker swarm init --advertise-addr 192.168.0.1
Swarm initialized: current node (zeisswb5lm92gj8rsng9pxzxd) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-043bhcd0voztnsui79l1rg0pyu4xq1q5x188jeyvppplt2rvnk-6diwivwlc14aipcji90tms4ua 192.168.0.1:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
上面命令執行後,該機器自動加入到swarm集羣。這個會建立一個集羣token,獲取全球惟一的 token,做爲集羣惟一標識。後續將其餘節點加入集羣都會用到這個token值。
其中,--advertise-addr參數表示其它swarm中的worker節點使用此ip地址與manager聯繫。命令的輸出包含了其它節點如何加入集羣的命令。
4.三、添加集羣節點
而後在swaram02機器上執行如下命令
docker swarm join --token SWMTKN-1-5vqq9j2bwq5rllsubg49cs16440v2ixkngvf25e5688i86c8qf-eawa9w8wf2m5mu9e6ovmhjuyy 192.168.182.110:2377
4.四、查看集羣節點
docker node ls