阿里雲以ImageCache CRD的方式將ECI的鏡像緩衝(即ImageCache)功能提供給Kubernetes使用者,以便在Kubernetes叢集中也可以使用該功能來加速建立ECI Pod。本文介紹ImageCache的功能,以及如何建立和使用ImageCache。
ImageCache介紹
在運行容器前,ECI需要先拉取您指定的容器鏡像,但因網路和容器鏡像大小等因素,鏡像拉取耗時往往成為ECI Pod啟動的主要耗時。為加速ECI Pod建立,ECI提供了鏡像緩衝功能,可以預先將需要使用的鏡像製作成緩衝快照。後續基於鏡像緩衝來建立ECI Pod,可以避免或減少鏡像層的下載,從而提升ECI Pod的建立速度。更多資訊,請參見鏡像緩衝概述。
具體提升速度由ECI Pod中使用的鏡像個數、鏡像大小和網路因素等決定。
通過在Kubernetes叢集中部署ImageCache CRD的方式,Kubernetes使用者也可以使用鏡像緩衝功能來加速建立ECI Pod。ImageCache是ECI定義的一種資源類型,一個ImageCache對應一個鏡像緩衝。
ACK Serverless叢集中預設已部署ImageCache CRD,您可以通過kubectl get crd/imagecaches.eci.alibabacloud.com
命令確認叢集是否支援ImageCache。
如果返回imagecaches.eci.alibabacloud.com的資訊,表示叢集已支援ImageCache。
如果返回Error資訊,表示叢集不支援ImageCache,請將ACK Virtual Node組件升級到最新版本。
ImageCache計費
在建立和使用ImageCache時,可能會收取相關資源費用。具體請參見鏡像緩衝計費。
建立ImageCache
ImageCache的建立方式分為以下兩種:
建立方式 | 說明 |
自動建立 | 建立ECI Pod時,如果開啟了自動匹配ImageCache,則在未匹配到的情況下,系統會在建立ECI Pod的同時,自動建立一個ImageCache,後續可以使用該ImageCache加速建立使用同一鏡像的ECI Pod。 |
手動建立 | 如果您的業務在首次建立Pod時就需要加速,您可以在建立Pod前,自訂編寫ImageCache的YAML來建立ImageCache。具體操作,請參見管理ImageCache和ImageCache Annotation。 |
除了首次建立就需要加速的情境外,推薦您使用自動建立的ImageCache以節約成本。
更多關於手動建立的ImageCache和自動建立的ImageCache的資訊,請參見建立方式。
使用ImageCache
ImageCache是Cluster層級的資源,因此在不同的namespace下建立Pod時均可以使用ImageCache來實現加速建立Pod。使用ImageCache建立Pod時,請注意以下事項:
Pod內容器的鏡像建議採用已有ImageCache的鏡像,可以提高匹配度。
Pod中容器的鏡像拉取策略(ImagePullPolicy)建議設定為按需拉取(IfNotPresent),可以避免鏡像層重複下載。
使用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
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
通過eci-profile的ECI Effect能力,可以為滿足條件的ECI Pod動態追加ImageCache相關Annotation,實現自動使用ImageCache。更多資訊,請參見配置eci-profile實現自動使用ImageCache。