La funcionalidad ECI Effect en eci-profile permite definir selectores que inyectan automáticamente anotaciones relacionadas con ImageCache en los pods coincidentes. Cuando un pod cumple las condiciones de etiqueta de un selector, el sistema agrega las anotaciones especificadas sin intervención manual. Esto acelera la creación de pods sin modificar sus especificaciones individuales.
Nota: Para obtener contexto sobre eci-profile, consulte Configure an eci-profile .
Requisitos previos
Antes de empezar, asegúrese de contar con lo a continuación:
Acceso a un clúster de Kubernetes con ECI habilitado
Permiso para editar el ConfigMap
eci-profileen el namespacekube-systemkubectlconfigurado para comunicarse con su clúster
Cómo funciona
eci-profile utiliza un webhook de mutación (vk-webhook) para interceptar las solicitudes de creación de pods. Al crear un pod, el webhook compara sus etiquetas y las de su namespace con los selectores definidos en eci-profile. Si encuentra una coincidencia, inyecta las anotaciones correspondientes en el pod y habilita automáticamente la aceleración mediante la caché de imágenes.
Anotaciones de ImageCache
A continuación se muestran las anotaciones que controlan el uso de las cachés de imágenes durante la creación de pods.
|
Anotación |
Valor de ejemplo |
Descripción |
|
|
|
Habilita la coincidencia automática de la caché de imágenes. Cuando se establece en |
|
|
|
Exige que todas las imágenes de contenedor del pod coincidan exactamente con la caché de imágenes. Valor predeterminado: |
|
|
|
Especifica la cantidad de imágenes de contenedor del pod que deben coincidir exactamente con la caché de imágenes. |
|
|
|
Vincula el pod a una caché de imágenes específica mediante su ID. |
Campos de los selectores
Cada selector del arreglo selectors de eci-profile incluye los a continuación campos:
|
Campo |
Obligatorio |
Descripción |
|
|
Sí |
Nombre único del selector. |
|
|
No |
Filtra los pods según las etiquetas del namespace. Si se omite, todos los namespaces son elegibles. |
|
|
No |
Filtra los pods según sus etiquetas. Si se omite, todos los pods de los namespaces coincidentes son elegibles. |
|
|
Sí |
Anotaciones que se inyectan en los pods coincidentes. |
Cuando se especifican varias etiquetas en namespaceSelector.matchLabels o en objectSelector.matchLabels, todas deben coincidir (lógica AND).
Configurar selectores
-
Abra el ConfigMap de eci-profile para editarlo:
kubectl -n kube-system edit cm eci-profile -
Agregue sus selectores al campo
selectorsen formato de arreglo:selectors: | [ { "name": "demo", "namespaceSelector": { "matchLabels": { "app": "nginx" } }, "objectSelector": { "matchLabels": { "type": "test" } }, "effect": { "annotations": { "k8s.aliyun.com/eci-auto-imc": "true" } } } ] Guarde los cambios y salga del editor. Kubernetes aplica las modificaciones automáticamente.
Comprobar la configuración
Ejecute el a continuación comando para confirmar que los selectores están activos:
kubectl get mutatingwebhookconfigurations -o yaml vk-webhook
Si el YAML devuelto contiene los selectores configurados, estos ya surten efecto. En caso contrario, compruebe que no haya errores de formato JSON en el campo selectors del ConfigMap.
Ejemplo
El a continuación ejemplo define dos selectores con distintas estrategias de coincidencia.
Edite el ConfigMap de eci-profile:
kubectl -n kube-system edit cm eci-profile
Agregue el a continuación contenido al campo selectors:
[
...
{
"name": "image-cache-selector-1",
"objectSelector": {
"matchLabels": {
"image-cache": "true"
}
},
"effect": {
"annotations": {
"k8s.aliyun.com/eci-imc-id": "imc-uf6ic***************"
}
}
},
{
"name": "image-cache-selector-2",
"namespaceSelector": {
"matchLabels": {
"image-cache": "true"
}
},
"effect": {
"annotations": {
"k8s.aliyun.com/eci-auto-imc": "true"
}
}
}
]
Funcionamiento de cada selector:
image-cache-selector-1: cualquier pod con la etiqueta
image-cache: truerecibe automáticamente la anotaciónk8s.aliyun.com/eci-imc-id: imc-uf6ic***************, lo que lo vincula a la caché de imágenes especificada.image-cache-selector-2: cualquier pod creado en un namespace con la etiqueta
image-cache: truerecibe automáticamente la anotaciónk8s.aliyun.com/eci-auto-imc: "true". Esto habilita la coincidencia automática de la caché de imágenes para todos los pods de ese namespace.