p2p-如何拯救k8s镜像分发的阿喀琉斯之踵

K8s的出现为PaaS行业的发展打了一针兴奋剂,Docker+k8s的技术路线已经成为了容器云的主流。尤其针对大流量,大弹性的应用场景来说,k8s将其从繁杂的运维、部署工作中彻底拯救出来。然而事情往往没有那么简单而美好,当我们使用k8s去管理一些大规模集群的时候,我们会发现有很多问题等待我们解决。比如,当集群中的所有节点同时去镜像仓库拉取镜像的时候,这种大规模并发很有可能阻塞仓库的出口,导致大家的下载速度都慢得难以忍受,这就是k8s镜像分发的阿喀琉斯之踵。虽然可以采取镜像仓库集群化的方法来缓解这个瓶颈,然而这种做法始终是治标不治本,此外还会造成维护成本升高,以及镜像同步时效性差等问题。

那么如何解决这个让人困扰的问题呢?

p2p看起来是一个好办法,去中心化的做法,不但可以降低对仓库节点的依赖,同时也可以为用户节省宝贵的外网流量。但是在k8s集群中拉取镜像的场景内使用p2p技术要面对一系列困难,包括节点间数据安全性的问题、无预热前提下的大规模并发拉取、非侵入式将集群改造成p2p网络等。

最近发现华为云容器镜像服务,可以提供一套在k8s集群中完美整合p2p下载的方案。该方案可以有效的解决了上述问题,提高镜像下载速度,并为用户节省大量带宽资源。

p2p改造后的集群下载测试结果

如上图所示,在限制了镜像仓库的下载带宽,并测试了200节点与500节点情况下,不同下载方式的状况。随着节点数量的增大,并发量触及到镜像仓库下载瓶颈的可能性也随之增大,然而使用了p2p下载方式改造的k8s集群并没有受到该瓶颈的制约,表现远强于传统下载方式。尤其是对于较大的镜像,差距更为明显。

如何把p2p下载整合到k8s集群内呢?

在华为云容器镜像服务中,改变了所有集群节点去镜像仓库拉取镜像的传统做法。在用户节点中注入peer客户端,使用peer客户端截取docker

client的拉取镜像请求,并将请求重定向。经过修改后只有部分节点(约10%)真正到达镜像仓库去获取镜像数据,剩余节点转为自集群内的其它节点获取镜像。要实现这个方案,主要的开发点有三处:对镜像仓库进行改造,部署并改造新的tracker服务器,以及在用户节点注入peer客户端。

对镜像仓库的改造

要想实现集群的p2p下载功能,所下载的文件必须包含有种子,因此要对已有的镜像仓库进行改造。当用户push镜像到镜像仓库时,仓库自动计算镜像所有layer的SHA值,并为每一个layer生成一个种子文件。

为了保证集群的安全性验证,仓库为每个接入的peer下发由仓库私钥签名的jwt token,这个token将会进入集群网络,并保证集群节点的认证安全。

部署改良后的tracker服务器

传统的Tracker服务器的主要功能是为所有peer客户端提供peer列表。针对k8s集群场景搭建的Tracker服务器除了负责分发peer列表外,还增加了许多其它特性。

1. 判断peer节点的集群归属,因为tracker服务器可能对多个集群进行服务,而每个集群中的节点网络相对独立,因此tracker负责记录peer节点的集群归属信息很有必要,这样可以避免分发出网络不互通的peer列表。

2.

Tracker服务器负责监控每个peer的状态,自动将部分下载完成的peer节点资源释放,因为集群节点属于客户资源,一旦完成任务应该尽快将资源释放出去。当Tracker判断当前集群中完成节点比例已足够支撑下载时,会指示部分已完结节点终结任务释放资源,并将其移除出任务列表。当所有peer节点均已完成下载,而且一段时间内没有新的下载请求进入,那么Tracker会指示将全部集群节点资源释放。

3. Tracker按比例(约10%)指定部分peer节点到镜像仓库下载,以此将数据带入整个集群网络。

