Skip to content

kubernetes-csi/csi-driver-nfs

Repository files navigation

CSI NFS driver

Kubernetes

Requirements

The folllowing feature gates and runtime config have to be enabled to deploy the driver

FEATURE_GATES=CSIPersistentVolume=true,MountPropagation=true
RUNTIME_CONFIG="storage.k8s.io/v1alpha1=true"

Mountprogpation requries support for privileged containers. So, make sure privileged containers are enabled in the cluster.

Example local-up-cluster.sh

ALLOW_PRIVILEGED=true FEATURE_GATES=CSIPersistentVolume=true,MountPropagation=true RUNTIME_CONFIG="storage.k8s.io/v1alpha1=true" LOG_LEVEL=5 hack/local-up-cluster.sh

Deploy

kubectl -f deploy/kubernetes create

Example Nginx application

Please update the NFS Server & share information in nginx.yaml file.

kubectl -f examples/kubernetes/nginx.yaml create

Using CSC tool

Build nfsplugin

$ make nfs

Start NFS driver

$ sudo ./_output/nfsplugin --endpoint tcp://127.0.0.1:10000 --nodeid CSINode -v=5

Test

Get csc tool from https://github.com/rexray/gocsi/tree/master/csc

Get plugin info

$ csc identity plugin-info --endpoint tcp://127.0.0.1:10000
"NFS"	"0.1.0"

NodePublish a volume

$ export NFS_SERVER="Your Server IP (Ex: 10.10.10.10)"
$ export NFS_SHARE="Your NFS share"
$ csc node publish --endpoint tcp://127.0.0.1:10000 --target-path /mnt/nfs --attrib server=$NFS_SERVER --attrib share=$NFS_SHARE nfstestvol
nfstestvol

NodeUnpublish a volume

$ csc node unpublish --endpoint tcp://127.0.0.1:10000 --target-path /mnt/nfs nfstestvol
nfstestvol

Get NodeID

$ csc node get-id --endpoint tcp://127.0.0.1:10000
CSINode

Running Kubernetes End To End tests on an NFS Driver

First, stand up a local cluster ALLOW_PRIVILEGED=1 hack/local-up-cluster.sh (from your Kubernetes repo) For Fedora/RHEL clusters, the following might be required:

sudo chown -R $USER:$USER /var/run/kubernetes/
sudo chown -R $USER:$USER /var/lib/kubelet
sudo chcon -R -t svirt_sandbox_file_t /var/lib/kubelet

For all of the following commands, set the KUBECONFIG env variables as instructed by local-up-cluster.sh or as needed for some other cluster.

deploy/kubernetes/deploy.sh will deploy the nfs driver using an image from quay.io which (at the time of writing this) isn't available yet.

It is possible to use a locally built image without any registry:

$ make container
...
Successfully tagged nfsplugin:latest

$ NFSPLUGIN_REGISTRY=none NFSPLUGIN_TAG=latest deploy/kubernetes/deploy.sh
applying RBAC rules
kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-attacher/v1.0.1/deploy/kubernetes/rbac.yaml
serviceaccount/csi-attacher created
clusterrole.rbac.authorization.k8s.io/external-attacher-runner created
clusterrolebinding.rbac.authorization.k8s.io/csi-attacher-role created
role.rbac.authorization.k8s.io/external-attacher-cfg created
rolebinding.rbac.authorization.k8s.io/csi-attacher-role-cfg created
deploying nfs plugin components
   deploy/kubernetes/csi-attacher-nfsplugin.yaml
        using           image: quay.io/k8scsi/csi-attacher:v1.0.1
        using           image: nfsplugin:latest
service/csi-attacher-nfsplugin created
statefulset.apps/csi-attacher-nfsplugin created
   deploy/kubernetes/csi-nodeplugin-nfsplugin.yaml
        using           image: quay.io/k8scsi/csi-node-driver-registrar:v1.0.2
        using           image: nfsplugin:latest
daemonset.apps/csi-nodeplugin-nfsplugin created
   deploy/kubernetes/csi-nodeplugin-rbac.yaml
serviceaccount/csi-nodeplugin created
clusterrole.rbac.authorization.k8s.io/csi-nodeplugin created
clusterrolebinding.rbac.authorization.k8s.io/csi-nodeplugin created
10:53:11 waiting for nfs deployment to complete, attempt #0
10:53:21 waiting for nfs deployment to complete, attempt #1

Other clusters may need a registry to pull from:

$ make push REGISTRY_NAME=my-registry:5000
...
$ NFSPLUGIN_REGISTRY=my-registry:5000 NFSPLUGIN_TAG=latest deploy/kubernetes/deploy.sh

Once you have the driver installed, tests can be run with:

$ make build-tests
mkdir -p bin
CGO_ENABLED=0 GOOS=linux go build -a -ldflags '-X main.version=4fa924a251193c9eef937042112462433089d658 -extldflags "-static"' -o ./bin/tests ./cmd/tests
$ ./bin/tests --ginkgo.v --ginkgo.progress
Jun  7 10:57:39.667: INFO: The --provider flag is not set. Continuing as if --provider=skeleton had been used.
Running Suite: CSI Suite
========================
Random Seed: 1559897859 - Will randomize all specs
Will run 103 of 103 specs
...

Community, discussion, contribution, and support

Learn how to engage with the Kubernetes community on the community page.

You can reach the maintainers of this project at:

Code of conduct

Participation in the Kubernetes community is governed by the Kubernetes Code of Conduct.