Docker swarm叢集搭建教程

寒夏發表於2019-01-08
一、什麼是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語言來完成開發。

 

二、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.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.2、安裝docker

3.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.5、編輯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.8、重啟docker服務
systemctl daemon-reload ##使配置檔案生效
systemctl restart docker
四、Swarm安裝和叢集建立

4.1、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.3、新增叢集節點

然後在swaram02機器上執行以下命令
docker swarm join –token SWMTKN-1-5vqq9j2bwq5rllsubg49cs16440v2ixkngvf25e5688i86c8qf-eawa9w8wf2m5mu9e6ovmhjuyy 192.168.182.110:2377

4.4、檢視叢集節點
docker node ls

 

 

相關文章