Kubernetes-Storage

Volume Types

emptyDir

Empty directory for storing data ephemeral data from the Pods

  apiVersion: v1
  kind: Pod
  spec:
    volumes:
      - name: html
        emptyDir: {}
    containers:
      - name: nginx
        image: nginx:alpine
        volumeMounts:
          - name: html
            mountPath: /usr/share/nginx/html
            readOnly: false
  
      - name: html-example
        image: alpine:latest
        command: ["/bin/sh", "-c"]
        args:
          - while true; do date >> /html/index.html; sleep 10; done
        volumeMounts:
          - name: html
            mountPath: /html
            readOnly: false

hostPath

A volume that's mounted in the Node's filesystem and is shared with a Pod

nfs

A NFS share mounted into the Pod

configMap/secret

Provides access to Kubernetes resources

persistentVolumeClaim

A persistentVolume is a cluster-wide storage resource that relies on network-attached storage. It's abstracted and associated to a Pod via a PersistentVolumeClaim (PVC).

  • Definying a persistent volume
  apiVersion: v1
  kind: PersistentVolume
  metadata:
    name: pv-1
  spec:
    capacity:
      storage: 20Gi
    accessModes:
      - ReadWriteOnce
      - ReadOnlyMany
    persistentVolumePolicy: Retain
    azureFile:
      secretName: <azure-secret>
      shareName: <azure-fileshare>
      readOnly: false
  • Setting up a volume claim
  apiVersion: v1
  kind: PersistentVolumeClaim
  metadata:
    name: pv-demo
    annotations:
      volume.beta.kubernetes.io/storage-class: accounthdd
  spec:
    accessModes:
      - ReadWriteOnce
    resources:
      requests:
        storage: 5Gi
    storageClassName: cdk-cinder

Cloud

Cluster-wide storage, which varies depending on the cloud provider

  • AWS
    • Elastic Block Store
  • Azure
    • Azure Disk
    • Azure File
  • GCP
    • GCE Persistent Disk

References:

Backlinks: