docker

54次阅读
没有评论

共计 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 网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-16发表,共计2318字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)