14.6. Élagage manuel des images


La ressource personnalisée pruning permet l'élagage automatique des images du registre d'images OpenShift. Cependant, les administrateurs peuvent manuellement élaguer les images qui ne sont plus nécessaires au système en raison de leur âge, de leur statut ou de leur dépassement des limites. Il existe deux méthodes pour élaguer manuellement les images :

  • Exécution de l'élagage des images en tant que Job ou CronJob sur le cluster.
  • Exécution de la commande oc adm prune images.

Conditions préalables

  • Pour élaguer les images, vous devez d'abord vous connecter à l'interface CLI en tant qu'utilisateur disposant d'un jeton d'accès. L'utilisateur doit également avoir le rôle de cluster system:image-pruner ou un rôle supérieur (par exemple, cluster-admin).
  • Exposer le registre des images.

Procédure

Pour élaguer manuellement les images dont le système n'a plus besoin en raison de leur ancienneté, de leur état ou de leur dépassement, utilisez l'une des méthodes suivantes :

  • Exécutez l'élagage des images en tant que Job ou CronJob sur le cluster en créant un fichier YAML pour le compte de service pruner, par exemple :

    $ oc create -f <filename>.yaml
    Copy to Clipboard Toggle word wrap

    Exemple de sortie

    kind: List
    apiVersion: v1
    items:
    - apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: pruner
        namespace: openshift-image-registry
    - apiVersion: rbac.authorization.k8s.io/v1
      kind: ClusterRoleBinding
      metadata:
        name: openshift-image-registry-pruner
      roleRef:
        apiGroup: rbac.authorization.k8s.io
        kind: ClusterRole
        name: system:image-pruner
      subjects:
      - kind: ServiceAccount
        name: pruner
        namespace: openshift-image-registry
    - apiVersion: batch/v1
      kind: CronJob
      metadata:
        name: image-pruner
        namespace: openshift-image-registry
      spec:
        schedule: "0 0 * * *"
        concurrencyPolicy: Forbid
        successfulJobsHistoryLimit: 1
        failedJobsHistoryLimit: 3
        jobTemplate:
          spec:
            template:
              spec:
                restartPolicy: OnFailure
                containers:
                - image: "quay.io/openshift/origin-cli:4.1"
                  resources:
                    requests:
                      cpu: 1
                      memory: 1Gi
                  terminationMessagePolicy: FallbackToLogsOnError
                  command:
                  - oc
                  args:
                  - adm
                  - prune
                  - images
                  - --certificate-authority=/var/run/secrets/kubernetes.io/serviceaccount/service-ca.crt
                  - --keep-tag-revisions=5
                  - --keep-younger-than=96h
                  - --confirm=true
                  name: image-pruner
                serviceAccountName: pruner
    Copy to Clipboard Toggle word wrap

  • Exécutez la commande oc adm prune images [<options>]:

    $ oc adm prune images [<options>]
    Copy to Clipboard Toggle word wrap

    L'élagage des images supprime les données du registre intégré, sauf si --prune-registry=false est utilisé.

    L'élagage des images avec l'option --namespace ne supprime pas les images, mais uniquement les flux d'images. Les images sont des ressources sans espace de noms. Par conséquent, en limitant l'élagage à un espace de noms particulier, il est impossible de calculer son utilisation actuelle.

    Par défaut, le registre intégré met en cache les métadonnées des blobs afin de réduire le nombre de demandes de stockage et d'augmenter la vitesse de traitement des demandes. L'élagage ne met pas à jour le cache du registre intégré. Les images qui contiennent encore des couches élaguées après l'élagage seront cassées car les couches élaguées qui ont des métadonnées dans le cache ne seront pas poussées. Par conséquent, vous devez redéployer le registre pour effacer le cache après l'élagage :

    $ oc rollout restart deployment/image-registry -n openshift-image-registry
    Copy to Clipboard Toggle word wrap

    Si le registre intégré utilise un cache Redis, vous devez nettoyer la base de données manuellement.

    Si le redéploiement du registre après l'élagage n'est pas envisageable, vous devez désactiver le cache de façon permanente.

    oc adm prune images nécessitent une route pour votre registre. Les routes de registre ne sont pas créées par défaut.

    Le tableau Prune images CLI configuration options décrit les options que vous pouvez utiliser avec la commande oc adm prune images <options>.

    Expand
    Tableau 14.4. Options de configuration du CLI pour l'élagage des images
    OptionDescription

    --all

    Inclure les images qui n'ont pas été poussées dans le registre, mais qui ont été mises en miroir par pullthrough. Cette option est activée par défaut. Pour limiter l'élagage aux images qui ont été poussées dans le registre intégré, passez --all=false.

    --certificate-authority

    Le chemin d'accès à un fichier d'autorité de certification à utiliser lors de la communication avec les registres gérés par OpenShift Container Platform. Par défaut, il s'agit des données de l'autorité de certification du fichier de configuration de l'utilisateur actuel. Si elle est fournie, une connexion sécurisée est initiée.

    --confirm

    Indiquer que l'élagage doit avoir lieu, au lieu d'effectuer un test. Cette commande nécessite une route valide vers le registre intégré des images de conteneurs. Si cette commande est exécutée en dehors du réseau du cluster, l'itinéraire doit être fourni à l'aide de --registry-url.

    --force-insecure

    Cette option doit être utilisée avec précaution. Autoriser une connexion non sécurisée au registre de conteneurs hébergé via HTTP ou dont le certificat HTTPS n'est pas valide.

    --keep-tag-revisions=<N>

    Pour chaque flux d'images, conserver au maximum N révisions d'images par balise (par défaut 3).

    --keep-younger-than=<duration>

    Ne pas élaguer les images plus récentes que <duration> par rapport à l'heure actuelle. Alternativement, n'élaguer aucune image référencée par un autre objet plus récent que <duration> par rapport à l'heure actuelle (par défaut 60m).

    --prune-over-size-limit

    Élaguer chaque image qui dépasse la plus petite limite définie dans le même projet. Cet indicateur ne peut pas être combiné avec --keep-tag-revisions ou --keep-younger-than.

    --registry-url

    Adresse à utiliser pour contacter le registre. La commande tente d'utiliser une URL interne au cluster déterminée à partir des images gérées et des flux d'images. En cas d'échec (le registre ne peut pas être résolu ou atteint), un itinéraire alternatif qui fonctionne doit être fourni à l'aide de cet indicateur. Le nom d'hôte du registre peut être préfixé par https:// ou http://, ce qui met en œuvre un protocole de connexion particulier.

    --prune-registry

    En conjonction avec les conditions stipulées par les autres options, cette option contrôle si les données dans le registre correspondant à l'objet API image d'OpenShift Container Platform sont élaguées. Par défaut, l'élagage des images traite à la fois les objets API d'image et les données correspondantes dans le registre.

    Cette option est utile lorsque vous souhaitez uniquement supprimer le contenu d'etcd, afin de réduire le nombre d'objets image, mais que vous ne souhaitez pas nettoyer le stockage du registre, ou si vous avez l'intention de le faire séparément en élaguant le registre au cours d'une fenêtre de maintenance appropriée pour le registre.

