2016-04-03 21 views
8

Z tego co rozumiem, obiekt Job powinien zbierać strąki po pewnym czasie. Ale w moim klastrze GKE (Kubernetes 1.1.8) wydaje się, że "kubectl get pods -a" może wyświetlać listę straków sprzed kilku dni.Oczyszczanie zadań Kubernetes

Wszystkie zostały utworzone za pomocą interfejsu API zadań.

Zauważyłem, że po usunięciu zadania z kubectl usunąć zadania Strąki zostały usunięte.

Moim głównym zmartwieniem jest to, że będę uruchamiał tysiące i dziesiątki tysięcy kapsuł w klastrze w zadaniach wsadowych i nie chcę przeciążać wewnętrznego systemu zaległości.

Odpowiedz

1

W kubernetes v1.2, istnieje śmieciarza czerpania zakończone strąków z globalnym progu --terminated-pod-gc-threshold=12500 (zob flagi w controller manager. Nie jestem świadomy jakiegokolwiek mechanizmu GC dla wypowiedzianych strąków w v1.1.8. Możesz Aby uruchomić skrypt/strąk, aby okresowo usuwać pods/zadania, aby zapobiec nadmiernemu obciążaniu komponentów głównych. Nawiasem mówiąc, istnieje otwarty problem z automatically adjust the GC threshold.

1

To jest zamierzone zachowanie aplikacji nawet w Kubernetes 1.3 Zarówno praca, jak i jej kapsuły pozostają w systemie, dopóki nie usuniesz ich ręcznie, aby udostępnić ci sposób, w jaki wyniki strąków (np. Za pomocą dzienników), które nie były już transportowane na zewnątrz przez jakiś mechanizm lub sprawdzają błędy, ostrzeżenia, lub inne wyjście diagnostyczne.

Zalecany/official sposób na pozbycie się strąków jest usunięcie pracy, jak wspomniano powyżej. Używanie kosza na śmieci usuwałoby tylko kapsuły, ale samo zadanie nadal byłoby w systemie.

Jeśli nie chcesz ręcznie usuwać zadania, możesz napisać mały skrypt, który działa w klastrze, i sprawdza ukończone zadania i usuwa je. Niestety, Zaplanowane zadania są tylko coming in 1.4, ale możesz uruchomić skrypt w zwykłym module.

22

Wygląda jak z Kubernetes 1.6 (i wersją api v2alpha1), jeśli używasz cronjobs do tworzenia zadań (które z kolei tworzą twoje strąki), będziesz w stanie limit ile starych zadań są trzymane. Wystarczy dodać następujące wpisy do specyfikacji stanowiska: [. Przynajmniej w wersji 1.5]

successfulJobsHistoryLimit: X 
failedJobsHistoryLimit: Y 

gdzie X i Y są granice, ile wcześniej uruchamiania zadań system powinien zachować wokół (to utrzymuje pracy wokół nieskończoność domyślnie)

+1

Mała poprawka co najmniej wersja 1.6! Upewnij się, że zarówno serwer, jak i klient są w wersji 1.6, używając 'wersji kubectl' –

0

Niedawno zbudowałem operatora kubernetes do wykonania tego zadania.

Po wdrożeniu monitoruje wybrany obszar nazw i usuwa zakończone zadania/strąki, jeśli zostały ukończone bez błędów/ponownych uruchomień.

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

Powiązane problemy