您可以在ACK或ACK Serverless集群中使用P2P加速功能提升镜像拉取速度,减少应用部署时间。本文介绍如何在ACK和ACK Serverless集群中使用P2P加速功能。
前提条件
已创建容器镜像服务企业版实例,且您创建的企业版实例必须为标准版或高级版。具体操作,请参见创建企业版实例。
若通过VPC网络访问企业版实例,请确认已在容器镜像服务企业版实例中配置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加速成功。