您可以在边缘集群中使用P2P加速功能提升镜像拉取速度,减少应用部署时间。本文介绍如何在边缘集群中使用P2P加速功能。

前提条件

  • 已创建容器镜像服务企业版实例,且您创建的企业版实例必须为标准版或高级版。更多信息,请参见创建企业版实例
  • 边缘集群需要通过公网网络访问企业版实例,请确保已开启公网访问并添加白名单,更多信息,请参见配置公网的访问控制

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

  1. 登录容器镜像服务控制台
  2. 在顶部菜单栏,选择所需地域。
  3. 在左侧导航栏,选择实例列表
  4. 实例列表页面单击目标企业版实例。
  5. 概览页面左上角查看容器镜像实例ID。
步骤二:安装P2P组件
  1. 登录容器服务管理控制台
  2. 在控制台左侧导航栏中,选择市场 > 应用目录
  3. 应用目录页面搜索ack-edge-acr-acceleration-p2p,找到ack-edge-acr-acceleration-p2p,然后单击ack-edge-acr-acceleration-p2p。
  4. 创建面板选择边缘集群。
    说明 请务必先选择集群再配置参数,先配置参数再选择集群会导致参数配置失效。
  5. 单击参数页签,设置registryInstances参数为上文获取的容器镜像实例ID。
    如果有多个容器镜像实例,则设置registryInstances参数时,中间用英文逗号(,)连接。
    说明 默认占用节点上的65001端口,如果有冲突,请根据实际情况修改。
    p2p:
      ...
      # Port of P2P Agent in host network
      port: 65001
    
      # Id of ACR registry instances, support multi, e.g. "cri-xxx,cri-yyy"
      registryInstances: <ACR instance Id>
  6. 设置plusMode参数,使边缘节点池可以使用P2P组件进行P2P加速。
    说明 关于如何查看边缘节点池名称和ID,请参见查看边缘节点池名称和ID
    p2p:
      plusMode:   
        # 取值`p2p`或`source`。
        # `p2p`表示优先从P2P网络中下载。
        # `source`表示直接从registry-mirror或者云上registry下载,此时不会安装scheduler。
        downloadPattern: "p2p"
        
        # registry-mirror缓存数据保留时间,根据您节点磁盘容量适当调整。
        cacheTTL: 24h
        
        # registry-mirror缓存数据保留的宿主机路径。
        # 若不设置, 缓存会在registry-mirror容器重启时丢失。
        cacheHostPath: ""    
    
        # 边缘节点池配置,可配置多个,可从ACK控制台节点池获取相关参数。
        # `name`为某个边缘节点池的名称。
        # `id`为某个边缘节点池的id。
        edgeNodePools:
          - name: ""
            id: ""      
        
        # 若开启,表示回源下载时切换到oss的公网传输加速链路,适用于公网跨海、跨地域等公网链路不稳定的场景。
        # 需要确保事先在oss控制台开启该加速能力。
        ossInternetAccelerate: false    
       
        # 若开启,scheduler和registry-mirror会部署到指定的节点上。
        # 需要您事先为指定的节点打上标签:`k8s.aliyun.com/p2p-plus-node=true`。
        nodeSelectorEnable: false
  7. 可选:若您的集群与企业版实例处于不同地域,需要设置region参数为企业版实例的地域。
    # 您的集群与企业版实例处于不同地域,请指定企业版实例的地域。
    region: ""
  8. 可选:如果您需要对节点上P2P组件的总带宽(包括下行和上行带宽)进行限制,则需要设置ratelimit参数,默认5 MB/s,根据您的节点带宽适当调整。
    p2p:
      # Total net rate limit (MBytes/s) for uploading and downloading
      ratelimit: "5M"
  9. 创建面板单击创建

步骤三:启用P2P加速

您可以通过添加标签的方式启用P2P加速,可以为应用负载添加P2P加速标签,例如Pod、Deployment等。也可以为ACK集群的命名空间设置P2P加速标签。为命名空间设置P2P加速标签后,该命名空间内的所有符合加速条件的应用负载都会启用P2P加速,无需再修改应用负载的YAML文件。根据实际情况选择任一方式添加P2P加速标签。
说明 标签的名称为k8s.aliyun.com/image-accelerate-mode,值为p2p
  • 为应用负载添加P2P加速标签。
    以下以Deployment为例设置标签。执行以下命令,为Deployment设置标签。
    kubectl edit deploy <Deployment名称>
    在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 instacne image pull secret
          imagePullSecrets:
          - name: test-registry
          containers:
          # your ACR instacne image
          - image: test-registry-vpc.cn-hangzhou.cr.aliyuncs.com/docker-builder/nginx:latest
            name: test
            command: ["sleep", "3600"]
  • 为命名空间添加P2P加速标签
    • 通过控制台添加P2P加速标签。
      1. 登录容器服务管理控制台
      2. 在控制台左侧导航栏中,单击集群
      3. 集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情
      4. 在集群管理页面单击命名空间与配额
      5. 命名空间页面单击目标命名空间操作列的编辑
      6. 编辑命名空间对话框中设置标签变量名称k8s.aliyun.com/image-accelerate-mode标签变量值p2p,然后单击确定
    • 通过命令行添加P2P加速标签。
      kubectl label namespaces <your-namespace> k8s.aliyun.com/image-accelerate-mode=p2p

验证P2P加速

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

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

执行以下命令,查看Pod。

kubectl get po <Pod的名称> -oyaml

预期输出:

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-vpc.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加速成功。

查看边缘节点池名称和ID

  1. 登录容器服务管理控制台
  2. 在控制台左侧导航栏中,单击集群
  3. 集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情
  4. 在集群管理页左侧导航栏中,选择节点管理 > 节点池
  5. 在节点池页面可以查看节点池名称,然后单击目标节点池名称。
  6. 在节点池详情页面节点池信息区域查看节点池ID