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-nodeinstalléUn accès
kubectlau 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.