美图欣赏 | 设为首页 | 加入收藏 | 网站地图

当前位置:电脑中国 > 网络 > 虚拟技术 >

使用 Docker Swarm 管理 Docker 集群

2018-05-03 13:21|来源:未知 |作者:dnzg |点击:

什么是 Docker Swarm


Swarm 是 Docker 公司在2014年12月初发布的一套用来管理 Docker 集群的较为简单的工具,由于 Swarm 使用标准的Docker API接口作为其前端访问入口,所以各种形式的Docker Client(dockerclient in go, docker_py, docker等)都可以直接与Swarm通信。老的 Docker Swarm 使用独立的外部KV存储(比如Consul、etcd、zookeeper),搭建独立运行的Docker主机集群,用户像操作单台Docker 机器一样操作整个集群,Docker Swarm 把多台 Docker 主机当做一台 Docker 主机来管理。新的 Swarm mode 是在docker 1.12版本中集成到 Docker 引擎中的,引入服务的概念,提供了众多的新特性,比如:具有容错能力的去中心化设计、内置服务发现、负载均衡、路由网格、动态伸缩、滚动更新、安全传输等。使得 Docker 原生的 Swarm mode 集群具备与 Mesos、Kubernetes 叫板的实力。

  • Docker Swarm 和 Swarm mode 的区别
  • 注:本文所说的 swarm 指的是 Swarm mode

配置说明


有两台主机(主机1、主机2),都已安装docker。当然也可以使用三剑客之一的 Docker Machine 来创建一批运行 Docker 的虚拟机。

创建集群


在主机1上创建 swarm 集群,主机1作为 manager 节点

$ docker swarm init --listen-addr 0.0.0.0:2377 --advertise-addr 主机1的IP
Swarm initialized: current node (kwsp26dy6gwjhocl6nxbez0bu) is now a manager.

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

    docker swarm join --token SWMTKN-1-1023ixl3yabjyws8tjdyvob7r40mljsu8atzsmlju18wz2itlj-br6gzae8focpm0ccpjaquz251 主机1的IP:2377

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

注意:主机1的防火墙要开放对应的端口

加入集群


主机2作为 worker 节点加入上面创建的集群

# 也就是上面创建完集群提示的命令
docker swarm join --token SWMTKN-1-1023ixl3yabjyws8tjdyvob7r40mljsu8atzsmlju18wz2itlj-br6gzae8focpm0ccpjaquz251 主机1的IP:2377

当然,主机2也可作为 manager 节点加入上面创建的集群,当主机1挂掉的时候它可以晋升为 Leader。

在主机1上查询对应的 token

$ docker swarm join-token manager
To add a manager to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-1023ixl3yabjyws8tjdyvob7r40mljsu8atzsmlju18wz2itlj-07q9wti67nkvqixykkcbi1ge8 119.27.177.81:2377

主机2上执行对应的命令,可以添加 --listen-addr 和 --advertise-addr 参数(同创建集群)

docker swarm join --token SWMTKN-1-1023ixl3yabjyws8tjdyvob7r40mljsu8atzsmlju18wz2itlj-07q9wti67nkvqixykkcbi1ge8 119.27.177.81:2377

查看集群节点


$ docker node ls
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
kwsp26dy6gwjhocl6nxbez0bu *   主机1               Ready               Active              Leader              18.03.0-ce
19nnijmzs16o1f92e6wdmltsf     主机2               Ready               Active              Reachable           18.03.0-ce

创建一个 overlay 网络


docker network create --driver overlay network_swarm

在 swarm 集群上创建服务,并指定使用的网络


docker service create --replicas 2 --name service_test --network=network_swarm nginx:alpine

查看服务状态


$ docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE               PORTS
yp2tn16eqaqc        service_test        replicated          2/2                 nginx:alpine

$ docker service ps service_test
ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE           ERROR               PORTS
8mgu08gmy0bf        service_test.1      nginx:alpine        主机1               Running             Running 4 minutes ago
310uv4k6aro8        service_test.2      nginx:alpine        主机2               Running             Running 4 minutes ago

主机1上查看容器

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS               NAMES
d9df9c365d68        
					
(责任编辑:dnzg)