14.6.1. Image conditions de taille

Vous pouvez appliquer des conditions à vos images élaguées manuellement.

  • Pour supprimer toute image gérée par OpenShift Container Platform, ou les images avec l'annotation openshift.io/image.managed:

    • Créés il y a au moins --keep-younger-than minutes et qui ne sont actuellement référencés par aucun :

      • Pods créés il y a moins de --keep-younger-than minutes
      • Flux d'images créés il y a moins de --keep-younger-than minutes
      • Nacelles de course à pied
      • Dossiers en attente
      • Contrôleurs de réplication
      • Déploiements
      • Configurations de déploiement
      • Jeux de répliques
      • Construire des configurations
      • Constructions
      • --keep-tag-revisions les éléments les plus récents dans stream.status.tags[].items
    • Qui dépassent la plus petite limite définie dans le même projet et qui ne sont actuellement référencées par aucune :

      • Nacelles de course à pied
      • Dossiers en attente
      • Contrôleurs de réplication
      • Déploiements
      • Configurations de déploiement
      • Jeux de répliques
      • Construire des configurations
      • Constructions
  • Il n'y a pas de support pour l'élagage à partir de registres externes.
  • Lorsqu'une image est élaguée, toutes les références à l'image sont supprimées de tous les flux d'images qui contiennent une référence à l'image dans status.tags.
  • Les calques d'image qui ne sont plus référencés par des images sont supprimés.
Note

L'indicateur --prune-over-size-limit ne peut pas être combiné avec l'indicateur --keep-tag-revisions ni avec l'indicateur --keep-younger-than. Le cas échéant, le système renvoie une information indiquant que cette opération n'est pas autorisée.

