Mount Propagation

Modern versions of Kubernetes, Docker or other Container Runtimes enable mount propagation by default.

StorageOS requires mount propagation enabled to present devices as volumes for containers (see linux kernel documentation here).

Certain versions of docker ship with a systemd manifest with MountFlags set to ‘slave’, thus preventing StorageOS from working. This can be removed or set to ‘shared’ with a systemd drop in:

mkdir -p /etc/systemd/system/docker.service.d/
cat <<EOF > /etc/systemd/system/docker.service.d/mount_propagation_flags.conf
[Service]
MountFlags=shared
EOF

# systemctl daemon-reload
# systemctl restart docker.service

To confirm behaviour, the following command should run without error.

docker run -it --rm -v /mnt:/mnt:shared busybox sh -c /bin/date

Orchestrators such as Kubernetes or OpenShift have their own ways of exposing this setting. Kubernetes 1.10 and OpenShift 3.10 have mount propagation enabled by default. Previous versions require that feature gates are enabled on the Kubernetes master’s controller-manager and apiserver services and in the kubelet service on each node.

Installations of orchestrators using Docker require that mount propagation is enabled for both.

Refer to our installation pages for the orchestrators to see details on how to check and enable mount propagation where appropriate.