Kubernetes

Tâches Kubernetes et Cron

Tâches Kubernetes et Cron
La plupart des applications qui s'exécutent sur un système distribué comme Kubernetes sont toujours en direct comme des serveurs Web ou des bases de données ou des serveurs d'API. Mais il existe une classe distincte d'objets qui sont censés fonctionner une fois ou ne se réveiller que de temps en temps et suivre leur cours. Les tâches périodiques telles que les renouvellements de certificats TLS avec des agents tels que Certbot sont des exemples classiques de telles tâches exécutées sur des serveurs traditionnels. Ceux-ci sont effectués à l'aide de l'utilitaire Cron dans les systèmes Unix.

Kubernetes a une manière analogue d'exécuter des processus ponctuels Emplois et des processus périodiques comme emplois cron.

Nous allons commencer par un exemple typique de ce que sont les Jobs et démontrer un exemple standard des Docs officiels. À partir de cet exemple, il sera facile de comprendre ce que cela signifie en exécutant un Job avec succès dans le contexte de Kubernetes.

Pour suivre, je vous recommanderais d'utiliser Kataconda Playground pour Kubernetes qui fournira un cluster Kubernetes prêt à l'emploi sans que vous ayez à en configurer un manuellement ou à risquer un cluster de production pour les expériences.

Emplois Kubernetes

Les tâches sont des abstractions Kubernetes de niveau supérieur, similaires aux ReplicaSets et aux Deployments. Mais contrairement aux pods gérés par les déploiements et les ReplicaSets, les pods effectuant un Job terminent leur travail et quittent.

Lorsqu'un nombre spécifié de pods est terminé, le Job est dit s'être terminé avec succès. Quels sont les critères qui définissent une terminaison réussie d'un pod est quelque chose que nous allons définir dans le fichier YAML du Job. Ensuite, le contrôleur de Job s'assurera qu'un certain nombre de pods se sont terminés avec succès et que le Job est dit terminé.

Créons un travail qui imprime des chiffres de pi jusqu'à 2000 places dans ses journaux que nous examinerons. Créer un fichier et l'appeler mon boulot.yaml et enregistrez-y le contenu suivant ;

apiVersion : batch/v1
genre : Travail
métadonnées :
nom : pi
spécification :
modèle:
spécification :
conteneurs :
- nom : pi
image : perl
commande : ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
restartPolicy : Jamais
backoffLimit: 4

Créez la tâche à l'aide de ce fichier :

$ kubectl créer -f ./travail.yaml

Vous remarquerez que le travail prend de quelques secondes à quelques minutes à s'exécuter et une fois terminé. Lorsque vous essayez de répertorier tous les pods en utilisant :

$ kubectl obtenir des pods
NOM       PRÊT     STATUT      REDÉMARRE   ÂGE
pi-wg6zp   0/1       Terminé   0          50 s

Vous verrez que le statut du pod associé à pi est Complété pas en cours d'exécution ou terminé.Vous pouvez également copier le nom du pod afin que nous puissions vérifier que pi a bien été calculé à 2000 chiffres. Le nom spécifique du pod peut différer dans votre cas.

$ kubectl enregistre pi-wg6zp

Chose intéressante, la nacelle n'a pas Terminé il est toujours très actif, juste qu'il n'y a pas d'applications en cours d'exécution à l'intérieur. Similaire à simplement allumer votre ordinateur et ne pas l'utiliser. Si le pod avait été résilié, nous n'aurions pas été en mesure d'en extraire les bûches, en premier lieu.

Pour nettoyer la tâche et tous les pods créés, exécutez la commande :

$ kubectl delete -f mes-jobs.yaml

Vous pouvez en savoir plus sur les spécifications du Job et comment rédiger votre spécification dans la documentation officielle.

Emplois Cron

Les tâches Cron sont similaires à l'utilitaire Cron sous Unix qui s'exécute périodiquement selon un calendrier que nous souhaitons. Ce n'est pas une chose superstable dans Kubernetes, au moment d'écrire ces lignes, vous voudrez peut-être faire attention en utilisant. Pour citer les documents officiels :

