storage
Certainly! In Kubernetes, storage is managed through the use of persistent volumes (PVs) and persistent volume claims (PVCs). Here are some common usages of storage in Kubernetes along with examples:
1. Static Provisioning:
Usage:
Pre-provision storage volumes before pods are created.
Example:
apiVersion: v1 kind: PersistentVolume metadata: name: my-pv spec: capacity: storage: 5Gi accessModes: - ReadWriteOnce hostPath: path: "/mnt/data"
2. Dynamic Provisioning:
Usage:
Automatically provision storage volumes when a PVC is created.
Example:
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: my-sc provisioner: my-provisioner --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-pvc spec: storageClassName: my-sc accessModes: - ReadWriteOnce resources: requests: storage: 5Gi
3. Volume Mounts in Pods:
Usage:
Mounting persistent volumes into pods.
Example:
apiVersion: v1 kind: Pod metadata: name: mypod spec: containers: - name: mycontainer image: myimage volumeMounts: - name: my-pv-storage mountPath: /app/data volumes: - name: my-pv-storage persistentVolumeClaim: claimName: my-pvc
4. ReadWriteMany Access Mode:
Usage:
Allow multiple pods to read and write to the same volume simultaneously.
Example:
apiVersion: v1 kind: PersistentVolume metadata: name: my-pv spec: capacity: storage: 5Gi accessModes: - ReadWriteMany hostPath: path: "/mnt/data"
5. ReadOnlyMany Access Mode:
Usage:
Allow multiple pods to read from the same volume, but only one pod can write.
Example:
apiVersion: v1 kind: PersistentVolume metadata: name: my-pv spec: capacity: storage: 5Gi accessModes: - ReadOnlyMany hostPath: path: "/mnt/data"
6. StatefulSets:
Usage:
Managing stateful applications with persistent storage.
Example:
apiVersion: apps/v1 kind: StatefulSet metadata: name: my-statefulset spec: serviceName: "web" replicas: 3 template: metadata: labels: app: my-app spec: containers: - name: my-container image: my-image volumeMounts: - name: storage-volume mountPath: /data volumeClaimTemplates: - metadata: name: storage-volume spec: accessModes: ["ReadWriteOnce"] resources: requests: storage: 5Gi
7. Storage Classes:
Usage:
Define storage classes with different properties.
Example:
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: fast provisioner: my-provisioner parameters: type: fast
8. Persistent Volume Resize:
Usage:
Dynamically resize a persistent volume.
Example:
apiVersion: v1 kind: PersistentVolume metadata: name: my-pv spec: capacity: storage: 5Gi accessModes: - ReadWriteOnce hostPath: path: "/mnt/data"
9. Subpath Volume Mounts:
Usage:
Mounting specific subdirectories from a persistent volume.
Example:
apiVersion: v1 kind: Pod metadata: name: mypod spec: containers: - name: mycontainer image: myimage volumeMounts: - name: my-pv-storage mountPath: /app/data subPath: mysubdirectory volumes: - name: my-pv-storage persistentVolumeClaim: claimName: my-pvc
These examples cover various storage-related scenarios in Kubernetes, demonstrating how to provision, use, and manage storage resources for applications running in a Kubernetes cluster.