Kubernetes a une façon analogue d'exécuter une fois Emplois et des processus périodiques comme emplois cron.
Nous allons commencer par un exemple typique de ce que sont les emplois et démontrer un exemple standard des documents officiels. À partir de cet exemple, il sera facile de comprendre ce que cela signifie en exécutant un travail avec succès dans le contexte de Kubernetes.
Pour suivre, je vous recommande d'utiliser Kataconda Playground pour Kubernetes qui fournira un cluster Kubernetes hors de la boîte sans que vous ayez à configurer manuellement un ou à risquer un cluster de production pour des expériences.
Les travaux sont des abstractions de Kubernetes de niveau supérieur, similaires aux répliques et aux déploiements. Mais contrairement aux pods gérés par les déploiements et les répliques, les pods effectuant un travail terminent leur travail et sortent.
Lorsqu'un nombre spécifié de nappes atteignant une fin terminée, le travail aurait réussi à terminer. Quels sont les critères qui définissent une fin réussie d'un pod est quelque chose que nous définirons dans le fichier YAML du travail. Ensuite, le contrôleur d'emploi s'assurera qu'un certain nombre de pods se sont terminés avec succès et que le travail serait complet.
Créons un travail qui imprime les chiffres de Pi jusqu'à 2000 places dans ses journaux que nous examinerons. Créez un fichier et appelez-le mon boulot.yaml et enregistrer le contenu suivant dedans;
Apversion: Lot / V1
gentil: travail
métadonnées:
Nom: pi
SPEC:
modèle:
SPEC:
conteneurs:
- Nom: pi
Image: Perl
Commande: ["perl", "-mbignum = bpi", "-wle", "imprimer bpi (2000)"]
restartpolicy: jamais
Backofflimit: 4
Créez le travail, en utilisant ce fichier:
$ kubectl création -f ./emploi.yamlVous remarquerez que le travail avec prend quelques secondes à quelques minutes pour courir et une fois que c'est fait. Lorsque vous essayez de répertorier toutes les gousses en utilisant:
$ kubectl obtenir des pods
Nom Ready Status Restarts Age
PI-WG6ZP 0/1 terminé 0 50S
Vous verrez que le statut du pod lié à Pi est Complété ne pas courir ou terminer.Vous pouvez également copier le nom du pod afin que nous puissions vérifier que Pi a en effet été calculé à 2000 chiffres. Le nom spécifique du pod peut différer dans votre cas.
$ kubectl journaux pi-wg6zp
Chose intéressante, le pod n'a pas Terminé Il est toujours très actif, juste qu'il n'y a aucune application à l'intérieur. Similaire à allumer votre ordinateur et à ne pas l'utiliser. Si le pod était terminé, nous n'aurions pas pu en tirer les journaux, en premier lieu.
Pour nettoyer le travail et toutes les gousses créées, exécutez la commande:
$ kubectl delete -f my-jobs.yamlVous pouvez en savoir plus sur les spécifications du travail et comment rédiger vos spécifications dans la documentation officielle.
Emplois cron
Les travaux Cron sont similaires à l'utilitaire Cron à Unix qui fonctionne périodiquement selon un calendrier que nous désirons. Ce n'est pas une chose superstable à Kubernetes, au moment de la rédaction de cet article, donc vous voudrez peut-être faire attention à utiliser. Pour citer les documents officiels:
«Un travail cron crée un objet de travail à propos Une fois par durée d'exécution de son horaire. Nous disons «à propos» parce qu'il y a certaines circonstances où deux emplois pourraient être créés, ou aucun emploi ne peut être créé. Nous essayons de rendre ces rares, mais ne les empêchez pas complètement. Par conséquent, les emplois devraient être idempotent"
Le terme idempotent signifie que le travail cron qu'ils soient effectués une ou deux fois ou un certain nombre de temps auraient le même effet sur le système. Vérification des mises à jour, la surveillance de ce type d'opérations peut être considérée. Mais la modification des données ou l'écriture dans une base de données ne sont pas parmi ces.
Écrivons un travail cron qui écrivait un «bonjour, monde!»Message dans ses journaux avec un horodatage de lorsque ce message a été écrit. Créer un fichier appelé my-crronjob.yaml et pour lui écrire le contenu suivant:
Apversion: Lot / V1Beta1La partie du calendrier du travail est la plus cruciale. Il suit la convention CRON standard, il y a une liste de nombres séparés par des espaces. Les cinq nombres représentent,
En utilisant l'astérisque (*) Pour un champ signifie toute valeur disponible de ce champ (comme un joker) et la première entrée de notre horaire «* / 1 * * * *» a indiqué que le travail doit être exécuté chaque minute quelle que soit l'heure, le jour ou le mois de l'année. L'utilisation * / 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 gousses en cours d'exécution pour le travail, que nous avons nommé My-Cronjob.
$ kubectl obtenir des pods
Nom Ready Status Restarts Age
my-crronjob-1534457100-hfhzf 0/1 terminé 0 2M
my-crronjob-1534457160-gk85l 0/1 terminé 0 1m
my-crronjob-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 journal my-crronjob-1534457100-hfhzf
Pour supprimer le cronjob, il est simplement exécuté:
$ kubectl delete -f my-crronjob.yaml
Cela supprimera également toutes les gousses créées dans la procédure régulière.
Les références
Vous pouvez en savoir plus sur les emplois de Kubernetes ici et pour les emplois Cron, vous pouvez visiter cette section de leur documentation bien structurée.