La séparation de la suppression des objets API d'image OpenShift Container Platform et des données d'image du registre à l'aide de --prune-registry=false, suivie de l'élagage du registre, peut réduire les fenêtres temporelles et est plus sûre que la tentative d'élagage des deux à l'aide d'une seule commande. Toutefois, les fenêtres temporelles ne sont pas complètement supprimées.

Par exemple, vous pouvez toujours créer un pod faisant référence à une image lorsque l'élagage identifie cette image pour l'élagage. Vous devez toujours assurer le suivi d'un objet API créé au cours des opérations d'élagage et pouvant faire référence à des images, afin de limiter les références au contenu supprimé.

Refaire l'élagage sans l'option --prune-registry ou avec --prune-registry=true n'entraîne pas l'élagage du stockage associé dans le registre d'images pour les images précédemment élaguées par --prune-registry=false. Toutes les images qui ont été élaguées avec --prune-registry=false ne peuvent être supprimées du stockage du registre que par un élagage en profondeur du registre.

14.6.2. Exécution de l'opération d'élagage de l'image

Procédure

  1. Pour voir ce qu'une opération d'élagage supprimerait :

    1. Conserver jusqu'à trois révisions de balises et conserver les ressources (images, flux d'images et pods) à moins de 60 minutes :

      $ oc adm prune images --keep-tag-revisions=3 --keep-younger-than=60m
      Copy to Clipboard Toggle word wrap
    2. Élagage de toutes les images qui dépassent les limites définies :

      $ oc adm prune images --prune-over-size-limit
      Copy to Clipboard Toggle word wrap
  2. Pour effectuer l'opération d'élagage avec les options de l'étape précédente :

    $ oc adm prune images --keep-tag-revisions=3 --keep-younger-than=60m --confirm
    Copy to Clipboard Toggle word wrap
    $ oc adm prune images --prune-over-size-limit --confirm
    Copy to Clipboard Toggle word wrap

14.6.3. Utilisation de connexions sécurisées ou non

La connexion sécurisée est l'approche préférée et recommandée. Elle s'effectue via le protocole HTTPS avec une vérification obligatoire du certificat. La commande prune tente toujours de l'utiliser si possible. Si ce n'est pas possible, elle peut dans certains cas se rabattre sur une connexion non sécurisée, ce qui est dangereux. Dans ce cas, soit la vérification du certificat est ignorée, soit le protocole HTTP simple est utilisé.

Le retour à une connexion non sécurisée est autorisé dans les cas suivants, sauf si --certificate-authority est spécifié :

  1. La commande prune est exécutée avec l'option --force-insecure.
  2. Le site registry-url est préfixé par le schéma http://.
  3. L'adresse fournie registry-url est une adresse de lien local ou localhost.
  4. La configuration de l'utilisateur actuel permet une connexion non sécurisée. Cela peut être dû au fait que l'utilisateur se connecte à l'aide de --insecure-skip-tls-verify ou choisit une connexion non sécurisée lorsqu'il y est invité.
Important

Si le registre est sécurisé par une autorité de certification différente de celle utilisée par OpenShift Container Platform, elle doit être spécifiée à l'aide du drapeau --certificate-authority. Dans le cas contraire, la commande prune génère une erreur.

14.6.4. Problèmes d'élagage des images

Images non élaguées

Si vos images continuent de s'accumuler et que la commande prune ne supprime qu'une petite partie de ce que vous attendez, assurez-vous de bien comprendre les conditions d'élagage des images qui doivent s'appliquer pour qu'une image soit considérée comme candidate à l'élagage.

Assurez-vous que les images que vous souhaitez supprimer se trouvent à des positions plus élevées dans l'historique de chaque balise que le seuil de révision des balises que vous avez choisi. Prenons l'exemple d'une image ancienne et obsolète nommée sha:abz. En exécutant la commande suivante dans l'espace de noms N, où l'image est balisée, l'image est balisée trois fois dans un flux d'images unique nommé myapp:

$ oc get is -n N -o go-template='{{range $isi, $is := .items}}{{range $ti, $tag := $is.status.tags}}'\
  '{{range $ii, $item := $tag.items}}{{if eq $item.image "'"sha:abz"\
  $'"}}{{$is.metadata.name}}:{{$tag.tag}} at position {{$ii}} out of {{len $tag.items}}\n'\
  '{{end}}{{end}}{{end}}{{end}}'
Copy to Clipboard Toggle word wrap

Exemple de sortie

