Volumes
In order to persist data in Pods we need to use Volumes in K8s, similar to volumes in Docker.
The actual storage or the storage backend is an external object to K8s. Kubernetes is a user of the storage not provider.
3 Tiers:
- Persistent Volume
- a cluster resource
- create via YAML file
- needs actual physical storage: local, remote
- example:
yaml apiVersion: v1 kind: PersistentVolume metadata: name: pv-name spec: capacity: storage: 5Gi volumeMode: Filesystem accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Recycle storageClassName: slow mountOptions: - hard - nfsvers=4.0 nfs: path: /dir/path/on/nfs/server server: nfs-server-ip-address
-
Persistent Volume Claim
yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-name spec: storageClassName: manual volumeMode: Filesystem accessModes: - ReadWriteOnce resources: requests: storage: 10Giyaml apiVersion: v1 kind: Pod metadata: name: mypod spec: containers: - name: myfrontend image: nginx volumeMounts: - mountPath: /var/www/html name: mypd volumes: - name: mypd persistentVolumeClaim: claimName: pvc-name- Storage Class - creates volumes dynamically - YAML file - avoids the manual and tedious work required for PV and PVCs - exmampleyaml apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: storage-class-name provisioner: kubernetes.io/aws-ebs parameters: type: io1 iopsPerGB: "10" fsType: ext4- still needs a PVC and Pod level configuration