diff --git a/deployment/aks/create_nfs.sh b/deployment/aks/create_nfs.sh
new file mode 100755
index 0000000..8262d1e
--- /dev/null
+++ b/deployment/aks/create_nfs.sh
@@ -0,0 +1,237 @@
+#!/bin/bash
+# Copyright 2019 AT&T Intellectual Property. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
+NO_PROMPT=0
+RANDOM_PREFIX="ONAP"
+RANDOM_STRING="$RANDOM_PREFIX"-`cat /dev/urandom | env LC_CTYPE=C tr -cd 'a-zA-Z0-9' | head -c 4`
+
+
+NFS_NAME=
+NFS_RG=
+NFS_VM_SIZE=
+NFS_LOCATION=
+SUBNET_CIDR=
+ADMIN_USER=
+BUILD_DIR=
+NFS_VNET_NAME=
+PUBLIC_KEY=
+USER_PUBLIC_IP_PREFIX=
+NFS_SUBNET_NAME=
+AKS_POD_CIDR=
+NFS_DISK_SIZE=
+
+function check_required_parameter() {
+  # arg1 = parameter
+  # arg2 = parameter name
+  if [ -z "$1" ]; then
+    echo "$2 was not was provided. This parameter is required."
+    exit 1
+  fi
+}
+
+function check_optional_paramater() {
+  # arg1 = parameter
+  # arg2 = parameter name
+  if [ -z "$1" ]; then
+    echo "$2"
+  else
+    echo "$1"
+  fi
+}
+
+
+while test $# -gt 0; do
+  case "$1" in
+    -h|--help)
+      echo "./create_nfs.sh [options]"
+      echo " "
+      echo " "
+      echo "required:"
+      echo "--public-key                public key to add for admin user [required]"
+      echo "--user-public-ip            public ip that will be granted access to VM [required]"
+      echo "-l, --location              location to deploy VM [required]"
+      echo "-u, --admin-user            admin user to create on VM [required]"
+      echo "--aks-node-cidr             CIDR for Kubernetes nodes [required]. This is used during the NFS deploy to grant access to the NFS server from Kubernetes."
+      echo " "
+      echo "additional options:"
+      echo "-f, --no-prompt             executes with no prompt for confirmation"
+      echo "-h, --help                  provide brief overview of script"
+      echo "-n, --name                  VM name [optional]"
+      echo "-g, --resource-group        resource group that will be created [optional]"
+      echo "-s, --size                  Azure flavor size for VM [optional]"
+      echo "-c, --cidr                  cidr for VNET to create for VM [optional]."
+      echo "-d, --directory             directory to store cloud config data [optional]"
+      echo "--vnet-name                 name of Vnet to create for VM [optional]"
+      echo "--nfs-subnet-name           subnet name created on VNET [optional]"
+      echo "--nfs-disk-size             size of external disk to be mounted on NFS VM [optional]"
+      echo ""
+      exit 0
+      ;;
+    -f|--no-prompt)
+      shift
+      NO_PROMPT=1
+      ;;
+    -n|--name)
+      shift
+      NFS_NAME=$1
+      shift
+      ;;
+    -g|--resource-group)
+      shift
+      NFS_RG=$1
+      shift
+      ;;
+    -s|--size)
+      shift
+      NFS_VM_SIZE=$1
+      shift
+      ;;
+    -l|--location)
+      shift
+      NFS_LOCATION=$1
+      shift
+      ;;
+    -c|--cidr)
+      shift
+      SUBNET_CIDR=$1
+      shift
+      ;;
+    -u|--admin-user)
+      shift
+      ADMIN_USER=$1
+      shift
+      ;;
+    -d|--directory)
+      shift
+      BUILD_DIR=$1
+      shift
+      ;;
+    --vnet-name)
+      shift
+      NFS_VNET_NAME=$1
+      shift
+      ;;
+    --public-key)
+      shift
+      PUBLIC_KEY=$1
+      shift
+      ;;
+    --user-public-ip)
+      shift
+      USER_PUBLIC_IP_PREFIX=$1
+      shift
+      ;;
+    --aks-node-cidr)
+      shift
+      AKS_POD_CIDR=$1
+      shift
+      ;;
+    --nfs-subnet-name)
+      shift
+      NFS_SUBNET_NAME=$1
+      shift
+      ;;
+    --nfs-disk-size)
+      shift
+      NFS_DISK_SIZE=$1
+      shift
+      ;;
+    *)
+      echo "Unknown Argument $1. Try running with --help."
+      exit 0
+      ;;
+  esac
+done
+
+check_required_parameter "$ADMIN_USER" "--admin-user"
+check_required_parameter "$PUBLIC_KEY" "--public-key"
+check_required_parameter "$NFS_LOCATION" "--location"
+check_required_parameter "$USER_PUBLIC_IP_PREFIX" "--user-public-ip"
+check_required_parameter "$AKS_POD_CIDR" "--aks-node-cidr"
+
+NFS_RG=$(check_optional_paramater "$NFS_RG" $RANDOM_STRING"-NFS-RG")
+NFS_NAME=$(check_optional_paramater "$NFS_NAME" $RANDOM_STRING"-NFS")
+NFS_VM_SIZE=$(check_optional_paramater "$NFS_VM_SIZE" "Standard_DS4_v2")
+SUBNET_CIDR=$(check_optional_paramater "$SUBNET_CIDR" "174.0.0.0/24")
+BUILD_DIR=$(check_optional_paramater "$BUILD_DIR" /tmp/nfs-$RANDOM_STRING)
+NFS_VNET_NAME=$(check_optional_paramater "$NFS_VNET_NAME" $RANDOM_STRING"-NFS-VNET")
+NFS_SUBNET_NAME=$(check_optional_paramater "$NFS_SUBNET_NAME" $RANDOM_STRING"-NFS-VNET-SUBNET")
+NFS_DISK_SIZE=$(check_optional_paramater "$NFS_DISK_SIZE" "256")
+
+if [ $NO_PROMPT = 0 ]; then
+  read -p "Would you like to proceed? [y/n]" -n 1 -r
+  echo " "
+  if [[ ! $REPLY =~ ^[Yy]$ ]]
+  then
+      exit 0
+  fi
+fi
+
+set -x 
+set -e 
+
+NFS_IMAGE="UbuntuLTS"
+NFS_SECURITY_GROUP=$NFS_NAME"-SG"
+DATA_FILE=$BUILD_DIR/cloud-cfg.yaml
+
+if [ ! -d $BUILD_DIR ]; then
+  echo "running script standalone..."
+  mkdir -p "$BUILD_DIR"
+fi
+
+$DIR/create_resource_group.sh "$NFS_RG" "$NFS_LOCATION"
+
+cat > $DATA_FILE <<EOF
+#cloud-config
+package_upgrade: true
+packages:
+  - nfs-kernel-server
+  - portmap
+runcmd:
+  - echo "/dockerdata-nfs $AKS_POD_CIDR(rw,async,no_root_squash,no_subtree_check)" >> /etc/exports
+  - mkdir /dockerdata-nfs
+  - chmod 777 -R /dockerdata-nfs
+  - chown nobody:nogroup /dockerdata-nfs
+  - exportfs -ra
+  - systemctl restart nfs-kernel-server
+EOF
+
+az network nsg create --resource-group "$NFS_RG" \
+                      --name "$NFS_SECURITY_GROUP"
+
+$DIR/create_sg_rule.sh "$NFS_RG" "$NFS_SECURITY_GROUP" '*' "22" "$USER_PUBLIC_IP_PREFIX" '*' '*' "SSH" "100"
+
+az vm create --name "$NFS_NAME" \
+             --resource-group "$NFS_RG" \
+             --size "$NFS_VM_SIZE" \
+             --os-disk-size-gb "$NFS_DISK_SIZE" \
+             --admin-username "$ADMIN_USER" \
+             --ssh-key-value @"$PUBLIC_KEY" \
+             --image "UbuntuLTS" \
+             --location "$NFS_LOCATION" \
+             --subnet-address-prefix "$SUBNET_CIDR" \
+             --subnet "$NFS_SUBNET_NAME" \
+             --vnet-address-prefix "$SUBNET_CIDR" \
+             --vnet-name "$NFS_VNET_NAME" \
+             --custom-data "$DATA_FILE" \
+             --nsg "$NFS_SECURITY_GROUP"
+echo ""
+
+az network vnet subnet update --resource-group "$NFS_RG" \
+                              --name "$NFS_SUBNET_NAME" \
+                              --vnet-name "$NFS_VNET_NAME" \
+                              --network-security-group "$NFS_SECURITY_GROUP"
+