« Une tâche cron crée un objet de tâche à propos de une fois par temps d'exécution de son planning. Nous disons « environ » parce qu'il y a certaines circonstances où deux emplois peuvent être créés, ou aucun emploi ne peut être créé. Nous essayons de les rendre rares, mais ne les empêchons pas complètement. Par conséquent, les emplois devraient être idempotent"

Le terme idempotent signifie que la tâche Cron, qu'elle soit exécutée une ou deux fois ou un certain nombre de fois, aurait le même effet sur le système. La vérification des mises à jour, la surveillance de ce type d'opérations peuvent être considérées comme idempotentes. Mais modifier des données ou écrire dans une base de données ne font pas partie de ces.

Écrivons une tâche cron qui écrirait un "Hello, World!” dans ses journaux avec un horodatage indiquant quand ce message a été écrit. Créer un fichier appelé my-cronjob.yaml et écrivez-y le contenu suivant :

apiVersion : batch/v1beta1
genre : CronJob
métadonnées :
nom : mon-cronjob
spécification :
horaire : "*/1 * * * *"
modèle d'emploi :
spécification :
modèle:
spécification :
conteneurs :
- nom : bonjour
image : boîte occupée
arguments :
- /bin/sh
- -c
- Date; echo Hello du cluster Kubernetes
restartPolicy : OnFailure

La partie horaire du travail est la plus cruciale. Il suit la convention standard de Cron, il y a une liste de nombres séparés par des espaces. Les cinq chiffres représentent,

  1. Minutes (0-59)
  2. Heure (0-23)
  3. Jour du mois (1-31)
  4. Mois (1-12)
  5. Jour de la semaine (0-6) à partir du dimanche

Utiliser l'astérisque (*) pour un champ signifie toute valeur disponible de ce champ (comme un caractère générique) et la première entrée de notre planning "*/1 * * * *" indiquait que le travail doit être exécuté toutes les minutes quel que soit l'heure, le jour ou le mois de l'année. Utiliser */5 imprimera le message toutes les 5 minutes.

Vous pouvez en savoir plus sur la spécification cronjob yaml dans les documents officiels. Voyons tous les pods en cours d'exécution pour le travail, que nous avons nommé my-cronjob.

$ kubectl obtenir des pods
NOM                     PRÊT     STATUT      REDÉMARRE   ÂGE
my-cronjob-1534457100-hfhzf   0/1       Terminé   0          2 min
my-cronjob-1534457160-gk85l   0/1       Terminé   0          1 min
my-cronjob-1534457220-bj22x   0/1       Terminé   0          57s

Creuser dans les journaux de chacun des pods révélerait un seul message avec un horodatage, car ils ont tous été créés à des moments différents, ils auront tous des horodatages différents.

$ kubectl log my-cronjob-1534457100-hfhzf

Pour supprimer la tâche cron, exécutez simplement :

$ kubectl delete -f mon-cronjob.yaml

Cela supprimera également tous les pods créés dans le cadre de la procédure régulière.

Les références

Vous pouvez en savoir plus sur les tâches Kubernetes ici et pour les tâches Cron, vous pouvez visiter cette section de leur documentation bien structurée.

Top 10 des jeux à jouer sur Ubuntu
La plate-forme Windows a été l'une des plates-formes dominantes pour les jeux en raison du pourcentage énorme de jeux qui se développent aujourd'hui p...
5 meilleurs jeux d'arcade pour Linux
De nos jours, les ordinateurs sont des machines sérieuses utilisées pour les jeux. Si vous ne pouvez pas obtenir le nouveau score élevé, vous saurez c...
Bataille pour Wesnoth 1.13.6 Développement publié
Bataille pour Wesnoth 1.13.6 publiée le mois dernier, est la sixième version de développement de la 1.13.x series et il apporte un certain nombre d'am...