14.7. L'élagage du registre


Le registre OpenShift Container Registry peut accumuler des blobs qui ne sont pas référencés par le etcd du cluster OpenShift Container Platform. La procédure de base d'élagage des images ne peut donc pas les traiter. Ces images sont appelées orphaned blobs.

Les blobs orphelins peuvent se produire dans les cas suivants :

  • Suppression manuelle d'une image avec la commande oc delete image <sha256:image-id>, qui supprime uniquement l'image de etcd, mais pas du registre.
  • La poussée vers le registre est initiée par des défaillances du démon, ce qui fait que certains blobs sont téléchargés, mais pas le manifeste de l'image (qui est téléchargé en tant que tout dernier composant). Toutes les images uniques deviennent orphelines.
  • OpenShift Container Platform refuse une image en raison de restrictions de quotas.
  • L'élagueur d'images standard supprime un manifeste d'image, mais il est interrompu avant de supprimer les blocs correspondants.
  • Un bogue dans l'élagueur de registre, qui ne parvient pas à supprimer les blobs prévus, ce qui entraîne la suppression des objets images qui y font référence et rend les blobs orphelins.

Hard pruning le registre, une procédure distincte de l'élagage de l'image de base, permet aux administrateurs de cluster de supprimer les blobs orphelins. Vous devriez procéder à un hard prune si vous manquez d'espace de stockage dans votre OpenShift Container Registry et que vous pensez avoir des blobs orphelins.

