使用P2P加速镜像拉取

P2P加速利用计算节点的内网带宽资源,在节点之间分发镜像。您可以在注册集群中使用P2P加速功能提升镜像拉取速度,减少应用部署时间。本文介绍如何在注册集群中使用P2P加速镜像拉取。

前提条件

  • 已创建容器镜像服务企业版实例,且您创建的企业版实例必须为标准版或高级版。更多信息,请参见创建企业版实例

  • 已创建注册集群,并将自建Kubernetes集群接入注册集群。具体操作,请参见创建注册集群

步骤一:为P2P加速组件配置RAM权限

通过onectl配置

  1. 在本地安装配置onectl。具体操作,请参见通过onectl管理注册集群

  2. 执行以下命令,为P2P加速组件配置RAM权限。

    onectl ram-user grant --addon ack-acr-acceleration-p2p

    预期输出:

    Ram policy ack-one-registered-cluster-policy-ack-acr-acceleration-p2p granted to ram user ack-one-user-ce313528c3 successfully.

通过控制台配置

在注册集群中安装组件前,您需要在集群中配置AccessKey来访问云服务。配置AccessKey前,您需要创建RAM用户并为其添加访问相关云资源的权限。

  1. 创建RAM用户。具体操作,请参见创建RAM用户

  2. 创建自定义权限策略,策略内容如下。具体操作,请参见创建自定义权限策略

    {
        "Version": "1",
        "Statement": [
            {
                "Action": [
                    "cr:ListInstanceEndpoint",
                    "cr:GetInstanceVpcEndpoint"
                ],
                "Resource": "*",
                "Effect": "Allow"
            }
        ]
    }
  3. 为RAM用户添加权限。具体操作,请参见为RAM用户授权

  4. 为RAM用户创建AccessKey。具体操作,请参见获取AccessKey

  5. 使用AccessKey在注册集群中创建名为alibaba-addon-secret的Secret资源。执行以下命令创建组件使用的Secret。

    kubectl -n kube-system create secret generic alibaba-addon-secret --from-literal='access-key-id=<ACCESSKEY_ID>' --from-literal='access-key-secret=<ACCESSKEY_SECRET>'
    说明

    <ACCESSKEY_ID><ACCESSKEY_SECRET>为上一步获取的AccessKey信息。

步骤二:获取企业版实例ID

  1. 登录容器镜像服务控制台

  2. 在顶部菜单栏,选择所需地域。

  3. 在左侧导航栏,选择实例列表

  4. 实例列表页面单击目标企业版实例。

  5. 概览页面左上角查看容器镜像实例ID。

步骤三:安装P2P加速组件

通过onectl安装

执行以下命令,安装P2P加速组件。

onectl addon install ack-acr-acceleration-p2p --set region=cn-zhangjiakou,acrInstances=****,pullImageInternet=true

参数

是否必选

说明

region

容器镜像实例所在的地域ID。

acrInstances

容器镜像实例ID。

pullImageInternet

组件镜像是否从公网拉取。

预期输出:

Addon ack-acr-acceleration-p2p, version **** installed.

安装组件时,可根据实际需求添加以下参数配置。

  • 根据节点磁盘容量适当调整registry-mirror缓存数据的保留时间,默认24h。

    set p2p.plusMode.cacheTTL=<custom time>
  • 设置registry-mirror缓存数据保留的宿主机路径。若不设置,缓存在registry-mirror容器重启时会丢失。

    set p2p.plusMode.cacheHostPath=<host path>
  • 回源下载时切换到OSS的公网传输加速链路,适用于公网跨海、跨地域等公网链路不稳定的场景。使用此功能,需确保已在OSS控制台开启该加速能力。

    set p2p.plusMode.ossInternetAccelerate=true
  • 设置节点上的P2P Agent直接从registry-mirror或者云上registry下载,此时不会安装P2P加速组件。

    set p2p.plusMode.downloadPattern=source
  • 部署Scheduler和registry-mirror到指定的节点上,需要首先为指定的节点打上标签k8s.aliyun.com/p2p-plus-node=true

    set p2p.plusMode.nodeSelectorEnable=true

