在企业内部的Docker部署正在经历一个从测试到生产环境转变的过程,同时,组织内部不断增长的Docker镜像也面临着一些相同的挑战。英雄联盟在选择 Docker 容器镜像管理解决方案时,就面临着以下问题。
(1) Docker pull 速度慢,怎么办?
(2) 如何确保镜像一直可用?
(3) 如何在组织内传播和分享镜像?
(4) 如何管理谁可以访问镜像?
(5) 如何快速找到镜像?
(6) 如何与部署工具 (Ansible/Puppet/Chef) 集成,部署和分发镜像?
(7) 如何获取多种语言开发的包?
(8) 如何支持Docker 镜像流水线升级?
市面上有多种 Docker 注册中心的解决方案,包含免费版本的Docker OSS,付费的Docker Trusted Registery,以及JFrog(杰蛙)的 Artifactory。英雄联盟的架构师 Carl Quinn 选择了 JFrog Artifactory,目前英雄联盟部署在全球的 Artifactory 服务器已经达到上百台,来听听他选择的理由:
1
可靠的Docker 镜像私服,下载速度更快
英雄联盟经是Docker Hub 的重度使用者,但是,由于Docker Hub是一个远程资源,如果它突然停止运行,或者网络出了问题,该怎么办?
那么 Carl 看到Artifactory 可以远程代理Docker Hub或私有的Docker注册中心,提供可靠且一致的镜像获取途径。
镜像一经下载,便被Artifactory存储在本地缓存中。 在接收到后续请求时,Artifactory对所请求的镜像执行智能校验和搜索,如果检测到它已经被下载过,则提供本地高速缓存的副本。 因此,镜像只需下载一次,便可供本地组织中的所有其他开发者使用(从而减少网络流量)。
在Artifactory中使用本地存储库而不是在Docker Hub上使用私有存储库,可以消除任何与网络连接相关的问题。当所有的Docker镜像通过Artifactory中的本地存储库访问时,连接就不成问题了。
2
Docker高可用性
英雄联盟的并发访问量非常大,资源包的下载量也很大,这就需要后端服务器具备高可用的能力。
Artifactory支持在同一局域网上具有2个及以上的Artifactory服务器集群的高可用性网络配置。 没有单点故障意味着只要至少有一个Artifactory节点可运行,那么整个系统就可以继续运行。这最大限度地延长了正常运行时间,甚至可以达到“五个九”的可用性水平。 此外,系统可以在不影响性能的条件下适应更大的负载突发。 最后,通过使用具有多个服务器的体系结构,Artifactory HA支持无需系统停机的状况下执行大多数维护任务和系统升级。
3
公司内部分发以及共享Docker镜像
英雄联盟经常会遇到多开发团队中环境的不一致以及无法重用代码库的问题。
使用本地存储库,Artifactory提供了一个中心位置去部署和存储镜像:一个有效地、可以替换Docker Hub的私有Docker注册中心。 当所有团队都知道可以从一个URL访问所有镜像时,管理不同团队之间的镜像访问就会变得非常容易。 但是如果想与距离组织较远站点的同事分享镜像该怎么办?
要允许在不同站点之间共享,可以复制存储库到本地网络之外的那个Artifactory节点。 复制后的存储库会定期与其源自动同步,以便镜像可供不同的团队使用,无论他们身处何方。
Artifactory还能提供在组织中分布多个Docker注册中心的功能。开发,测试和部署团队都有各自的注册中心,可以自定义设置用户权限,在不同阶段通过组织部署管道传递Docker镜像。
4
安全及访问控制
每个组织都面临安全问题,英雄联盟也不例外。比如开发人员在未授权的位置存储镜像和访问他们未被授权使用的镜像。
Artifactory使用一系列权限设置来保障Docker镜像的安全和访问控制。 通过定义适当的用户和组,可以控制开发者访问或部署镜像的位置,是否可以注释元数据,是否可以删除镜像等。 Artifactory还能通过与最常见的访问协议(如LDAP,SAML,Crowd等)完全集成,提供对服务器访问的控制。
通过使用Artifactory中的本地存储库,企业可以享受比Docker私有注册中心提供的更可靠的安全性,和对其镜像更细微的访问控制。 此外,作为第一道防线,Artifactory允许使用命名模式定义“排除”和“包括”访问。
举一个例子,在管理开发过程中,安全访问控制是要确保开发者可以将发布候选者部署到本地QA仓库,但只有授权过的QA工作人员确保候选者已经满足所需标准后,才能移动其到“发布”仓库,从中提取产品镜像。
这种由Artifactory为本地存储库提供的安全和访问控制级别远远高于Docker Hub目前能提供的级别。 Artifactory有效地替换了Docker Hub,可以在组织内管理任何数量的安全问题和私有Docker注册中心。
5
使用自定义属性智能搜索镜像
英雄联盟的镜像数目非常庞大,要找到特定的镜像有时会变得相当困难。例如我如何通过一个查询找到经过测试的最新镜像?
Artifactory通过UI和使用广泛的REST API提供灵活的搜索功能。 可以用基于固有属性的任何组合来查找镜像,例如名称,版本,时间戳,校验或自定义属性(镜像是否通过性能或安全测试)。Artifactory还提供了一些常见的内置搜索。 例如,可以要求Artifactory获取任何镜像的“最新”版本,而无需指定一个特定的内部版本号。 Artifactory知道如何在其存储库中比较所有不同版本的镜像,来提供最新的可用版本。
英雄联盟也使用到了 Artifactory 元数据的功能,在镜像上加入特定的元数据,比如自动化测试的通过率,测试的平台,等等,通过 API 过滤出包含某些元数据的镜像,镜像部署和分发。
6
和部署脚本 Ansible/Puppet/Chef 集成
为了实现持续交付,英雄联盟使用 Artifactory 的 API 和他们的部署脚本集成。
Artifactory 里的所有工件(包括 Docker 镜像)均提供统一的 REST API 对外提供访问。无论使用什么样的部署脚本,均可以通过标准的 REST API 来获取所需的 Docker 镜像。 另外,最新版本的 Artifactory5.1已经支持了 Puppet 和 Chef 仓库。
7
支持多种语言
英雄联盟在开发语言的选择上比较广泛,所以需要不同的仓库来支持不同语言打包的工件,然后整合到 Docker 镜像里。使用 Artifactory 减少了多种语言仓库维护的成本,更重要的是它提供把每种语言的部署流程统一化的能力,让组织内的开发,测试,运维在一个平台上协作,进行持续交付。
8
Docker 镜像流水线升级
Artifactory 提供了Docker 的升级 API,使用这个 API 可以把镜像升级到最新版,并且推送到安全性更高的生产仓库。
总结
英雄联盟现在成为JFrog Artifactory的重度用户, Artifactory提供私有的,高可用的Docker 注册中心,提高构建速度,统一镜像交付流程,让开发,测试,部署团队有一致的交付流水线视图,同时保证安全访问,和部署脚本集成,使得DevOps 真正落地,实现快速发布。
关于Docker 持续交付流水线
我们会在后续的文章中详细的阐述用Docker 实现不可变基础设施,进行持续交付,敬请关注!
下载JFrog Artifactory 开源版(代替 Nexus):
http://www.jfrogchina.com/open-source/
下载JFrog Artifactory 企业版(免费试用):
https://www.jfrog.com/artifactory/free-trial/?lang=zh-hans#High-Availability
任何问题欢迎联系我们:[email protected]
关于JFrog
公司成立于2008年,在美国、以色列、法国和西班牙,中国北京拥有超过200名员工。JFrog 拥有3000多个付费客户,其中知名公司包括如Netflix、思科、谷歌、亚马逊。最近,JFrog 连续第二年被德勤评选为50家增长最快的技术公司之一,还被评为硅谷增长最快的私营企业之一。