Initial framework for external volumes. 

Lays the framework for external volume mounts, preparing for 
persistent disks and other volumes.

Currently, it only supports host directory mounts.

Modifies the API to support host directory mounts from Volumes
instead of VolumeMounts.

I was missing the "mounts shared between containers" case, which you're right needs coordination around a shared refcount.  When you say "foobar" for the shared mount name, is that a global unique name for that resource such that two pods that happen to be scheduled on the same minion have access to it?

I *think* it's possible to isolate volume state from container state changes as long as you can synchronize on the refcount (file, memory, or otherwise), but you would as you say have state squirreled away on disk that allows you to reconstruct their original assignees and tie them back (like the docker name does for containers).  One benefit of having a state separation is that it potentially applies to other constructs like ports and network devices - you need to block and linearize changes to certain resources, but you can still drive it via a reconciliation loop.  Of course the reconciliation loop today still has the constraint that the longest running container change still blocks the next loop iteration, so the more you block the more likely you are to need to decompose the reconciliation loop...  

At some point, making pod creation depend on a set of resources being allocated starts to sound like the same problem at the higher apiserver level when you want to wait for a set of containers to be started before something else happens - you should be declarative and assume asynchronous change, vs imperative and synchronously executing.  But I don't have a good feel for it yet so just take that as a comment on the pattern rather than a concrete point.

Snapshotting and checkpointing the container state seems to be justified for other reasons than to isolate the kubelet from transient problems - so that's a place to start.