2016-10-06 37 views
8

Mam definicję pracy opartą na przykładzie ze strony internetowej kubernetes.Kubernetes - jak uruchomić zadanie tylko raz

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 

Chciałbym uruchomić tę pracę raz i nie uruchomi się ponownie, jeśli się nie powiedzie. Przy wyjściu komand 1 kelernetes próbuje uruchomić nowy moduł, aby uzyskać kod wyjścia 0, aż osiągnie limit czasu activeDeadlineSeconds. Jak można tego uniknąć? Chciałbym uruchomić polecenia budowania w kernernetes, aby sprawdzić kompilację, a jeśli kompilacja się nie powiedzie, otrzymam kod zakończenia inny niż 0. Nie chcę ponownie uruchamiać kompilacji.

Czy to możliwe? W jaki sposób?

Odpowiedz

10

Jeśli chcesz uruchomić komendę "one-try command", prawdopodobnie powinieneś stworzyć gołą kapsułę, ponieważ zadanie będzie próbowało wykonać polecenie, dopóki nie zakończy się pomyślnie lub zostanie dotrzymany aktywny termin.

Wystarczy stworzyć kapsułę z szablonu:

apiVersion: v1 
kind: Pod 
metadata: 
    name: pi 
spec: 
    containers: 
    - name: pi 
    image: perl 
    command: ["exit", "1"] 
    restartPolicy: Never 
+0

Ale jak zatrzymać/zabić kapsułę po zakończeniu polecenia? W przypadku zadań działająca blokada zatrzymuje się. –

+1

@ rishabh.bhardwaj jeśli ustawisz 'restartPolicy' na' Nigdy ', tak jak w mojej odpowiedzi, po skończeniu strąki się zatrzymają. – Nebril

+1

Problem z używaniem kapsuły zamiast zadania polega na tym, że moduł również nie powiedzie się z powodu fałszywych przyczyn, takich jak zabicie węzła lub inne problemy, na które użytkownik nie ma wpływu. – ithkuil