Lors du déploiement de services Knative à partir d'images de conteneur, les images volumineuses peuvent ralentir la création des pods pendant la phase de tirage (pull). Utilisez ECI ImageCache pour pré-générer des snapshots d'images et créer des pods à partir de ceux-ci, réduisant ainsi le temps de démarrage.
Par exemple, le tirage d'une image Apache Flink d'environ 386,26 Mo depuis Docker Hub prend environ 50 secondes sans cache, contre seulement 5 secondes avec un cache.
Ces chiffres sont théoriques. Les gains réels dépendent du nombre d'images, de leur taille et de la connexion réseau au registre.
Fonctionnement
Dans un cluster ACK, les caches d'images sont gérés sous forme de CRD au niveau du cluster nommée ImageCache. La CRD ImageCache est partagée entre tous les namespaces.
Créez un snapshot de cache à partir d'une image, puis utilisez-le pour déployer un pod sur une instance de conteneur élastique. Cette méthode réduit le nombre de couches d'image à télécharger et accélère la création du pod.
Consultez la rubrique Présentation des caches d'images Overview of image caches pour plus d'informations sur la gestion et la facturation.
Prérequis
Assurez-vous de disposer des éléments suivants :
Un cluster ACK avec Knative activé
kubectl configuré pour se connecter à votre cluster
Créer un ImageCache
-
Créez un fichier nommé
imagecache-secrets-test.yaml:L'annotation
k8s.aliyun.com/eci-image-cache: "true"active la réutilisation des ImageCaches existants. Si les images à mettre en cache partagent des couches avec un ImageCache existant, cela accélère la mise en cache. Consultez la rubrique Manage ImageCaches pour connaître tous les paramètres configurables.apiVersion: eci.alibabacloud.com/v1 kind: ImageCache metadata: name: imagecache-sample-test annotations: k8s.aliyun.com/eci-image-cache: "true" # Enable the reuse of ImageCaches. spec: images: - registry.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2 - registry.cn-shanghai.aliyuncs.com/eci_open/busybox:1.30 imageCacheSize: 25 retentionDays: 7 -
Créez l'ImageCache :
kubectl create -f imagecache-secrets-test.yaml -
Vérifiez que l'ImageCache est prêt :
kubectl get imagecache imagecache-sample-testL'ImageCache est prêt lorsque
PHASEindiqueReadyet quePROGRESSaffiche100%:NAME AGE CACHEID PHASE PROGRESS imagecache-sample-test 20h imc-2zeditzeoemfhqor**** Ready 100%
Utiliser un ImageCache pour accélérer la création de pods
Ajoutez des annotations aux metadata du pod du service Knative pour spécifier l'ImageCache. Deux annotations sont disponibles :
| Annotation | Comportement |
|---|---|
k8s.aliyun.com/eci-image-snapshot-id |
Utilise l'ImageCache spécifié |
k8s.aliyun.com/eci-image-cache |
Sélectionne automatiquement le meilleur ImageCache disponible |
Si les deux sont définies, seule k8s.aliyun.com/eci-image-snapshot-id prend effet.
Spécifier un ImageCache
Utilisez l'annotation k8s.aliyun.com/eci-image-snapshot-id pour associer un service Knative à un ImageCache spécifique.
L'ImageCache doit être dans l'état Ready avant la création du pod. Les pods faisant référence à un ImageCache non prêt ne parviennent pas à démarrer.
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: helloworld-go
spec:
template:
metadata:
labels:
app: helloworld-go
annotations:
k8s.aliyun.com/eci-image-snapshot-id: imc-2ze5tm5gehgtiiga**** # Specify the ImageCache that you want to use.
spec:
containers:
- image: registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:73fbdd56
Sélectionner automatiquement un ImageCache
Utilisez l'annotation k8s.aliyun.com/eci-image-cache: "true" pour permettre à ECI de sélectionner automatiquement le meilleur ImageCache correspondant.
ECI filtre les ImageCaches de la région qui correspondent au stockage temporaire de l'instance, puis en sélectionne un selon les priorités suivantes :
Degré de correspondance : le cache qui correspond le mieux au registre et à la version de l'image du pod.
Taille du cache : parmi les correspondances équivalentes, le cache dont la taille est la plus proche de celle de l'image.
Heure de création : en cas d'égalité, le cache créé le plus récemment.
Si aucun cache ne correspond, ECI tire et met en cache l'image lors de la création du pod. Définissez la politique de tirage d'image sur IfNotPresent pour optimiser l'efficacité de la mise en cache.
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: helloworld-go
spec:
template:
metadata:
labels:
app: helloworld-go
annotations:
k8s.aliyun.com/eci-image-cache: "true" # Automatically select an ImageCache.
spec:
containers:
- image: registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:73fbdd56
Étapes suivantes
Gérer les ImageCaches Manage ImageCaches — Créer, interroger et supprimer des ImageCaches
Facturation des caches d'images Image caches billing — Méthodes de facturation et tarifs