# Finalisateurs

LLMS index: [llms.txt](/llms.txt)

---

<!-- aperçu -->

<p>Les finalizers sont des clés des namespaces qui indiquent à Kubernetes d'attendre que certaines
conditions soient remplies avant de supprimer complètement les ressources marquées pour la suppression.
Les finalizers alertent les <a class='glossary-tooltip' title='Boucle de contrôle surveillant l&#39;état partagé du cluster à travers l&#39;apiserver et effectuant des changements en essayant de déplacer l&#39;état actuel vers l&#39;état désiré.' data-bs-toggle='tooltip' data-bs-placement='top' href='/fr/docs/admin/kube-controller-manager/' target='_blank' aria-label='contrôleurs'>contrôleurs</a> pour nettoyer les ressources appartenant à l'objet supprimé.</p>
<p>Lorsque vous demandez à Kubernetes de supprimer un objet qui a des finalizers spécifiés,
l'API Kubernetes marque l'objet pour la suppression en remplissant le champ <code>.metadata.deletionTimestamp</code>,
et renvoie un code d'état <code>202</code> (HTTP &quot;Accepté&quot;). L'objet cible reste dans un état de terminaison pendant que le
plan de contrôle, ou d'autres composants, effectuent les actions définies par les finalizers.
Une fois ces actions terminées, le contrôleur supprime les finalizers pertinents
de l'objet cible. Lorsque le champ <code>metadata.finalizers</code> est vide,
Kubernetes considère la suppression comme terminée et supprime l'objet.</p>
<p>Vous pouvez utiliser des finalizers pour contrôler la <a class='glossary-tooltip' title='Le Garbage collection est un terme générique désignant les différents mécanismes utilisés par Kubernetes pour nettoyer les ressources du cluster.' data-bs-toggle='tooltip' data-bs-placement='top' href='/fr/docs/concepts/architecture/garbage-collection/' target='_blank' aria-label='collecte des déchets'>collecte des déchets</a>
des ressources. Par exemple, vous pouvez définir un finalizer pour nettoyer les ressources ou
l'infrastructure associée avant que le contrôleur ne supprime la ressource cible.</p>

Vous pouvez utiliser des finalisateurs pour contrôler la <a class='glossary-tooltip' title='Le Garbage collection est un terme générique désignant les différents mécanismes utilisés par Kubernetes pour nettoyer les ressources du cluster.' data-bs-toggle='tooltip' data-bs-placement='top' href='/fr/docs/concepts/architecture/garbage-collection/' target='_blank' aria-label='collecte des déchets'>collecte des déchets</a>
des <a class='glossary-tooltip' title='Entité du système Kubernetes représentant une partie de l’état de votre cluster.' data-bs-toggle='tooltip' data-bs-placement='top' href='/fr/docs/concepts/overview/working-with-objects/#kubernetes-objects' target='_blank' aria-label='objets'>objets</a> en alertant les <a class='glossary-tooltip' title='Boucle de contrôle surveillant l&#39;état partagé du cluster à travers l&#39;apiserver et effectuant des changements en essayant de déplacer l&#39;état actuel vers l&#39;état désiré.' data-bs-toggle='tooltip' data-bs-placement='top' href='/fr/docs/admin/kube-controller-manager/' target='_blank' aria-label='contrôleurs'>contrôleurs</a>
d'effectuer des tâches de nettoyage spécifiques avant de supprimer la ressource cible.

Les finalisateurs ne spécifient généralement pas le code à exécuter. Au lieu de cela, ils sont
généralement des listes de clés sur une ressource spécifique similaires aux annotations.
Kubernetes spécifie automatiquement certains finalisateurs, mais vous pouvez également spécifier
les vôtres.

## Comment fonctionnent les finalisateurs

Lorsque vous créez une ressource à l'aide d'un fichier de manifeste, vous pouvez spécifier des finalisateurs dans
le champ `metadata.finalizers`. Lorsque vous tentez de supprimer la ressource, le
serveur API traitant la demande de suppression remarque les valeurs dans le champ `finalizers`
et effectue les opérations suivantes :

  * Modifie l'objet pour ajouter un champ `metadata.deletionTimestamp` avec l'heure de début de la suppression.
  * Empêche la suppression de l'objet tant que tous les éléments sont supprimés de son champ `metadata.finalizers`
  * Renvoie un code d'état `202` (HTTP "Accepté")

Le contrôleur gérant ce finaliseur remarque la mise à jour de l'objet en définissant le
`metadata.deletionTimestamp`, indiquant que la suppression de l'objet a été demandée.
Le contrôleur tente ensuite de satisfaire les exigences des finalisateurs
spécifiés pour cette ressource. Chaque fois qu'une condition de finaliseur est satisfaite, le
contrôleur supprime cette clé du champ `finalizers` de la ressource. Lorsque le
champ `finalizers` est vidé, un objet avec un champ `deletionTimestamp` défini
est automatiquement supprimé. Vous pouvez également utiliser des finalisateurs pour empêcher la suppression de ressources non gérées.

