You need to enable JavaScript to run this app.
导航

P2P 镜像加速方案

最近更新时间2024.03.07 17:36:37

首次发布时间2023.05.12 19:41:35

本文主要介绍容器服务(VKE)结合火山引擎镜像仓库(CR)提供 P2P 加速能力,利用节点的内网带宽资源,实现在节点之间分发镜像的方案。

说明

该功能目前处于 公测 阶段。

场景介绍

在容器业务中,当应用的镜像大小达到几个 GB,甚至几十 GB 以上时,在节点上下载镜像通常会消耗大量的时间。容器镜像仓库是集中式的,即集群中的所有节点都会从容器镜像仓库上拉取镜像。在集群规模很大、弹性并发等情况下,如果同时从容器镜像仓库拉取镜像,则容器镜像仓库网络带宽会成为性能瓶颈,导致镜像拉取缓慢。P2P 加速利用节点的内网带宽资源,在节点之间分发镜像,减少对镜像仓库的压力,大幅提升镜像拉取速度,缩短应用部署时间。

前提条件

方案说明

P2P 加速应用于大规模集群快速拉取 GB 级容器镜像,支持数百至上千节点的并发拉取,推荐如下使用场景 :

  • 建议集群 P2P 节点网络规模在 100~1000 节点之间。
  • 磁盘选择如下:
    • 优先选择本地盘、其次云盘。
    • SSD 本地盘性能优于 HDD 本地盘。
    • 若选择使用云盘,建议优先考虑华北 2(北京)地域的云盘。更详细的云盘选择,请参见 云盘规格

说明

为了获得更好的镜像加速效果,建议您优先在小部分节点上拉取镜像做预热,使得 P2P 节点缓存有镜像,再逐渐扩大镜像拉取的规模。

组件说明

容器服务基于 P2P 技术提供了用于容器镜像加速分发的 p2p-accelerator 组件。p2p-accelerator 组件部署在集群中每个节点(云服务器 ECS 实例)上,代理每个节点的镜像拉取请求,并转发至 P2P 网络的各个 Peer 节点。p2p-accelerator 组件配置说明,请参见 容器服务使用 P2P 加速

注意

  • 本文仅适用于容器服务中使用 P2P 加速;弹性容器实例(VCI)使用 P2P 加速的能力正在 邀测 中,如需使用,请提交申请。
  • 安装 p2p-accelerator 组件后,组件将会占用节点端口 65001、健康检查端口 40901。

使用限制

在大规模集群内启用 p2p-accelerator 组件拉取容器镜像时,一方面带来了镜像拉取速度的提升;另一方面也带来了节点数据盘较高的读写压力。由于更多节点变成 P2P 网络中的 Peer 节点,节点数据盘造成较高读写压力,可能影响集群内已有业务。同时也会对上行带宽有一定占用。
若集群内节点使用云盘存储拉取的容器镜像,则需要关注如下几个因素:

  • 云盘规格:云盘的型号、磁盘容量都会影响单盘吞吐量性能。
  • 地域、可用区下云盘集群总吞吐量的限制:建议选择推荐的地域使用该功能。
  • p2p-accelerator 组件的配置:安装 p2p-accelerator 组件需要预留一定的资源。组件在镜像加速拉取过程中,会占用节点的 CPU 和内存资源,加速结束后不再占用资源。建议节点为组件预留 2 核 CPU 和 6 GiB 内存的资源。
  • 集群内业务负载本身对磁盘的压力:避免因镜像拉取时云盘读写负载过高,造成集群内现网业务中断现象,甚至影响该地域内其他用户的正常使用。如果 P2P 给磁盘造成过大压力,建议联系您的容器服务业务对接人员,配置合适的限速,然后重启 p2p-accelerator 组件。

镜像加速方案选择对比

为了加快 Pod 启动速度,容器服务 VKE 提供了不同的方案进行优化。

对比项镜像懒加载P2P 加速自定义节点镜像和预热(邀测)
方案说明利用镜像读取数据热点,按需加载所需数据,提升容器启动效率。利用计算节点的内网带宽资源,在节点之间分发镜像,减少对容器镜像仓库的压力。通过对容器镜像进行拆分,将变动频率低的内容下沉到节点镜像,从而减小容器镜像大小。节点镜像通过预热方式加快节点的就绪。
适用场景容器镜像大,数据局部热点明显,镜像变更频繁的场景。容器镜像大且频繁变更的场景。底层镜像变动频率低的场景。

受限因素

  • 容器内应用读取容器镜像内容的范围。
  • 镜像中心可靠性。
  • 云盘集群吞吐量。
  • 业务对云盘的压力。

节点镜像缓存预热。

总上所述,自定义节点镜像和预热在使用流程上多了镜像拆分和节点镜像预热的步骤。但在预热后,整体拉取镜像的时间和性能,不会受其他因素影响。因此在镜像变动频繁的场景,可以使用 P2P 加速或 镜像懒加载 方案,也可以结合使用该两个方案。