共计 2318 个字符,预计需要花费 6 分钟才能阅读完成。
本篇内容主要讲解“docker-registry 的定制和性能是怎样的”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让丸趣 TV 小编来带大家学习“docker-registry 的定制和性能是怎样的”吧!
docker-index
Web UI
Meta-data 元数据存储(附注、星级、公共库清单)
访问认证
token 管理
docker-registry
存储镜像、以及镜像层的家族谱系
没有用户账户数据
不知道用户的账户和安全性
把安全和认证委托给 docker-hub 来做,用 token 来保证传递安全
不需要重新发明轮子,支持多种存储后端
没有本地数据库
后端存储
因为镜像最终是以 tar.gz 的方式静态存储在服务端
适用于对象存储而不是块存储
registry 存储驱动
官方支持的驱动有文件、亚马逊 AWS S3、ceph-s3、Google gcs、OpenStack swift,glance
一次 docker pull 发生的交互
Client 向 Index 请求,知道从哪里下载 samlba/busybox
Index 回复:
samalba/busybox 在 RegistryA
samalba/busybox 的 checksum,所有层的 token
Client 向 Registry A 请求,samalba/busybox 的所有层。Registry A 负责存储 samalba/busybox,以及它所依赖的层
Regsitry A 向 Index 发起请求,验证用户 /token 的合法性
Index 返回这次请求是否合法
Client 从 registry 下载所有的层
registry 从后端存储中获取实际的文件数据,返给 Client
搭建私有镜像库的方案
上面的 index,registry,后端存储 3 者都是可选的。registry 分 0.9 的 python 版实现和 2.0 版的 go 实现。
认证和权限
如果镜像库不直接提供给用户使用,仅仅是私有 PaaS 的一部分,可以不用 index 组件,直接上 registry 就行。index 的开源实现包括 docker-registry-web,docker-registry-frontend。支持较好的是马道长的 wharf。
后端存储
我们环境使用的是网易的内部的对象存储 NOS,类似于 S3。其他的方案没用过,如果要自己搭,可能靠谱的是 ceph-s3。如果在公网环境或者已经购买了公有云服务,可以考虑自己实现一个 registry- 对象存储的驱动。
集群和分布式
registry 本身是无状态的,可以水平扩展,然后在前面做 ngix 的负载均衡。
性能分析 v1 协议 vs v2 协议客户端 push 总时间 pull 总时间 registry-0.9388.180.9registry-2.0368.476.1
做了性能对比测试,同样为 docker1.6,v2 协议比 v1 协议快 5 -6% 左右,基本可以忽略不计。
单次 pull 和 push 的性能分析
层 |docker push|curl put :—–|:—– layer1|34s|4.3s layer2|325s|44.6s
层 |docker pull|curl get :—–|:—– layer1|42s|20.8s layer2|2s|1.4s
经过对比测试,单次 docker pull 和 push 的最大耗时在客户端,也可以观察到每次做 docker pull 和 push 的时候系统 CPU 占用率都在 100%。也就是说 50% 以上的时间花在本地做的压缩、计算 md5 等操作。
并发分析
并发测试的结果是在一个 2 核 2G 内存的 registry-0.9 服务器,直接用文件存储,大约能负载 50 个 docker client 的并发。如果换用对象存储的后端,估计 10 个 docker client 的并发就是极限了。在这方面 registry-2.0 的并发能力更强,但对内存消耗更大。
Q A
问:2.0 的性能也没什么变化啊,优势在哪里?** 答:** 客户端优化有限,在超过 100 个节点同时 pull 一个镜像时,2.0 服务端资源占用少。
问:服务端的并发瓶颈在哪里?** 答:** 服务端的代码还没做过更多的分析,从经验判断主要还是 IO,python 的内存占用比较多。
问:考虑过多机房 image 存储 CDN 没?** 答:** 这个还真没考虑过,目前我们的镜像服务是个内部 PaaS 平台用的,只要保证集群所在机房能快速访问就行。
问:那还不如每机房加缓存?** 答:** 是的,也可以考虑 registry 的 mirror 机制,用了 mirror 后可以一个点 push,其他点 pull。
问:你们的调度器是自己开发的吗?** 答:** 我们底层用的是 Kubernetes,调度器做一定的修改,主要是为了保证多个可用域。
问:内部的 PaaS 有没有做资源限制、网络隔离?** 答:** 有,目前我们的 Docker 是跑在 kvm 上。
问:昨天网易好多服务断片了,据说是网络攻击,那这些服务有跑在 Docker 上吗?** 答:** 呵呵,断片是因为 BGP 的核心交换机问题,我也很好奇是什么引起的,目前还没有组织和个人声称对此事负责。
问:有没有考虑过 nova-docker?** 答:** 社区不是很活跃,我们没有采用这个方案,但对于中小公司来说这是最快的方案。
问:为啥不考虑自己实现调度器?** 答:** 忙不过来,我们也想做啊,这个放在后面实现。
问:我们准备在某公有云上跑 Docker 集群。** 答:** 先这么用呗,我觉得 Docker 的优势就是底层平台无关,今后换了底层迁移也没有那么困难。
到此,相信大家对“docker-registry 的定制和性能是怎样的”有了更深的了解,不妨来实际操作一番吧!这里是丸趣 TV 网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!