2016-04-03 8 views
8

私が理解しているところでは、Jobオブジェクトはある時間後にポッドを刈り取ることになっています。 しかし、私のGKEクラスタ(Kubernetes 1.1.8)では、 "kubectl get pods -a"は数日前からポッドを一覧表示できるようです。Kubernetesジョブクリーンアップ

すべては、ジョブAPIを使用して作成されました。

kubectl削除ジョブでジョブを削除した後に気付いた ポッドも削除されました。

私の主な関心事は、バッチジョブでクラスタ上で数千から数万のポッドを実行し、内部バックログシステムに過負荷をかけたくないということです。 kubernetes 1.2以降で

答えて

1

、グローバルしきい値--terminated-pod-gc-threshold=12500で終了ポッドを刈り取りのためのガベージコレクタが(controller managerのフラグを参照してください。私はv1.1.8で終了ポッドのための任意のGCメカニズムを認識していないですがあります。あなたが望むことポッド/ジョブを定期的にクリーンアップしてマスターコンポーネントが圧倒されるのを防ぐためにスクリプト/ポッドを実行するにはautomatically adjust the GC threshold

1

これはKubernetes 1.3でもジョブの意図された動作です手動で削除するまで、ジョブとポッドの両方がシステムに残ります。これは、すでに何らかのメカニズムによって外部に転送されなかったポッド(つまりログ)の結果を表示したり、エラーをチェックしたり、警告、または他の診断出力。

ポッドを取り除くには、上記のようにジョブを削除することをお勧めします(official)。ガベージコレクタを使用すると、ポッドのみが削除されますが、ジョブ自体はシステム内に残ります。

ジョブを手動で削除したくない場合は、クラスタ内で実行中の小さなスクリプトを作成し、完了したジョブを確認して削除することができます。悲しいことに、スケジュールされたジョブはcoming in 1.4ですが、代わりに通常のポッドでスクリプトを実行できます。

22

クーバーネット1.6(とv2alpha1 apiバージョン)のように見えますが、ジョブを作成してポッドを作成する場合は、limit古いジョブの数保持される。ちょうどあなたの仕事の仕様に以下を追加します。

XとYは、システムがそれがデフォルトで無期限の周りに仕事を続けて(周りに維持する必要がありますどのように多くの以前に実行されるジョブの限界です
successfulJobsHistoryLimit: X 
failedJobsHistoryLimit: Y 

[少なくともバージョン1.5に。]を)

+1

小規模な修正バージョン1.6以上! 'kubectl version'を使って、サーバとクライアントの両方がバージョン1.6になっていることを確認してください。 –

0

私は最近、この作業を行うためにkubernetes-operatorを構築しました。

展開後、エラー/再起動なしで完了した場合、選択した名前空間を監視し、完了したジョブ/ポッドを削除します。

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

関連する問題