Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
S’applique à : ✔️ AKS Automatic ✔️ AKS Standard
Il est courant d’utiliser des pipelines pour générer et déployer des images sur des clusters Azure Kubernetes Service (AKS). Bien qu’efficace pour la création d’images, ce processus ne prend souvent pas en compte les images obsolètes qui restent et peut entraîner une accumulation excessive d’images sur les nœuds du cluster. Ces images peuvent contenir des vulnérabilités, ce qui peut créer des problèmes de sécurité. Pour supprimer les risques de sécurité dans vos clusters, vous pouvez nettoyer ces images non référencées. Le nettoyage manuel des images peut s’avérer fastidieux. Image Cleaner effectue l’identification et la suppression automatiques des images, ce qui atténue le risque d’images obsolètes et réduit le temps nécessaire pour les nettoyer.
AKS Automatic est l’option par défaut recommandée, prête pour la production, pour la plupart des charges de travail sur AKS. Image Cleaner est préconfiguré sur les clusters automatiques AKS pour aider à supprimer les images inutilisées avec des vulnérabilités par défaut.
Sur les clusters AKS Standard, Image Cleaner est facultatif et vous l’activez explicitement.
Pour plus d’informations sur AKS Automatic, consultez Qu’est-ce que Azure Kubernetes Service (AKS) Automatique ?
Remarque
Image Cleaner est une fonctionnalité basée sur Eraser. Sur AKS, le nom de la fonctionnalité et le nom de propriété sont Image Cleaner, tandis que les noms des pods Image Cleaner appropriés contiennent Eraser.
Comportement AKS Automatic et AKS Standard
Prérequis
- Un abonnement Azure. Si vous n’avez pas d’abonnement Azure, vous pouvez créer un compte gratuit.
- Pour la configuration AKS Standard via Azure CLI, Azure CLI version 2.49.0 ou ultérieure. Exécutez
az --versionpour rechercher votre version. Si vous devez installer ou mettre à niveau, voir Installer Azure CLI.
Limites
Image Cleaner ne prend pas encore en charge les pools de nœuds Windows ou les nœuds virtuels AKS.
Fonctionnement d’Image Cleaner
Lorsque vous activez Image Cleaner sur votre cluster, il déploie un pod de gestionnaire de contrôleur nommé eraser-controller-manager.
Image Cleaner prend en charge les modes de nettoyage automatique et manuel.
Options de configuration pour AKS Standard
Utilisez ces options lors de la configuration d’Image Cleaner sur AKS Standard avec Azure CLI.
| Nom | Description | Obligatoire |
|---|---|---|
--enable-image-cleaner |
Activer Image Cleaner pour un cluster AKS | Oui, sauf si vous spécifiez la désactivation |
--disable-image-cleaner |
Désactiver Le nettoyeur d’images pour un cluster AKS | Oui, sauf si vous spécifiez « activé » |
--image-cleaner-interval-hours |
Intervalle en heures pour les exécutions planifiées. Azure CLI valeur par défaut est d’une semaine. Le minimum est de 24 heures. Le maximum est de trois mois. | Non requis pour Azure CLI ; requis pour le modèle ARM ou d’autres clients |
Remarque
Si vous désactivez Image Cleaner et la réenable ultérieurement sans passer explicitement la configuration, la valeur de configuration précédente est réutilisée.
Mode automatique
Lorsque vous déployez eraser-controller-manager, Image Cleaner effectue automatiquement ces actions :
- Démarre le nettoyage et crée
eraser-aks-xxxxxdes pods worker pour chaque nœud. - Utilise un conteneur collecteur pour collecter des images inutilisées.
- Utilise un conteneur trivy-scanneur pour analyser les vulnérabilités avec trivy.
- Utilise un conteneur de suppression pour supprimer les images inutilisées avec des vulnérabilités.
- Supprime le pod de travail une fois l’exécution terminée.
- Planifie le nettoyage suivant en fonction de
--image-cleaner-interval-hours.
Mode manuel
Vous pouvez déclencher le nettoyage manuellement en définissant un objet CRD, ImageList. Cela déclenche la création, par eraser-contoller-manager, de pods worker eraser-aks-xxxxx pour chaque nœud afin d’exécuter le processus de suppression manuelle.
Remarque
Après avoir désactivé Image Cleaner, l’ancienne configuration existe toujours. Cela signifie que si vous activez à nouveau la fonctionnalité sans passer explicitement la configuration, la valeur existante est utilisée au lieu de la valeur par défaut.
Utiliser Image Cleaner sur AKS Automatic et AKS Standard
AKS Automatic
Image Cleaner est préconfiguré dans les clusters AKS Automatic, qui constituent l’option par défaut recommandée et prête pour la production pour la plupart des charges de travail AKS. Vous n’avez pas besoin d’exécuter une commande Enable distincte.
Pour créer un cluster automatique AKS, consultez Créer un cluster automatique AKS.
Utilisez les conseils de nettoyage et de surveillance manuels de cet article lorsque vous souhaitez une correction ciblée ou une vérification opérationnelle.
AKS Standard : activer sur un nouveau cluster
Activez Image Cleaner sur un nouveau cluster AKS Standard à l’aide de la az aks create commande avec le --enable-image-cleaner paramètre.
az aks create \
--resource-group myResourceGroup \
--name myManagedCluster \
--enable-image-cleaner \
--generate-ssh-keys
AKS Standard : activer sur un cluster existant
Activez Image Cleaner sur un cluster AKS Standard existant à l’aide de la az aks update commande.
az aks update \
--resource-group myResourceGroup \
--name myManagedCluster \
--enable-image-cleaner
AKS Standard : intervalle de mise à jour sur un cluster nouveau ou existant
Mettez à jour l’intervalle Image Cleaner sur un cluster AKS Standard nouveau ou existant à l’aide du --image-cleaner-interval-hours paramètre.
# Create a new cluster with specifying the interval
az aks create \
--resource-group myResourceGroup \
--name myManagedCluster \
--enable-image-cleaner \
--image-cleaner-interval-hours 48 \
--generate-ssh-keys
# Update the interval on an existing cluster
az aks update \
--resource-group myResourceGroup \
--name myManagedCluster \
--enable-image-cleaner \
--image-cleaner-interval-hours 48
Supprimer manuellement des images à l’aide d’Image Cleaner
Important
name doit être défini sur imagelist.
Supprimez une image manuellement avec la commande kubectl apply suivante. Cet exemple montre comment supprimer l’image docker.io/library/alpine:3.7.3 si elle n’est pas utilisée.
cat <<EOF | kubectl apply -f -
apiVersion: eraser.sh/v1
kind: ImageList
metadata:
name: imagelist
spec:
images:
- docker.io/library/alpine:3.7.3
EOF
Le nettoyage manuel est une opération ponctuelle qui est déclenchée seulement si une nouvelle imagelist est créée ou si des modifications sont apportées à l’imagelist existante. Une fois l’image supprimée, l’imagelist n’est pas supprimée automatiquement.
Si vous devez déclencher un autre nettoyage manuel, vous devez créer un nouveau imagelist ou modifier un imagelist existant. Si vous souhaitez supprimer la même image une nouvelle fois, vous devez créer une nouvelle imagelist.
Supprimer une ImageList existante et en créer une nouvelle
Supprimez l’ancienne
imagelisten utilisant la commandekubectl delete.kubectl delete ImageList imagelistCréez une nouvelle
imagelistavec le même nom d’image. L’exemple suivant utilise la même image que l’exemple précédent.cat <<EOF | kubectl apply -f - apiVersion: eraser.sh/v1 kind: ImageList metadata: name: imagelist spec: images: - docker.io/library/alpine:3.7.3 EOF
Modifier une ImageList existante
Modifiez l’imagelist existante en utilisant la commande kubectl edit.
kubectl edit ImageList imagelist
# Add a new image to the list
apiVersion: eraser.sh/v1
kind: ImageList
metadata:
name: imagelist
spec:
images:
docker.io/library/python:alpine3.18
En mode manuel, le pod eraser-aks-xxxxx est supprimé dans les 10 minutes suivant la fin de l’opération.
Liste d’exclusion des images
Les images spécifiées dans la liste d’exclusion ne sont pas supprimées du cluster. Image Cleaner prend en charge les listes d’exclusions définies par le système et l’utilisateur. La modification de la liste d’exclusions système n’est pas prise en charge.
Vérifier la liste d’exclusions système
Vérifiez la liste d’exclusions système à l’aide de la commande kubectl get suivante.
kubectl get -n kube-system configmap eraser-system-exclusion -o yaml
Créer une liste d’exclusions définie par l’utilisateur
Créez un exemple de fichier JSON pour contenir des images exclues.
cat > sample.json <<EOF {"excluded": ["excluded-image-name"]} EOFCréez une
configmapà l’aide de l’exemple de fichier JSON avec les commandeskubectl createetkubectl labelsuivantes.kubectl create configmap excluded --from-file=sample.json --namespace=kube-system kubectl label configmap excluded eraser.sh/exclude.list=true -n kube-system
Désactiver le nettoyage d’images sur AKS Standard
Désactivez Image Cleaner sur un cluster AKS Standard à l’aide de la az aks update commande avec le --disable-image-cleaner paramètre.
az aks update \
--resource-group myResourceGroup \
--name myManagedCluster \
--disable-image-cleaner
Questions fréquentes (FAQ)
Image Cleaner est-il activé par défaut sur AKS Automatic ?
Yes. Image Cleaner est préconfiguré sur les clusters automatiques AKS.
Dois-je exécuter des commandes d’activation pour Image Cleaner sur AKS Automatic ?
Non. Utilisez les commandes Enable pour AKS Standard.
Comment savoir quelle version d’Image Cleaner j’utilise ?
kubectl describe configmap -n kube-system eraser-manager-config | grep tag -C 3
Image Cleaner prend-il en charge d’autres analyseurs de vulnérabilité en plus de trivy-scanner ?
Non.
Puis-je spécifier des niveaux de vulnérabilité pour les images à nettoyer ?
Non. Les paramètres par défaut des niveaux de vulnérabilité comprennent :
-
LOW, -
MEDIUM, -
HIGH, et CRITICAL
Vous ne pouvez pas personnaliser les paramètres par défaut.
Comment passer en revue les images qui ont été nettoyées par Image Cleaner ?
Les journaux d’image sont stockés dans le pod worker eraser-aks-xxxxx. Tant que eraser-aks-xxxxx est actif, vous pouvez exécuter les commandes suivantes pour consulter les journaux de suppression :
kubectl logs -n kube-system <worker-pod-name> -c collector
kubectl logs -n kube-system <worker-pod-name> -c trivy-scanner
kubectl logs -n kube-system <worker-pod-name> -c remover
Le eraser-aks-xxxxx pod est supprimé dans les 10 minutes suivant la fin de la tâche. Vous pouvez suivre ces étapes pour activer le module complémentaire Azure Monitor et utiliser le tableau de journal de pod Container Insights. Après, les journaux historiques seront stockés et vous pourrez les consulter même si eraser-aks-xxxxx est supprimé.
Vérifiez que Azure Monitor est activé sur votre cluster. Pour obtenir des instructions détaillées, consultez Activer Container Insights sur le cluster AKS.
Par défaut, les journaux des conteneurs s’exécutant dans l’espace de noms
kube-systemne sont pas collectés. Supprimez l’espace de nomskube-systemdeexclude_namespacesdans le ConfigMap, puis appliquez le ConfigMap pour activer la collecte de ces logs. Consultez Configurer la collecte des données d'observation des conteneurs pour plus de détails.Obtenez l’ID de ressource Log Analytics à l’aide de la commande
az aks show.az aks show --resource-group myResourceGroup --name myManagedClusterAu bout de quelques minutes, la commande renvoie des informations au format JSON au sujet de la solution, y compris l’ID de ressource de l’espace de travail :
"addonProfiles": { "omsagent": { "config": { "logAnalyticsWorkspaceResourceID": "/subscriptions/<WorkspaceSubscription>/resourceGroups/<DefaultWorkspaceRG>/providers/Microsoft.OperationalInsights/workspaces/<defaultWorkspaceName>" }, "enabled": true } }Dans le portail Azure, recherchez l’ID de ressource de l’espace de travail, puis sélectionnez Journaux.
Copiez l’une des requêtes suivantes et collez-la dans la fenêtre de requête.
Utilisez la requête suivante si votre cluster utilise le schéma ContainerLogV2. Si vous utilisez
ContainerLogtoujours, effectuez une mise à niveau vers ContainerLogV2.ContainerLogV2 | where PodName startswith "eraser-aks-" and PodNamespace == "kube-system" | project TimeGenerated, PodName, LogMessage, LogSourceSi vous souhaitez continuer à utiliser
ContainerLog, utilisez plutôt la requête suivante :let startTimestamp = ago(1h); KubePodInventory | where TimeGenerated > startTimestamp | project ContainerID, PodName=Name, Namespace | where PodName startswith "eraser-aks-" and Namespace == "kube-system" | distinct ContainerID, PodName | join ( ContainerLog | where TimeGenerated > startTimestamp ) on ContainerID // at this point before the next pipe, columns from both tables are available to be "projected". Due to both // tables having a "Name" column, we assign an alias as PodName to one column which we actually want | project TimeGenerated, PodName, LogEntry, LogEntrySource | summarize by TimeGenerated, LogEntry | order by TimeGenerated desc ```
Sélectionnez Exécuter. Les journaux d’images supprimés apparaissent dans la zone Résultats.
Contenu connexe
- En savoir plus sur AKS Automatic in What is Azure Kubernetes Service (AKS) Automatic ?
- Créez un cluster AKS Automatique prêt pour la production avec Créer un cluster automatique Azure Kubernetes Service (AKS).