Kubernetes Job Cleanup

8

Von dem, was ich verstehe, soll das Job-Objekt nach einiger Zeit Pods ernten. Aber auf meinem GKE-Cluster (Kubernetes 1.1.8) scheint "kubectl get pods -a" Pods von Tagen auflisten zu können.

Alle wurden mit der Job-API erstellt.

Ich habe bemerkt, dass nach dem Löschen des Jobs mit     kubectl löscht Jobs Die Pods wurden ebenfalls gelöscht.

Meine Hauptsorge hier ist, dass ich Tausende und Zehntausende von Pods auf dem Cluster in Batch-Jobs ausführen werde und das interne Backlog-System nicht überlasten soll.

    
Lior Regev 03.04.2016, 11:32
quelle

4 Antworten

22

Es sieht so aus, als würden Sie mit Kubernetes 1.6 (und der v2alpha1 api-Version), wenn Sie Cronjobs zum Erstellen der Jobs verwenden (die wiederum Ihre Pods erstellen), limit wie viele alte Jobs behalten werden. Fügen Sie Ihrer Jobspezifikation Folgendes hinzu:

%Vor%

Wo X und Y die Grenzen der Anzahl der zuvor ausgeführten Jobs sind, die das System beibehalten sollte (es hält Jobs standardmäßig auf unbestimmte Zeit [mindestens ab Version 1.5.])

    
JJC 30.03.2017 10:52
quelle
1

In kubernetes v1.2 gibt es einen Garbage Collector zum Abrufen terminierter Pods mit einem globalen Schwellenwert --terminated-pod-gc-threshold=12500 (siehe die Flags in Controller-Manager Ich kenne keinen GC-Mechanismus für beendete Pods in Version 1.1.8 Vielleicht möchten Sie ein Skript / Pod ausführen, um es regelmäßig zu bereinigen Die Pods / Jobs verhindern, dass die Master-Komponenten überlastet werden. Übrigens gibt es ein offenes Problem, den GC-Schwellenwert automatisch anzupassen .

    
Yu-Ju Hong 03.04.2016 17:53
quelle
1

Dies ist das beabsichtigte Verhalten von Jobs selbst in Kubernetes 1.3. Der Job und seine Pods verbleiben im System, bis Sie sie manuell löschen. Auf diese Weise können Sie die Ergebnisse der Pods (z. B. durch Protokolle) anzeigen, die nicht bereits von einem bestimmten Mechanismus nach außen transportiert wurden, oder nach Fehlern, Warnungen oder anderen Diagnoseausgaben suchen.

Die empfohlene / offizielle Möglichkeit, die Pods loszuwerden, ist um den Job wie oben erwähnt zu löschen. Die Verwendung des Garbage Collector würde nur die Pods löschen, aber der Job selbst wäre immer noch im System.

Wenn Sie den Job nicht manuell löschen möchten, könnten Sie ein kleines Skript schreiben, das in Ihrem Cluster ausgeführt wird und nach abgeschlossenen Jobs sucht und diese löscht. Leider sind geplante Jobs nur in 1.4 verfügbar , aber Sie können das Skript stattdessen in einem normalen Pod ausführen.

>     
puja 25.07.2016 06:56
quelle
0

Ich habe vor kurzem einen Kubernetes-Operator gebaut, um diese Aufgabe zu erledigen.

Nach der Bereitstellung wird der ausgewählte Namespace überwacht und abgeschlossene Jobs / Pods gelöscht, wenn sie ohne Fehler / Neustarts abgeschlossen wurden.

Ссылка

    
lwolf 06.09.2017 10:59
quelle

Tags und Links