Tous les produits
Search
Centre de documentation

Elastic Container Instance:Gérer les ImageCaches

Dernière mise à jour :Sep 21, 2026

Lorsque vous exécutez des images de conteneur volumineuses ou que vous mettez à l'échelle des pods fréquemment, le téléchargement d'images depuis un registre distant peut ajouter plusieurs minutes au démarrage des pods. Une ImageCache est une définition de ressource personnalisée (CRD) Kubernetes fournie par Elastic Container Instance (ECI) qui précharge les images de conteneur sous forme de snapshots. Lorsqu'ECI crée un pod, il charge les images directement depuis le cache, ce qui réduit considérablement le temps de démarrage pour les images volumineuses ou les charges de travail mises à l'échelle fréquemment.

Cette rubrique explique comment créer, interroger et supprimer une ImageCache.

Une ImageCache est stockée sous forme de snapshot et engendre des coûts de snapshot tant qu'elle existe. Supprimez les ImageCaches inutilisées.

Prérequis

Avant de commencer, assurez-vous de disposer des éléments suivants :

  • Un cluster Kubernetes avec le composant ack-virtual-node installé

  • Un accès kubectl au cluster

Vérifier la prise en charge des ImageCaches par votre cluster

Exécutez la commande suivante pour vérifier que la CRD ImageCache est installée :

kubectl get crd/imagecaches.eci.alibabacloud.com

Si la CRD est introuvable, la sortie ressemble à ceci :

Error from server (NotFound): customresourcedefinitions.apiextensions.k8s.io "imagecaches.eci.alibabacloud.com" not found

Mettez à jour ack-virtual-node vers une version compatible avec les ImageCaches. Nous vous recommandons d'utiliser la dernière version du composant ack-virtual-node pour bénéficier des nouvelles fonctionnalités. Pour plus d'informations sur les versions et les instructions de mise à jour, consultez ack-virtual-node et Gérer les composants système.

Si la CRD est installée, la sortie ressemble à ceci :

NAME                               CREATED AT
imagecaches.eci.alibabacloud.com   2024-01-23T05:54:44Z

Si la CRD installée n'est pas la plus récente, appliquez le manifeste CRD mis à jour :

kubectl apply -f imagecache-crd-sample.yaml

<details> <summary>Afficher imagecache-crd-sample.yaml</summary>

apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
  name: imagecaches.eci.alibabacloud.com
spec:
  group: eci.alibabacloud.com
  version: v1
  names:
    kind: ImageCache
    plural: imagecaches
    shortNames:
    - ic
    categories:
    - all
  scope: Cluster
  subresources:
    status: {}
  validation:
    openAPIV3Schema:
      required:
      - spec
      properties:
        spec:
          type: object
          required:
          - images
          properties:
            imagePullSecrets:
              type: array
              items:
                type: string
            images:
              minItems: 1
              type: array
              items:
                type: string
            imageCacheSize:
              type: integer
            retentionDays:
              type: integer
  additionalPrinterColumns:
  - name: Age
    type: date
    JSONPath: .metadata.creationTimestamp
  - name: CacheId
    type: string
    JSONPath: .status.imageCacheId
  - name: Phase
    type: string
    JSONPath: .status.phase
  - name: Progress
    type: string
    JSONPath: .status.progress

</details>

Créer une ImageCache

Configurer le manifeste YAML

Créez un fichier YAML (par exemple, imagecache-test.yaml) avec la structure suivante. Chaque champ est annoté en ligne pour une référence rapide.

apiVersion: eci.alibabacloud.com/v1
kind: ImageCache
metadata:
  name: imagecache-sample-test
  annotations:
    k8s.aliyun.com/imc-enable-reuse: "true"  # Enables ImageCache reuse across pods
spec:
  images:                                      # [Required] Images to cache
  - registry.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2
  - registry.cn-shanghai.aliyuncs.com/eci_open/busybox:1.30
  imagePullSecrets:                            # [Optional] Secrets for private image repositories
  - default:secret1                            # Format: namespace:secretName
  - default:secret2
  - kube-system:secret3
  imageCacheSize: 25                           # [Optional] Cache size in GiB. Default: 20. Range: 20-32768.
                                               # Must be >= 2x the image size.
  retentionDays: 7                             # [Optional] Days before the cache is deleted. Default: never expires.

Référence des paramètres :

Paramètre Type Obligatoire Description
spec.images String[] Oui Images de conteneur à inclure dans le cache
spec.imagePullSecrets String[] Non Secrets pour les dépôts d'images privés, au format namespace:secretName. À omettre pour les images publiques.
spec.imageCacheSize int Non Taille du cache en GiB. Par défaut : 20. Plage valide : 20–32768. Définissez une valeur au moins deux fois supérieure à la taille de l'image.
spec.retentionDays int Non Nombre de jours de conservation du cache avant sa suppression automatique. Laissez vide par défaut (pas d'expiration).
Utilisez des annotations pour activer des fonctionnalités ImageCache supplémentaires. Par exemple, k8s.aliyun.com/imc-enable-reuse: "true" permet à plusieurs pods de partager la même ImageCache. Pour obtenir la liste complète des annotations prises en charge, consultez Annotations ImageCache . Pour la référence API complète, consultez API Kubernetes ImageCache .

Appliquer le manifeste

kubectl create -f imagecache-test.yaml

Vérifier que l'ImageCache est prête

kubectl get imagecache imagecache-sample-test

L'ImageCache est prête lorsque PHASE indique Ready et que PROGRESS atteint 100% :

NAME                     AGE     CACHEID                    PHASE   PROGRESS
imagecache-sample-test   5m30s   imc-2ze2kbf9l1onf03z****   Ready   100%

Interroger les ImageCaches

Listez toutes les ImageCaches du cluster :

kubectl get imagecache

Obtenez la configuration complète et l'état d'une ImageCache spécifique :

kubectl get imagecache <imagecache-name> -o yaml

Supprimer une ImageCache

kubectl delete imagecache <imagecache-name>
Une ImageCache est un snapshot. Supprimez les ImageCaches inutilisées pour éviter des coûts de snapshot continus.

Étapes suivantes