内容简介:如果说,微服务和容器是最佳拍档,那么模块多实例是肯定少不了。假如没有使用类似关于Google jib可以参见我另外一篇
如果说,微服务和容器是最佳拍档,那么模块多实例是肯定少不了。
假如没有使用类似 Google jib 等手段进行镜像分层(利用镜像缓存),势必会造成
- 带宽浪费:尤其是公网带宽,如果是自建harbor,那么会容易导致单节点网卡被打满,如果用了harbor联邦,又会导致数据同步等运维问题。
- 集群拉起慢:镜像下载慢,必然会导致服务拉起慢。
关于Google jib可以参见我另外一篇 加速和简化构建Docker(基于Google jib) ,本文只介绍 Dragonfly + dfdaemon
Dragonfly是阿里巴巴自研并开源的一款基于P2P协议的文件分发系统。除了使用 dfget 进行文件下载外,还支持dfdaemon 进行 docker 镜像下载。
关于Dragonfly的镜像分发的原理性说明,可参见 直击阿里双11神秘技术:PB级大规模文件分发系统“蜻蜓” ,文中介绍很详细,此处不多说明。
实验环境
| 类型 | 系统 | ip | docker version |
|---|---|---|---|
| supernode | Ubuntu Server 16.04.6 LTS X64 | 192.168.0.44 | 17.06.2~ce-0~ubuntu |
| clinet1 | Ubuntu Server 16.04.6 LTS X64 | 192.168.0.40 | 17.06.2~ce-0~ubuntu |
| clinet2 | Ubuntu Server 16.04.6 LTS X64 | 192.168.0.45 | 17.06.2~ce-0~ubuntu |
注意:如果是实验目的,建议用Vmware,并且在关键操作时备份快照(比如,刚装完环境,升级完PS和.Net后),这样能够及时,干净的还原现场,节省每次重装系统导致的时间浪费
安装
吐槽一下Dragonfly的文档,简直让人不知所以。结合issues + 钉钉群内请教,遂整理出最简使用文档。
supernode
可选:给supernode增加docker加速器,可以参考 https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors ,如果不需要,可以去掉。
$ cat <<EOD >/etc/docker/daemon.json
{
"registry-mirrors": ["https://xxxx.mirror.aliyuncs.com"]
}
EOD
$ systemctl restart docker
$ docker run --name dragonfly-supernode --restart=always -d -p 8001:8001 -p 8002:8002 registry.cn-hangzhou.aliyuncs.com/dragonflyoss/supernode:0.3.0 -Dsupernode.advertiseIp=172.60.20.44
说明:
- –restart=always 在容器退出时,自动重启容器,防止异常kill或者oom导致的异常退出
- registry.cn-hangzhou.aliyuncs.com/dragonflyoss/supernode:0.3.0 dragonfly的supernode目前没有docker hub镜像,只能用阿里云的
- -Dsupernode.advertiseIp=172.60.20.44 设置clinet可以访问的supernode ip,这是一个大坑。如果不设置,有可能会导致client无法连接supernode,届时,docker pull会走clinet的网络,从真实的registry直接下载镜像
dfdaemon
$ cat <<EOD >/etc/dragonfly.conf
[node]
address=192.168.0.44
EOD
$ docker run --name dragonfly-dfclient --restart=always -d -p 65001:65001 -v /root/.small-dragonfly:/root/.small-dragonfly -v /etc/dragonfly.conf:/etc/dragonfly.conf dragonflyoss/dfclient:v0.3.0 --registry=https://xxx.mirror.aliyuncs.com --ratelimit 400M
$ cat <<EOD >/etc/docker/daemon.json
{
"registry-mirrors": ["http://127.0.0.1:65001"]
}
EOD
$ systemctl restart docker
说明:
- 在 /etc/dragonfly.conf 中配置client可以访问的supernode的ip地址,但是,目前官方没有做HA,supernode没法组集群,撑死算是联邦,不能共享文件信息,而且最坑的是,快速开始里,中英文均未提供需要配置此文件,而是在 Downloading Files with Dragonfly 等有所提及(我都是被坑完后,用关键词在d7y的org里搜索,类似知道答案后,找出处 手动[捂脸])
- -v /root/.small-dragonfly:/root/.small-dragonfly ,将容器中的关键目录挂载到宿主机上,防止重启或者镜像升级时,数据丢失
- –registry= https://xxx.mirror.aliyuncs.com 从何处下载镜像,可以写harbor地址,也可以写加速器地址。默认是 https://index.docker.io ,但是,因为国内网络原因,会导致大概率性失败。很灵异。而官方文档是写的
--registry https://xxx.xx.x不能算是坑,但是,对于docker不熟悉的,往往会不知能不能用加速器。 - –ratelimit 400M 是限速,默认是20M ,这肯定不算坑哈,这是正常特性,在 dfdaemon#Options 有说明,但是,文档是有误的
-ratelimit而实际是--ratelimit,如果不改此参数,会发现,下载很慢。 - 修改/etc/docker/daemon.json 是为了让docker engine走 dfdaemon
- systemctl restart docker 是为了让daemon生效
测试
大文件测试
$ docker pull anjia0532/kubeflow-images-public.tensorflow-1.6.0-notebook-gpu:v20180604-b3733835
可以通过 iftop 等软件,查看带宽使用情况判断是否生效,也可以通过查看日志来判断。
但是会经常性的出现 error pulling image configuration: received unexpected HTTP status: 502 Bad Gateway
最后
需要结合实际情况,配置相关参数,比如,文件失效时间,用来平衡文件有效期及磁盘使用量。
参考资料
- 直击阿里双11神秘技术:PB级大规模文件分发系统“蜻蜓”
- 深度解读阿里巴巴云原生镜像分发系统 Dragonfly
- Dragonfly Quick Start
- 加速和简化构建Docker(基于Google jib)
- 浙江移动容器云基于 Dragonfly 的统一文件分发平台生产实践
招聘小广告
山东济南的小伙伴欢迎投简历啊 加入我们 , 一起搞事情。
长期招聘,Java程序员,大数据工程师,运维工程师,前端工程师。
以上所述就是小编给大家介绍的《012-P2P加速Docker镜像分发(阿里Dragonfly)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- dragonfly 之 p2p 镜像分发
- 大规模集群中 Docker 镜像如何分发管理?试试 Uber 刚开源的 Kraken
- p2p-如何拯救k8s镜像分发的阿喀琉斯之踵
- View的事件分发(一)分发流程
- Android事件分发机制
- OSPF路由重分发
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Probability and Computing
Michael Mitzenmacher、Eli Upfal / Cambridge University Press / 2005-01-31 / USD 66.00
Assuming only an elementary background in discrete mathematics, this textbook is an excellent introduction to the probabilistic techniques and paradigms used in the development of probabilistic algori......一起来看看 《Probability and Computing》 这本书的介绍吧!