通过docker-machine和etcd部署docker swarm集群
本片文章介绍一下 使用docker-machine 搭建docker swarm 集群;docker swarm是docker 官方搭建的容器集群编排工具;容器编排,就是可以使你像使用一太机器一样来使用一个集群,你运行的容器可能会在容器中的任何一个节点上运行;
首先盗一张 docker swarm的架构图:

图片来源 https://yeasy.gitbooks.io/docker_practice/content/swarm/intro.html
在使用 Swarm 管理docker 集群时,会有一个 swarm manager 以及若干的 swarm node,swarm manager上运行 swarm daemon,用户只需要跟 swarm manager 通信,然后 swarm manager 再根据discovery service的信息选择一个swarm node 来运行container。
值得注意的是 swarm daemon 只是一个任务调度器(scheduler)和路由器(router),它本身不运行容器,它只接受 Docker client 发送过来的请求,调度合适的 swarm node 来运行 container。这意味着,即使 swarm daemon 由于某些原因挂掉了,已经运行起来的容器也不会有任何影响;
swarm manager 需要知道有哪些swarm node, 这就需要进行“服务发现”(有了注册才有发现);swarm的服务发现方式有很多种,这里主要实验了两种,即通过docker hub的token 和 etcd;
(1)上一篇文章中讲到docker-machine,docker-machine是集成了docker swarm的;docker hub token的方式是通过swarm向docker hub token申请一个token,然后将所有的node加入到这个token;
首先需要通过swarm的create命令来去docker hub去创建一个token, 前一章中,我们建立了一个叫hehe-dev的docker machine;
docker-machine ssh hehe-dev 登陆到这个machine中
dao pull swarm 将swarm的下载镜像下载下来,这里运用daocloud来进行加速
docker run swarm create 运行swarm create命令建立一个token,这个token要牢记下来,下文用SWARM_TOKEN来代替这个token;
接着退出hehe-dev
docker-machine create -d virtualbox --swarm --swarm-master --swarm-discovery token://SWARM_TOKEN swarm-master 建立swarm manager并且将其加入到token中;
docker-machine create -d virtualbox --swarm --swarm-discovery token://SWARM_TOKEN swarm-node-01
docker-machine create -d virtualbox --swarm --swarm-discovery token://SWARM_TOKEN swarm-node-02 接着建立起两个swarm node,名字自己随便取,我这里选的是swarm-node-01 和 swarm-node-01 不能有下划线
通过上面几步,其实一个swarm集群就已经建立起来了,通过docker-machine ls 可以看到已经建立起来的docker machine; 接着我们要看看集群里面的情况:
docker-machine ssh swarm-master 登陆到swarm-master节点中(其实登陆到集群中任何一台机器都可以),然后运行
sudo docker run --rm swarm list token://SWARM_TOKEN 然后就可以看到集群中的节点信息了;
(2)etcd 是coreOS项目下的一个分布式键值系统,主要用于服务发现和配置分发; 是用etcd作为swarm的服务发现组件其实是类似的,将etcd的某个目录(etcd://ip:port/dir 的格式)暴漏给swarm node,然后每个swarm node分别连接到这个目录,将自己的ip,端口注册到里面;
首先是安装etcd,到etcd的官网下载即可;github.com/coreos/etcd/releases, 我是mac os x,安装和启动命令如下:
curl -L https://github.com/coreos/etcd/releases/download/v2.3.0-alpha.1/etcd-v2.3.0-alpha.1-darwin-amd64.zip -o etcd-v2.3.0-alpha.1-darwin-amd64.zip
unzip etcd-v2.3.0-alpha.1-darwin-amd64.zip
cd etcd-v2.3.0-alpha.1-darwin-amd64
./etcd --data-dir=/tmp/default.etcd --listen-client-urls 'http://本机IP:4001' --advertise-client-urls 'http://本机IP:4001'
这样etcd服务就启动了。
docker-machine create -d virtualbox --swarm --swarm-master --swarm-discovery etcd://本机IP:4001/swarm swarm-master-etcd ;
docker-machine create -d virtualbox --swarm --swarm-discovery etcd://本机IP:4001/swarm swarm-node-etcd-01
docker-machine create -d virtualbox --swarm --swarm-discovery etcd://本机IP:4001/swarm swarm-node-etcd-02
上面创建服务的过程其实和token是一样的,只不过是讲etcd的url替换了token,查看swarm集群组成的时候,同时也是一样的道理;
通过docker-machine和etcd部署docker swarm集群的更多相关文章
- docker学习------centos7.5下的swarm集群可视化构建
1.swarm集群 manager : 192.168.211.175 agent1 : 192.168.211.176 agent2 : 192.168.211.177 2.环境 ...
- [第十五篇]——Swarm 集群管理之Spring Cloud直播商城 b2b2c电子商务技术总结
Swarm 集群管理 简介 Docker Swarm 是 Docker 的集群管理工具.它将 Docker 主机池转变为单个虚拟 Docker 主机. Docker Swarm 提供了标准的 Dock ...
- Docker Swarm集群中部署Traefik负载均衡器
一.创建单节点的Docker Swarm集群 docker swarm init 二.在Swarm集群中创建一个网络 docker network create --driver=overlay tr ...
- docker swarm快速部署redis分布式集群
环境准备 四台虚拟机 192.168.2.38(管理节点) 192.168.2.81(工作节点) 192.168.2.100(工作节点) 192.168.2.102(工作节点) 时间同步 每台机器都执 ...
- Centos7的安装、Docker1.12.3的安装,以及Docker Swarm集群的简单实例
目录 [TOC] 1.环境准备 本文中的案例会有四台机器,他们的Host和IP地址如下 c1 -> 10.0.0.31 c2 -> 10.0.0.32 c3 -> 10.0.0. ...
- [转载] Centos7的安装、Docker1.12.3的安装,以及Docker Swarm集群的简单实例
1.环境准备 本文中的案例会有四台机器,他们的Host和IP地址如下 c1 -> 10.0.0.31 c2 -> 10.0.0.32 c3 -> 10.0.0.33 c4 -&g ...
- Docker Swarm 集群管理利器核心概念扫盲
Swarm 简介 Docker Swarm 是 Docker 官方推出的容器集群管理工具,基于 Go 语言实现.代码开源在:https://github.com/docker/swarm 使用它可以将 ...
- swarm 集群
1.创建manage节点 $docker swarm init --advertise-addr=192.168.0.38(主机ip) To add a worker to this swarm, r ...
- 云计算之路-阿里云上-容器难容:优化自建 docker swarm 集群的部署
在上周六遭遇阿里云容器服务 swarm 版的故障之后,我们决定还是走自建 docker swarm 之路,只要不是阿里云底层的问题,我们相信会找到办法解决或避开自建 docker swarm 不稳定的 ...
随机推荐
- logistic原理与实践
逻辑回归模型是一种将影响概率的不同因素结合在一起的指数模型,得到的是0~1之间的概率分布.自变量范围是,值域范围限制在0~1之间.在搜索广告.信息处理和生物统计中有广泛的应用.例如搜索广告的点击率预估 ...
- error: Your local changes to the following files would be overwritten by checkout:
在发布这个配置文件的时候,会发生代码冲突: error: Your local changes to the following files would be overwritten by merge ...
- zencart産品描述加上錨文本
首先,函數會遍曆整段描述,假如一段描述裏面有Hermes wallets這個關鍵詞,那麽函數就會對這個關鍵詞加上鏈接,至于鏈接到哪裏,上面數組裏面有,隻要把數組裏面的内容替換你想要的就可以. 那麽在z ...
- 51nod 1174 1174 区间中最大的数
题目链接:51nod 1174 1174 区间中最大的数 ST(Sparse Table)算法学习参考博客:http://blog.csdn.net/niushuai666/article/detai ...
- C++11 智能指针
C++ 11标准库引入了几种智能指针 unique_ptr shared_ptr weak_ptr C++内存管理机制是当一个变量或对象从作用域过期的时候就会从内存中将他干掉.但是如果变量只是一个指针 ...
- mysql分表技术(学习心得)
(最近在学习mysql优化的一些问题,以下为个人一些收获,如有不足,敬请提出!) 概述:当一个表的数据很大,比如200G,这时太大,我们只靠索引也不好使了,这时我们需要分表和分区处理.分表有两种形式( ...
- ssh框架文件上传下载
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 理解js中__proto__和prototype的区别和关系
首先,要明确几个点:1.在JS里,万物皆对象.方法(Function)是对象,方法的原型(Function.prototype)是对象.因此,它们都会具有对象共有的特点.即:对象具有属性__proto ...
- 数组操作splice
今天,实现某个功能时需要操作数组, var array=[1,2,3,3,4]; console.log(array); //结果: 1,2,3,3,4 var data=arr ...
- sqlServer数据库插入数据后返回刚插入记录的自增ID
insert into tabls1(row1,row1) values('0','0') select @@IDENTITY