Comment nettoyer les anciennes tâches Kubernetes

0
150

Les tâches Kubernetes créent des pods à plusieurs reprises jusqu'à ce qu'un nombre spécifié de conteneurs se terminent avec succès. Les travaux sont souvent utilisés avec le mécanisme CronJob de niveau supérieur qui démarre automatiquement de nouveaux travaux selon un calendrier récurrent.

L'utilisation régulière de Jobs et de CronJobs entraîne généralement la présence d'un grand nombre d'objets dans votre cluster. Les tâches et leurs pods sont intentionnellement conservés indéfiniment après leur achèvement. Cela vous permet d'inspecter l'état de la tâche et de récupérer ses journaux à l'avenir. Cependant, trop de tâches terminées polluent la sortie de Kubectl lorsque vous exécutez des commandes telles que kubectl get pods ou kubectl get jobs. Cela peut rendre plus difficile la concentration sur une activité pertinente.

Dans cet article, nous partagerons quelques méthodes pour nettoyer les anciennes tâches. Vous pourrez supprimer les objets redondants de votre cluster, automatiquement ou à la demande.

CronJob History Retention Limits

Le nettoyage automatique est pris en charge pour les Jobs créés par un CronJob depuis Kubernetes v1.6. Cette méthode vous permet de configurer des seuils de suppression distincts pour les tâches terminées et celles qui ont échoué.

Activez la stratégie de nettoyage en définissant les champs spec.successfulJobsHistoryLimit et spec.failedJobsHistoryLimit sur votre objet CronJob :

apiVersion : type batch/v1 : métadonnées CronJob : nom : spécification demo-cron : planification : "* * * * *" successJobsHistoryLimit : 5 failedJobsHistoryLimit : 10 terminé !”

Le CronJob illustré ci-dessus conservera les objets Job de ses 10 dernières exécutions ayant échoué, ainsi que les cinq dernières réussies.

Vous disposerez à tout moment d'un maximum de 15 anciennes tâches dans votre cluster. Ces 15 seront conservés indéfiniment. Ils ne seront supprimés que lorsqu'ils seront remplacés par un travail plus récent qui se termine avec le même statut.

Les limites d'historique de CronJob par défaut sont appliquées lorsque vous omettez des valeurs personnalisées dans votre manifeste. Kubernetes conserve généralement trois tâches réussies et une qui a échoué. La valeur 0 est prise en charge pour supprimer les tâches immédiatement après leur fin, sans en conserver aucune.

TTL des tâches terminées

Les tâches TTL sont un ajout récent à Kubernetes qui est devenu stable dans la v1.23. Les durées de vie sont définies directement sur vos objets Job, vous n'avez donc pas besoin d'utiliser CronJobs. La durée de vie ordonne à Kubernetes de supprimer la tâche et ses pods après un certain temps, quel que soit l'état d'achèvement de la tâche.

Vous pouvez activer ce mécanisme en définissant le champ spec.ttlSecondsAfterFinished sur votre Objets de la tâche :

apiVersion : type batch/v1 : métadonnées de la tâche : nom : spécification du travail de démonstration : ttlSecondsAfterFinished : modèle 300 : spécification : conteneurs : – nom : image demo-cron : busybox:commande la plus récente : [ "/bin/sh", "-c", "Tâche terminée!"]

Si votre Job est défini dans le cadre d'un CronJob, assurez-vous d'imbriquer le champ dans le jobTemplate :

apiVersion : batch/v1 kind : CronJob metadata : name : demo-cron spec : schedule : "* * * * *” jobTemplate : spec : ttlSecondsAfterFinished : 300 modèle : spec : conteneurs : – nom : demo-cron image : busybox:latest command : ""/bin/sh", "-c", "Tâche terminée !&quot ;]

Les exemples ci-dessus marqueront les travaux comme éligibles à la suppression cinq minutes (300 secondes) après leur fin. Cela se produit indépendamment du fait que le Job se retrouve dans l'état Complete ou Failed.

Les suppressions basées sur ce mécanisme sont gérées par un contrôleur dédié au sein de votre cluster. Le contrôleur surveille les objets Job, détecte l'expiration d'un TTL, puis prend des mesures pour nettoyer le Job affecté et ses ressources dépendantes. Il peut y avoir un court délai entre l'expiration du TTL et l'intervention du contrôleur pour activer la suppression.

