Docker集群管理(一)—— 基础docker+swarm+shipyard
目的
学习docker的集群管理,摸索出高可用的docker微服务架构方案。本篇文章只初步的了解下swarm(docker新版已集成了swarm)的使用,了解docker的发现服务的基础方法(docker hub 提供的内置方法,其他的比如:etcd、consul、zookeeper)
环境
三台虚拟主机:
192.168.139.128 (master,node1)
192.168.139.129(node2)
192.168.138.130(node3)
操作系统:centos7.3
Docker version 1.13.1, build 092cba3
一、安装Docker
docker的安装(略)
由于后面的shipyard需要docker的tcp方式访问,需要修改docker的配置:
vi /lib/systemd/system/docker.service
修改 ExecStart:
ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -D -H tcp://0.0.0.0:2375
重启docker
systemctl daemon-reload
systemctl start docker.service
当然实际用于生产环境这种方式并不安全,可用于测试。新版本doker swarm 支持TSL安全方式,后面的文章会讲到。
二、安装Swarm
swarm是一个docker集群管理工具。(swarm is a simple tool which controls a cluster of Docker hosts and exposes it as a single "virtual" host.)
1.拉取镜像
docker pull swarm
2.配Swarm集群
在任意的docker节点创建一个全世界唯一的token(集群ID),记住这个token后面需要用到。(这里用的发现服务是dockhub内置的,当然还有其他的比如etcd、consul等。)
docker run --rm swarm create
我这里获取到的token是:3c739bd3a589da0788978f502ea318ea
启动swarm manger
docker run -ti -d -p 2376:2375 --restart=always --name shipyard-swarm-manager swarm:latest manage --host tcp://0.0.0.0:2375 token://3c739bd3a589da0788978f502ea318ea
启动swarm agent,将当前docker节点加入到集群中:
这里我把三台服务器(VM)加入节点到集群,在每个docker节点上分开执行。
docker run -ti -d --restart=always --name shipyard-swarm-agent swarm:latest join --addr 192.168.139.128:2375 token://3c739bd3a589da0788978f502ea318ea
docker run -ti -d --restart=always --name shipyard-swarm-agent swarm:latest join --addr 192.168.139.129:2375 token://3c739bd3a589da0788978f502ea318ea
docker run -ti -d --restart=always --name shipyard-swarm-agent swarm:latest join --addr 192.168.139.130:2375 token://3c739bd3a589da0788978f502ea318ea
可以使用命令查看docker节点情况(任意docker节点上都可以执行):
docker run --rm swarm list token://3c739bd3a589da0788978f502ea318ea
可以使用命令查看docker集群的详情(可在任意docker节点上执行,IP地址是装了swarm master主机的IP):
docker -H 192.168.139.128:2376 info
三、安装Shipyard
1.拉取镜像
docker pull rethinkdb
docker pull shipyard/shipyard
2.启动rethinkdb
docker run -ti -d --restart=always --name shipyard-rethinkdb -p 8082:8080 -p 28015:28015 -p 29015:29015 -v /opt/rethinkdb:/data rethinkdb
这里暴露8082端口用于查看rethinkdb的使用情况:打开http://192.168.139.128:8082显示如下:
4.启动shipyard
docker run -ti -d --restart=always --name shipyard-controller --link shipyard-rethinkdb:rethinkdb --link shipyard-swarm-manager:swarm -p 8081:8080 shipyard/shipyard server -d tcp://swarm:2375
访问http://192.168.138.128::8001 可打开swarm的管理界面了
查看容器:
查看镜像:
查看节点:
可能遇到的问题
1.访问shipyard管理界面时候打不开?
答:由于采用了rethinkdb数据库,数据库未准备好之前是不能打开的,需要等大约1分钟。
2.shipyard能打开,但是没有容器和镜像?
答:需要设置防火墙或关闭防火墙。
firewall-cmd --zone=public --permanent --add-port=2375/tcp
firewall-cmd --reload
3.在shipyard中找不到某些docker节点?
答:可能由于访问discovery.hub.docker.com的网络不稳定原因(超时),尝试重启swarm agent容器。
ERRO[0011] Post https://discovery.hub.docker.com/v1/clusters/3c739bd3a589da0788978f502ea318ea?ttl=180: net/http: TLS handshake timeout
答:需要设置防火墙或关闭防火墙。
还需要解决的问题
- 发现服务不稳定,尝试使用其他发现服务(etcd、consul、zookeeper).
- 使用新版Docker内置的swarm的创建集群
- 使用Docker的STL安全连接
- 实现Docker集群的高可用架构(生产环境)
Docker集群管理(一)—— 基础docker+swarm+shipyard的更多相关文章
- docker集群管理
docker集群管理 ps:docker machine docker swarm docker compose 在Docker Machine发布之前,你可能会遇到以下问题: ...
- docker集群管理之kubernetes
一.简介 kubernetes又叫做k8s,是Google开发的一款开源的docker集群管理工具,在这里对它的“发家史”,我不做过多的阐述,有时间大家可以自己去百度一下: 下面我要讲的就是容易混淆的 ...
- 基于zookeeper+mesos+marathon的docker集群管理平台
参考文档: mesos:http://mesos.apache.org/ mesosphere社区版:https://github.com/mesosphere/open-docs mesospher ...
- Docker集群管理(三)—— docker swarm mode基础教程
docker从1.12版(及后续版本)集成了swarmkit.可以方便的实现docker集群.它有哪些特点呢: 集成了集群功能 分散设计:manager和worker两种节点. 声明式服务模式 可伸缩 ...
- Docker集群管理(二)—— docker+swarm+etcd+shipyard
引言 前一篇介绍如何简单的搭建一个可视化管理的docker集群,本篇将在此基础之上引入etcd发现服务. 目的 使用etcd发现服务解决swarm内置发现服务的不稳定问题.etcd采用raft算法,这 ...
- docker集群管理之swarm
一.简介 docker集群管理工具有swarm.k8s.mesos等,我所用到的是swarm和k8s,这篇文章主要介绍swarm:swarm是docker集成的原生 管理工具,只要你安装上docker ...
- Docker集群实验环境布署--swarm【1 架构说明】
在读完<Docker技术入门与实践>这本书后,基本上已对Docker了有一些入门的理解,以及我们为什么要使用Docker 答:我们发现在实际工作中,通过openstack一旦把一个VM创建 ...
- Docker集群管理工具 - Kubernetes 部署记录 (运维小结)
一. Kubernetes 介绍 Kubernetes是一个全新的基于容器技术的分布式架构领先方案, 它是Google在2014年6月开源的一个容器集群管理系统,使用Go语言开发,Kubernete ...
- Centos下安装Docker集群管理工具Shipyard
一. Docker Shipyard是什么 ? shipyard是一个开源的docker管理平台,其特性主要包括: 支持镜像管理.容器管理. 支持控制台命令 容器资源消耗监控 支持集群swarm,可以 ...
随机推荐
- jeecms系统使用介绍——通过二次开发实现对word、pdf、txt等上传附件的全文检索
转载请注明出处:http://blog.csdn.net/dongdong9223/article/details/76912307 本文出自[我是干勾鱼的博客] 之前在文章<基于Java的门户 ...
- C语言基础:函数(Function) 分类: iOS学习 c语言基础 2015-06-10 21:48 14人阅读 评论(0) 收藏
函数:一段具有某些特定功能的代码段. 使用函数的严格规定: 1.函数声明 2.函数定义 3.函数调用 函数声明:告知系统编译器该系统的函数名,函数参数,参数类型,参数个数,参数顺序等等,以便函数调用时 ...
- 转:HTML5中的element.dataset
使用HTML5中的 element.dataset 操作自定义 data-* 数据: 不久之前我向大家展示了非常有用的classList API,它是一种HTML5里提供的原生的对页面元素的CSS类进 ...
- 小程序引入多个e-charts
小程序引入e-charts图表 这里是狗尾草第一次发表掘金文章,日后望各位大佬多多支持~ 前言:运营助手,见名知意,没有图表数据的展示,看上去是有多空白.因此,俺们UI做了很好的交互,一个页面来了4个 ...
- 水题 不要62 HDU 2089
先预处理出所有的数是不是可能拿来用,我的想法是记录1-i这个区间内可用的数为s[i]. 输入a,b.答案就为s[b] - s[a-1]. 贴代码: #include<cstdio> #de ...
- dice 概率论 概率DP
题目链接: http://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1010&cid=459 找出公式,公式有实际意义,某种情形当 ...
- calc()语法
什么是calc()? 学习calc()之前,我们有必要先知道calc()是什么?只有知道了他是个什么东东?在实际运用中更好的使用他. calc()从字面我们可以把他理解为一个函数function.其实 ...
- GridControl 之 BandedGridView
https://documentation.devexpress.com/#WindowsForms/clsDevExpressXtraGridViewsBandedGridBandedGridVie ...
- ThinkPHP5 API 文档
ThinkPHP5 API 文档 有了这个还是相当的方便,可以快速查找每个组件的方法和接口. https://yangweijie.github.io/thinkphp-lts/index.html# ...
- AQS源码分析
AQS全程为AbstractQueuedSynchronizer,其定义了一套多线程访问共享资源的同步框架,大部分的同步类的实现都依赖于他,比如ReentrantLock,ReentrantReadW ...