Care este modul corect de a elibera resurse kubernetes pentru un loc de muncă kubernetes care eșuează trăgând imaginea?

voturi
0

Context

Am locuri de muncă de lungă durată kubernetes bazate pe containere Docker. Containerele are nevoie de resurse (de exemplu, memorie 15GB, 2 cpu) și vom folosi autoscaler la scară noi noduri lucrător la cerere.

Scenariu

Utilizatorii pot selecta versiunea imaginii docher pentru a folosi un loc de muncă, de exemplu, 1.0.0, 1.1.0, sau chiar o comite hash a codului imaginii a fost construit de în mediul de testare.

Pe măsură ce lăsați tag-ul docher care urmează să fie freetext, utilizatorul poate introduce o etichetă docher non-existente. Din acest motiv pod de locuri de muncă vine în stare ImagePullBackOff. Capsula rămâne în această stare și păstrează resursele blocate, astfel încât acestea nu pot fi reutilizate de către orice alt loc de muncă.

Întrebare

Care este soluția corectă, care poate fi aplicată în kubernetes în sine, pentru faptul că nu păstaie imediat sau cel puțin rapid în cazul în care o trage eșuează din cauza unei imagini docher non existente: tag-ul?

posibilităţi

M-am uitat în backofflimit. Eu l-am setat la 0, dar acest lucru nu cedează sau elimina lucrarea. Resursele sunt, desigur, păstrate la fel de bine.

Poate că pot fi ucis de un loc de muncă cron. Nu sunt sigur cum să facă acest lucru.

În mod ideal, resursele nu ar trebui măcar să fie alocate pentru un loc de muncă cu o imagine unexisting docher. Dar eu nu sunt sigur dacă există posibilitatea de a realiza acest lucru cu ușurință.

Oricare altul?

Întrebat 24/10/2019 la 11:53
sursa de către utilizator
În alte limbi...                            


3 răspunsuri

voturi
0

Puteți utiliza failedJobsHistoryLimitpentru locuri de muncă nu a reușit și successfulJobsHistoryLimitde locuri de muncă de succes

Cu acești doi parametri, aveți posibilitatea să păstrați istoricul de locuri de muncă curat

.spec.backoffLimit pentru a specifica numărul de încercări înainte de a considera un loc de muncă ca nu a reușit.

Publicat 24/10/2019 la 12:16
sursa de către utilizator

voturi
0

Când un finalizeaza de locuri de muncă, nu au fost create mai multe Pods, dar păstăile nu sunt șterse, fie.

În mod implicit, un loc de muncă se va desfășura neîntrerupt , cu excepția cazului unui pod eșuează (restartPolicy = Niciodată) sau un container ieșiri din greșeală (restartPolicy = OnFailure), moment în care amână lucrarea către .spec.backoffLimit descrisă mai sus. Odată ce .spec.backoffLimit a fost atins lucrarea va fi marcat ca fiind eșuat și orice Pastaile de funcționare va fi încheiată.

Un alt mod de a termina un loc de muncă este prin stabilirea unui termen limită activ. Face acest lucru prin setarea .spec.activeDeadlineSeconds domeniul lucrării la un număr de secunde. Cele activeDeadlineSeconds se aplică la durata operației, indiferent de modul în care sunt create mai multe Pods. Odată ce ajunge la un loc de muncă activeDeadlineSeconds, toate Pods sale de funcționare sunt terminate și statutul postului va deveni de tip: a eșuat cu un motiv: DeadlineExceeded.

Rețineți că un loc de muncă a lui .spec.activeDeadlineSeconds are prioritate față de .spec.backoffLimit . Prin urmare, un loc de muncă , care este de a reîncerca una sau mai multe Pods eșuate nu va implementa Pods suplimentare odată ce ajunge în termenul specificat de activeDeadlineSeconds , chiar dacă backoffLimit nu este încă atins.

Iată mai multe informații: locuri de muncă .

De asemenea , puteți seta-up concurrencyPolicy de cronÎnlocuiți și să înlocuiască lucrarea care rulează în prezent cu un nou loc de muncă.

Iată un exemplu:

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: hello
spec:
  schedule: "*/2 * * * *"
  concurrencyPolicy: Replace
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox
            args:
            - /bin/sh
            - -c
            - date; echo Hello from the Kubernetes cluster && sleep 420
          restartPolicy: Never

Setarea Înlocuiți valoarea pentru concurrencyPolicy mijloace de pavilion , dacă este timpul pentru un nou loc de muncă și a alerga termen de locuri de muncă anterioare nu a terminat încă, lucrarea cron înlocuiește care rulează în prezent pe termen de locuri de muncă , cu un nou ciclu de locuri de muncă.

Indiferent de aceste soluții minciuni problemă în imagini greșite, astfel ștergerea automată a pastai sau locuri de muncă nu rezolvă problema. Pentru că, dacă nu se schimbă nimic în definiția locurilor de muncă și a imaginilor păstăi nu va reuși în continuare după crearea de locuri de muncă din nou.

Iată exemplu de depanare pentru eroare: ImagePullBackOff Normal backoff: ImagePullBackOff .

Publicat 25/10/2019 la 10:27
sursa de către utilizator

voturi
0

După Privind la design - ul, aș recomanda să adăugați InitContainer să caietului de sarcini pentru a verifica existența imaginilor Docker cu tag - ul dat.

În cazul în care imaginea cu tag-ul nu există în registru, InitContainer poate raporta o eroare și nu Pod Job prin ieșirea cu codul de ieșire nenulă.

După ce Pod Iov va fi repornit . După anumită cantitate de încercări de locuri de muncă vor primi de Failedstat. Prin configurarea .spec.ttlSecondsAfterFinished opțiune, locuri de muncă eșuate poate fi sters.

În cazul în care containerul de inițializare unui Pod eșuează, Kubernetes reporneste în mod repetat Pod până când containerul de inițializare reușește. Cu toate acestea, în cazul în care Pod are un restartPolicy de Niciodată, Kubernetes nu reporniți Pod.

Dacă există imaginea, InitContainer script iese cu cod zero, de ieșire și principal imaginea containerului de locuri de muncă va fi tras și începe container.

Publicat 01/11/2019 la 20:55
sursa de către utilizator

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more