您可以在IDC或其他云厂商集群中使用P2P加速功能提升镜像拉取速度,减少应用部署时间。本文介绍如何在IDC或其他云厂商集群中使用P2P加速功能。
前提条件
操作步骤
执行以下命令,通过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
启用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
验证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加速成功。
可选:执行以下命令,可以根据实际需求更新P2P组件参数。
helm upgrade ack-acr-acceleration-p2p $P2P_CHART -n aliyun-acr-acceleration \ --set p2p.plusMode.cacheTTL=72h
可选:执行以下命令,可以删除P2P组件。
helm uninstall ack-acr-acceleration-p2p -n aliyun-acr-acceleration