diff --git a/roles/kubernetes/node/defaults/main.yml b/roles/kubernetes/node/defaults/main.yml
index 24775a54172e3b02ee210cd64c871b36d2f2ec3d..b78a6e2e1857cc915773cead298ba149742fc8c1 100644
--- a/roles/kubernetes/node/defaults/main.yml
+++ b/roles/kubernetes/node/defaults/main.yml
@@ -62,6 +62,8 @@ nginx_image_tag: 1.13
 
 etcd_config_dir: /etc/ssl/etcd
 
+kubelet_flexvolumes_plugins_dir: /var/lib/kubelet/volume-plugins
+
 # A port range to reserve for services with NodePort visibility.
 # Inclusive at both ends of the range.
 kube_apiserver_node_port_range: "30000-32767"
diff --git a/roles/kubernetes/node/templates/kubelet.docker.service.j2 b/roles/kubernetes/node/templates/kubelet.docker.service.j2
index 16d8a63d1934753b429bd8a97e66263879e046a9..fdbdb89692c9de944a9cb51e33fd95f96473c334 100644
--- a/roles/kubernetes/node/templates/kubelet.docker.service.j2
+++ b/roles/kubernetes/node/templates/kubelet.docker.service.j2
@@ -17,10 +17,14 @@ ExecStart={{ bin_dir }}/kubelet \
 		$KUBELET_ARGS \
 		$DOCKER_SOCKET \
 		$KUBELET_NETWORK_PLUGIN \
+		$KUBELET_VOLUME_PLUGIN \
 		$KUBELET_CLOUDPROVIDER
 Restart=always
 RestartSec=10s
 ExecStartPre=-{{ docker_bin_dir }}/docker rm -f kubelet
+{% if kubelet_flexvolumes_plugins_dir is defined %}
+ExecStartPre=-/bin/mkdir -p {{ kubelet_flexvolumes_plugins_dir }}
+{% endif %}
 ExecReload={{ docker_bin_dir }}/docker restart kubelet
 
 
diff --git a/roles/kubernetes/node/templates/kubelet.host.service.j2 b/roles/kubernetes/node/templates/kubelet.host.service.j2
index be43934ea0a6a60e5c77b700d136cf59f559c357..78ba51f70f7db350f9162cc72a59fda8540415a3 100644
--- a/roles/kubernetes/node/templates/kubelet.host.service.j2
+++ b/roles/kubernetes/node/templates/kubelet.host.service.j2
@@ -6,6 +6,9 @@ Wants=docker.socket
 
 [Service]
 EnvironmentFile=-{{kube_config_dir}}/kubelet.env
+{% if kubelet_flexvolumes_plugins_dir is defined %}
+ExecStartPre=-/bin/mkdir -p {{ kubelet_flexvolumes_plugins_dir }}
+{% endif %}
 ExecStart={{ bin_dir }}/kubelet \
 		$KUBE_LOGTOSTDERR \
 		$KUBE_LOG_LEVEL \
@@ -17,6 +20,7 @@ ExecStart={{ bin_dir }}/kubelet \
 		$KUBELET_ARGS \
 		$DOCKER_SOCKET \
 		$KUBELET_NETWORK_PLUGIN \
+		$KUBELET_VOLUME_PLUGIN \
 		$KUBELET_CLOUDPROVIDER
 Restart=always
 RestartSec=10s
diff --git a/roles/kubernetes/node/templates/kubelet.rkt.service.j2 b/roles/kubernetes/node/templates/kubelet.rkt.service.j2
index c0e2506a39514c46227716e2f5a4f91533b72889..eefce0597a97b8504127546cc8ad365ca136398a 100644
--- a/roles/kubernetes/node/templates/kubelet.rkt.service.j2
+++ b/roles/kubernetes/node/templates/kubelet.rkt.service.j2
@@ -12,6 +12,10 @@ LimitNOFILE=40000
 ExecStartPre=-/usr/bin/rkt rm --uuid-file=/var/run/kubelet.uuid
 ExecStartPre=-/bin/mkdir -p /var/lib/kubelet
 
+{% if kubelet_flexvolumes_plugins_dir is defined %}
+ExecStartPre=-/bin/mkdir -p {{ kubelet_flexvolumes_plugins_dir }}
+{% endif %}
+
 EnvironmentFile={{kube_config_dir}}/kubelet.env
 # stage1-fly mounts /proc /sys /dev so no need to duplicate the mounts
 ExecStart=/usr/bin/rkt run \
@@ -39,6 +43,9 @@ ExecStart=/usr/bin/rkt run \
         --volume etc-cni,kind=host,source=/etc/cni,readOnly=true \
         --volume opt-cni,kind=host,source=/opt/cni,readOnly=true \
         --volume var-lib-cni,kind=host,source=/var/lib/cni,readOnly=false \
+{% if kubelet_flexvolumes_plugins_dir is defined %}
+        --volume flexvolumes,kind=host,source={{ kubelet_flexvolumes_plugins_dir }},readOnly=false \
+{% endif %}
 {% if kubelet_load_modules == true %}
         --mount volume=modprobe,target=/usr/sbin/modprobe \
         --mount volume=lib-modules,target=/lib/modules \
@@ -62,6 +69,9 @@ ExecStart=/usr/bin/rkt run \
         --mount volume=hosts,target=/etc/hosts \
 {% if local_volumes_enabled == true %}
         --mount volume=local-volume-base-dir,target={{ local_volume_base_dir }} \
+{% endif %}
+{% if kubelet_flexvolumes_plugins_dir is defined %}
+        --mount volume=flexvolumes,target={{ kubelet_flexvolumes_plugins_dir }} \
 {% endif %}
         --stage1-from-dir=stage1-fly.aci \
 {% if kube_hyperkube_image_repo == "docker" %}
@@ -83,6 +93,7 @@ ExecStart=/usr/bin/rkt run \
                 $DOCKER_SOCKET \
                 $KUBELET_REGISTER_NODE \
                 $KUBELET_NETWORK_PLUGIN \
+                $KUBELET_VOLUME_PLUGIN \
                 $KUBELET_CLOUDPROVIDER
 
 ExecStop=-/usr/bin/rkt stop --uuid-file=/var/run/kubelet.uuid
diff --git a/roles/kubernetes/node/templates/kubelet.standard.env.j2 b/roles/kubernetes/node/templates/kubelet.standard.env.j2
index da4480f70f28a902a145e154d1c0f0b1b628665f..e692b5bf9d57af1f59cb0cb399d36524210c41f9 100644
--- a/roles/kubernetes/node/templates/kubelet.standard.env.j2
+++ b/roles/kubernetes/node/templates/kubelet.standard.env.j2
@@ -87,6 +87,11 @@ DOCKER_SOCKET="--docker-endpoint=unix:/var/run/weave/weave.sock"
 {% elif kube_network_plugin is defined and kube_network_plugin == "cloud" %}
 KUBELET_NETWORK_PLUGIN="--hairpin-mode=promiscuous-bridge --network-plugin=kubenet"
 {% endif %}
+
+{% if kubelet_flexvolumes_plugins_dir is defined %}
+KUBELET_VOLUME_PLUGIN="--volume-plugin-dir={{ kubelet_flexvolumes_plugins_dir }}"
+{% endif %}
+
 # Should this cluster be allowed to run privileged docker containers
 KUBE_ALLOW_PRIV="--allow-privileged=true"
 {% if cloud_provider is defined and cloud_provider in ["openstack", "azure", "vsphere"] %}