web-dev-qa-db-fra.com

Kubernetes - comment exécuter le travail une seule fois

J'ai une définition d'emploi basée sur l'exemple du site Web de Kubernetes.

apiVersion: batch/v1
kind: Job
metadata:
  name: pi-with-timeout-6
spec:
  activeDeadlineSeconds: 30
  completions: 1
  paralleism: 1
  template:
    metadata:
      name: pi
    spec:
      containers:
      - name: pi
        image: Perl
        command: ["exit", "1"]
      restartPolicy: Never

Je voudrais exécuter ce travail une fois et ne pas redémarrer si échoue. Avec comand exit 1, kubernetes essaie d’exécuter un nouveau pod pour obtenir le code de sortie 0 jusqu’à atteindre le délai imparti pour activeDeadlineSeconds. Comment peut éviter cela? Je voudrais exécuter des commandes de construction dans kubernetes pour vérifier la compilation et si la compilation échoue, j'obtiendrai un code de sortie différent de 0. Je ne veux plus exécuter la compilation.

C'est possible? Comment?

13
esio

Si vous voulez un programme d'exécution à une tentative, vous devriez probablement créer un module à nu, car le travail essaiera d'exécuter la commande jusqu'à ce que l'opération aboutisse ou que l'échéance active soit respectée.

Créez simplement le pod à partir de votre modèle:

apiVersion: v1
kind: Pod
metadata:
  name: pi
spec:
  containers:
  - name: pi
    image: Perl
    command: ["exit", "1"]
  restartPolicy: Never
13
Nebril

À présent, cela est possible en définissant backoffLimit: 0 qui indique au contrôleur d'effectuer 0 nouvelle tentative. la valeur par défaut est 6

6
pHiL

Malheureusement, il n’existe actuellement aucun moyen d’empêcher le contrôleur de tâches de simplement réapparaître de nouveaux modules en cas d’échec, mais la communauté kubernetes travaille sur une solution. 

"Politique de blocage et nombre limite de pods ayant échoué" https://github.com/kubernetes/community/pull/583

1
ithkuil