Azure Kubernetes Storage

Managing storage effectively is crucial for stateful applications running on Azure Kubernetes Service (AKS). AKS integrates with various Azure storage services to provide persistent storage for your containers.

Persistent Storage Concepts

In Kubernetes, storage is managed through PersistentVolumes (PVs) and PersistentVolumeClaims (PVCs).

Azure Storage Options for AKS

AKS supports several Azure storage solutions:

Azure Disks

Azure Disks provide persistent, block-level storage volumes for your AKS nodes. They are ideal for workloads requiring low latency and high throughput, such as databases or traditional applications.

Supported Disk Types:

Dynamic Provisioning with Storage Classes:

AKS automatically creates Storage Classes for Azure Disks. You can use these to dynamically provision PVs.


apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: managed-premium
provisioner: disk.csi.azure.com
parameters:
  skuName: Premium_LRS
reclaimPolicy: Delete
volumeBindingMode: Immediate
            

Azure Files

Azure Files provides fully managed file shares that are accessible via the industry-standard Server Message Block (SMB) protocol. This is useful for scenarios where you need shared access to data across multiple pods or for lifting and shifting existing file-based applications.

Supported Protocols:

Dynamic Provisioning with Storage Classes:

You can create Storage Classes to provision Azure Files shares dynamically.


apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: azurefile-csi-premium
provisioner: file.csi.azure.com
parameters:
  skuName: Premium_LRS
reclaimPolicy: Delete
volumeBindingMode: Immediate
            

Azure NetApp Files (ANF)

Azure NetApp Files is a high-performance file storage service that can be used with AKS for demanding enterprise workloads like SAP HANA, Oracle, and custom applications that require extreme performance and low latency.

Key Features:

For ANF integration, you'll typically need to set up ANF volumes in Azure and then use a CSI driver to make them available to AKS. Refer to Azure documentation for detailed setup steps.

Configuring Persistent Volume Claims

Once you have a StorageClass defined or available, you can create a PersistentVolumeClaim to request storage.


apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  accessModes:
    - ReadWriteOnce # For Azure Disks
    # - ReadWriteMany # For Azure Files
  storageClassName: managed-premium # Or your chosen StorageClass
  resources:
    requests:
      storage: 10Gi
            

Using PVCs in Pods

Mount your PVC into your pod's containers.


apiVersion: v1
kind: Pod
metadata:
  name: my-app-pod
spec:
  containers:
  - name: my-app-container
    image: nginx
    ports:
    - containerPort: 80
    volumeMounts:
    - mountPath: "/app/data"
      name: persistent-storage
  volumes:
  - name: persistent-storage
    persistentVolumeClaim:
      claimName: my-pvc # Reference your PVC
            
Note: Ensure your AKS cluster has the appropriate CSI drivers enabled or installed for the storage services you intend to use (e.g., `disk.csi.azure.com`, `file.csi.azure.com`).
Tip: For most use cases, leveraging dynamic provisioning with Storage Classes is the recommended approach as it simplifies storage management.