CSI Installation

This chapter describes the installation of the KumoScale software and Kubernetes orchestration CSI plug-in (driver). The driver must be installed on the master (controller) node.

Installation Files and Examples

Make sure the following files are at hand before beginning the installation process:

  • The KumoScale CSI driver may be loaded from a container repository or provided by KIOXIA as a binary container. Ensure you have one of these installation options available.
  • The KumoScale CSI driver installation file ks-csi.yaml will be created from the appropriate sample file. Use
  • ks-csi-Version.yaml for Kubernetes orchestration release 1.20 or higher,
  • ks-csi1.16-19-Version.yaml for Kubernetes orchestration release 1.16-1.19.
  • ks-csi15.yaml for Kubernetes orchestration release 1.15.
  • The KumoScale Provisioner service secret file provisioner-secret.yaml.

The following files are provided as examples:

  • provisioner-storage-class.yaml – an example of a storage class for a volume to be created by the KumoScale CSI driver.
  • yaml – an example of a pod with a web container (nginx), requesting a persistent volume (kube1).
  • yaml – an example of a persistent volume claim for a KumoScale volume.
  • The following files may be used as an example for creating a snapshot and snapshot volumes (see Using Snapshots):
    1. yaml – an example for a volume snapshot class.
    2. yaml – an example for a writable snapshot volume.
    3. yaml – an example for a read-only snapshot (use with ReadOnlyStorageClass.yaml for the read-only property).

To install the CSI plug-in, complete following steps, which are described below:

  • Create a token.
  • Update the KumoScale Provisioner service secret file.
  • Create the secret.
  • For  Kubernetes version 1.20 and higher, Install the Snapshot Plug-ins
  • Update the CSI driver installation file.
  • Prepare the environment for features in beta.
  • Install the KumoScale CSI driver.

Create a Token

Create an authentication token for the KumoScale Provisioner service, using the KumoScale REST API (REpresentational State Transfer Application Programming Interface) or CLI (Command-Line Interface) generate-token command with the storage or administrator role.

Update the Provisioner Service Secret File

Update the provisioner-secret.yaml file with the Provisioner URL and the token created in the previous step. You may optionally also provide the tenantID of an existing provisioner service tenant.

Create the Secret

Create the secret with the following command:

kubectl create -f provisioner-secret.yaml

Install the Snapshot Plug-ins

For Kubernetes version 1.20 and higher, make sure snapshot-controller and snapshot-crds are installed. These should be included in your Kubernetes distribution. If they are not, you can use the example yaml files to install them.

Update the CSI Driver Installation File

See Installation Files and Examples for the example file to use for ks-csi.yaml, the CSI driver installation file.

NOTE: If kublet is not running with the default root directory (the default root directory is /var/lib/kubelet), you will need to replace every occurrence of /var/lib/kubelet in the installation yaml with the root directory which is in use.

Update ks-csi.yaml with the parameters of the KumoScale CSI controller plug-in, ks-csi-plugin. The plug-in enables storage provisioning from Kubernetes on top of KumoScale and the Provisioner. Update with the:

  • IP address and port of the container repository or the location of the binary container (in this example – xx.xx.xx:8082).
  • KumoScale CSI driver version (in this example – 4.244).
   - name: ks-csi-plugin

     image: 10.xx.xx.xx:8082/ks-csi-plugin:v1.4.244

Prepare the Environment for CSI Features in Beta

The Kubernetes orchestration ExpandVolume command is in beta. Kubernetes snapshots are generally available in version 1.20 and higher. The following sections discuss how to enable one or both of these features as required by the version of Kubernetes you are using.

The Kubernetes Environment

Update the status of the relevant feature by enabling the command through running kubelet and kube-apiserver with the additional parameters:

 

Expand Volume, for Kubernetes versions 1.16 and higher:

--feature-gates=ExpandCSIVolumes=true,ExpandInUsePersistentVolumes=true

Snapshots, for Kubernetes versions below 1.20 but higher than 1.17:

--feature-gates=VolumeSnapshotDataSource=true

For example, in CentOS operating system Kube nodes:

  • In all Kube nodes:
    • Edit the following file:
/var/lib/kubelet/kubeadm-flags.env
    • To configure Kublet, add the feature gates listed above to the variable:

KUBELET_KUBEADM_ARGS

  • In the master node:
    • To configure kube-apiserver, add the feature gates listed above to the API server in the file:
/etc/kubernetes/manifests/kube-apiserver.yaml

Enable Volume Expansion in the Storage Class

To expand a volume you will need to set allowVolumeExpansion:true in the yaml for your storage class.

KumoScale CSI Environment

Create a designated secret with the namespace kube-system and the name kumoscale-provisioner containing the KumoScale Provisioner service URL and token.

You can use the provisioner-secret.yaml from the examples directory for this purpose. Update this file before creating the secret.

If your deployment runs kubelet from a directory other than the default root directory (/var/lib/kubelet), edit the installation file (ks-csi.yaml) and replace each occurrence of /var/lib/kubelet with your directory.

Install the KumoScale CSI Driver

  • Enter the following command:
kubectl create -f ks-csi.yaml

The driver will start running if it was successfully installed.

  • Verify that all the driver pods are up, by running:
kubectl get pods –n kube-system
  • A node driver will be visible on each node, with the name:
csi-kumoscale-node-xxxxx

One controller driver is visible, with the name:

csi-kumoscale-controller-XXXXXXXXXX-XXXXX

Next: CSI Storage Provisioning