Descargar imágenes de contenedor desde un registro durante la creación del pod aumenta la latencia, especialmente con imágenes grandes o en entornos con acceso lento a la red. ImageCache es una función de Elastic Container Instance (ECI) expuesta como CustomResourceDefinition (CRD) de Kubernetes. Agregue anotaciones a los metadatos del pod para que ECI asocie una caché de imágenes preexistente al crearlo; así, las capas de la imagen ya estarán en disco y no será necesario descargarlas del registro.
Las anotaciones solo surten efecto al crear un pod. Agregar o modificar anotaciones en un pod existente no tiene ningún efecto.
Funcionamiento
Cree un recurso ImageCache que contenga las imágenes que usan sus pods.
Agregue anotaciones a
spec.template.metadataen el manifiesto de su pod o Deployment.Cuando ECI crea el pod, compara la anotación con los recursos ImageCache disponibles y monta las capas almacenadas en caché, lo que omite la descarga de la imagen.
ImageCache es un recurso de clúster. Los pods de cualquier namespace dentro del clúster pueden usarlo.
Requisitos previos
Antes de empezar, asegúrese de contar con lo siguiente:
Un clúster de Kubernetes con ECI habilitado
Como mínimo un recurso ImageCache en estado Ready (obligatorio al fijar con
eci-imc-id)
Anotaciones
Agregue las siguientes anotaciones en la sección metadata de la especificación de su pod. Para Deployments, colóquelas en spec.template.metadata.
|
Anotación |
Valor de ejemplo |
Predeterminado |
Descripción |
|
|
|
|
Habilita la asociación automática de caché de imágenes. ECI selecciona la mejor coincidencia según el grado de coincidencia de la imagen, su tamaño y la fecha de creación. Si ninguna caché coincide, ECI crea una automáticamente. |
|
|
|
|
Requiere que todas las imágenes de contenedor del pod coincidan con la caché de imágenes. |
|
|
|
— |
Especifica la cantidad de imágenes de contenedor del pod que deben coincidir exactamente con la caché de imágenes. |
|
|
|
— |
Fija el pod a una caché de imágenes específica. |
Reglas de prioridad
Al establecer varias anotaciones, se aplica la siguiente precedencia:
eci-imc-id(fijar a una caché específica) anula la asociación automática (eci-auto-imc).En la asociación automática,
imc-perfect-matchtiene prioridad sobreimc-match-count-requestsi ambas están configuradas. Se recomienda usarimc-perfect-match.
Ejemplos de configuración
Para obtener mejores resultados en ambos ejemplos:
Use imágenes ya incluidas en el recurso ImageCache para maximizar la tasa de aciertos de la caché.
Establezca
imagePullPolicy: IfNotPresenten cada contenedor para evitar descargar capas que ya se encuentran en la caché.
Ejemplo 1: Asociación automática de caché de imágenes (recomendado)
Use eci-auto-imc para permitir que ECI seleccione automáticamente la mejor caché disponible. Agregue imc-perfect-match: "true" si todas las imágenes del pod deben estar presentes en la caché.
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" # Enable automatic cache matching
k8s.aliyun.com/imc-perfect-match: "true" # All images must be in the cache
spec:
containers:
- name: nginx
image: registry.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2
ports:
- containerPort: 80
imagePullPolicy: IfNotPresent # Prevents re-downloading cached image layers
- name: busybox
image: registry.cn-shanghai.aliyuncs.com/eci_open/busybox:1.30
command: ["sleep"]
args: ["999999"]
imagePullPolicy: IfNotPresent # Prevents re-downloading cached image layers
Ejemplo 2: Fijar a una caché de imágenes específica
Use eci-imc-id para dirigirse a un recurso ImageCache específico. La caché indicada debe estar en estado Ready antes de aplicar el manifiesto; de lo contrario, la creación del pod fallará.
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**** # ID of the target ImageCache
spec:
containers:
- name: nginx
image: registry.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2
ports:
- containerPort: 80
imagePullPolicy: IfNotPresent # Prevents re-downloading cached image layers