Skip to main content

local path provisioner

ben.wangzLess than 1 minute

local path provisioner

references

  • https://github.com/rancher/local-path-provisioner
  • https://github.com/rancher/local-path-provisioner/tree/master/deploy/chart/local-path-provisioner

installation

  1. prepare local-path-provisioner.yaml
    • apiVersion: argoproj.io/v1alpha1
      kind: Application
      metadata:
        name: opt-local-path
      spec:
        syncPolicy:
          syncOptions:
          - CreateNamespace=true
        project: default
        source:
          repoURL: https://charts.containeroo.ch
          chart: local-path-provisioner
          targetRevision: 0.0.32
          helm:
            releaseName: opt-local-path
            valuesObject:
              replicaCount: 1
              image:
                repository: m.daocloud.io/docker.io/rancher/local-path-provisioner
              helperImage:
                repository: m.daocloud.io/docker.io/library/busybox
                tag: latest
              helperPod:
                resources:
                  requests:
                    cpu: 100m
                    memory: 128Mi
                  limits:
                    cpu: 500m
                    memory: 512Mi
              nodePathMap:
                - node: DEFAULT_PATH_FOR_NON_LISTED_NODES
                  paths:
                    - /opt/local-path/local-path-provisioner
                #- node: k3s1
                  #paths:
                  #- /opt/disk-mount/local-path-provisioner
              storageClass:
                create: true
                defaultClass: false
                defaultVolumeType: local
                name: opt-local-path
                reclaimPolicy: Delete
              resources:
                requests:
                  cpu: 100m
                  memory: 128Mi
                limits:
                  cpu: 500m
                  memory: 512Mi
        destination:
          server: https://kubernetes.default.svc
          namespace: storage
      
      
  2. apply to k8s
    • kubectl -n argocd apply -f local-path-provisioner.yaml
      
  3. sync by argocd
    • argocd app sync argocd/opt-local-path
      

tests

  1. prepare busybox-pvc-test.yaml
    • apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
        name: opt-local-path-pvc
      spec:
        accessModes:
          - ReadWriteOnce
        resources:
          requests:
            storage: 1Gi
        storageClassName: opt-local-path
      
      ---
      
      apiVersion: batch/v1
      kind: Job
      metadata:
        name: busybox-pvc-test-job
      spec:
        completions: 1
        parallelism: 1
        backoffLimit: 4
        template:
          metadata:
            labels:
              app: busybox-pvc-test
          spec:
            restartPolicy: Never
            containers:
            - name: busybox-pvc-test
              image: m.daocloud.io/docker.io/library/busybox:latest
              command:
                - sh
                - -c
                - |
                  echo "Writing to PVC..."
                  RANDOM_STR=$(tr -dc A-Za-z0-9 </dev/urandom | head -c 16)
                  echo "hello local path provisioner $RANDOM_STR" > /data/hello.txt
                  echo "Reading from PVC..."
                  READ_STR=$(cat /data/hello.txt)
                  echo "Written content: hello local path provisioner $RANDOM_STR"
                  echo "Read content: $READ_STR"
                  if [ "$READ_STR" = "hello local path provisioner $RANDOM_STR" ]; then
                    echo "PVC test completed successfully!"
                  else
                    echo "PVC test failed!"
                    exit 1
                  fi
              volumeMounts:
              - name: opt-local-path-vol
                mountPath: /data
            volumes:
            - name: opt-local-path-vol
              persistentVolumeClaim:
                claimName: opt-local-path-pvc
      
      
  2. apply to k8s
    • kubectl -n default apply -f busybox-pvc-test.yaml
      
  3. check log of the test job
    • kubectl -n default logs job/busybox-pvc-test-job
      
  4. delete job and pvc
    • kubectl -n default delete job busybox-pvc-test-job
      kubectl -n default delete pvc opt-local-path-pvc