通过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集群组成的时候,同时也是一样的道理;


时间: 2024-10-13 11:53:14

通过docker-machine和etcd部署docker swarm集群的相关文章

Docker Swarm集群中部署Traefik负载均衡器

一.创建单节点的Docker Swarm集群 docker swarm init 二.在Swarm集群中创建一个网络 docker network create --driver=overlay traefik --attachable 三.在Swarm集群中部署traefik负载均衡器服务 docker service create \ --name traefik \ --constraint=node.role==manager \ --publish 80:80 --publish 80

Docker1.12.1之swarm集群搭建与使用

1:前言 在docker1.12版本之前,众所周知dokcer本身只能单机上运行,而集群则要依赖mesos.kubernetes.swarm等集群管理方案.其中swarm是docker公司自己的容器集群管理工具,在当时的热度还是低于前两者.docker1.12.0版本发布中,Docker公司出于战略眼光,将swarm集成到docker-engine中,使docker内置了集群解决方案.于是swarm这个"亲儿子"的江湖地位迅速提升,在docker集群方案中与mesos,k8s形成三足鼎

docker1.12.0 swarm集群

测试环境: Manager: 192.168.209.129  Docker_Node1 Node: 192.168.209.130  Docker_Node2 系统及软件:centos 7.2  docker 1.12.0 1.初始化swarm集群 [[email protected] ~]# docker swarm init 还可以用参数: --listen-addr  指定监听(格式: <ip|interface>[:port]) (默认:0.0.0.0:2377) --adverti

docker swarm集群及其UI部署

一.规划 ①swarm01作为manager节点,swarm02和swarm03作为worker节点. # cat /etc/hosts 127.0.0.1   localhost 192.168.139.175  swarm01  192.168.139.176  swarm02  192.168.139.177  swarm03 ②配置SSH免密登陆 # ssh-keygen -t rsa -P '' # ssh-copy-id -i .ssh/id_rsa.pub [email prote

Docker Swarm集群部署应用

在Docker Swarm集群部署应用 我们过去使用docker run的命令创建容器, 把前面替换成docker service create就行了. 建议搭建一个registry,为所的docker主机提供镜像下载,否则你需要在每个docker主机本地存在容器镜像. 所以搭建一个私有仓库,由私有仓库提供所需要的镜像, 本实验环境中用node1同时作为registry. 拉取本地私有仓库registry,查看registry镜像 基础环境 全部为CentOS7系统,Docker 版本为1.12

Docker Swarm集群实践——部署篇

最新消息 Docker在上周的DockerCon技术大会上发布了1.12版核心产品Docker Engine,最大的新特性是Docker Swarm已经被整合到了Docker Engine里面而不再是一个单独的工具了,这样就可以更容易的把多个Docker主机组合成一整个规模更大可靠性更高的逻辑单元.Docker的掌舵者 Adrian Mouat相信这种新的集群模式可以大大增强Docker在相关领域的竞争力. 把Docker Swarm整合进Docker Engine是一个重大改进,但它也只是一个

同一个Docker swarm集群中部署多版本的测试环境

先介绍下用到的技术 Docker swarm: Docker官方的集群管理工具,相比kubernetes更加简单,容易入门.https://docs.docker.com/engine/swarm/ Traefik: 一个现代化的反向代理工具,原生支持Docker swarm模式,可以实现swarm的动态代理.https://docs.traefik.io/user-guide/swarm-mode/ 下图展示主要的思路: 在Docker swarm中创建某个测试版本service时,通过设置s

Docker Swarm集群部署实战

基本概念: Swarm介绍:Swarm是Docker公司在2014年12月初发布的一套较为简单的工具,用来管理Docker集群,它将一群Docker宿主机变成一个单一的虚拟的主机.Swarm使用标准的Docker API接口作为其前端访问入口,换言之,各种形式的Docker Client(dockerclient in Go, docker_py,docker等)均可以直接与Swarm通信.Swarm几乎全部用Go语言来完成开发,Swarm0.2版本增加了一个新的策略来调度集群中的容器,使得在可

docker swarm集群部署

docker swarm 集群构建: swarm 在docker 1.12 版本后内置 #h官方文档tps://docs.docker.com/engine/swarm/#feature-highlights 系统环境: centos7.3 docker17.06 1.初始化manager节点: docker swarm init 为实现高可用,manager节点需要有奇数个,类似zookerper选举制度. 2.复制生成的命令,在node节点运行. #docker swarm join-tok