La définition de la durée de vie d'une tâche sur 0 la rendra éligible à la suppression dès qu'elle sera terminée. Vous devez vous demander si cela convient à chacune de vos tâches. Ne pas conserver d'historique peut compliquer le débogage des problèmes, car vous ne pourrez pas récupérer les journaux du conteneur.

Le champ ttlSecondsAfterFinished est modifiable. Vous pouvez le modifier à tout moment sur les Jobs existants. Cependant, il n'est pas garanti que les modifications affectent les exécutions déjà créées. L'extension de la durée de vie d'une tâche peut toujours supprimer des exécutions planifiées alors que la valeur précédente s'appliquait.

Suppression manuelle de tâches

Vous pouvez toujours supprimer manuellement un Job à l'aide de Kubectl. Récupérez d'abord votre liste de tâches :

$ kubectl get jobs NAME COMPLETIONS DURATION AGE demo-cron-27549499 1/1 2s 36s

Émettez ensuite la commande delete job avec le nom de votre tâche sélectionnée :

$ kubectl delete job demo-cron-27549499 job.batch “demo-cron-27549499” supprimé

Cela supprimera la tâche et nettoiera les pods et autres objets qui lui sont associés.

Suppressions par lots à la demande

Vous pouvez rapidement nettoyez plusieurs Jobs en filtrant avec des sélecteurs de champs. Voici un exemple qui supprimera toutes les tâches réussies dans votre espace de noms actif :

$ kubectl delete jobs –field-selector status.successful=1 job.batch “demo-cron-27549501” delete job.batch “demo-cron-27549502” a supprimé job.batch “demo-cron-27549503” a supprimé

C'est beaucoup moins laborieux que de supprimer des Jobs individuels en séquence.

Pour supprimer tous les Jobs associés à un CronJob spécifique, il est préférable de définir une étiquette sur ces Jobs qui identifie le CronJob parent. Définissez le libellé à l'aide du champ spec.jobTemplate.metadata.labels de votre CronJob :

apiVersion : type batch/v1 : métadonnées CronJob : nom : spécification demo-cron : planification : "* * * * *" jobTemplate: metadata: labels: cron-job: demo-cron spec: template: spec: containers: – name: demo-cron image: busybox:latest command: ["/bin/sh", "-c&quot ;, "Travail terminé!"]

Vous pouvez supprimer les Jobs créés par cette version du demo-cron CronJob à l'aide de la commande suivante :

$ kubectl delete jobs -l cron-job=demo-cron job.batch “demo-cron-27549501” delete job.batch “demo-cron-27549502” supprimé job.batch “demo-cron-27549503” supprimé

Combiner cet exemple avec un sélecteur de champ vous permet de supprimer les exécutions demo-cron qui sont dans un état particulier :

$ kubectl delete jobs -l cron-job=demo-cron –field-selector status.successful=0 job.batch “demo-cron-27549501” a supprimé job.batch “demo-cron-27549502” a supprimé job.batch “demo -cron-27549503” supprimé

Cette commande supprime les tâches ayant échoué qui ont été planifiées par la démo-cron CronJob.

Résumé

Les tâches Kubernetes restent généralement dans votre cluster une fois terminé. Ce comportement vous permet de récupérer leurs journaux à des moments futurs arbitraires, mais conduit rapidement à une accumulation excessive d'objets.

Les CronJobs sont livrés avec des limites de rétention qui sont activées par défaut et prennent en charge une configuration distincte pour les exécutions réussies et échouées. Cela devrait être votre mécanisme préféré pour gérer les Jobs planifiés. D'autres types de tâches sont mieux configurés avec une durée de vie qui nettoiera automatiquement les ressources après une période de temps fixe.

Bien que Kubernetes ait historiquement conservé indéfiniment les anciennes tâches, il est désormais recommandé d'utiliser la durée de vie. mécanisme dans la mesure du possible. Avoir trop d'anciennes tâches dans votre cluster peut entraîner une dégradation des performances car le plan de contrôle doit surveiller les objets et les pods qu'ils ont créés.

LIRE LA SUITE

  • › 10 fonctionnalités YouTube que vous devriez utiliser
  • &rsaquo ; Premier PC de Radio Shack : 45 ans de TRS-80
  • &rsaquo ; Devriez-vous augmenter la puissance de transmission de votre routeur Wi-Fi ?
  • › Test de l'Edifier Neobuds S : le bon, le mauvais et le buggy
  • › N'achetez pas de répéteur Wi-Fi : achetez plutôt celui-ci
  • › Quels accessoires pour smartphone valent la peine d'être achetés ?