全部產品
Search
文件中心

Container Registry:在IDC或其他雲廠商叢集中使用P2P加速

更新時間:Jun 30, 2024

您可以在IDC或其他雲廠商叢集中使用P2P加速功能提升鏡像拉取速度,減少應用部署時間。本文介紹如何在IDC或其他雲廠商叢集中使用P2P加速功能。

前提條件

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

  • IDC或其他雲廠商叢集需要通過公網網路訪問企業版執行個體,請確保已開啟公網訪問並添加白名單,更多資訊,請參見配置公網的存取控制

  • 已在執行命令的環境中安裝以下工具:

    • 安裝Helm包管理工具,更多資訊,請參見Helm

    • 安裝kubectl用戶端,並且能夠使用kubectl訪問叢集。

操作步驟

  1. 執行以下命令,通過Helm方式安裝P2P組件。

    export ACR_INSTANCE_REGION="<region of acr instance >"
    export ACR_INSTANCE_ID="<id of acr instance >"
    export ALIYUN_AK="<aliyun access key>"
    export ALIYUN_SK="<aliyun access key secret >"
    export P2P_CHART="https://aliacs-k8s-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/app/charts-incubator/ack-acr-acceleration-p2p-0.2.3.tgz"
    
    helm install ack-acr-acceleration-p2p $P2P_CHART -n aliyun-acr-acceleration --create-namespace \
      --set region=$ACR_INSTANCE_REGION \
      --set accessKey=$ALIYUN_AK \
      --set accessKeySecret=$ALIYUN_SK \
      --set p2p.registryInstances=$ACR_INSTANCE_ID \
      --set pullImageInternet=true \
      --set p2p.plusMode.enable=true

    安裝時,可根據實際需求增加以下參數配置。

    # 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
  2. 啟用P2P加速。

    您可以通過添加標籤的方式啟用P2P加速,可以為應用負載添加P2P加速標籤,例如Pod、Deployment等。也可以為叢集的命名空間設定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 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
  3. 驗證P2P加速。

    啟用P2P加速後,P2P組件會自動為Pod注入P2P相關annotation、P2P加速鏡像地址以及對應的鏡像拉取憑證。

    重要
    • 若您原有應用負載YAML中不存在ACR企業版執行個體的鏡像,或者沒有配置對應的非P2P加速網域名稱地址的鏡像拉取憑證,P2P組件會跳過Pod的自動注入。

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

  4. 可選:執行以下命令,可以根據實際需求更新P2P組件參數。

    helm upgrade ack-acr-acceleration-p2p $P2P_CHART -n aliyun-acr-acceleration \
      --set p2p.plusMode.cacheTTL=72h
  5. 可選:執行以下命令,可以刪除P2P組件。

    helm uninstall ack-acr-acceleration-p2p -n aliyun-acr-acceleration