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
ouCronJob
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
ouCronJob
sur le cluster en créant un fichier YAML pour le compte de servicepruner
, par exemple :oc create -f <filename>.yaml
$ oc create -f <filename>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exécutez la commande
oc adm prune images [<options>]
:oc adm prune images [<options>]
$ oc adm prune images [<options>]
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
$ oc rollout restart deployment/image-registry -n openshift-image-registry
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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 Option Description --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éfaut3
).--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éfaut60m
).--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://
ouhttp://
, 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 Copier lienLien copié sur presse-papiers!
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 dansstream.status.tags[].items
-
Pods créés il y a moins de
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.
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 Copier lienLien copié sur presse-papiers!
Procédure
Pour voir ce qu'une opération d'élagage supprimerait :
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
$ oc adm prune images --keep-tag-revisions=3 --keep-younger-than=60m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Élagage de toutes les images qui dépassent les limites définies :
oc adm prune images --prune-over-size-limit
$ oc adm prune images --prune-over-size-limit
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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
$ oc adm prune images --keep-tag-revisions=3 --keep-younger-than=60m --confirm
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc adm prune images --prune-over-size-limit --confirm
$ oc adm prune images --prune-over-size-limit --confirm
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
14.6.3. Utilisation de connexions sécurisées ou non Copier lienLien copié sur presse-papiers!
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é :
-
La commande
prune
est exécutée avec l'option--force-insecure
. -
Le site
registry-url
est préfixé par le schémahttp://
. -
L'adresse fournie
registry-url
est une adresse de lien local oulocalhost
. -
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é.
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 Copier lienLien copié sur presse-papiers!
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}}'
$ 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}}'
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
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
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 commandeoc adm prune images
.AvertissementCette 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-à-diremyapp:v2.1
etmyapp: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
error: error communicating with registry: Get https://172.30.30.30:5000/healthz: http: server gave HTTP response to HTTPS client
-
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"]
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"]
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
error: error communicating with registry: Get https://172.30.30.30:5000/: x509: certificate signed by unknown authority
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.