kubectl execでコマンドをバックグラウンドで実行する方法

Tips
2020年03月11日 10:00

概要

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コマンドでバックグラウンドのプロセスを動かしたい人の参考になれば幸いです。