I have found several people asking about how to start a container running a DB, then run a different container that runs maintenance/migration on the DB which then exits. Here are all of the solutions I've examined and what I think are the problems with each:
Is there an option I've overlooked or something I'm missing about the above solutions? Thanks.
One option would be to use the Sidecar pattern
with 2 slight changes to the approach you described:
while : ; do sleep 86400; done
command or something similar.startupProbe
in place that resolves successfully only when your maintenance command is executed successfully. You could for example create a file /maintenance-done
and use a startupProbe like this:startupProbe:
exec:
command:
- cat
- /maintenance-done
initialDelaySeconds: 5
periodSeconds: 5
With this approach you have the following outcome:
restartPolicy
for both your database and sidecar containers works fine thanks to the sleep hack
.Furthermore, there will be no noticeable overhead in your pod: even if the sidecar container keeps running, it will consume close to zero resources since it is only running the sleep command.