Ich habe eine Jobdefinition basierend auf einem Beispiel von der kubernetes-Website.
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
Ich möchte diesen Job einmal ausführen und nicht neu starten, wenn er fehlschlägt. Mit comand exit 1 versuchen kubernetes, einen neuen Pod auszuführen, um Exit-0-Code zu erhalten, bis das Zeitlimit für activeDeadlineSeconds erreicht wird. Wie kann man das vermeiden? Ich möchte Build-Befehle in kubernetes ausführen, um die Kompilierung zu überprüfen, und wenn die Kompilierung fehlschlägt, erhalte ich einen anderen Exit-Code als 0. Ich möchte keine erneute Kompilierung.
Ist es möglich? Wie?
Wenn Sie einen One-Try-Befehl ausführen möchten, sollten Sie wahrscheinlich einen Bare-Pod erstellen, da der Job versucht, den Befehl auszuführen, bis der Befehl erfolgreich ausgeführt wird oder der aktive Termin eingehalten wird.
Erstellen Sie einfach den Pod aus Ihrer Vorlage:
apiVersion: v1
kind: Pod
metadata:
name: pi
spec:
containers:
- name: pi
image: Perl
command: ["exit", "1"]
restartPolicy: Never
Dies ist jetzt möglich, indem Sie backoffLimit: 0
einstellen, wodurch der Controller aufgefordert wird, 0 Wiederholungen durchzuführen. Die Standardeinstellung ist 6
Leider gibt es derzeit keine Möglichkeit, den Job-Controller daran zu hindern, nur neue Pods erneut zu veröffentlichen, wenn sie versagen. Die kubernetes-Community arbeitet jedoch an einer Lösung, siehe:
"Backoff-Richtlinie und gescheitertes Pod-Limit" https://github.com/kubernetes/community/pull/583