阿里雲以ImageCache CRD的方式將ECI的鏡像緩衝功能提供給Kubernetes使用者,以便Kubernetes使用者也可以使用該功能來加速建立Pod。本文介紹如何使用ImageCache加速建立Pod。
配置說明
ImageCache資源是Cluster層級,因此在不同的Namespace下建立Pod時均可以使用ImageCache來實現加速建立Pod。
使用ImageCache建立Pod包括自動匹配和明確指定兩種方式,您可以在Pod層級的metadata中添加Annotation來配置,相關配置項如下:
k8s.aliyun.com/eci-image-cache:根據匹配策略自動匹配最優的ImageCache建立Pod。如果沒有匹配到,系統將在建立Pod的同時自動建立一個ImageCache。
k8s.aliyun.com/eci-image-snapshot-id:明確指定使用哪個鏡像緩衝建立Pod。
如果同時設定k8s.aliyun.com/eci-image-cache
和k8s.aliyun.com/eci-image-snapshot-id
,則明確指定方式的優先順序高於自動匹配方式。更多資訊,請參見鏡像緩衝概述。
使用ImageCache建立Pod時,請注意以下事項:
Pod中容器的鏡像建議採用ImageCache中的鏡像,以提高匹配度。
Pod中容器的鏡像拉取策略(ImagePullPolicy)建議設定為按需拉取(IfNotPresent),以避免鏡像層重複下載。
自動匹配ImageCache
建立Pod時,您可以通過添加Annotation的方式,聲明使用自動匹配的ImageCache來加速建立Pod。ECI將基於您已有的ImageCache列表,根據匹配策略選擇最優的ImageCache來建立Pod。匹配策略的優先順序從高到低依次為:鏡像匹配度、匹配的鏡像大小、建立時間。
如果沒有匹配到合適的ImageCache,系統將在建立Pod的同時自動建立一個ImageCache。
Deployment樣本
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx annotations: k8s.aliyun.com/eci-image-cache: "true" #開啟自動匹配ImageCache spec: nodeName: virtual-kubelet containers: - name: nginx image: nginx:1.7.9 imagePullPolicy: IfNotPresent
Pod樣本
apiVersion: v1 kind: Pod metadata: annotations: k8s.aliyun.com/eci-image-cache: "true" #開啟自動匹配ImageCache name: nginx-auto-match spec: containers: - image: nginx:1.7.9 imagePullPolicy: IfNotPresent name: nginx resources: limits: cpu: 300m memory: 200Mi requests: cpu: 200m memory: 100Mi nodeName: virtual-kubelet
明確指定ImageCache
建立Pod時,您可以通過添加Annotation的方式,聲明使用指定的ImageCache來加速建立Pod。
請確保指定的ImageCache的狀態為Ready,其它狀態的ImageCache會導致Pod建立失敗。
Deployment樣本
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx annotations: k8s.aliyun.com/eci-image-snapshot-id: imc-2ze5tm5gehgtiiga**** #明確指定ImageCache spec: nodeName: virtual-kubelet containers: - name: nginx image: nginx:1.7.9 imagePullPolicy: IfNotPresent
Pod樣本
apiVersion: v1 kind: Pod metadata: annotations: k8s.aliyun.com/eci-image-snapshot-id: imc-2ze5tm5gehgtiiga**** #明確指定ImageCache name: nginx-imagecache-id spec: containers: - image: nginx:1.7.9 imagePullPolicy: IfNotPresent name: nginx resources: limits: cpu: 300m memory: 200Mi requests: cpu: 200m memory: 100Mi nodeName: virtual-kubelet