全部產品
Search
文件中心

Container Service for Kubernetes:使用P2P加速鏡像拉取

更新時間:Apr 12, 2025

P2P加速利用計算節點的內網頻寬資源,在節點之間分發鏡像。您可以在註冊叢集中使用P2P加速功能提升鏡像拉取速度,減少應用部署時間。本文介紹如何在註冊叢集中使用P2P加速鏡像拉取。

前提條件

  • 已建立Container Registry企業版執行個體,且您建立的企業版執行個體必須為標準版或進階版。更多資訊,請參見建立企業版執行個體

  • 已建立註冊叢集,並將自建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使用者

  2. 建立自訂權限原則,策略內容如下。

    {
        "Version": "1",
        "Statement": [
            {
                "Action": [
                    "cr:ListInstanceEndpoint",
                    "cr:GetInstanceVpcEndpoint"
                ],
                "Resource": "*",
                "Effect": "Allow"
            }
        ]
    }
  3. 為RAM使用者授權

  4. 為RAM使用者建立AccessKey

    警告

    建議您參見AccessKey網路訪問限制策略配置網路原則,將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. 登入Container Registry控制台

  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. 登入Container Service管理主控台,在左側導覽列選擇市場 > 應用市場

  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. 登入Container Service管理主控台,在左側導覽列選擇叢集列表

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇應用 > Helm

  3. 找到ack-acr-acceleration-p2p組件,單擊右側操作列下的刪除

  4. 提示對話方塊,單擊確認