Wat is de juiste manier om middelen vrij te maken kubernetes voor een kubernetes baan die de afbeelding niet te trekken?

stemmen
0

Context

We hebben langlopende kubernetes banen op basis van havenarbeider containers. De containers moet bronnen (bijvoorbeeld 15 GB geheugen, 2 cpu) en we gebruiken autoscaler opschalen nieuwe werknemer nodes op verzoek.

Scenario

Gebruikers kunnen kiezen welke versie imago van de havenarbeider van te worden gebruikt voor een baan, bijvoorbeeld 1.0.0, 1.1.0, of zelfs een commit hash van de code was het beeld op te bouwen van in testomgeving.

Als we de havenarbeider tag te freetext, kan de gebruiker een niet-bestaand havenarbeider tag typen. Hierdoor is de job pod komt in ImagePullBackOff staat. De pod blijft in deze toestand en houdt de middelen vergrendeld, zodat ze niet kunnen worden hergebruikt door een andere baan.

Vraag

Wat is de juiste oplossing, die in kubernetes zelf kan worden toegepast, voor het niet de pod onmiddellijk of uiterlijk snel als een pull er niet in slaagt een beeld dat geen bestaand havenarbeider te wijten aan: tag?

mogelijkheden

Ik keek in backofflimit. Ik heb het ingesteld op 0, maar dit betekent niet nalaten of verwijderen van de baan. De middelen worden uiteraard zo goed onderhouden.

Misschien kunnen ze worden gedood door een cron job. Ik weet niet zeker hoe dit te doen.

Idealiter middelen moeten ook niet worden toegewezen voor een baan beeld een unexisting havenarbeider met. Maar ik ben niet zeker of er een mogelijkheid om dit gemakkelijk te bereiken.

Eventuele andere?

De vraag is gesteld op 24/10/2019 om 11:53
bron van user
In andere talen...                            


3 antwoorden

stemmen
0

U kunt gebruik maken failedJobsHistoryLimitvoor mislukte banen en successfulJobsHistoryLimitvoor succes banen

Met deze twee parameters, kunt u uw baan geschiedenis schoon te houden

.spec.backoffLimit om het aantal pogingen te geven alvorens te overwegen een baan als mislukt.

antwoordde op 24/10/2019 om 12:16
bron van user

stemmen
0

Wanneer een taak is voltooid, worden er geen Pods meer gemaakt, maar de Pods worden ook niet verwijderd.

Standaard wordt een ononderbroken baan worden uitgevoerd als een pod faalt (restartPolicy = nooit) of container exits abusievelijk (restartPolicy = OnFailure), waarna de baan uitstelt de .spec.backoffLimit bovenbeschreven. Zodra .spec.backoffLimit is bereikt de Job als mislukt en alle actieve Pods wordt beëindigd zal worden gemarkeerd.

Een andere manier om een baan te beëindigen is door het instellen van een actieve deadline. Doe dit door het instellen van de .spec.activeDeadlineSeconds gebied van de Job naar een aantal seconden. De activeDeadlineSeconds geldt voor de duur van de werkzaamheden, ongeacht hoeveel Pods worden gemaakt. Zodra een Job activeDeadlineSeconds bereikt, al zijn running Pods worden beëindigd en de status Job soort geworden: Mislukt met reden: DeadlineExceeded.

Merk op dat een taak .spec.activeDeadlineSeconds heeft voorrang boven haar .spec.backoffLimit . Daarom is een baan die het opnieuw proberen van één of meer mislukte Pods zal geen extra Pods in te zetten zodra het de termijn die bereikt activeDeadlineSeconds , zelfs als de backoffLimit nog niet is bereikt.

Hier is meer informatie: banen .

U kunt ook de set-up concurrencyPolicy van cronjob te vervangen en vervang de momenteel lopende baan met een nieuwe baan.

Hier is een voorbeeld:

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

Instellen Vervang value for concurrencyPolicy vlag middel als het tijd is voor een nieuwe baan run en de vorige opdracht run is nog niet klaar, de cronbaan vervangt de momenteel lopende taak run met een nieuwe baan run.

Ongeacht deze oplossingen uw probleem ligt in de verkeerde beelden, zodat geautomatiseerde verwijderen van pods of banen heeft probleem niet op. Want als je niets in de betekenis van de werkgelegenheid en afbeeldingen van uw pods alsnog uit na banenscheppende weer wijzigt.

Hier is een voorbeeld van het oplossen van problemen Fout: ImagePullBackOff Normaal Backoff: ImagePullBackOff .

antwoordde op 25/10/2019 om 10:27
bron van user

stemmen
0

Na het bekijken van uw ontwerp, zou ik adviseren om toe te voegen InitContainer Job specificatie bestaan controleren van havenarbeider beelden met de gegeven tag.

Als het beeld met de tag niet bestaat in het register, kan InitContainer een fout te melden en falen van de Job's Pod zal bij het verlaten met niet-nul exit code.

Na dat Job Pod zal worden hernieuwd . Na een bepaalde hoeveelheid pogingen Job krijgt Failedstaat. Door het configureren van .spec.ttlSecondsAfterFinished optie kunt mislukte taken worden weggevaagd.

Als init container een Peul faalt, Kubernetes start herhaaldelijk opnieuw op de Pod, totdat de init container slaagt. Echter, als de Pod heeft een restartPolicy van Never, Kubernetes niet de Pod herstarten.

Als het beeld bestaat, wordt InitContainer script uitgangen met nul imago van de belangrijkste Job container exit code en zal worden getrokken en container begint.

antwoordde op 01/11/2019 om 20:55
bron van user

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