在Kubernetes场景下,您可以通过ImageCache CRD使用ECI的镜像缓存功能,以加速创建Pod。创建ImageCache资源时,为充分使用镜像缓存功能,您可以根据需要为ImageCache添加Annotation。本文介绍ImageCache支持的Annotation,并提供配置示例。
ImageCache Annotation列表
ImageCache目前支持的Annotation如下表所示。
参数 | 示例值 | 描述 | 配置示例 |
k8s.aliyun.com/vswitch-ids | "vsw-bp1dktddjsg5nktv****,vsw-bp1xpiowfm5vo8o3c****" | 指定交换机。支持指定多个交换机实现多可用区功能。不指定时,默认采用eci-profile中配置的vSwitch。 | |
k8s.aliyun.com/security-group-id | "sg-bp1dktddjsg5nktv****" | 指定安全组。不指定时,默认采用eci-profile中配置的安全组。 | |
k8s.aliyun.com/resource-group-id | "rg-aek2z3elfs4****" | 指定资源组。不指定时,默认采用eci-profile中配置的资源组。 | |
k8s.aliyun.com/acr-instance-ids | "cri-j36zhodptmyq****" | 指定ACR企业版实例,用于免密拉取镜像。 支持跨地域指定ACR企业版实例,此时需在实例ID前加上所属地域,例如 | |
k8s.aliyun.com/acr-service-arns | acs:ram::1609982529******:role/role-assume | ECI资源归属账号下的RAM角色的ARN。 指定RAM角色创建资源时需配置。 | |
k8s.aliyun.com/acr-user-arns | acs:ram::1298452580******:role/role-acr | ACR实例归属账号下的RAM角色的ARN。 跨账号拉取ACR镜像时需配置。 | |
k8s.aliyun.com/plain-http-registry | "harbor***.pre.com,192.168.XX.XX:5000,reg***.test.com:80" | 指定自建镜像仓库地址。 使用HTTP协议的自建镜像仓库中的镜像创建ImageCache时,需配置该参数使得ECI使用HTTP协议拉取镜像,避免因协议不同而导致镜像拉取失败。 | |
k8s.aliyun.com/insecure-registry | "harbor***.pre.com,192.168.XX.XX:5000,reg***.test.com:80" | 指定自建镜像仓库地址。 使用自签发证书的自建镜像仓库中的镜像创建ImageCache时,需配置该参数来跳过证书认证,避免因证书认证失败而导致镜像拉取失败。 | |
k8s.aliyun.com/imc-enable-reuse | "true" | 是否开启镜像缓存复用。开启后,新创建的镜像缓存可以复用已有镜像缓存的镜像层,加快镜像缓存的制作速度。 | |
k8s.aliyun.com/imc-enable-flash | "true" | 是否开启极速镜像缓存功能,开启后,将临时创建一份本地快照,可以缩短镜像缓存的创建时长。 | |
k8s.aliyun.com/imc-retention-days | "7" | 设置镜像缓存保留时长,单位为天。过期的镜像缓存将被自动清理。默认永不过期。 | |
k8s.aliyun.com/imc-size | "25" | 设置镜像缓存大小。默认为20 GiB。取值范围为20~32768 GiB。 | |
k8s.aliyun.com/eip-instance-id | "eip-bp1q5n8cq4p7f6dzu****" | 绑定EIP。在没有配置NAT网关的情况下,可绑定已有的EIP来拉取公网镜像。 | |
k8s.aliyun.com/auto-create-eip | "true" | 是否自动创建并绑定EIP。在没有配置NAT网关的情况下,可自动创建并绑定EIP来拉取公网镜像。 | |
k8s.aliyun.com/eip-bandwidth | "5" | 自动创建EIP时,指定EIP带宽。单位为Mbps。 | |
k8s.aliyun.com/eip-internet-charge-type | PayByBandwidth | 自动创建EIP时,指定EIP的计量方式。取值范围:
| |
k8s.aliyun.com/eip-isp | BGP | 自动创建EIP时,指定EIP线路类型。仅按量付费的EIP支持指定。取值范围:
| |
k8s.aliyun.com/eip-common-bandwidth-package-id | "cbwp-2zeukbj916scmj51m****" | 指定共享带宽包。 |
多可用区创建资源
创建ImageCache的过程中,系统将临时创建一个ECI实例用于中转创建ImageCache。为避免ECI实例资源库存的影响,保证ImageCache可以创建成功,您可以指定多个交换机来实现多可用区功能。
创建ImageCache时,默认采用集群或者虚拟节点的交换机信息,如果集群或者虚拟节点已配置多可用区,则可以不指定。
apiVersion: eci.alibabacloud.com/v1
kind: ImageCache
metadata:
name: imagecache-sample
annotations:
k8s.aliyun.com/vswitch-ids: "vsw-bp1dktddjsg5nktv****,vsw-bp1xpiowfm5vo8o3c****" # 指定多个交换机
spec:
images:
- centos:latest
- busybox:latest
imageCacheSize:
25
retentionDays:
7
设置安全组和资源组
创建ImageCache时,默认采用eci-profile中配置的安全组和资源组。如果您有特殊需求,可以指定安全组和资源组。
apiVersion: eci.alibabacloud.com/v1
kind: ImageCache
metadata:
name: imagecache-sample
annotations:
k8s.aliyun.com/security-group-id: "sg-bp1dktddjsg5nktv****" # 指定安全组
k8s.aliyun.com/resource-group-id: "rg-aek2z3elfs4****" # 指定资源组
spec:
images:
- centos:latest
- busybox:latest
imageCacheSize:
25
retentionDays:
7
免密拉取ACR镜像
对于ACR镜像,根据ACR实例是否与待创建的ImageCache属于同一阿里云账号,以及ACR实例的类型,免密拉取镜像的支持情况如下:
账号情况 | ACR类型 | 免密支持情况 |
同账号 |
| 默认自动免密,支持配置RAM角色来限制免密范围。 |
同账号 | 企业版(自定义域名) | 无法自动免密,需要指定ACR实例来实现免密。 |
跨账号 |
| 无法自动免密,需要配置RAM角色来实现免密。 |
具体配置,请参见免密拉取ACR镜像。
使用自建镜像仓库
使用自建镜像仓库中的镜像创建ImageCache时,如果镜像仓库采用HTTP协议,或者使用自签发证书,需配置相关Annotation避免镜像拉取失败。
自建镜像仓库采用HTTP协议
由于ECI默认使用HTTPS协议拉取镜像,则创建ImageCache,需要配置
k8s.aliyun.com/plain-http-registry
,使得ECI使用HTTP协议与镜像仓库进行交互。apiVersion: eci.alibabacloud.com/v1 kind: ImageCache metadata: name: imagecache-sample annotations: k8s.aliyun.com/plain-http-registry: "192.168.XX.XX:5000" # 指定自建镜像仓库地址,使用HTTP协议拉取镜像 spec: images: - 192.168.XX.XX:5000/test/nginx:latest imagePullSecrets: - default:secret1 - default:secret2 - kube-system:secret3 imageCacheSize: 25 retentionDays: 7
自建镜像仓库使用自签发证书
使用自签发证书的情况下,拉取镜像时无法通过证书认证,需要配置
k8s.aliyun.com/insecure-registry
,以跳过证书认证。apiVersion: eci.alibabacloud.com/v1 kind: ImageCache metadata: name: imagecache-sample annotations: k8s.aliyun.com/insecure-registry: "harbor***.pre.com" # 指定自建镜像仓库地址,拉取镜像时跳过正式认证 spec: images: - harbor***.pre.com/test/nginx:latest imagePullSecrets: - default:secret1 - default:secret2 - kube-system:secret3 imageCacheSize: 25 retentionDays: 7
如果有多个容器的镜像需要从不同的镜像仓库中拉取,支持填写多个镜像仓库地址,各个地址之间采用半角逗号隔开,例如
harbor***.pre.com,192.168.XX.XX
。如果镜像仓库地址有端口号,则需要带上端口号,例如:镜像地址为
192.168.XX.XX:5000/nginx:latest
,则Annotation的值需设置为192.168.XX.XX:5000
。
开启镜像缓存复用
ImageCache的创建时长由镜像大小,网络等多种因素决定。创建ImageCache时,支持开启镜像缓存复用功能来加快ImageCache的创建速度。
开启镜像缓存复用后,在创建ImageCache的过程中,系统将自动匹配已有ImageCache,如果新的ImageCache与已有ImageCache存在重复的镜像层,新的ImageCache将复用已有ImageCache的镜像层,从而加速ImageCache的创建。
apiVersion: eci.alibabacloud.com/v1
kind: ImageCache
metadata:
name: imagecache-sample
annotations:
k8s.aliyun.com/imc-enable-reuse: "true" # 开启镜像缓存复用
spec:
images:
- centos:latest
- busybox:latest
imageCacheSize:
25
retentionDays:
7
开启极速镜像缓存
ImageCache的创建时长由镜像大小、网络等多种因素决定。创建ImageCache时,支持开启极速镜像缓存功能来缩短创建时长。
开启极速镜像缓存后,在创建ImageCache的过程中,系统将临时创建一份本地快照。本地快照基于快照极速可用功能,可以快速创建,创建完成后即可使用ImageCache。
本地快照创建完成后,系统将自动开始创建标准快照,在此期间,镜像缓存对应使用本地快照;待标准快照创建完成后,系统将自动删除本地快照,在此之后,镜像缓存对应使用标准快照。
apiVersion: eci.alibabacloud.com/v1
kind: ImageCache
metadata:
name: imagecache-sample
annotations:
k8s.aliyun.com/imc-enable-flash: "true" # 开启极速镜像缓存
spec:
images:
- centos:latest
- busybox:latest
imageCacheSize:
25
retentionDays:
7
设置镜像缓存的大小和保留时长
默认情况下,手动创建的ImageCache的大小为20 GiB,且创建后会一直保留。如果您想要自定义设置ImageCache的大小和保留时长,除了设置spec中的imageCacheSize和retentionDays参数外,还支持通过Annotation设置。
apiVersion: eci.alibabacloud.com/v1
kind: ImageCache
metadata:
name: imagecache-sample
annotations:
k8s.aliyun.com/imc-retention-days: "7" # 设置镜像缓存保留时长
k8s.aliyun.com/imc-size: "25" # 设置镜像缓存大小
spec:
images:
- centos:latest
- busybox:latest
配置EIP拉取公网镜像
弹性公网IP(EIP)是可以独立购买和持有的公网IP地址资源,当EIP与云资源绑定时,云资源可以通过EIP与公网通信。更多关于EIP的信息,请参见弹性公网IP。
创建ImageCache时,如果您需要从公网拉取镜像,则需要确保当前网络能够连接公网。连接公网包括配置NAT网关和配置EIP两种方式。如果您的VPC没有绑定NAT网关,您可以配置EIP来拉取公网镜像。配置EIP包括以下两种方式:
创建ImageCache的过程中,系统将临时创建一个中转的ECI实例,此时EIP将绑定到该ECI实例上。ImageCache创建完成后,原先已有的EIP将被保留,自动创建的EIP将随ECI实例自动释放。
绑定已有EIP
apiVersion: eci.alibabacloud.com/v1 kind: ImageCache metadata: name: imagecache-sample annotations: k8s.aliyun.com/eip-instance-id: "eip-bp1q5n8cq4p7f6dzu****" # 绑定已有的EIP spec: images: - centos:latest - busybox:latest imageCacheSize: 25 retentionDays: 7
自动创建并绑定EIP
apiVersion: eci.alibabacloud.com/v1 kind: ImageCache metadata: name: imagecache-sample annotations: k8s.aliyun.com/auto-create-eip: "true" # 自动创建并绑定EIP k8s.aliyun.com/eip-bandwidth: "10" # 设置EIP的带宽,单位为Mbps k8s.aliyun.com/eip-internet-charge-type: PayByBandwidth # 设置EIP的计量方式 k8s.aliyun.com/eip-common-bandwidth-package-id: "cbwp-2zeukbj916scmj51m****" # 使用共享带宽包 spec: images: - centos:latest - busybox:latest imageCacheSize: 25 retentionDays: 7