こんにちは。
エムスリーエンジニアリンググループ AI・機械学習チーム 堀江です。
弊チームでは、YAMLの設定に従って自動でモデルの学習 & 推論 & 評価まで行ってくれるようなMLパイプラインのプロダクトをGKE上に構築して運用しています。
MLパイプラインにより、パラメータを変えた実験を並列に大量に行うことが可能になっており、多いときには同時に数十Jobが走っていたりします。
そのような運用をしていると問題になるのが完了した (失敗を含む) Jobの後片付けです。
ttlSecondsAfterFinished
実はkubernetesには完了したJobのcleanup機能が備わっています。
TTL mechanism for finished Jobs
以下のように ttlSecondsAfterFinished
を設定すると、完了したJobを自動的に削除してくれて非常に便利なんですが、この機能、一向にalphaからステータスが変わりません (2021年3月現在)。
apiVersion: batch/v1 kind: Job metadata: name: pi-with-ttl spec: ttlSecondsAfterFinished: 100 template: spec: containers: - name: pi image: perl command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"] restartPolicy: Never
kubectlやコントローラの自作によって ttlSecondsAfterFinished
の代替機能を作成している方もいるようですが、今回は弊チームで運用しているGitlab CI上のスケジューラでJobステータスを監視し自動的に削除してくれる機能を実装しました。