Using Local Path Provisioner

Using Local Path Provisioner

Overview

Local Path Provisioner, provides a way for the Kubernetes users to utilize the local storage in each node. It supports multi-node setups. This tutorial will show you how to setup local-path-prvisioner on two node minikube cluster.

Prerequisites

  • Minikube version higher than v1.27.0
  • kubectl

Tutorial

  • Start a cluster with 2 nodes:
$ minikube start -n 2
  • Enable storage-provisioner-rancher addon:
$$$ minikube addons enable storage-provisioner-rancher$$
  • You should be able to see Pod in the local-path-storage namespace:
$$$ kubectl get pods -n local-path-storage NAME READY STATUS RESTARTS AGE local-path-provisioner-7f58b4649-hcbk9 1/1 Running 0 38s$$
  • The local-path StorageClass should be marked as default:
$$$ kubectl get sc NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE local-path (default) rancher.io/local-path Delete WaitForFirstConsumer false 107s standard k8s.io/minikube-hostpath Delete Immediate false 4m27s$$
  • The following yaml creates PVC and Pod that creates file with content on second node (minikube-m02):
$$--- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: test-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 64Mi --- apiVersion: v1 kind: Pod metadata: name: test-local-path spec: restartPolicy: OnFailure nodeSelector: "kubernetes.io/hostname": "minikube-m02" containers: - name: busybox image: busybox:stable command: ["sh", "-c", "echo 'local-path-provisioner' > /test/file1"] volumeMounts: - name: data mountPath: /test volumes: - name: data persistentVolumeClaim: claimName: test-pvc$$
$$$ kubectl get pvc NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE test-pvc Bound pvc-f07e253b-fea7-433a-b0ac-1bcea3f77076 64Mi RWO local-path 5m19s$$
$$$ kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES test-local-path 0/1 Completed 0 5m19s 10.244.1.5 minikube-m02 $$
  • On the second node we are able to see created file with content local-path-provisioner:
$$$ minikube ssh -n minikube-m02 "cat /opt/local-path-provisioner/pvc-f07e253b-fea7-433a-b0ac-1bcea3f77076_default_test-pvc/file1" local-path-provisioner$$