在IDC或其他云廠商集群中使用P2P加速
您可以在IDC或其他云廠商集群中使用P2P加速功能提升鏡像拉取速度,減少應(yīng)用部署時(shí)間。本文介紹如何在IDC或其他云廠商集群中使用P2P加速功能。
前提條件
已創(chuàng)建容器鏡像服務(wù)企業(yè)版實(shí)例,且您創(chuàng)建的企業(yè)版實(shí)例必須為標(biāo)準(zhǔn)版或高級版。更多信息,請參見創(chuàng)建企業(yè)版實(shí)例。
IDC或其他云廠商集群需要通過公網(wǎng)網(wǎng)絡(luò)訪問企業(yè)版實(shí)例,請確保已開啟公網(wǎng)訪問并添加白名單,更多信息,請參見配置公網(wǎng)的訪問控制。
已在執(zhí)行命令的環(huán)境中安裝以下工具:
安裝Helm包管理工具,更多信息,請參見Helm。
安裝kubectl客戶端,并且能夠使用kubectl訪問集群。
操作步驟
執(zhí)行以下命令,通過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
安裝時(shí),可根據(jù)實(shí)際需求增加以下參數(shù)配置。
# registry-mirror緩存數(shù)據(jù)保留時(shí)間,默認(rèn)24h,根據(jù)您節(jié)點(diǎn)磁盤容量適當(dāng)調(diào)整。 --set p2p.plusMode.cacheTTL=<custom time> # registry-mirror緩存數(shù)據(jù)保留的宿主機(jī)路徑.。 # 若不設(shè)置, 緩存會在registry-mirror容器重啟時(shí)丟失。 --set p2p.plusMode.cacheHostPath=<host path> # 回源下載時(shí)切換到oss的公網(wǎng)傳輸加速鏈路,適用于公網(wǎng)跨海、跨地域等公網(wǎng)鏈路不穩(wěn)定的場景。 # 需要確保事先在oss控制臺開啟該加速能力。 --set p2p.plusMode.ossInternetAccelerate=true # 節(jié)點(diǎn)上的P2P agent直接從registry-mirror或者云上registry下載,此時(shí)不會安裝P2P調(diào)度組件。 --set p2p.plusMode.downloadPattern=source # 部署scheduler和registry-mirror到指定的節(jié)點(diǎn)上 # 需要您事先為指定的節(jié)點(diǎn)打上標(biāo)簽:`k8s.aliyun.com/p2p-plus-node=true` --set p2p.plusMode.nodeSelectorEnable=true
啟用P2P加速。
您可以通過添加標(biāo)簽的方式啟用P2P加速,可以為應(yīng)用負(fù)載添加P2P加速標(biāo)簽,例如Pod、Deployment等。也可以為集群的命名空間設(shè)置P2P加速標(biāo)簽。為命名空間設(shè)置P2P加速標(biāo)簽后,該命名空間內(nèi)的所有符合加速條件的應(yīng)用負(fù)載都會啟用P2P加速,無需再修改應(yīng)用負(fù)載的YAML文件。根據(jù)實(shí)際情況選擇任一方式添加P2P加速標(biāo)簽。
說明標(biāo)簽的名稱為
k8s.aliyun.com/image-accelerate-mode
,值為p2p
。為應(yīng)用負(fù)載添加P2P加速標(biāo)簽。
以下以Deployment為例設(shè)置標(biāo)簽。執(zhí)行以下命令,為Deployment設(shè)置標(biāo)簽。
kubectl edit deploy <Deployment名稱>
在Deployment文件中添加標(biāo)簽
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加速標(biāo)簽
執(zhí)行以下命令,為命名空間添加P2P加速標(biāo)簽。
kubectl label namespaces <your-namespace> k8s.aliyun.com/image-accelerate-mode=p2p
驗(yàn)證P2P加速。
啟用P2P加速后,P2P組件會自動為Pod注入P2P相關(guān)annotation、P2P加速鏡像地址以及對應(yīng)的鏡像拉取憑證。
重要若您原有應(yīng)用負(fù)載YAML中不存在ACR企業(yè)版實(shí)例的鏡像,或者沒有配置對應(yīng)的非P2P加速域名地址的鏡像拉取憑證,P2P組件會跳過Pod的自動注入。
P2P鏡像拉取憑證與您原先配置的非P2P鏡像地址拉取憑證僅鏡像倉庫域名不一樣,其他憑證信息一致。因此,若您原先鏡像拉取憑證用戶信息配置錯(cuò)誤,也會導(dǎo)致P2P鏡像拉取失敗。
執(zhí)行以下命令,查看Pod。
kubectl get po <Pod的名稱> -oyaml
預(yù)期輸出:
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相關(guān)annotation、P2P加速鏡像地址以及對應(yīng)的鏡像拉取憑證,說明啟用P2P加速成功。
可選:執(zhí)行以下命令,可以根據(jù)實(shí)際需求更新P2P組件參數(shù)。
helm upgrade ack-acr-acceleration-p2p $P2P_CHART -n aliyun-acr-acceleration \ --set p2p.plusMode.cacheTTL=72h
可選:執(zhí)行以下命令,可以刪除P2P組件。
helm uninstall ack-acr-acceleration-p2p -n aliyun-acr-acceleration