myapp:v2 at position 4 out of 5
myapp:v2.1 at position 2 out of 2
myapp:v2.1-may-2016 at position 0 out of 1
Copy to Clipboard Toggle word wrap

Lorsque les options par défaut sont utilisées, l'image n'est jamais élaguée parce qu'elle se trouve à la position 0 dans un historique de la balise myapp:v2.1-may-2016. Pour qu'une image soit prise en compte pour l'élagage, l'administrateur doit soit

  • Spécifiez --keep-tag-revisions=0 avec la commande oc adm prune images.

    Avertissement

    Cette action supprime toutes les balises de tous les espaces de noms avec les images sous-jacentes, à moins qu'elles ne soient plus jeunes ou qu'elles soient référencées par des objets plus jeunes que le seuil spécifié.

  • Supprimer tous les istags dont la position est inférieure au seuil de révision, c'est-à-dire myapp:v2.1 et myapp:v2.1-may-2016.
  • Déplacer l'image plus loin dans l'historique, soit en lançant de nouvelles versions qui poussent vers le même istag, soit en étiquetant d'autres images. Cela n'est pas toujours souhaitable pour les anciennes versions.

Les balises dont le nom contient la date ou l'heure de création d'une image particulière sont à éviter, sauf si l'image doit être conservée pendant une durée indéterminée. Ces balises ont tendance à n'avoir qu'une seule image dans leur historique, ce qui les empêche d'être élaguées.

Utilisation d'une connexion sécurisée contre un registre non sécurisé

Si vous voyez un message similaire au suivant dans la sortie de la commande oc adm prune images, c'est que votre registre n'est pas sécurisé et que le client oc adm prune images tente d'utiliser une connexion sécurisée :

error: error communicating with registry: Get https://172.30.30.30:5000/healthz: http: server gave HTTP response to HTTPS client
Copy to Clipboard Toggle word wrap
  • La solution recommandée est de sécuriser le registre. Sinon, vous pouvez forcer le client à utiliser une connexion non sécurisée en ajoutant --force-insecure à la commande ; cette solution n'est toutefois pas recommandée.
Utilisation d'une connexion non sécurisée contre un registre sécurisé

Si l'une des erreurs suivantes apparaît dans le résultat de la commande oc adm prune images, cela signifie que votre registre est sécurisé par un certificat signé par une autorité de certification autre que celle utilisée par le client oc adm prune images pour la vérification de la connexion :

error: error communicating with registry: Get http://172.30.30.30:5000/healthz: malformed HTTP response "\x15\x03\x01\x00\x02\x02"
error: error communicating with registry: [Get https://172.30.30.30:5000/healthz: x509: certificate signed by unknown authority, Get http://172.30.30.30:5000/healthz: malformed HTTP response "\x15\x03\x01\x00\x02\x02"]
Copy to Clipboard Toggle word wrap

Par défaut, les données de l'autorité de certification stockées dans les fichiers de configuration de l'utilisateur sont utilisées ; il en va de même pour la communication avec l'API maître.

Utilisez l'option --certificate-authority pour fournir l'autorité de certification appropriée pour le serveur de registre d'images de conteneurs.

Utilisation d'une mauvaise autorité de certification

L'erreur suivante signifie que l'autorité de certification utilisée pour signer le certificat du registre d'images de conteneurs sécurisés est différente de l'autorité utilisée par le client :

error: error communicating with registry: Get https://172.30.30.30:5000/: x509: certificate signed by unknown authority
Copy to Clipboard Toggle word wrap

Veillez à fournir le bon drapeau à --certificate-authority.

En guise de solution de contournement, le drapeau --force-insecure peut être ajouté à la place. Cette solution n'est toutefois pas recommandée.

Retour au début
Red Hat logoGithubredditYoutubeTwitter

Apprendre

Essayez, achetez et vendez

Communautés

À propos de la documentation Red Hat

Nous aidons les utilisateurs de Red Hat à innover et à atteindre leurs objectifs grâce à nos produits et services avec un contenu auquel ils peuvent faire confiance. Découvrez nos récentes mises à jour.

Rendre l’open source plus inclusif

Red Hat s'engage à remplacer le langage problématique dans notre code, notre documentation et nos propriétés Web. Pour plus de détails, consultez le Blog Red Hat.

À propos de Red Hat

Nous proposons des solutions renforcées qui facilitent le travail des entreprises sur plusieurs plates-formes et environnements, du centre de données central à la périphérie du réseau.

Theme

© 2025 Red Hat