Persistent services

We have a fairly complex docker based infrastructure that we current manage using maestro-ng. Broadly speaking there are two types of container that we care about. A pile of stateless micro-services, and a few heavy stateful databases (Redis, Cassandra and Elasticsearch specifically.)

Maestro doesn’t do any scheduling, so it’s trivial to “pin” a Cassandra instance to a specific node to take advantage of a data volume.

I think I can see how to do this using Rancher, but I’m a little stuck with upgrades.

If I upgrade the Cassandra docker image using maestro, I can do a rolling restart where each individual Cassandra container is stopped, pulled and then started in sequence.

How can I achieve this in Rancher? From my reading, it looks like upgrading a service means that a new container is spun up and then the old container is stopped. So for a brief period of time both old and new are running. How does this work with data volumes?

The next release will have support for in-place upgrade with an option for stop-then-start (or vice versa).