| #!/bin/bash |
| ############################################################################### |
| # |
| # This script creates an NFS Persistent Volumes(PV) and also claims that PV |
| # with a PVC of the same size. |
| # Note: PVs can be claimed by one PVC at a time |
| # |
| ############################################################################### |
| # |
| # Requirements: |
| # - NFS server with directory to use as path for mount |
| # - Access to an existing Kubernetes Cluster |
| # - Kubectl installed and configured on machine running script |
| # |
| ############################################################################### |
| # |
| # The script expects a few variables which are needed to define PV's and PVC's |
| # NS = Namespace under which to create the mounts on the cluster |
| # NFSIP = Server IP for NFS server that will be used |
| # NFSPATH = Path of the directory that will be mounted from NFS server |
| # SIZE = The size of the volume, numeric value followed by Gi or Mi |
| # NAME = The name of the PV and PVC that will be used by the Kubernetes |
| # system to refer to PV/PVC |
| # MODE = ReadWriteOnce|ReadOnlyMany|ReadWriteMany |
| # Access Mode used by NFS normally uses ReadWriteMany |
| # RECLAIM = recycle|delete|retain |
| # The policy, defines what occurs when claim on PV is released, can |
| # be either: recycle, delete, or retain. |
| # |
| # Note: Kubernetes Systems permissions vary by implementation |
| # some will require permissions to create PV's or PVC's |
| # |
| ############################################################################### |
| |
| NS=${NS:-openbmc} |
| NFSIP=${NFSIP:-NFS-Server} |
| NFSPATH=${NFSPATH:-/san/dir} |
| SIZE=${SIZE:-10Gi} |
| NAME=${NAME:-placeholder} |
| MODE=${MODE:-ReadWriteMany} |
| RECLAIM=${RECLAIM:-Retain} |
| |
| # Generate the PV |
| pv=$(cat << EOF |
| apiVersion: v1 |
| kind: PersistentVolume |
| metadata: |
| labels: |
| app: ${NS} |
| name: ${NAME} |
| namespace: ${NS} |
| spec: |
| accessModes: |
| - ${MODE} |
| capacity: |
| storage: ${SIZE} |
| nfs: |
| path: ${NFSPATH} |
| server: ${NFSIP} |
| persistentVolumeReclaimPolicy: ${RECLAIM} |
| EOF |
| ) |
| |
| # create the volume |
| if [ -z $(kubectl get pv --namespace=${NS} | grep '^'${NAME}' ' | cut -d " " -f1) ];then |
| echo "Creating Persistent Volume ${NAME}" |
| kubectl create -f - <<< "${pv}" |
| else |
| echo "Persistent Volume already Exists" |
| fi |
| |
| |
| # Generate the PVC |
| pvc=$(cat << EOF |
| apiVersion: v1 |
| kind: PersistentVolumeClaim |
| metadata: |
| name: ${NAME} |
| namespace: ${NS} |
| spec: |
| accessModes: |
| - ${MODE} |
| resources: |
| requests: |
| storage: ${SIZE} |
| selector: |
| matchLabels: |
| app: ${NS} |
| EOF |
| ) |
| |
| # create PVC's to bind the PV's |
| if [ -z $(kubectl get pvc --namespace=${NS} | grep '^'${NAME}' ' | cut -d " " -f1) ];then |
| echo "Creating Persistent Volume Claim ${NAME}" |
| kubectl create -f - <<< "${pvc}" |
| else |
| echo "Persistent volume claim already exists." |
| fi |