HostPath Storage for T4K

This section describes installation of Hostpath CSI driver

HostPath is storage type where volumes refer to directories on the Node (VM/machine) where your Pod is scheduled for running.

In this section we are going to see how to enable HostPath for your Kubernetes Cluster and test the VolumeSnapshot functionality which is the prerequisite for Trilio for Kubernetes (T4K).

Follow the steps below to install and validate the HostPath CSI driver :

  1. Clone the hostpath GitHub repository:

    git clone https://github.com/kubernetes-csi/csi-driver-host-path.git
  2. Go to specific directory where the installation script is available. This depends on your Kubernetes cluster version

    cd csi-driver-host-path/deploy/kubernetes-1.XX
  3. Skip this step if k8s version is less than 1.17

    # Change to the latest supported snapshotter version
    $ SNAPSHOTTER_VERSION=v2.0.1
    
    # Apply VolumeSnapshot CRDs
    $ kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/${SNAPSHOTTER_VERSION}/config/crd/snapshot.storage.k8s.io_volumesnapshotclasses.yaml
    $ kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/${SNAPSHOTTER_VERSION}/config/crd/snapshot.storage.k8s.io_volumesnapshotcontents.yaml
    $ kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/${SNAPSHOTTER_VERSION}/config/crd/snapshot.storage.k8s.io_volumesnapshots.yaml
    
    # Create snapshot controller
    $ kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/${SNAPSHOTTER_VERSION}/deploy/kubernetes/snapshot-controller/rbac-snapshot-controller.yaml
    $ kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/${SNAPSHOTTER_VERSION}/deploy/kubernetes/snapshot-controller/setup-snapshot-controller.yaml
  4. Run the shell script based on your cluster OCP/K8s Version. Make sure you install this driver in Default namespace

    ./deploy.sh
  5. Wait for the installation to complete and verify if driver is installed correctly.

    Make sure following pods are running
    
    NAME                                                  READY   STATUS      RESTARTS   AGE
    csi-hostpath-attacher-0                               1/1     Running     0          28d
    csi-hostpath-provisioner-0                            1/1     Running     1          28d
    csi-hostpath-resizer-0                                1/1     Running     0          28d
    csi-hostpath-snapshotter-0                            1/1     Running     0          28d
    csi-hostpath-socat-0                                  1/1     Running     0          28d
    csi-hostpathplugin-0                                  3/3     Running     0          28d
  6. Create a Storage and VolumeSnapshot Class for Hostpath

    • StorageClass:

      apiVersion: storage.k8s.io/v1
      kind: StorageClass
      metadata:
        name: csi-hostpath-sc
        annotations:
          storageclass.kubernetes.io/is-default-class: "true"
      provisioner: hostpath.csi.k8s.io
      reclaimPolicy: Retain
      volumeBindingMode: Immediate
    • VolumeSnapshotClass:

  7. This step we need to use the API version based on K8s/OCP Version.

    1. OCP 4.3/k8s 1.16 : apiVersion: snapshot.storage.k8s.io/v1alpha1

    2. OCP 4.4/K8s 1.17+ : apiVersion: snapshot.storage.k8s.io/v1beta1

  8. apiVersion: snapshot.storage.k8s.io/v1alpha1
    kind: VolumeSnapshotClass
    metadata:
      annotations:
        snapshot.storage.kubernetes.io/is-default-class: "true"
      name: default-snapshot-class
    snapshotter: hostpath.csi.k8s.io
    apiVersion: snapshot.storage.k8s.io/v1beta1
    kind: VolumeSnapshotClass
    metadata:
      name: default-snapshot-class
    driver: hostpath.csi.k8s.io
    deletionPolicy: Delete
  9. Create a test volume eg: task-pv-claim

    1. apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
        name: task-pv-claim
      spec:
        storageClassName: csi-hostpath-sc
        accessModes:
          - ReadWriteOnce
        resources:
          requests:
            storage: 50Mi
  10. Create a snapshot of task-pv-claim

    1. If using the Alpha version of the API

      apiVersion: snapshot.storage.k8s.io/v1alpha1
      kind: VolumeSnapshot
      metadata:
       name: new-snapshot-demo
       namespace: default
      spec:
       snapshotClassName: default-snapshot-class
       source:
        name: task-pv-claim
        kind: PersistentVolumeClaim
    2. If using Beta version of the API

      apiVersion: snapshot.storage.k8s.io/v1beta1
      kind: VolumeSnapshot
      metadata:
        name: new-snapshot
      spec:
        volumeSnapshotClassName: default-snapshot-class
        source:
          persistentVolumeClaimName: task-pv-claim
      
  11. Verify if snapshot and volume snapshot content shows created snapshot.

Last updated

Was this helpful?