+ \r
+ or using go get \r
+ ```bash\r
+ go get -v github.com/opensds/nbp/...\r
+ ``` \r
+\r
+* Build the FlexVolume.\r
+\r
+ ```bash\r
+ cd $GOPATH/src/github.com/opensds/nbp/flexvolume\r
+ go build -o opensds ./cmd/flex-plugin/\r
+ ```\r
+ \r
+ FlexVolume plugin binary is on the current directory. \r
+\r
+\r
+* Copy the OpenSDS FlexVolume binary file to k8s kubelet `volume-plugin-dir`. \r
+ if you don't specify the `volume-plugin-dir`, you can execute commands blow:\r
+\r
+ ```bash\r
+ mkdir -p /usr/libexec/kubernetes/kubelet-plugins/volume/exec/opensds.io~opensds/\r
+ cp $GOPATH/src/github.com/opensds/nbp/flexvolume/opensds /usr/libexec/kubernetes/kubelet-plugins/volume/exec/opensds.io~opensds/\r
+ ``` \r
+ \r
+ **NOTE**: \r
+ <div>\r
+ OpenSDS FlexVolume will get the opensds api endpoint from the environment variable `OPENSDS_ENDPOINT`, if you don't specify it, the FlexVolume will use the default vaule: `http://127.0.0.1:50040`. if you want to specify the `OPENSDS_ENDPOINT` executing command `export OPENSDS_ENDPOINT=http://ip:50040` and restart the k8s local cluster.\r
+</div>\r
+\r
+* Build the provisioner docker image.\r
+\r
+ ```bash\r
+ cd $GOPATH/src/github.com/opensds/nbp/opensds-provisioner\r
+ make container\r
+ ```\r
+\r
+* Create service account, role and bind them.\r
+ ```bash\r
+ cd $GOPATH/src/github.com/opensds/nbp/opensds-provisioner/examples\r