Docker注册表的主要目的是存储和分发Docker镜像,看似是一个相对简单的任务,但是如果遇到了像Uber这样的大规模计算集群,就很容易成为可伸缩性的瓶颈。在多区域和混合云系统的计算环境中,镜像分发会变得更具挑战性。

为了解决遗留Docker注册表堆栈的性能问题,Uber的集群管理团队开发了一个开源对等(P2P)Docker注册表kraken。

Docker容器是Uber基础设施的基础构建块,但是随着计算集群数量和大小的增加,一个简单的带有sharding和缓存的Docker注册表设置无法跟上高效分发Docker映像所需的吞吐量。

Kraken重点关注在可扩展性和可用性方面,用于混合云环境中的Docker镜像管理、复制和分发。支持可插拔的后端,Kraken可以作为分发层插入到现有的Docker注册表设置中。

图1 Docker图像层分布在Kraken集群中的可视化

架构

在Kraken研发时,Uber探索了多种设计,最终选择了p2p架构。Kraken使用针对数据中心网络环境定制的P2P协议,并在企业级改进了微服务生命周期管理。

代替管理数据块,Kraken支持可插入存储选项,可以插入可靠的blob存储选项,如S3、HDFS或其他注册表,且存储接口简单,易于添加新选项。

另外,Kraken在现有的成熟技术上建立了独特的数据分发解决方案,支持自我修复,易于维护,支持集群之间的无损和基于规则的异步复制。

大规模的性能改进

2018年年初,Kraken首次部署在了Uber中,其在遗留Docker注册表堆栈中遇到的性能问题迎刃而解。

据悉,在Uber最繁忙的时候,Kraken集群每天分发超过100万个blob,其中有10万个分发的blob大小超过1GB或更多。在生产高峰期,Kraken可以在30秒内分发20000个100MB到1GB的blob。

Kraken的高可扩展性使其能够支持至少8000台主机的集群,并以超过集群中主机最大下载速度限制50%的速度分发Docker镜像。另外,对Kraken来说,集群和镜像大小对下载速度没有显著影响。

自内部发布以来,Kraken一直被用于管理和分发Uber的所有Docker镜像。这次将该工具开源出来,Uber表示希望能够激发有关工程和设计最佳实践的讨论,以便与Docker一起构建一个适应性强且可靠的基础设施。

Kraken的GitHub地址:https://github.com/uber/kraken

Uber博客的原文链接:https://eng.uber.com/introducing-kraken/

大规模集群中Docker镜像如何分发管理?试试Uber刚开源的Kraken相关推荐

  1. pycharm中的settings没有latest version_k8s集群中pod镜像版本检查

    概述 version-checker用于观察k8s集群中运行的镜像的当前版本以及上游可用的最新版本.这些检查作为Prometheus指标公开,可以在gara fana上查看. 该工具目前处于实验阶段. ...

  2. docker swarm英文文档学习-8-在集群中部署服务

    Deploy services to a swarm在集群中部署服务 集群服务使用声明式模型,这意味着你需要定义服务的所需状态,并依赖Docker来维护该状态.该状态包括以下信息(但不限于): 应该运 ...

  3. Docker实战 (docker swarm的应用,docker集群的构建,在docker集群中部署服务)

    Docker实战 ----docker swarm的应用,docker集群的构建,在docker集群中部署服务 转载来源:https://blog.csdn.net/No_red/article/de ...

  4. docker实战2 (docker swarm的应用,docker集群的构建,在docker集群中部署服务的创建与更新)

    前言: 在之前曾写过一个关于docker集群创建的教程,但是不够深入,只是停留到集群的初始化和节点加入上,这次具体到服务,并详细讲解其中的原理.而且总结了很多自己做的过程中所踩过的很多坑(比如镜像的d ...

  5. mysql preparing状态_【Docker】在集群中部署应用为什么始终是Preparing状态

    正学习Docker 跟着get-started文档敲命令, 但部署应用到集群中始终不成功呢 [email protected]:~$ docker stack ps getstartedlab ID ...

  6. Docker Swarm集群中部署Traefik负载均衡器

    一.创建单节点的Docker Swarm集群 docker swarm init 二.在Swarm集群中创建一个网络 docker network create --driver=overlay tr ...

  7. docker 集群中 nginx 配置 php 需要注意的地方

    序 最近docker部署集群的时候遇到了一个问题.于是就踩坑了- 问题复现 那就是php和nginx不在同一个容器,却要通过nginx配置的server_name和listen来访问php项目. 之前 ...

  8. vue获取url中ip_Kubernetes 集群中这样获取客户端真实 IP

    Kubernetes 依靠 kube-proxy 组件实现 Service 的通信与负载均衡.在这个过程中,由于使用了 SNAT 对源地址进行了转换,导致 Pod 中的服务拿不到真实的客户端 IP 地 ...

  9. 在Google使用Borg进行大规模集群的管理 7-8

    为什么80%的码农都做不了架构师?>>> [编者的话]最后两章探讨的是相关工作和改进.从中可以看到从Borg到Kubernetes,他们也做了不少思考,而这方面的工作远远没有完善,一 ...

最新文章

  1. SQL_Case When 嵌套
  2. 头条创始人张一鸣没有任何大厂经验,是怎么做出这么厉害的产品的呢,以及管理这么大的团队呢?...
  3. mac环境下安装xampp
  4. 微服务架构 — 服务治理 — 服务限流、服务降级、服务熔断
  5. C++ 接口(抽象类)
  6. SAP Spartacus cxOutlet里的元数据存储,outlet名称和待渲染Component的映射关系
  7. zhajinhuagame为了迎接新版
  8. Musical Theme POJ - 1743(后缀数组+二分)
  9. Facebook究竟是怎么抄袭Snapchat的?听听他们自己怎么说
  10. ubuntu中firefox图片有色差问题
  11. JAVA 实现《warcraft java版》游戏
  12. js判断移动端还是pc端
  13. sql 查看某个日期字段对应某天的数据
  14. Delphi WebBrowser与网页交互
  15. 钰泰ETA8113,ETA8120,ETA8121降压转换器,2A/3A电流,OVP保护
  16. 原创|对接三方服务商回调鉴权的程序代码设计
  17. 全国流域水系数据大全(附下载地址)
  18. DateUtils.offsetDay
  19. 阿里巴巴java编码规范——日志规约
  20. 美发店管理软件有什么用?

热门文章

  1. 审视安全风险 ISS贯彻“智慧的地球”理念
  2. keepalived+LVS实现负载均衡集群
  3. 磨刀不误砍柴工!vs2010快捷键大全
  4. SpringMVC @RequestBody 接收Json数组对象
  5. Visual Studio 2013编译Mozilla NPAPI 示例注意事项
  6. transparentblt函数实现透明贴图 (上)
  7. 反汇编教程及汇编命令详解(一)
  8. jq 创建与添加节点
  9. wpgcms---流程控制
  10. JavaScript基础知识(函数)