基本概念
Swarm 是使用 SwarmKit 構建的 Docker 引擎內置(原生)的集群管理和編排工具。
使用 Swarm 集群之前需要了解以下幾個概念。
節點
運行 Docker 的主機可以主動初始化一個 Swarm 集群或者加入一個已存在的 Swarm 集群,
這樣這個運行 Docker 的主機就成為一個 Swarm 集群的節點 ( node ) 。
節點分為管理 ( manager ) 節點和工作 ( worker ) 節點。
管理節點用於 Swarm 集群的管理, docker swarm 命令基本只能在管理節點執行(節點退出
集群命令 docker swarm leave 可以在工作節點執行)。一個 Swarm 集群可以有多個管理節
點,但只有一個管理節點可以成為 leader , leader 通過 raft 協議實現。
工作節點是任務執行節點,管理節點將服務 ( service ) 下發至工作節點執行。管理節點默認
也作為工作節點。你也可以通過配置讓服務只運行在管理節點。
來自 Docker 官網的這張圖片形象的展示了集群中管理節點與工作節點的關系。
服務和任務
任務 ( Task )是 Swarm 中的最小的調度單位,目前來說就是一個單一的容器。
服務 ( Services ) 是指一組任務的集合,服務定義了任務的屬性。服務有兩種模式:
replicated services 按照一定規則在各個工作節點上運行指定個數的任務。
global services 每個工作節點上運行一個任務
兩種模式通過 docker service create 的 --mode 參數指定。
來自 Docker 官網的這張圖片形象的展示了容器、任務、服務的關系。
================================================================================
創建 Swarm 集群
閱讀 基本概念 一節我們知道 Swarm 集群由管理節點和工作節點組成。本節我們來創建一個
包含一個管理節點和兩個工作節點的最小 Swarm 集群。
初始化創建一個管理節點:172.16.204.133為管理節點 172.16.204.134個172.16.204.135為work節點
#節點對應主機名並添加到管理節點的hosts文件中 172.16.204.133 manager1 172.16.204.134 work1 172.16.204.135 work2
#更新所有系統和內核版本
yum -y update
yum -y install kernel-devel
#記得升級完內核版本需要重啟哈
1.三個節點都安裝docker
yum -y install docker vim /etc/sysconfig/docker #修改--selinux-enabled為--selinux-enabled=false,否則docker啟動會報錯
2.172.16.204.133節點上初始化一個 Swarm 集群,

[root@localhost ~]# docker swarm init --advertise-addr 172.16.204.133 Swarm initialized: current node (bn692uq61llcnrdulwz1a4ur0) is now a manager. To add a worker to this swarm, run the following command: docker swarm join \ --token SWMTKN-1-4ansve0ondlgnup8hpqooycsmc3k46uyanwfr1j3mqq3uo2ewk-6fy9zl540fq9mlr2znfj9kggo \ 172.16.204.133:2377 To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
如果你的 Docker 主機有多個網卡,擁有多個 IP,必須使用 --advertise-addr 指定 IP。
執行 docker swarm init 命令的節點自動成為管理節點。
3.增加工作節點
安裝docker-machine
[root@manager1 opt]# wget https://mirrors.aliyun.com/docker-toolbox/linux/machine/0.15.0/docker-machine-Linux-x86_64 [root@manager1 opt]#mv docker-machine-Linux-x86_64 docker-machine && mv docker-machine /usr/local/bin/ && cd /usr/local/bin/ && chmod +x docker-machine && docker-machine version
[root@manager1 ~]# docker-machine create -d virtualbox work1
[root@manager1 ~]# docker-machine ssh work1
docker@work1:~$ docker swarm join \
> --token SWMTKN-1-4ansve0ondlgnup8hpqooycsmc3k46uyanwfr1j3mqq3uo2ewk-6fy9zl540fq9mlr2znfj9kggo \
> 172.16.204.133:2377
docker@work1:~$ exit
[root@manager1 ~]# docker-machine create -d virtualbox work2
[root@manager1 ~]# docker-machine ssh work2
docker@work1:~$ docker swarm join \
> --token SWMTKN-1-4ansve0ondlgnup8hpqooycsmc3k46uyanwfr1j3mqq3uo2ewk-6fy9zl540fq9mlr2znfj9kggo \
> 172.16.204.133:2377
docker@work1:~$ exit
#查看節點已經添加成功了
[root@manager1 nginx]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
bn692uq61llcnrdulwz1a4ur0 * manager1 Ready Active Leader 19.03.4
l2yre8uwnxi31ugqskiw9swsd work1 Ready Active 19.03.3
u0hhtnjvp9o6djbxjeyfs5mbu work2 Ready Active
#如果節點down了
可以使用docker-machine start work1來啟動節點
##這個就先部署到這里,去搞k8s了!!!