3 min read | by Jordi Prats
Longhorn is a highly available persistent storage for Kubernetes. It implements distributed block storage using containers and microservices creating a dedicated storage controller for each block device volume and synchronously replicating the volume across multiple replicas stored on multiple nodes. It might sound intimidating, but it's very straightforward to install
On each node we will need to install some dependencies:
So, on Ubuntu we just need to run:
apt-get install open-iscsi jq -y
Once ready, we can run the environment_check.sh script as follows to make sure everything is in place:
# curl https://raw.githubusercontent.com/longhorn/longhorn/v1.1.2/scripts/environment_check.sh | bash
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 2794 100 2794 0 0 39914 0 --:--:-- --:--:-- --:--:-- 39914
daemonset.apps/longhorn-environment-check created
waiting for pods to become ready (0/1)
waiting for pods to become ready (0/1)
all pods ready (1/1)
MountPropagation is enabled!
cleaning up...
daemonset.apps "longhorn-environment-check" deleted
clean up complete
If that looks good we can proceed creating the values.yaml. It's safe to go with the defaults, so we just need to enable the ingress if we want to enable it's web interface:
ingress:
enabled: true
host: longhorn.local
We can install the helm chart as follows:
helm repo add longhorn https://charts.longhorn.io
helm repo update
helm install longhorn longhorn/longhorn --namespace longhorn-system --create-namespace -f values.yaml
We'll have to wait for a while to let Kubernetes create all the required pods:
$ kubectl get pods -n longhorn-system
NAME READY STATUS RESTARTS AGE
csi-attacher-75588bff58-6njjt 1/1 Running 0 16m
csi-attacher-75588bff58-v5fqv 1/1 Running 0 16m
csi-attacher-75588bff58-xb5pp 1/1 Running 0 16m
csi-provisioner-669c8cc698-dt9wd 1/1 Running 0 16m
csi-provisioner-669c8cc698-gmtvm 1/1 Running 0 16m
csi-provisioner-669c8cc698-rlx4b 1/1 Running 0 16m
csi-resizer-5c88bfd4cf-98sbp 1/1 Running 0 16m
csi-resizer-5c88bfd4cf-jltt5 1/1 Running 0 16m
csi-resizer-5c88bfd4cf-mgwhj 1/1 Running 0 16m
csi-snapshotter-69f8bc8dcf-6kbrn 1/1 Running 0 16m
csi-snapshotter-69f8bc8dcf-rr2xj 1/1 Running 0 16m
csi-snapshotter-69f8bc8dcf-zhx2w 1/1 Running 0 16m
engine-image-ei-d4c780c6-77mcf 1/1 Running 0 17m
engine-image-ei-d4c780c6-phgbg 1/1 Running 0 17m
engine-image-ei-d4c780c6-z7bzd 1/1 Running 0 17m
instance-manager-e-1b82056b 1/1 Running 0 17m
instance-manager-e-45737e61 1/1 Running 0 16m
instance-manager-e-9a755162 1/1 Running 0 17m
instance-manager-r-6b4a827c 1/1 Running 0 8m45s
instance-manager-r-758bd997 1/1 Running 0 6m48s
longhorn-csi-plugin-nwvjn 2/2 Running 0 16m
longhorn-csi-plugin-wbs5h 2/2 Running 0 16m
longhorn-csi-plugin-wmqxm 2/2 Running 0 16m
longhorn-driver-deployer-75f68555c9-kqp5q 1/1 Running 0 17m
longhorn-manager-d4455 1/1 Running 0 17m
longhorn-manager-dk7tl 1/1 Running 0 17m
longhorn-manager-knxsk 1/1 Running 0 17m
longhorn-ui-75ccbd4695-nftq7 1/1 Running 0 17m
Once ready we can check that there's a longhorn StorageClass available:
$ kubectl get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
local-path (default) rancher.io/local-path Delete WaitForFirstConsumer false 9d
longhorn driver.longhorn.io Delete Immediate true 3d
To start using it we can either set it as the default or explicitly set the StorageClass on the PVC:
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: data0-minio-pet2cattle-ss
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
storageClassName: longhorn
We can see the PVC is using the longhorn StorageClass (6th column):
$ kubectl get pvc -n minio
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
data0-minio-pet2cattle-ss-0-0 Bound pvc-6137ddaf-6f07-491e-b217-a33328d2d4a3 20Gi RWO longhorn 6m7s
data1-minio-pet2cattle-ss-0-0 Bound pvc-c1638ade-5b0e-4023-b981-333f95d6888f 20Gi RWO longhorn 6m7s
data2-minio-pet2cattle-ss-0-0 Bound pvc-0e288e7d-2e22-454f-96c0-c7122df87c44 20Gi RWO longhorn 6m7s
data3-minio-pet2cattle-ss-0-0 Bound pvc-adad20f8-1fb4-4d9d-8c5a-d36e2a5a5c97 20Gi RWO longhorn 6m7s
Posted on 13/12/2021