The Container Storage Interface (CSI) Driver for Linode Block Storage enables container orchestrators such as Kubernetes to manage the life-cycle of persistant storage claims.
- Kubernetes v1.16+
- The node
hostnamemust match the Linode Instance
Secure a Linode API Access Token:
Generate a Personal Access Token (PAT) using the Linode Cloud Manager.
This token will need:
- Read/Write access to Volumes (to create and delete volumes)
- Read/Write access to Linodes (to attach and detach volumes)
- A sufficient "Expiry" to allow for continued use of your volumes
Create a Kubernetes secret
Run the following commands to stash a
LINODE_TOKEN in your Kubernetes cluster:
read -s -p "Linode API Access Token: " LINODE_TOKEN read -p "Linode Region of Cluster: " LINODE_REGION cat <<EOF | kubectl create -f -
Paste the following text at the prompt:
apiVersion: v1 kind: Secret metadata: name: linode namespace: kube-system stringData: token: "$LINODE_TOKEN" region: "$LINODE_REGION" EOF
You should receive notification that the secret was created. You can confirm this by running:
$ kubectl -n kube-system get secrets NAME TYPE DATA AGE linode Opaque 2 18h
Deploy the CSI
The following command will deploy the CSI driver with the related Kubernetes volume attachment, driver registration, and provisioning sidecars:
kubectl apply -f https://raw.githubusercontent.com/linode/linode-blockstorage-csi-driver/master/pkg/linode-bs/deploy/releases/linode-blockstorage-csi-driver-v0.1.6.yaml
This deployment is a concatenation of all of the
yaml files in pkg/linode-bs/deploy/kubernetes/.
Notably, this deployment will:
set the default storage class to
This behavior can be modified in the csi-storageclass.yaml section of the deployment by toggling the
$ kubectl get storageclasses NAME PROVISIONER AGE linode-block-storage-retain (default) linodebs.csi.linode.com 2d linode-block-storage linodebs.csi.linode.com 2d
Volumes created by this CSI driver will default to using the
linode-block-storage-retainstorage class if one is not specified. Upon deletion of all PersitentVolumeClaims, the PersistentVolume and its backing Block Storage Volume will remain intact.
If you absolutely intend to run this on a cluster which will not run the Linode CCM, you must modify the init container script located in the
08-cm-get-linode-id.yamlConfigMap and delete the line that contains the
This repository contains two manifests that demonstrate use of the Linode BlockStorage CSI. These manifests will create a PersistentVolume Claim using the
linode-block-storage-retain storage class and then consume it in a minimal pod.
Once you have installed the Linode BlockStorage CSI, the following commands will run the example. Once you are finished with the example, please be sure to delete the pod, PVC, and the associated Block Storage Volume. The PVC created in this example uses the
linode-block-storage-retain storage class, so you will need to remove the Block Storage Volume from your Linode account via the Cloud Manager or the Linode CLI.
kubectl create -f https://raw.githubusercontent.com/linode/linode-blockstorage-csi-driver/master/pkg/linode-bs/examples/kubernetes/csi-pvc.yaml kubectl create -f https://raw.githubusercontent.com/linode/linode-blockstorage-csi-driver/master/pkg/linode-bs/examples/kubernetes/csi-app.yaml
Verify that the pod is running and can consume the volume:
kubectl get pvc/csi-example-pvc pods/csi-example-pod kubectl describe pvc/csi-example-pvc pods/csi-example-pod | less
Now, let's add some data into the PVC, delete the POD, and recreate the pod. Our data will remain intact.
$ kubectl exec -it csi-example-pod -- /bin/sh -c "echo persistence > /data/example.txt; ls -l /data" total 20 -rw-r--r-- 1 root root 12 Dec 5 13:06 example.txt drwx------ 2 root root 16384 Dec 5 06:03 lost+found $ kubectl delete pods/csi-example-pod pod "csi-example-pod" deleted $ kubectl create -f https://raw.githubusercontent.com/linode/linode-blockstorage-csi-driver/master/pkg/linode-bs/examples/kubernetes/csi-app.yaml pod/csi-example-pod created $ sleep 30; kubectl exec -it csi-example-pod -- /bin/sh -c "ls -l /data; cat /data/example.txt" total 20 -rw-r--r-- 1 root root 12 Dec 5 13:06 example.txt drwx------ 2 root root 16384 Dec 5 06:03 lost+found persistence
- Until this driver has reached v1.0.0 it may not maintain compatibility between driver versions
- Requests for Persistent Volumes with a
require_sizeless than the Linode minimum Block Storage size will be fulfilled with a Linode Block Storage volume of the minimum size (currently 10GiB), this is in accordance with the CSI specification. The upper-limit size constraint (
limit_bytes) will also be honored so the size of Linode Block Storage volumes provisioned will not exceed this parameter.
Want to improve the linode-blockstorage-csi-driver? Please start here.