Skip to content

A Lustre container storage interface that allows Kubernetes to mount/unmount provisioned Lustre filesystems into containers.

License

Notifications You must be signed in to change notification settings

HewlettPackard/lustre-csi-driver

Repository files navigation

Lustre CSI Driver

Overview

This repository provides a Lustre Container Storage Interface (CSI), allowing Container Orchestration (CO) frameworks to mount and unmount Lustre filesystems to/from containers in their purview.

Features

  • Static Provisioning - Mount and unmount externally-created Lustre volumes within containers using Persistent Volumes (PV) and Persistent Volume Claims (PVC).

Kubernetes Compatibility Matrix

Lustre CSI Driver / Kubernetes Version v1.13-1.18 v1.25 v1.27 v1.28 v1.29
v0.0.10 yes yes yes
v0.1.0 yes yes

Deployment

This describes methods of deploying the Lustre CSI driver in various environments.

Helm

You can use Helm to manage the lustre CSI driver components:

  • To deploy: cd charts/ && helm install lustre-csi-driver lustre-csi-driver/ --values lustre-csi-driver/values.yaml
  • To shut down: helm delete lustre-csi-driver

Kubernetes

Deployment uses Kustomize to configure the deployment YAMLs in the kustomization base deploy/kubernetes/base.

  • To deploy using the Makefile: make deploy
  • To undeploy using the Makefile: make undeploy

To deploy a specific overlay:

  • make deploy OVERLAY=overlays/<overlay>

Otherwise, you can just use the pre-built .yaml files in deploy/kubernetes:

  • kubectl apply -k 'https://github.com/HewlettPackard/lustre-csi-driver.git/deploy/kubernetes/overlays/kind/?ref=master'

Kind

This assumes your Kind environment is already set up and ready for a deployment. A Kind kustomization overlay is defined by the YAMLs in deploy/kubernetes/overlays/kind.

  • To deploy using the Makefile: make kind-push && make kind-deploy
  • To undeploy using the Makefile: make kind-undeploy

Usage

This section provides examples for consuming a Lustre filesystem via a Kubernetes PersistentVolume (PV) and PersistentVolumeClaim (PVC), and finally an example of using the PVC in a simple application deployed as a Pod.

It assumed that a Lustre filesystem is already created, and that the Lustre CSI driver is deployed on your Kubernetes cluster wherever the application pods are running (see Deployment for instructions).

Inspect the example_*.yaml Kubernetes resources under deploy/kubernetes/base, then:

  1. Update example_pv.yaml's volumeHandle value to the NID list of your Lustre filesystem's MGS.
  2. Deploy the PV: kubectl apply -f deploy/kubernetes/base/example_pv.yaml
  3. Deploy the PVC: kubectl apply -f deploy/kubernetes/base/example_pvc.yaml
  4. Deploy the app: kubectl apply -f deploy/kubernetes/base/example_app.yaml
    • Note: The lustre filesystem defaults to being mounted at /mnt/lus within the container. Update this in example_app.yaml if you desire a different location.

Steps for Releasing a Version

  1. Checkout the project at the commit you wish to release
  2. Create a local annotated tag: git tag -a <tag> -m <message>
  3. Push this tag to remote: git push origin <tag>
    • This will trigger a package build with the <tag> version
  4. Go to GitHub releases and Draft a New Release
  5. Use the tag corresponding to the release and fill out Title/Features/Bugfixes/etc.