4. Tracker提供peer节点的安全性验证,保证同属于一个集群并下载同一个资源的peer节点有获取peer列表的权限。

容器化的peer客户端

这个解决方案,创造性的将peer客户端容器化,并通过华为云容器引擎(CCE)的插件功能,将peer容器分发给整个集群。peer容器可以通过修改docker客户端代理的方式,拦截下载镜像请求的相关接口,将从镜像仓库下载操作转化为p2p网络下载操作,并把获取到的镜像数据归还给docker客户端,以此快速的把镜像数据分发到整个集群网络。该peer客户端还具有以下特性:

· 根据tracker的分配,修改下载地址,小部分从镜像仓库下载,大部分从集群网络中下载。

· 在peer客户端的tcp握手协议中注入jwt token安全校验,保证节点数据安全,防止假冒节点盗取数据。

· Peer客户端采用优先级下载方式,能够保证在下载过程中就可以将数据传输给docker客户端,而不是当数据全部下载完全后再传输给docker,以此最大限度的节省下载实际。

经过p2p方案改造后的k8s集群,下载速度得到了提升的同时,也为客户节约了大量带宽。当前这个特性已经在华为云上开放给用户使用,感兴趣的同学们快来体验吧。

《华为云容器镜像服务p2p功能使用指导》

OpenKruise 如何实现 K8s 社区首个规模化镜像预热能力,2024年最新阿里技术专家手写《微服务架构笔记》 关于分布式,限流+缓存+缓存,这三大技术(包含:ZooKeeper+Nginx+MongoDB+memcached+Redis+ActiveMQ+Kafka+RabbitMQ)等等。这些相关的面试也好,还有手写以及学习的笔记PDF,都是啃透分布式技术必不可少的宝藏。以上的每一个专题每一个小分类都有相关的介绍,并且小编也已经将其整理成PDF啦一个人可以走的很快,但一群人才能走的更远。 阅读详情

相关推荐

k8s(dns镜像,Kubernetes)

从谷歌拉去镜像,查看k8s搭建文档地址:https://blog.youkuaiyun.com/qq_33432713/article/details/81941188

【云原生4】K8s多节点在Pod内部署本地镜像

名称空间操作 kubectl get namespace # 获取名称空间 kubectl get pods # 获取默认名称空间pods kubectl get pods -A # 获取全部名称空间pods kubectl get pods -n [namespace] # 查看指定名称空间pod kubectl creat ns hello # 创建名称空间 也可以通过yaml文件创建ns: apiVersion: v1 kind: Namespace metadata: name: h

MaoZhihang的博客 5826

从PCEP到PCAP:一个数据分析师的Python认证升级之路与学习规划

本文详细介绍了数据分析师从PCEP(初级)到PCAP(中级)的Python认证升级路径,包括考试内容、备考策略和时间规划。通过系统化的学习,读者可以掌握Python在数据分析中的核心应用,提升职业竞争力。文章还提供了实用的代码示例和认证考试对比,帮助读者高效备考。

weixin_27427619的博客 438

K8s 扩容“翻车”实录:5000节点瞬间拉爆仓库,我是如何用 CMirror P2P 黑科技绝地求生的?

摘要:本文深入解析基于P2P技术的容器镜像分发加速系统CMirror,解决大规模K8s集群突发扩容时镜像拉取瓶颈问题。通过动态分片、智能调度和Gossip协议,将传统C/S模式转为P2P网状分发,实测显示5000节点拉取1GB镜像时间从10分钟+降至15秒内。文章涵盖核心原理、适用场景(弹性扩容、边缘计算、多云管理)、生产部署细节及避坑指南,为云原生架构提供高效的"镜像救心丸"。

kbird的专栏 1222

Cursor 团队代码规范与开发规则

