欢迎光临
我们一直在努力

搭建Swarm群集

一、Swarm简介

Swarm项目,通过把多个Docker Engine聚集在一起,形成一个打的docker-engine,对外提供容器的群集服务。同时,这个群集对外提供Swarm API,用户可以像使用Docker Engine一样使用Docker群集。
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节点还执行维护集群的状态的编排和群集管理功能,work节点接收并执行来自manager节点的任务。通常,manager节点也可以是worker节点,work节点会报告当前状态给manager节点。
3、服务(Service)
服务是要在work节点上要执行任务的定义,它在工作这节点上执行,当创建服务的时,需要指定容器镜像。
4、任务(Task)
任务是在docker容器中执行的命令,manager节点根据指定数量的任务副本分配任务给work节点。

三、Swarm各个模块的功能

docker swarm:集群管理,子命令由init,join,leave,updata。(docker swarm -help查看帮助)
docker service:服务创建,子命令由create,inspect,update,remove,tasks。(docker service -help查看帮助)
node是加入到swarm集群中的一个docker引擎实体,可以在一台物理机上运行多个node,node分为:
1)Manager node(管理节点):执行集群的管理功能,维护集群的状态,选觉一个leader节点去执行调度任务。
2)Work node(工作节点):接收和执行任务,参与容器集群负载调度,仅用于承载task。
service服务:一个服务是工作节点上执行任务的定义。创建一个服务,制定了容器所使用的镜像和容器运行的命令。
task任务:一个任务 包含了一个容器及其运行的命令。task是service的执行实体,task启动docker容器并在容器中执行任务。

四、swarm部署

1、系统环境
两台centos 7分别对应swarm01和swarm02
swarm01:192.168.80.100
swarm02:192.168.80.110
2、修改主机名

hostnamectl set-hostname swarm01
hostnamectl set-hostname swarm02
vi /etc/hosts   //分别修改hosts文件

192.168.80.100 swarm01
192.168.80.110 swarm02
3、安装docker(每台都要装)
vi /etc/yum.repos.d/CentOS-Base.repo
末行添加docker的yum源
[docker-repo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
yum install -y docker-engine
4、更改docker的镜像源

mkdir /etc/docker
vi /etc/docker/daemon.json

{
"registry-mirrors": ["http://hub-mirror.c.163.com"]
}

{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}
systemctl daemon-reload //重载配置文件
5、修改docker监听端口
Swarm是通过监听2375端口进行通信的,所以在使用Swarm进行集群管理之前,需要设置一下2375端口的监听。所有主机节点docker开启2375监听,docker版本不同,配置方式不一样。
vi /lib/systemd/system/docker.service
在ExecStart加入:-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock

systemctl start docker  //启动docker
netstat -anput | grep 2375  //查看监听端口

6、swarm安装(两台分别安装)

docker pull swarm       //从docker仓库拉取swarm
docker images 查看是否下载成功

docker swarm init --advertise-addr 192.168.80.100 //初始化Swarm
–advertis-addr:swarm中的work节点使用此IP地址与manager联系

上面命令执行后,该机器自动加入到swarm集群。这个会创建一个集群token,获取全球唯一的token,作为集群唯一标识。后续将其他节点加入集群都会用到这个token值。
docker node ls //查看节点,只有本机加入swarm集群

7、添加集群节点
在swaram02机器上执行以下命令

docker swarm join \
    --token SWMTKN-1-0mp5blsez01rkhdngyx7qnwapwfaugexq0llasg5t4mlr0rpdj-2i3qqd7ejsl73ga5fqncmeroe \
    192.168.80.100:2377

docker node list //在swarm01上查看

8、升级或降级节点(只能在主节点上)

docker node promote swarm02 //将swarm02升级为主节点
docker node demote swarm01  //将swarm02降级为工作节点
docker node list    //在swarm02上查看

9、创建swarm集群网络(swarm02上)

docker network create --driver overlay skynet
docker network ls  //查看网络

10、swarm部署http(在主节点swarm02上)
docker service create -p 80:80 --name webserver --replicas 4 httpd
–name:服务名称
–replicas:服务副本集个数
-p:端口映射
docker service ls //查看服务列表

docker service ps webserver | grep Running //查看具体服务开启情况

web分别访问192.168.80.100和192.168.80.110

注意:swarm02上并没有部署httpd但是可以访问网页,说明swarm01节点接收了主节点的任务部署。
11、swarm图像化管理(swar02上)

docker pull portainer/portainer //拉取图像化管理镜像
docker run -d -p 9000:9000 --restart=always --name prtainer-test portainer/portainer    //启动镜像

Web浏览器访问192.168.80.110:9000

赞(0)
【声明】:本博客不参与任何交易,也非中介,仅记录个人感兴趣的主机测评结果和优惠活动,内容均不作直接、间接、法定、约定的保证。访问本博客请务必遵守有关互联网的相关法律、规定与规则。一旦您访问本博客,即表示您已经知晓并接受了此声明通告。