Docker Swarm集群

  Docker Swarm 是一个用于创建和管理docker集群的工具。在1.12版本之后集成了swarmkit工具,该工具主要用于Docker集群管理和容器编排。

优势:

  1.方便创建和管理集群

  Docker Swarm是Docker源生的集群管理工具,可以直接使用Docker客户端来创建并管理一个Docker Swarm集群,然后在其中部署应用程序服务,而不需要额外的编配软件来创建和管理集群。

  2. 可扩展

  对于集群中的每个服务,都可以声明要运行的副本任务数量,当向上或向下进行扩展时候,集群管理器将通过添加或删除副本任务来自适应所需的状态

  3. 可实现期望的状态调节

  集群管理器节点不断监视集群状态,并协调实际和期望状态之间的任何差异

  4. 集群中多主机网络自动扩展管理

  Docker Swarm 为集群服务提供了一个覆盖网络,当它初始化或更新应用程序时,集群管理器会自动将在工作节点创建或更新网络来管理服务。

  5. 提供服务发现功能

  集群管理器节点为集群中的每个服务分配一个唯一的Dns名称,通过Docker Swarm集群提供的负载均衡功能,可以通过嵌入在集群中的Dns服务器来查询集群中运行的每个容器

  6. 可实现负载均衡

  可以将容器中服务的端口暴露给外部负载均衡器,而在内部,集群允许指定如何在节点之间分配服务容器

  7. 安全性强

  集群中的每个节点强制使用TLS相互认证和加密,以确保自身和其他节点之间的通信安全。此外,集群还支持使用自定义的自签名证书来保证安全

  8. 支持延迟更新和服务回滚

  在进行服务更新时候,可以将服务更新逐步延伸到每个节点上,集群管理器允许服务部署到不同节点组之间时出现延迟,如果某个及诶单出现问题,还可以将服务回滚到以前的版本

本地测试环境,三台Centos系统服务器

  环境支持:

    1. 安装Docker版本必须时1.12及以上

    2.服务器Ip地址固定,保证集群中所有节点能够访问该管理节点

    3.集群节点之间必须使用相应的协议保证一下端口可用:

      1)用于集群通信的Tcp端口2377

      2)Tcp和UDP端口7946, 用于节点间通信

      3)UDP端口4789,用于覆盖网络流量

  服务器信息:

    

manager1:  172.16.114.52
worker1: 172.16.109.67
worker2: 172.16.109.68

manager1: 管理节点
worker1:工作节点
worker2: 工作节点

开始搭建:

  1. 在manager1所在的机器上创建Docker Swap集群

docker swarm init --advertise-addr 172.16.114.52


注意: 如果是测试单节点的集群,直接使用docker swarm init

Swarm initialized: current node (ofv77vow2nhr4o9kpoof581ix) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-30e0wpgn5e0oq6i2vlvioqge3h2oawv52p0w1vdgq68gn8imwu-8lnpufoszaotkpe0mhchut2xk 172.16.114.52:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

   此时创建成功了,可以查看集群节点信息

docker node ls

  

  2. 向Docker Swarm集群添加工作节点

docker swarm join --token SWMTKN-1-30e0wpgn5e0oq6i2vlvioqge3h2oawv52p0w1vdgq68gn8imwu-8lnpufoszaotkpe0mhchut2xk 172.16.114.52:2377


注意: 这里--token表示向指定集群加入工作节点的认证信息

   3. 向Docker Swarm集群部署服务

  可以使用Docker Hub上自带的镜像来启动服务,也可以使用Dockerfile构建的镜像来启动服务。如果自己构建的镜像也需要先推送到Docker Hub中心仓库。

docker service create --replicas 1 --name helloworld alpine ping docker.com

    --replicas: 指定副本数量
    ping docker.com:服务启动后执行的命令

  集群服务相关操作:

# 查看当前集群中的服务列表信息
docker service ls


# 查看部署的服务的具体详情
docker service inspect helloworld


# 查看指定服务在集群节点上的分配和运行情况
docker service ps helloworld



# 更改Docker Swarm 集群服务副本数量
docker service scale helloworld=5


# 删除服务
docker service rm helloworld

  4. 访问服务  

  1)查看集群模式下的网络情况

docker network ls

会比非集群多一些网络方式,例如overlay

  2) 在集群管理节点manage1上,创建以overlay为驱动的自定义网络

docker network create --driver overlay my-multi-host-network

  3) 在集群管理节点上再次部署服务 

docker service create 
--network my-multi-host-network 
--name my-web 
--publish  8080:80
--replicas 2
nginx


参数说明:
    --network 指定服务使用自定义的overlay驱动网络my-multi-host-network连接
    --name. 指定服务启动后的名称
    --publish(-p) 映射外部服务端口
    --replicas 指定服务的副本数量
    nginx 基于nginx镜像构建的服务

  4)查看服务的两个副本运行情况

docker service ps my-web

  5) 外部访问 

打开浏览器,使用任意一台节点机器的IP+8080端口进行服务访问都可以

这是Docker Swarm负载均衡特点

  

原文地址:https://www.cnblogs.com/xingxia/p/docker_swarm.html