本文提出了一套 Cursor 项目开发规范,涵盖代码结构、命名、日志、测试等关键环节,旨在提升代码质量和团队协作效率。核心规则包括:文件不超过2000行、函数不超过80行;变量命名禁用无意义单词;日志只记录关键信息;配置项禁止硬编码;依赖和敏感信息统一管理;核心逻辑测试覆盖率≥80%;Git提交遵循Conventional Commits规范。通过一个车辆数据处理函数的改造案例,展示了从"不规范"到"规范"的代码优化过程,体现了拆分函数、常量管理、错误处理等规范的实际

1255

如何利用ADS中的耦合线设计带通滤波器并转换为HFSS模型

耦合线带通滤波器是一种常用的微带滤波器形式,由多个长度为四分之一波长的耦合线节组成,在所需频点形成谐振,构成滤波器的频率响应特性。首先我们先来了解一下耦合线带通滤波器的电路结构,见下图:包括两对耦合线,中间为公共连接点,其中两对耦合线的偶奇模阻抗为(Z1e,Z1o)和(Z2e,Z2o,端口输入阻抗为Z0)。2.指定一个初始奇偶模值,ADS优化出一个合适的结果,通过奇偶模值利用linecalc工具计算出微带耦合线尺寸。假设中心频率为2GHz,则对应频点的电长度为。5.运行结果,两个软件仿真结果基本一致。

auqihc的博客 2227

P2P镜像分发:Harbor+Kraken优化镜像拉取速度(一)

随着云原生架构被越来越多的企业接受,企业应用中容器集群的规模也越来越大。当容器集群达到一定的规模且单容器应用副本数达到一定级别时,集群中容器镜像的分发将面临挑战。P2P(Peer-to-Peer,点对点)镜像分发借鉴了互联网P2P文件传输的思路,旨在提高镜像在容器集群中的分发效率,以更快的镜像拉取速度来对kubernetes集群进行优化。本篇主要讲述KrakenHarbor的理论部分。

渡江客涂鸦板 1440

统信UOS系统盘扩容保姆级教程:用GParten-分区编辑器5分钟搞定

本文提供统信UOS系统盘扩容的详细图形化教程。针对系统盘空间不足问题,重点介绍如何使用系统自带的GParten-分区编辑器,在5-10分钟内安全、直观地完成扩容操作,无需记忆复杂命令,适合所有用户快速解决存储空间告急的困扰。

e3f4g5的博客 640

OpenKruise 如何实现 K8s 社区首个规模化镜像预热能力,java面试刷题书

针对最近很多人都在面试,我这边也整理了相当多的面试专题资料,也有其他大厂的面经。希望可以帮助到大家。最新整理面试题上述的面试题答案都整理成文档笔记。也还整理了一些面试资料&最新2021收集的一些大厂的面试真题最新整理电子书最新整理大厂面试文档以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。6086)]上述的面试题答案都整理成文档笔记。也还整理了一些面试资料&最新2021收集的一些大厂的面试真题最新整理电子书。

m0_60452141的博客 1059

python 编程 安卓脚本_详解基于Android的Appium+Python自动化脚本编写

1.AppiumAppium是一个开源测试自动化框架,可用于原生,混合和移动Web应用程序测试, 它使用WebDriver协议驱动iOS,Android和Windows应用程序。通过Appium,我们可以模拟点击和屏幕的滑动,可以获取元素的id和classname,还可以根据操作生成相关的脚本代码。下面开始Appium的配置。appPackage和APPActivity的获取任意下载一个app解压...

weixin_39523625的博客 2928

1 电科院FTU检测标准学习笔记-外观检查

作者简介:本人从事电力系统多年,岗位包含研发,测试,工程等,具有丰富的经验在配电自动化验收测试以及电科院测试中,本人全程参与,积累了不少现场的经验。

sixtome 1849

p2p-如何拯救k8s镜像分发的阿喀琉斯之踵?

