概要
kubernetesでは、CronJobという定期的にコンテナを実行できる機能があります。
私はCronJobを使って、バックアップなどのバッチ処理を行なっているのですが、その際にコンテナへログインして操作するためにkubectl exec
コマンドを使用しています。
最近になって、扱うデータ量が増えてバッチ処理の終了まで時間のかかるものが多くなり、実行中に途中で終了してしまうということが増えてきました。
おそらくタイムアウトだとは思うのですが、原因はよくわかっていません。
ここではタイムアウトにならないように、kubectl execコマンドでコンテナのコマンドをバックグラウンドで実行する方法について紹介します。
環境
- kubectl 1.17
- Kubernetes 1.17
方法
通常、バックグラウンドでコマンドを実行する場合、アンパサンド(&)やnohupコマンドを使用すればいいのですが、この方法ではうまくできませんでした。
そこで、/bin/bashを使って次のようにしました。
$ kubectl exec $POD_NAME -- bash -c "backup.sh &"
内容として、bashを起動してbackup.shを実行するとなっています。
ポイントとしては、bashを起動することでkubectl exec
コマンドが終了してもプロセスは終了しないようにしているということがあります。
さいごに
せっかくKubernetesを使っているのであれば、バッチ処理を含めてほとんどのことをKubernetesでやっていきたいと思っています。
kubectl exec
コマンドでバックグラウンドのプロセスを動かしたい人の参考になれば幸いです。