您可以在ACK或ACK Serverless叢集中使用P2P加速功能提升鏡像拉取速度,減少應用部署時間。本文介紹如何在ACK和ACK Serverless叢集中使用P2P加速功能。
前提條件
已建立Container Registry企業版執行個體,且您建立的企業版執行個體必須為標準版或進階版。具體操作,請參見建立企業版執行個體。
若通過VPC網路訪問企業版執行個體,請確認已在Container Registry企業版執行個體中配置ACK叢集對應的專用網路,更多資訊,請參見配置專用網路的存取控制。若通過公網網路訪問企業版執行個體,請確保已開啟公網訪問並添加白名單,更多資訊,請參見配置公網的存取控制。
步驟一:授予ACR資源的讀許可權
如果您使用的是ACK Serverless叢集,需要為您的P2P組件授予訪問ACR資源的讀許可權。
如果您使用的是託管版和專有版叢集,無需配置訪問ACR資源的許可權,預設已開通。
建立RAM角色。
建立RAM角色時設定角色類型為普通服務角色,受信服務為雲端服務器。具體操作,請參見建立可信實體為阿里雲服務的RAM角色。
設定RAM角色權限原則。
授予RAM角色AliyunContainerRegistryReadOnlyAccess權限原則。具體操作,請參見為RAM角色授權。
步驟二:擷取企業版執行個體ID
在頂部功能表列,選擇所需地區。
在左側導覽列,選擇執行個體列表。
在執行個體列表頁面單擊目標企業版執行個體。
在概覽頁面左上方查看容器鏡像執行個體ID。
步驟三:安裝P2P組件
在控制台左側導覽列中,選擇 。
在應用目錄頁面搜尋ack-acr-acceleration-p2p,找到ack-acr-acceleration-p2p,然後單擊ack-acr-acceleration-p2p。
在目標頁面,單擊一鍵部署。
在建立面板中,選擇叢集和命名空間,然後單擊下一步。
在參數配置頁面,設定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>
可選:設定controller.ramRole參數為上文建立的服務角色名稱。
說明僅ACK Serverless叢集需要設定controller.ramRole參數,其他叢集可以直接跳過該步驟。
controller: ... # Ask cluster setting, in order to accessing ACR OpenAPI(Get*, List*) for ECS ramRole: <your ram role name>
可選:使用ratelimit參數配置節點上P2P組件的總頻寬節流設定(包括下行和上行頻寬),預設512 MB/s,根據您的節點頻寬適當調整。
p2p: # Total net rate limit (MBytes/s) for uploading and downloading ratelimit: "512M"
在建立面板選擇叢集,然後單擊建立。
步驟四:啟用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加速標籤。
在控制台左側導覽列中,單擊叢集。
在叢集列表頁面中,單擊目的地組群名稱或者目的地組群右側操作列下的詳情。
在叢集管理頁面單擊命名空間與配額。
在命名空間頁面單擊目標命名空間操作列的編輯。
在編輯命名空間對話方塊中設定標籤的變數名稱為
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加速成功。