K8s的出现为PaaS行业的发展打了一针兴奋剂,Docker+k8s的技术路线已经成为了容器云的主流。尤其针对大流量,大弹性的应用场景来说,k8s将其从繁杂的运维、部署工作中彻底拯救出来。然而事情往往没有那么简单而美好,当我们使用k8s去管理一些大规模集群的时候,我们会发现有很多问题等待我们解决。比如,当集群中的所有节点同时去镜像仓库拉取镜像的时候,这种大规模并发很有可能阻塞仓库的出口,导致大家的...

weixin_34259232的博客 121

手把手教你学SOME/IP「1.0•概述」

本文介绍了SOME/IP协议的基本概念和主要特点。SOME/IP全称为"Scalable service-Oriented MiddlewarE over IP",是一种面向服务的车载嵌入式通信协议,支持远程过程调用、事件通知等功能。文章指出SOME/IP是AUTOSAR标准的一部分,在车载以太网架构中处于应用层位置,负责服务调度和通信封装。协议具有可扩展性强、资源消耗低、兼容性好等优势,能满足汽车电子领域对实时性、可靠性的严格要求。同时,文章也说明了SOME/IP的正确书写规范,并解释

nihaoljq2010的博客 678

如何拯救k8s镜像分发的阿喀琉斯之踵

K8s的出现为PaaS行业的发展打了一针兴奋剂,Docker+k8s的技术路线已经成为了容器云的主流。尤其针对大流量,大弹性的应用场景来说,k8s将其从繁杂的运维、部署工作中彻底拯救出来。然而事情往往没有那么简单而美好,当我们使用k8s去管理一些大规模集群的时候,我们会发现有很多问题等待我们解决。比如,当集群中的所有节点同时去镜像仓库拉取镜像的时候,这种大规模并发很有可能阻塞仓库的出口,导致大家的...

黑马程序员广州中心的专栏 231

【时时三省】tessy 进入调试模式 教程

山不在高,有仙则名。水不在深,有龙则灵。----优快云 时时三省。

时时三省的博客 771

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

P2P镜像分发:Harbor+Dragonfly优化k8s集群镜像拉取速度(二)

Dragonfly(蜻蜓)是一款开源的基于 P2P 的智能镜像和文件分发工具。它旨在提高大规模文件传输的效率和速率,最大限度地利用网络带宽。在应用分发、缓存分发、日志分发和镜像分发等领域被大规模使用。是由CNCF(云原生计算基金会)作为孵化级项目(阿里)。

渡江客涂鸦板 1462

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

【Kubernetes】k8s使用stargz光速分发镜像

#k8s使用stargz光速分发镜像 一、环境准备 按照k8s 参照上一篇文档 搭建k8s平台-containerd 组件名 版本 kubernetes 1.20.1 containerd 1.4.3 stargz-snapshot 0.6.4 安装stargz-snapshotter # 下载安装包 wget https://github.com/containerd/stargz-snapshotter/releases/download/v0.6.4/stargz-sna

Not_a_penny_to_name的博客 1068

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Dragonfly 基于 P2P 的文件和镜像分发系统

业界软件生态在优化 HTTPS 的性能上也做了诸多探索,传统的软件优化方案在软件层面的优化无法满足流量日益增长的速度,CPU 硬件加速成为业界一个通用的解决方案。

阿里巴巴云原生的博客 1499

【转载】P2P镜像分发Dragonfly使用

一、前言 Dragonfly的核心痛点还是节点数太多时文件分发效率问题,我们也正是因为这个需求非使用Dragonfly不可,其很好的支撑了阿里PB级数据的分发,无论从功能性能还是稳定性方面都能很好的满足我们需求,且可以支持普通的文件分发与docker镜像分发,镜像分发时还能兼容Docker pull接口,所以各位集群节点多时非常值得考虑。 并发在仓库拉去时非常有可能造成网络壅塞,甚至可能直接压垮镜像仓库。 可以看一下实测试性能,横坐标是并发数,纵坐标是...

snipercai的博客 1202
上一篇: p2p-如何拯救k8s镜像分发的阿喀琉斯之踵
下一篇: 华为开源镜像站2.0震撼上线
devopscsdn
博客等级 码龄10年 124粉丝 205原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值