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?
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
À 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
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