Avant son démarrage, une instance ECI doit télécharger les images de conteneur nécessaires. Cette opération constitue le principal facteur de latence lors du lancement d'un pod. ImageCache crée au préalable des snapshots de cache à partir de ces images. Les créations de pods suivantes réutilisent ainsi ce cache, ce qui réduit considérablement le temps de démarrage sur les nœuds virtuels.
Le gain de temps réel dépend du nombre et de la taille des images, ainsi que des conditions réseau.
Facturation
La création et l'utilisation d'un cache d'image peuvent entraîner des frais. Pour plus d'informations, consultez la rubrique Facturation des caches d'image.
Prérequis
Assurez-vous de disposer des éléments suivants :
Un cluster ACK avec des nœuds virtuels activés
Un accès
kubectlau cluster
Étape 1 : Activer le support d'ImageCache
Vérifiez si votre cluster prend en charge ImageCache :
kubectl get crd/imagecaches.eci.alibabacloud.com
Si des informations relatives à
imagecaches.eci.alibabacloud.coms'affichent, ImageCache est pris en charge. Passez directement à l'étape 2.En cas d'erreur, mettez à jour le composant ACK Virtual Node vers sa dernière version.
Étape 2 : Créer un cache d'image
Privilégiez la création automatique, sauf si vous recherchez une vitesse maximale dès le premier pod.
| Méthode | Cas d'usage recommandé | Fonctionnement |
|---|---|---|
| Automatique | Scénarios courants, afin de limiter les coûts | En l'absence de cache correspondant, le système en génère un pendant la création du pod. Les pods ultérieurs utilisant les mêmes images s'appuieront ensuite dessus. |
| Manuelle | Première création nécessitant des performances optimales | Générez le cache d'image en amont via un modèle YAML, puis référencez-le lors de la création du pod. |
Pour la méthode manuelle, reportez-vous aux rubriques Gérer les ImageCaches et Annotations de cache d'image. Vous trouverez une comparaison détaillée dans la section Méthodes de création d'un cache d'image.
Étape 3 : Utiliser un cache d'image pour créer des pods
Ajoutez des annotations dans la section metadata de la spécification de votre pod (ou spec.template.metadata pour un Deployment) afin de cibler un cache d'image.
Ces annotations ne s'appliquent qu'au moment de la création du pod. Toute modification apportée à un pod déjà existant reste sans effet.
Référence des annotations
ImageCache constitue une ressource à l'échelle du cluster, exploitable dans tous les namespaces.
Correspondance des images : pour optimiser le taux de correspondance, utilisez exactement les mêmes références d'images dans la spécification du pod et dans l'ImageCache.
Politique de téléchargement : définissez
imagePullPolicysurIfNotPresentafin d'éviter le re-téléchargement des couches déjà mises en cache.
| Annotation | Exemple de valeur | Valeur par défaut | Description |
|---|---|---|---|
k8s.aliyun.com/eci-auto-imc |
"true" |
true |
Active la mise en correspondance automatique des caches d'image. Le système retient le cache optimal selon le degré de correspondance des images, leur taille et leur date de création. Il en génère un nouveau si aucune correspondance n'existe. |
k8s.aliyun.com/imc-perfect-match |
"true" |
false |
Exige une correspondance totale entre toutes les images du pod et le cache. Ce paramètre prévaut sur imc-match-count-request. |
k8s.aliyun.com/imc-match-count-request |
"2" |
— | Définit le nombre d'images du pod devant correspondre au cache d'image. |
k8s.aliyun.com/eci-imc-id |
imc-2zebxkiifuyzzlhl**** |
— | Associe le pod à un cache d'image précis via son ID. Cette directive supplante la mise en correspondance automatique. |
Ordre de priorité des annotations : si imc-perfect-match et imc-match-count-request sont configurées simultanément, imc-perfect-match prime. De même, la présence de eci-imc-id désactive la correspondance automatique.
Mise en correspondance automatique d'un cache d'image (recommandé)
Activez eci-auto-imc et ajoutez éventuellement imc-perfect-match pour appliquer des critères de correspondance plus stricts :
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" # Enables automatic image cache matching
k8s.aliyun.com/imc-perfect-match: "true" # All images in the pod must fully match the cache
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
Spécifier un cache d'image
Le cache d'image ciblé doit impérativement se trouver à l'état Ready. Dans le cas contraire, la création du pod échoue.
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**** # Pins to a specific image cache
spec:
containers:
- name: nginx
image: registry.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2
ports:
- containerPort: 80
imagePullPolicy: IfNotPresent
Appliquer des annotations en bloc
Exploitez la fonctionnalité Elastic Container Instance Effect du profil eci-profile pour appliquer les annotations ImageCache à l'ensemble des pods correspondants. Consultez la rubrique Configurer eci-profile pour utiliser automatiquement la fonctionnalité ImageCache.