大规模并发下如何加快 Pod 启动速度
来源 | 火山引擎云原生团队
Dragonfly 有如下组件:
- Manager:维护每个 P2P 集群之间的关系,动态配置管理。
- Scheduler:为下载节点选择最优的下载父节点,控制异常 Peer 的回源。
- Peer:Dragonfly 网络中的一个节点,也就是用户提出文件下载请求的计算机或服务器。
火山引擎容器服务 VKE 实现了对 Manager 和 Scheduler 的托管化改造,无需用户额外管理。VKE 中 P2P 组件的工作流程如下图所示:
- 当一个 Peer(例如,Peer A)需要拉取镜像时,它会首先与 Manager 节点进行通信。
- Manager 会检查所有在线的 Peer 的列表,考虑到各种因素(如网络连通性等)。
- 选择合适的 Peer 作为 Parent Peer。如果没有可供选择的 Parent Peer,Manager 会带领 Peer 直接从源服务器获取镜像。
- Manager 把找到的 Parent Peer 信息发送给发起请求的 Peer A,包括每个 Parent Peer 的地址和服务端口。
- Peer A 根据从 Manager 接收到的 Parent Peer 信息,从其它的 Peer 中下载镜像数据。
- Scheduler 模块会持续监控整个文件下载过程。如果发现 Parent Peer 下载速度过慢或者出现错误的情况,它将重新从 Manager 获取新的 Parent Peer 进行下载。
- 当获取整个镜像后,Peer A 就成为了该镜像的一个分发节点,所有的镜像数据都会直接从一个 Peer 传输到另一个 Peer。
如果此时有另一个 Peer(例如 Peer B)也需要同样的镜像,那么当 Dragonfly 收到 Peer B 的请求时,同样经过 Manager、Scheduler 的处理,最后会从已经保存了该镜像的 Peer A 那里拉取数据,从而实现了 P2P 的镜像分发。
在火山引擎上使用 P2P 的大致的流程如下:
前置条件:
- 有可用的 VKE 集群
- 有可用的标准版镜像仓库实例
操作步骤:
- 在标准版镜像仓库实例内开启对应 VKE 集群的 P2P 分发能力
- 在 VKE 集群内安装 p2p-accelerator 组件
下图展示了实际的加速效果:
使用镜像懒加载前,用户需要将 OCI 镜像转换成 Nydus 的镜像格式。用户可以使用 Nydus 社区的工具在本地转换后推送到任何满足 OCI 规范的镜像中心;或者使用火山引擎镜像中心服务 CR 内置针对 Nydus 镜像格式转换服务 —— 将托管在 CR 的 OCI 镜像一键转换成 Nydus 镜像。
为了避免混淆,这里先明确两个“镜像”:
- 自定义系统镜像:云上 ECS 所使用的 OS 镜像,对一台运行中的 ECS ,可以将 ECS 中的内容导出为“自定义镜像”,方便后续再基于这个“自定义镜像”来创建新的 ECS。
自定义镜像是您自行创建或上传的镜像,是您的私有镜像。镜像中除操作系统外,您还可以预装公共应用或私有应用,具有更高的定制化性。适用于需要重新部署复杂初始化系统或多次部署同样配置服务器的场景。关于“系统镜像”的更多信息,请参考:www.volcengine.com/docs/6396/801453 - 容器镜像:创建 Pod 时所需要的 image,一般通过 Dockerfile 构建后推送到镜像仓库中,启动 Pod 时再从镜像仓库拉取到节点上。
- 创建 ECS
- 在 ECS 中安装、启动 Containerd
- 利用 ctr 或者 crictl 命令拉取容器镜像
- 卸载 containerd 和其他临时文件
- 将 ECS 导出为自定义镜像
- 需要用户手动操作,流程较为繁琐且易出错
- 制作出来的自定义系统镜像无法被 VKE 识别,VKE 只识别带有特定标签的自定义系统镜像
- 首次使用自定义系统镜像创建 ECS 时,因系统镜像未预热,创建耗时较长
通过自定义系统镜像,在大批量扩容时,可以规避拉取镜像的操作,从而提升了业务 Pod 的启动速度、减少节点上因拉取镜像而带来的磁盘写入和网络下载。不论容器镜像多大,Pod 在启动时的镜像拉取耗时,都可以收敛到秒级以内。但因容器镜像固化到系统镜像内,之后可能会需要不断重新制作自定义系统镜像以便更新容器镜像内容,因此需要合理取舍 Pod 的启动性能、制作频率和制作成本。
综上所述,自定义节点镜像和预热在使用流程上多了镜像拆分和节点镜像预热的步骤。但在预热后,整体拉取镜像的时间和性能,不会受其他因素影响。镜像频繁变动场景,需要再次制作自定义节点镜像、重新进行镜像预热, 因此在镜像变动频繁的场景,可以使用 P2P 加速或镜像懒加载方案,也可以结合使用该两个方案。
扫码咨询
火山引擎云原生团队主要负责火山引擎公有云及私有化场景中 PaaS 类产品体系的构建,结合字节跳动多年的云原生技术栈经验和最佳实践沉淀,帮助企业加速数字化转型和创新。产品包括容器服务、镜像仓库、分布式云原生平台、函数服务、服务网格、持续交付、可观测服务等。
最新评论
推荐文章
作者最新文章
你可能感兴趣的文章
Copyright Disclaimer: The copyright of contents (including texts, images, videos and audios) posted above belong to the User who shared or the third-party website which the User shared from. If you found your copyright have been infringed, please send a DMCA takedown notice to [email protected]. For more detail of the source, please click on the button "Read Original Post" below. For other communications, please send to [email protected].
版权声明:以上内容为用户推荐收藏至CareerEngine平台,其内容(含文字、图片、视频、音频等)及知识版权均属用户或用户转发自的第三方网站,如涉嫌侵权,请通知[email protected]进行信息删除。如需查看信息来源,请点击“查看原文”。如需洽谈其它事宜,请联系[email protected]。
版权声明:以上内容为用户推荐收藏至CareerEngine平台,其内容(含文字、图片、视频、音频等)及知识版权均属用户或用户转发自的第三方网站,如涉嫌侵权,请通知[email protected]进行信息删除。如需查看信息来源,请点击“查看原文”。如需洽谈其它事宜,请联系[email protected]。