Working with SMB CSI drivers
Follow the procedures in this section to install, configure, or delete the CSI drivers
that are required to use an SMB file share on an Amazon S3 File Gateway for storage in your
Kubernetes cluster. For more information, see the open-source SMB CSI driver
documentation on GitHub at
https://github.com/kubernetes-csi/csi-driver-smb/blob/master/docs/install-csi-driver-master.md
Note
When you create a PersistentVolume
object or a
StorageClass
object, you can specify a ReclaimPolicy
parameter to determine what happens to the external storage when objects are
deleted. The SMB CSI driver supports the Retain
and
Recycle
options, but does not currently support a
Delete
option.
Install drivers
To install Kubernetes SMB CSI drivers:
-
From a command-line terminal with access to
kubectl
for your Kubernetes cluster, run the following command:curl -skSL https://raw.githubusercontent.com/kubernetes-csi/csi-driver-smb/master/deploy/install-driver.sh | bash -s master --
-
Wait for the previous command to finish, then use the following commands to ensure that the CSI driver pods are running:
kubectl -n kube-system get pod -o wide --watch -l app=csi-smb-controller
kubectl -n kube-system get pod -o wide --watch -l app=csi-smb-node
The output should look similar to the following:
NAME READY STATUS RESTARTS AGE IP NODE csi-smb-controller-56bfddd689-dh5tk 4/4 Running 0 35s 10.240.0.19 k8s-agentpool-22533604-0 csi-smb-controller-56bfddd689-8pgr4 4/4 Running 0 35s 10.240.0.35 k8s-agentpool-22533604-1 csi-smb-node-cvgbs 3/3 Running 0 35s 10.240.0.35 k8s-agentpool-22533604-1 csi-smb-node-dr4s4 3/3 Running 0 35s 10.240.0.4 k8s-agentpool-22533604-0
Create an SMB StorageClass object
To create a new SMB StorageClass object for your Kubernetes cluster:
-
Create a configuration file named
storageclass.yaml
with contents similar to the following example. Substitute your own deployment-specific information for theExampleValues
shown.--- apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name:
ExampleStorageClassName
provisioner: smb.csi.k8s.io parameters: source: "//gateway-dns-name-or-ip-address/example-share-name
" # if csi.storage.k8s.io/provisioner-secret is provided, will create a sub directory # with PV name under source csi.storage.k8s.io/provisioner-secret-name: "examplesmbcreds
" csi.storage.k8s.io/provisioner-secret-namespace: "examplenamespace
" csi.storage.k8s.io/node-stage-secret-name: "examplesmbcreds
" csi.storage.k8s.io/node-stage-secret-namespace: "examplenamespace
" volumeBindingMode: Immediate reclaimPolicy: Retain mountOptions: - dir_mode=0777 - file_mode=0777 - uid=1001 - gid=1001 -
From a command-line terminal with access to
kubectl
andstorageclass.yaml
, run the following command:kubectl apply -f storageclass.yaml
Note
You can also create the StorageClass by providing the
.yaml
configuration text from the previous step to most third-party Kubernetes management and containerization platforms. -
Configure the pods in your Kubernetes cluster to use the new StorageClass that you created. For more information, refer to the Kubernetes online documentation at https://kubernetes.io/docs/concepts/storage/
.
Create SMB PersistentVolume and PersistentVolumeClaim objects
To create new SMB PersistentVolume and PersistentVolumeClaim objects:
-
Create two configuration files. One named
persistentvolume.yaml
, and one namedpersistentvolumeclaim.yaml
. -
For
persistentvolume.yaml
, add contents that are similar to the following example. Substitute your own deployment-specific information for theExampleValues
shown.--- apiVersion: v1 kind: PersistentVolume metadata: name:
pv-smb-example-name
namespace:smb-example-namespace
# PersistentVolume and PersistentVolumeClaim must use the same namespace parameter spec: capacity: storage: 100Gi accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain mountOptions: - dir_mode=0777 - file_mode=0777 - vers=3.0 csi: driver: smb.csi.k8s.io readOnly: false volumeHandle:examplehandle
# make sure it's a unique id in the cluster volumeAttributes: source: "//gateway-dns-name-or-ip-address/example-share-name
" nodeStageSecretRef: name:example-smbcreds
namespace:smb-example-namespace
-
For
persistentvolumeclaim.yaml
, add contents that are similar to the following example. Substitute your own deployment-specific information for theExampleValues
shown.--- kind: PersistentVolumeClaim apiVersion: v1 metadata: name:
examplename-pvc-smb-static
namespace:smb-example-namespace
# PersistentVolume and PersistentVolumeClaim must use the same namespace parameter spec: accessModes: - ReadWriteMany resources: requests: storage: 10Gi volumeName:pv-smb-example-name
# make sure specfied volumeName matches the name of the PersistentVolume you created storageClassName: "" -
From a command-line terminal with access to
kubectl
and both of the.yaml
files that you created, run the following commands:kubectl apply -f persistentvolume.yaml
kubectl apply -f persistentvolumeclaim.yaml
Note
You can also create the PersistentVolume and PersistentVolumeClaim objects by providing the
.yaml
configuration text from the previous step to most third-party Kubernetes management and containerization platforms. -
Configure the pods in your Kubernetes cluster to use the new PersistentVolumeClaim that you created. For more information, refer to the Kubernetes online documentation at https://kubernetes.io/docs/concepts/storage/
.
Uninstall drivers
To uninstall the Kubernetes SMB CSI drivers:
-
From a command-line terminal with access to
kubectl
for your Kubernetes cluster, run the following command:curl -skSL https://raw.githubusercontent.com/kubernetes-csi/csi-driver-smb/master/deploy/uninstall-driver.sh | bash -s --