阿里云以ImageCache CRD的方式将ECI的镜像缓存功能提供给Kubernetes用户,以便Kubernetes用户也可以使用该功能来加速创建Pod。本文介绍如何使用ImageCache加速创建Pod。
配置说明
ImageCache(即镜像缓存)是Cluster级别的资源,因此在不同的namespace下创建Pod时均可以使用ImageCache来实现加速创建Pod。
使用ImageCache创建Pod包括自动匹配和明确指定两种方式。您可以在Pod级别的metadata中添加Annotation来配置。相关Annotation如下:
建议使用自动匹配方式。如果同时设置了两种方式,则明确指定方式的优先级高于自动匹配方式。更多信息,请参见镜像缓存概述。
使用自动匹配方式时,如果您的业务场景希望在完全匹配的情况下才使用ImageCache,可以设置
imc-perfect-match
或imc-match-count-request
。此时,建议使用imc-perfect-match
;如果同时设置两者,imc-perfect-match
的优先级更高。
使用方式 | 配置项 | 示例值 | 说明 |
自动匹配 | k8s.aliyun.com/eci-auto-imc | "true" | 是否自动匹配ImageCache,默认为true,表示系统会根据匹配策略自动匹配最优的ImageCache创建Pod。匹配策略的优先级从高到低依次为:镜像匹配度、匹配的镜像大小、创建时间。 如果没有完全匹配,系统会在创建Pod的同时自动创建对应的ImageCache。 |
k8s.aliyun.com/imc-perfect-match | "true" | Pod内所有容器镜像是否均要完全匹配ImageCache。默认为false。 | |
k8s.aliyun.com/imc-match-count-request | "2" | Pod内要完全匹配ImageCache的容器镜像个数。 | |
明确指定 | k8s.aliyun.com/eci-imc-id | imc-2zebxkiifuyzzlhl**** | 明确指定使用某个ImageCache创建Pod。 |
Annotation请添加在Pod的metadata下,例如:创建Deployment时,Annotation需添加在spec>template>metadata下。
仅支持在创建ECI Pod时添加ECI相关Annotation来生效ECI功能,更新ECI Pod时添加或者修改ECI相关Annotation均不会生效。
配置示例
使用ImageCache创建Pod时,请注意以下事项:
Pod内容器的镜像建议采用已有ImageCache的镜像,可以提高匹配度。
Pod中容器的镜像拉取策略(ImagePullPolicy)建议设置为按需拉取(IfNotPresent),可以避免镜像层重复下载。
示例一:自动匹配ImageCache
apiVersion: apps/v1
kind: Deployment
metadata:
name: test
labels:
app: test
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
name: nginx-test
labels:
app: nginx
alibabacloud.com/eci: "true"
annotations:
k8s.aliyun.com/eci-auto-imc: "true" # 开启自动匹配ImageCache
k8s.aliyun.com/imc-perfect-match: "true" # 设置Pod内所有容器镜像均需完全匹配
spec:
containers:
- name: nginx
image: registry.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2
ports:
- containerPort: 80
imagePullPolicy: IfNotPresent
- name: busybox
image: registry.cn-shanghai.aliyuncs.com/eci_open/busybox:1.30
command: ["sleep"]
args: ["999999"]
imagePullPolicy: IfNotPresent
示例二:明确指定ImageCache
请确保指定的ImageCache的状态为Ready,其它状态的ImageCache会导致Pod创建失败。
apiVersion: apps/v1
kind: Deployment
metadata:
name: test
labels:
app: test
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
name: nginx-test
labels:
app: nginx
alibabacloud.com/eci: "true"
annotations:
k8s.aliyun.com/eci-imc-id: imc-2ze5tm5gehgtiiga**** # 明确指定ImageCache
spec:
containers:
- name: nginx
image: registry.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2
ports:
- containerPort: 80
imagePullPolicy: IfNotPresent