2016-04-03 71 views
8

Da quello che ho capito, l'oggetto Job dovrebbe raccogliere i pod dopo un certo periodo di tempo. Ma sul mio cluster GKE (Kubernetes 1.1.8) sembra che "kubectl get pods -a" possa elencare i pod da giorni fa.Kubernetes Job Cleanup

Tutti sono stati creati utilizzando l'API Jobs.

Ho notato che dopo aver eliminato il lavoro con kubectl eliminare i lavori Anche i pod sono stati eliminati.

La mia preoccupazione principale è che eseguirò migliaia e decine di migliaia di pod sul cluster in processi batch e non voglio sovraccaricare il sistema di backlog interno.

risposta

1

In kubernetes v1.2, c'è un garbage collector per poter raccogliere i baccelli concludersi con una soglia globale --terminated-pod-gc-threshold=12500 (vedi le bandiere in controller manager. Non sono a conoscenza di alcun meccanismo di GC per cialde terminati a v1.1.8. Si consiglia per eseguire uno script/pod per pulire periodicamente i pod/processi per evitare che i componenti master vengano sopraffatti.A proposito, c'è un problema aperto a automatically adjust the GC threshold.

1

Questo è il comportamento previsto di Jobs anche in Kubernetes 1.3 Sia il lavoro che i relativi pod rimangono nel sistema fino a quando non vengono eliminati manualmente, in modo da fornire un modo per vedere i risultati dei pod (ad esempio attraverso i registri) che non sono stati trasportati all'esterno da alcuni meccanismi o controllati per errori, avvertimenti, o altra uscita diagnostica.

Il modo consigliato/official per eliminare i pod è eliminare il lavoro come indicato sopra. L'uso del garbage collector eliminerebbe solo i pod, ma il lavoro sarebbe rimasto nel sistema.

Se non si desidera eliminare manualmente il lavoro, è possibile scrivere un piccolo script in esecuzione nel cluster e verificare la presenza di lavori completati ed eliminarli. Purtroppo, i lavori pianificati sono solo coming in 1.4 ma è possibile eseguire lo script in un pod normale.

22

Sembra che con Kubernetes 1.6 (e la versione di a2 v2alpha1), se stai usando cronjobs per creare i lavori (che, a turno, crea i tuoi pod), sarai in grado di limit quanti vecchi lavori sono tenuti. Basta aggiungere il seguente al vostro spec lavoro: [. Almeno sulla versione 1.5]

successfulJobsHistoryLimit: X 
failedJobsHistoryLimit: Y 

dove X e Y sono i limiti di quanti posti di lavoro eseguiti in precedenza il sistema deve mantenere intorno (si mantiene posti di lavoro intorno a tempo indeterminato di default)

+1

Piccola correzione almeno versione 1.6! Assicurati che sia il server che il client siano alla versione 1.6 usando 'kubectl version' –

0

Ho recentemente creato un operatore di kubernetes per eseguire questa operazione.

Dopo la distribuzione controllerà lo spazio dei nomi selezionato ed eliminerà i lavori/i pod completati se completati senza errori/riavvii.

https://github.com/lwolf/kube-cleanup-operator