Un exemple courant de finaliseur est `kubernetes.io/pv-protection`, qui empêche
la suppression accidentelle des objets `PersistentVolume`. Lorsqu'un objet `PersistentVolume`
est utilisé par un Pod, Kubernetes ajoute le finaliseur `pv-protection`. Si vous
essayez de supprimer le `PersistentVolume`, il passe à l'état `Terminating`, mais le
contrôleur ne peut pas le supprimer car le finaliseur existe. Lorsque le Pod cesse
d'utiliser le `PersistentVolume`, Kubernetes supprime le finaliseur `pv-protection`,
et le contrôleur supprime le volume.


<div class="alert alert-info" role="note"><h4 class="alert-heading">Note</h4><ul>
<li>
<p>Lorsque vous <code>DELETE</code> un objet, Kubernetes ajoute le timestamp de suppression pour cet objet, puis
commence immédiatement à restreindre les modifications du champ <code>.metadata.finalizers</code> pour l'objet qui est
maintenant en attente de suppression. Vous pouvez supprimer les finalisateurs existants (supprimer une entrée de la liste des <code>finalizers</code>)
mais vous ne pouvez pas ajouter un nouveau finaliseur. Vous ne pouvez pas non plus modifier le <code>deletionTimestamp</code> d'un
objet une fois qu'il est défini.</p>
</li>
<li>
<p>Après que la suppression a été demandée, vous ne pouvez pas ressusciter cet objet. La seule solution est de le supprimer et de créer un nouvel objet similaire.</p>
</li>
</ul>
</div>


## Références de propriétaire, labels et finalisateurs {#owners-labels-finalizers}

Comme les <a class='glossary-tooltip' title='Associe aux objets des attributs d’identification pertinents et significatifs pour les utilisateurs.' data-bs-toggle='tooltip' data-bs-placement='top' href='/fr/docs/concepts/overview/working-with-objects/labels' target='_blank' aria-label='labels'>labels</a>,
[les références de propriétaire](/docs/concepts/overview/working-with-objects/owners-dependents/)
décrivent les relations entre les objets dans Kubernetes, mais sont utilisées à
une fin différente. Lorsqu'un
<a class='glossary-tooltip' title='Boucle de contrôle surveillant l&#39;état partagé du cluster à travers l&#39;apiserver et effectuant des changements en essayant de déplacer l&#39;état actuel vers l&#39;état désiré.' data-bs-toggle='tooltip' data-bs-placement='top' href='/fr/docs/admin/kube-controller-manager/' target='_blank' aria-label='contrôleur'>contrôleur</a> gère des objets
comme des Pods, il utilise des labels pour suivre les modifications apportées à des groupes d'objets liés. Par
exemple, lorsqu'un <a class='glossary-tooltip' title='Une tâche finie ou par lots qui s’exécute jusqu’à sa terminaison.' data-bs-toggle='tooltip' data-bs-placement='top' href='/fr/docs/concepts/workloads/controllers/job/' target='_blank' aria-label='Job'>Job</a> crée un ou
plusieurs Pods, le contrôleur de Job applique des labels à ces pods et suit les modifications apportées à
tous les Pods du cluster ayant le même label.

Le contrôleur de Job ajoute également des *références de propriétaire* à ces Pods, pointant vers le
Job qui a créé les Pods. Si vous supprimez le Job pendant que ces Pods sont en cours d'exécution,
Kubernetes utilise les références de propriétaire (pas les labels) pour déterminer quels Pods dans le
cluster ont besoin d'un nettoyage.

Kubernetes traite également les finalisateurs lorsqu'il identifie des références de propriétaire sur une
ressource destinée à la suppression.

Dans certaines situations, les finalisateurs peuvent bloquer la suppression d'objets dépendants,
ce qui peut entraîner le maintien de l'objet propriétaire ciblé pendant
plus longtemps que prévu sans être entièrement supprimé. Dans ces situations, vous
devriez vérifier les finalisateurs et les références de propriétaire sur l'objet propriétaire cible et les objets dépendants
pour résoudre le problème.


<div class="alert alert-info" role="note"><h4 class="alert-heading">Note</h4>Dans les cas où les objets restent bloqués dans un état de suppression, évitez de supprimer manuellement
les finalisateurs pour permettre la poursuite de la suppression. Les finalisateurs sont généralement ajoutés
aux ressources pour une raison, donc les supprimer de force peut entraîner des problèmes dans
votre cluster. Cela ne doit être fait que lorsque le but du finaliseur est
compris et est accompli d'une autre manière (par exemple, nettoyage manuel
de certains objets dépendants).</div>


## A suivre

* Lisez [Utilisation des finalisateurs pour contrôler la suppression](/blog/2021/05/14/using-finalizers-to-control-deletion/)
  sur le blog Kubernetes.
