0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Kubernetes Cronjobs (lifecycle PostStart PreStop)+ Slack notification

Posted at

#これを設定した背景

  • 元々はDB BackupをS3にコピーするCronjobではhttps://github.com/benjamin-maynard/kubernetes-s3-mysql-backup を参考にSlack notifyできるようにしてた。
  • 他のCronjobを設定したはいいがFail/Successしたか一々確認するのは面倒なので、Fail/Success結果をSlackで通知する方法を模索した。

##参考にした記事

##最初に考えていた方法

lifecycleのPostStartとPreStopを使って

  1. PostStart > JobA has started messageをslack
  2. JobA
  3. PreStop > JobA has completed messageをslack

これだとCronjobがFail/Successしたか確実ではない

##PreStopはこの用途に適していなかった
lifecycleのPreStop
A call to the preStop hook fails if the container is already in terminated or completed state.

##次に考えた方法

  1. slack_start.sh > JobA has started messageをslack
  2. JobA
  3. slack_stop.sh > JobA has completed messageをslack

これだとCronjobがFail/Successしたか確実ではない

##最終的に使った方法
ConfigMapでwrapper.shをpodにつけてJobAをinputStream $1とする。
これだとCronjobがFail/Successしたか確実。

wrapper.sh JobA

wrapper.shはシンプルなもので

$cmd1
status=$?
  • $1 JobAがSuccess($status -eq 0)したらMSG_SUCCESSをslack
  • $1 JobAがFail(else)したらMSG_FAILをslack

ついでに各Cronjobが何秒かかったかもわかるようにした。

duration=$SECONDS
MSG_DURATION=$(echo "($(($duration / 60))m$(($duration % 60))s)")

##ハマったこと

  • JobA内にvariableやmkdir -p /tmp/reportなどがある時
wrapper.sh "yesterday=`date -d 'yesterday' '+%F'` python_path=/usr/local/bin/python $python_path app.py mkdir -p /tmp/report"
  • JobAがマルチラインの時 > &&を使うことで走るように
  • defaultModeのjsonnetでの使い方
jsonnet yaml (decimal)
defaultMode: std.parseOctal('0755') defaultMode: 493

##学んだこと

  • wrapper.sh
  • configMap defaultMode
  • lifecycleのPostStartとPreStop
  • slack notification
0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?