通过控制台安装

  1. 登录容器服务管理控制台,在左侧导航栏选择市场 > 应用市场

  2. 应用目录页面,搜索P2P加速组件ack-acr-acceleration-p2p,找到并单击ack-acr-acceleration-p2p

  3. 在页面右上角,单击一键部署

  4. 创建面板中,选择集群命名空间,然后单击下一步,选择Chart版本为最新版本。

  5. 参数配置页面,设置acrInstances参数为上文获取的容器镜像实例ID。如果有多个容器镜像实例,在设置acrInstances参数时,实例之间使用英文半角逗号(,)隔开。

    说明

    默认占用节点上的65001端口,如果有冲突,请根据实际情况修改。

    # [Required]
    # ID of ACR EE instances, support multi, e.g. "cri-xxx,cri-yyy"
    acrInstances: ""
    p2p:
      ...
      # Port of P2P Agent in host network
      port: 65001
  6. 可选:使用ratelimit参数配置节点上P2P组件的总带宽限制(包括下行和上行带宽),默认512 MB/s,请根据您的节点带宽适当调整。

    p2p:
      # Total net rate limit (MBytes/s) for uploading and downloading
      ratelimit: "512M"
  7. 单击确定

步骤四:启用P2P加速

您可以通过为应用或命名空间添加标签的方式启用P2P加速。根据实际情况选择任一方式添加P2P加速标签。

  • 为应用添加P2P加速标签,例如Pod、Deployment等。

  • 为集群的命名空间设置P2P加速标签。为命名空间设置P2P加速标签后,该命名空间内的所有符合加速条件的应用均启用P2P加速,无需再修改应用的YAML文件。

为应用添加P2P加速标签

  1. 执行以下命令,编辑Deployment文件。

    kubectl edit deploy <Deployment名称>
  2. 在Deployment文件中添加标签k8s.aliyun.com/image-accelerate-mode: p2p

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: test
      labels:
        app: nginx
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            # enable P2P
            k8s.aliyun.com/image-accelerate-mode: p2p
            app: nginx
        spec:
          # your ACR instance image pull secret
          imagePullSecrets:
          - name: test-registry
          containers:
          # your ACR instance image
          - image: test-registry-vpc.cn-hangzhou.cr.aliyuncs.com/docker-builder/nginx:latest
            name: test
            command: ["sleep", "3600"]

为命名空间添加P2P加速标签

执行以下命令,为命名空间添加P2P加速标签。

kubectl label namespaces <your-namespace> k8s.aliyun.com/image-accelerate-mode=p2p

步骤五:验证P2P加速

启用P2P加速后,P2P组件会自动为Pod注入P2P相关Annotation、P2P加速镜像地址以及对应的镜像拉取凭证。

重要
  • 若您应用的YAML中不存在ACR企业版实例的镜像,或者未配置对应的非P2P加速域名地址的镜像拉取凭证,P2P组件会跳过Pod的自动注入。

  • P2P镜像拉取凭证与您之前配置的非P2P镜像地址拉取凭证仅镜像仓库域名不同,其他凭证信息一致。因此,若您之前镜像拉取凭证的用户信息配置错误,也会导致P2P镜像拉取失败。

执行以下命令,查看Pod。

kubectl get po <Pod的名称> -o yaml

预期输出:

apiVersion: v1
kind: Pod
metadata:
  annotations:
    # inject p2p-annotations automatically
    k8s.aliyun.com/image-accelerate-mode: p2p
    k8s.aliyun.com/p2p-config: '...'
spec:
  containers:
   # inject image to p2p endpoint
   - image: test-registry.distributed.cn-hangzhou.cr.aliyuncs.com:65001/docker-builder/nginx:latest
  imagePullSecrets:
  - name: test-registry
  # inject image pull secret for p2p endpoint
  - name: acr-credential-test-registry-p2p

预期输出表明,Pod已注入P2P相关的Annotation、P2P加速镜像地址以及对应的镜像拉取凭证,说明P2P加速启用成功。

相关操作

更新P2P加速组件参数

执行以下命令,根据实际需求更新P2P加速组件的相关参数。

onectl addon upgrade ack-acr-acceleration-p2p --set p2p.plusMode.cacheTTL=72h

卸载P2P加速组件

如您无需使用P2P加速组件时,可通过onectl或控制台两种方式卸载组件。

通过onectl卸载

执行以下命令,卸载P2P加速组件。

onectl addon uninstall ack-acr-acceleration-p2p

预期输出:

Addon ack-acr-acceleration-p2p uninstalled.

通过控制台卸载

  1. 登录容器服务管理控制台,在左侧导航栏选择集群

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择应用 > Helm

  3. 找到ack-acr-acceleration-p2p组件,单击右侧操作列下的删除

  4. 提示对话框,单击确认