Cette opération doit être peu fréquente et n'est nécessaire que si vous avez la preuve qu'un nombre important de nouveaux orphelins a été créé. Sinon, vous pouvez procéder à un élagage standard des images à intervalles réguliers, par exemple une fois par jour (en fonction du nombre d'images créées).

Procédure

Pour éliminer les blobs orphelins du registre :

  1. Log in.

    Connectez-vous au cluster avec le CLI en tant que kubeadmin ou un autre utilisateur privilégié ayant accès à l'espace de noms openshift-image-registry.

  2. Run a basic image prune.

    L'élagage de base des images supprime les images supplémentaires qui ne sont plus nécessaires. L'élagage dur ne supprime pas les images en soi. Il ne supprime que les blobs stockés dans le registre. Par conséquent, vous devez exécuter cette opération juste avant l'élagage en profondeur.

  3. Switch the registry to read-only mode.

    Si le registre n'est pas en mode lecture seule, les poussées qui se produisent en même temps que l'élagage ne le seront pas non plus :

    • échouer et provoquer de nouveaux orphelins, ou
    • réussit bien que les images ne puissent pas être extraites (parce que certains des blobs référencés ont été supprimés).

    Les poussées n'aboutiront pas tant que le registre ne sera pas repassé en mode lecture-écriture. Par conséquent, l'élagage doit être programmé avec soin.

    Pour passer le registre en mode lecture seule :

    1. Sur le site configs.imageregistry.operator.openshift.io/cluster, l'adresse spec.readOnly est remplacée par l'adresse true:

      $ oc patch configs.imageregistry.operator.openshift.io/cluster -p '{"spec":{"readOnly":true}}' --type=merge
  4. Add the system:image-pruner role.

    Le compte de service utilisé pour exécuter les instances du registre nécessite des autorisations supplémentaires pour répertorier certaines ressources.

    1. Obtenir le nom du compte de service :

      $ service_account=$(oc get -n openshift-image-registry \
          -o jsonpath='{.spec.template.spec.serviceAccountName}' deploy/image-registry)
    2. Ajoutez le rôle de cluster system:image-pruner au compte de service :

      $ oc adm policy add-cluster-role-to-user \
          system:image-pruner -z \
          ${service_account} -n openshift-image-registry
  5. Optional: Run the pruner in dry-run mode.

    Pour voir combien de blobs seraient supprimés, exécutez l'élagueur en mode "dry-run". Aucune modification n'est alors effectuée. L'exemple suivant fait référence à un pod de registre d'images appelé image-registry-3-vhndw:

    $ oc -n openshift-image-registry exec pod/image-registry-3-vhndw -- /bin/sh -c '/usr/bin/dockerregistry -prune=check'

    Pour obtenir les chemins exacts des candidats à l'élagage, vous pouvez également augmenter le niveau de journalisation :

    $ oc -n openshift-image-registry exec pod/image-registry-3-vhndw -- /bin/sh -c 'REGISTRY_LOG_LEVEL=info /usr/bin/dockerregistry -prune=check'

    Exemple de sortie

    time="2017-06-22T11:50:25.066156047Z" level=info msg="start prune (dry-run mode)" distribution_version="v2.4.1+unknown" kubernetes_version=v1.6.1+$Format:%h$ openshift_version=unknown
    time="2017-06-22T11:50:25.092257421Z" level=info msg="Would delete blob: sha256:00043a2a5e384f6b59ab17e2c3d3a3d0a7de01b2cabeb606243e468acc663fa5" go.version=go1.7.5 instance.id=b097121c-a864-4e0c-ad6c-cc25f8fdf5a6
    time="2017-06-22T11:50:25.092395621Z" level=info msg="Would delete blob: sha256:0022d49612807cb348cabc562c072ef34d756adfe0100a61952cbcb87ee6578a" go.version=go1.7.5 instance.id=b097121c-a864-4e0c-ad6c-cc25f8fdf5a6
    time="2017-06-22T11:50:25.092492183Z" level=info msg="Would delete blob: sha256:0029dd4228961086707e53b881e25eba0564fa80033fbbb2e27847a28d16a37c" go.version=go1.7.5 instance.id=b097121c-a864-4e0c-ad6c-cc25f8fdf5a6
    time="2017-06-22T11:50:26.673946639Z" level=info msg="Would delete blob: sha256:ff7664dfc213d6cc60fd5c5f5bb00a7bf4a687e18e1df12d349a1d07b2cf7663" go.version=go1.7.5 instance.id=b097121c-a864-4e0c-ad6c-cc25f8fdf5a6
    time="2017-06-22T11:50:26.674024531Z" level=info msg="Would delete blob: sha256:ff7a933178ccd931f4b5f40f9f19a65be5eeeec207e4fad2a5bafd28afbef57e" go.version=go1.7.5 instance.id=b097121c-a864-4e0c-ad6c-cc25f8fdf5a6
    time="2017-06-22T11:50:26.674675469Z" level=info msg="Would delete blob: sha256:ff9b8956794b426cc80bb49a604a0b24a1553aae96b930c6919a6675db3d5e06" go.version=go1.7.5 instance.id=b097121c-a864-4e0c-ad6c-cc25f8fdf5a6
    ...
    Would delete 13374 blobs
    Would free up 2.835 GiB of disk space
    Use -prune=delete to actually delete the data

  6. Run the hard prune.

    Exécutez la commande suivante à l'intérieur d'une instance en cours d'exécution d'un pod image-registry pour exécuter le hard prune. L'exemple suivant fait référence à un module de registre d'images appelé image-registry-3-vhndw:

    $ oc -n openshift-image-registry exec pod/image-registry-3-vhndw -- /bin/sh -c '/usr/bin/dockerregistry -prune=delete'

    Exemple de sortie

    Deleted 13374 blobs
    Freed up 2.835 GiB of disk space

  7. Switch the registry back to read-write mode.

    Une fois l'élagage terminé, le registre peut être remis en mode lecture-écriture. Dans configs.imageregistry.operator.openshift.io/cluster, définissez spec.readOnly sur false:

    $ oc patch configs.imageregistry.operator.openshift.io/cluster -p '{"spec":{"readOnly":false}}' --type=merge
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.

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 leBlog 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.

© 2024 Red Hat, Inc.