First, you really should really truly understand the docs on VMware’s CSI driver.
Cloud Native Storage Getting Started
More information can be found at my GitHub.
https://github.com/2vcps/cns-installer
First if you meet all the pre-requisites mention in the CNS documentation clone my repo:
git clone https://github.com/2vcps/cns-installer.git
Then edit the install.sh and add your credentials and vCenter information.
VCENTER="<vcenter name or IP>"
VC_ADMIN="<vc admin>"
VC_PASS="<vc password>"
VC_DATACENTER="<vc datacentername>"
VC_NETWORK="<vc vm network name>"
VMware requires all the master to be tainted this way.
MASTERS=$(kubectl get node --selector='node-role.kubernetes.io/master' -o name) for n in $MASTERS do kubectl taint nodes $n node-role.kubernetes.io/master=:NoSchedule done kubectl describe nodes | egrep "Taints:|Name:"
Run the installer shell script (sorry Windows users, install WLS or something)
# ./install.sh
To Remove
Remove all PVC’s created with the Storage Class.
kubectl delete pvc
Then run the cleanup script.
./uninstall.sh
You can run kubectl get all --all-namespaces
to verify it is removed.
Note
If the CSI driver for vSphere does not start, the Cloud Controller may not have untainted the nodes when it initialized. I am have seen it work automatically (as designed by VMware) and also had to run this to make it work:
NODES=$(kubectl get nodes -o name) for n in $NODES do kubectl taint nodes $n node.cloudprovider.kubernetes.io/uninitialized=true:NoSchedule- done kubectl describe nodes | egrep "Taints:|Name:"
Create StorageClass for CNS
kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: cns-vvols annotations: storageclass.kubernetes.io/is-default-class: \"false\" provisioner: csi.vsphere.vmware.com parameters: # storagepolicyname: \"pure-vvols\" DatastoreURL: \"ds:///vmfs/volumes/vvol:373bb977d8ca3de8-a41c2e2c4d1f43e6/\" fstype: ext4
Create a new file called cns-vvols.yaml and paste the above yaml. Now you will have the replace the **DatastoreURL** with a datastore that matches your environment. vVols is not currently “supported” but it can work with SPBM policies that point to FlashArrays and have no other policies enabled. Try it out if you like just remember it is not supported and that is why it is commented out.