🍁博主简介:
🏅云计算领域优质创作者
🏅2022年CSDN新星计划python赛道第一名🏅2022年CSDN原力计划优质作者
🏅阿里云ACE认证高级工程师
🏅阿里云开发者社区专家博主💊交流社区:CSDN云计算交流社区欢迎您的加入!
目录
1、简介
2、安装Swarm
2.1、下载镜像
2.2、配置节点
2.3、启动集群
👑👑👑结束语👑👑👑
Docker Swarm是Docker官方的三剑客项目之一,提供Docker容器集群服务,是Docker官方对容器云生态进行支持的核心方案。使用 它,用户可以将多个Docker主机封装为单个大型的虚拟Docker主机,快速打造一套容器云平台。
|
1、简介
Docker Swarm是Docker公司推出的官方容器集群平台,基于Go语言实现,代码开源在
https://github.com/docker/swarm
。目前,包括Rackspace在内的许多平台都采用了Swarm,用户也很容易在AWS等公有云平台使用Swarm。
|
Swarm的前身是Beam项目和libswarm项目,首个正式版本(Swarm V1)在2014年12月初发布。为了提高可扩展性,2016年2月对架构进行重新设计,推出了V2版本,支持超过1千个节点。最新的Docker Engine已经集成了Swarm Kit,加强了对Swarm的协作支持。
|
作为容器集群管理器,Swarm最大的优势之一就是100%支持标准的Docker API。各种基于标准API的工具,如Compose、docker-py,各种管理软件,甚至Docker本身等都可以很容易地与Swarm进行集成。这大大方便了用户将原先基于单节点的系统移植到Swarm上。同时Swarm内置了对Docker网络插件的支持,用户可以很容易地部署跨主机的容器集群服务。
|
Swarm V1的结构图如下图所示。可以看出,Swarm是典型的master-slave结构,通过发现服务来选举manager。manager是中心管理节点,各个node上运行agent接受manager的统一管理。 |
在V2中,集群会自动通过Raft协议分布式选举出manager节点,无需额外的发现服务支持,避免了单点瓶颈。同时,V2中内置了基于DNS的负载均衡和对外部负载均衡机制的集成支持。
|
2、安装Swarm
安装Swarm有几种方式,可以基于Docker Machine进行安装,也可以手动配置。为了能更容易理解Swarm的组件和更灵活地进行管理,推荐使用手动配置方式。
|
对于Docker 1.12+版本,Swarm相关命令已经原生嵌入到了Docker Engine中,对于较低版本的Docker,需要额外进行配置 |
2.1、下载镜像
Docker官方已经提供了Swarm镜像,需要在所有被Swarm管理的Docker主机上下载该镜像:
|
$ docker pull swarm
可以使用下面的命令来查看Swarm版本,验证是否成功下载Swarm镜像 |
$ docker run --rm swarm -v
swarm version 1.2.2 (34e3da3)
2.2、配置节点
Docker主机在加入Swarm集群前,需要进行一些简单配置,添加Docker daemon的网络监听。例如,在启动Docker daemon的时候通过-H参数:
|
$ sudo docker daemon -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
注意:
Docker 1.8.0前的版本不支持daemon命令,可以用-d代替。如果是通过服务方式启动,则需要修改服务的配置文件。
|
以Ubuntu 14.04为例,配置文件为/etc/default/docker(其他版本的Linux上略有不同)。在文件的最后添加:
|
DOCKER_OPTS="$DOCKER_OPTS -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock"
2.3、启动集群
Docker集群管理需要使用服务发现(Service Discover)功能,Swarm支持以下几种方式:Docker Hub、本地文件、Etcd、Consul、Zookeeper和手动指定节点IP地址信息等。
|
除了手动指定外,这些方法原理上都是通过维护一套数据库机制来管理集群中注册节点的Docker Daemon的访问信息。
|
本地配置集群推荐使用Consul作为服务发现后端。利用社区提供的Docker镜像,整个过程只需要三步即可完成
|
启动Consul服务后端
启动Consul服务容器,映射到主机的8500端口: |
$ docker run -d -p 8500:8500 --name=consul progrium/consul -server -bootstrap
获取到本地主机的地址作为consul的服务地址:<consul_ip>:8500。 |
启动管理节点
首先启动一个主管理节点,映射到主机的4000端口,并获取所在主机地址为<manager0_ip>。其中4000端口是Swarm管理器的默认监听端口,用户也可以指定映射为其他端口:
|
$ docker run -d -p 4000:4000 swarm manage -H :4000 --replication --advertise
<manager0_ip>:4000 consul://<cons
为了提高可用性,也可以启动从管理节点。假定获取所在主机地址为:
|
$ docker run -d swarm manage -H :4000 --replication --advertise <manager1_ip>:
4000 consul://<consul_ip>:8500
启动工作节点
需要在每个工作节点上启动agent服务。获取节点的主机地址为<node_ip>,并指定前面获取到的consul服务地址:
|
$ docker run -d swarm join --advertise=<node_ip>:2375 consul://<consul_ip>:8500
节点启动后,用户可以指定Docker服务地址为<manager0_ip>:4000>来测试各种Docker命令,可以看到整个Swarm集群就像一个虚拟的Docker主机一样正常工作。
|
由于Swarm实际上是通过agent调用了本地的Docker daemon来运行容 器,当Swarm集群服务出现故障时,无法接受新的请求,但已经运行起来的容器将不会受到影响。
|