# Use OpenEBS for Kubernetes-native persistent storage on Azure Cobalt 100-based Arm64 virtual machines

## In this learning path

- [Introduction](https://learn.arm.com/learning-paths/servers-and-cloud-computing/openebs-cobalt/)
- [Understand how OpenEBS provides Kubernetes-native persistent storage on Azure](https://learn.arm.com/learning-paths/servers-and-cloud-computing/openebs-cobalt/background/)
- [Create an Arm64 virtual machine powered by Azure Cobalt 100](https://learn.arm.com/learning-paths/servers-and-cloud-computing/openebs-cobalt/instance/)
- [Deploy OpenEBS on an Arm-based virtual machine](https://learn.arm.com/learning-paths/servers-and-cloud-computing/openebs-cobalt/openebs-installation/)
- [Validate persistent storage with OpenEBS on an Arm-based virtual machine](https://learn.arm.com/learning-paths/servers-and-cloud-computing/openebs-cobalt/openebs-persistent-storage-validation/)
- [Allow access to the OpenEBS application on Azure](https://learn.arm.com/learning-paths/servers-and-cloud-computing/openebs-cobalt/firewall/)
- [Next Steps](https://learn.arm.com/learning-paths/servers-and-cloud-computing/openebs-cobalt/_next-steps/)

## About this Learning Path

|  |  |
| --- | --- |
| Skill level: | Introductory |
| Reading time: | 1 hr |
| Last updated: | 02 Oct 2026 |

|  |  |
| --- | --- |
| Author: | Pareena Verma , Arm<br>[GitHub](https://github.com/pareenaverma)<br>[LinkedIn](https://linkedin.com/in/pareena-verma-7853607) |
| Arm IP: | [Neoverse](https://support.arm.com/?tab=compute-ip&Product%20Type=Infrastructure%20Processors) |
| Tags: | [Containers and Virtualization](https://learn.arm.com/tag/containers-and-virtualization) [Microsoft Azure Cobalt](https://learn.arm.com/tag/microsoft-azure-cobalt) [Linux](https://learn.arm.com/tag/linux) [Kubernetes](https://learn.arm.com/tag/kubernetes) [K3s](https://learn.arm.com/tag/k3s) [OpenEBS](https://learn.arm.com/tag/openebs) [Helm](https://learn.arm.com/tag/helm) |

### Who is this for?
This is an introductory topic for DevOps engineers, platform engineers, cloud-native developers, and Kubernetes administrators who want to deploy lightweight Kubernetes-native persistent storage on Arm-based cloud infrastructure.

### What will you learn?
After completing this Learning Path, you'll be able to perform the following tasks:
- Install and configure K3s Kubernetes on Arm64 virtual machines (VMs) powered by Azure Cobalt 100.
- Deploy OpenEBS LocalPV using Helm.
- Configure Kubernetes storage classes and PersistentVolumeClaims (PVCs).
- Deploy and validate stateful Kubernetes workloads with persistent storage.

### Prerequisites
Before starting, you'll need the following prerequisites:
- A [Microsoft Azure account](https://azure.microsoft.com/) with access to Cobalt 100-based instances (Dpsv6)
- Basic knowledge of Linux command-line operations
- Familiarity with SSH and remote server access
- Basic understanding of Kubernetes concepts and containerized applications

### Summary
You’ll add Kubernetes-native persistent storage to a workload on an Arm64 Azure VM powered by Cobalt 100. First, you’ll create a single-node K3s cluster, install OpenEBS LocalPV with Helm, and configure its storage class. You’ll then create a PersistentVolumeClaim, mount it in an NGINX application, and verify that test data survives pod recreation. Finally, you’ll expose the application through a NodePort and update the Azure network security group for inbound access.

### Frequently asked questions

**How can I install a specific version of the OpenEBS Helm chart?**

Run `helm search repo openebs/openebs --versions` to list available chart versions, then add `--version <version>` to the provided `helm install` command. Without this option, you install the latest available chart.

**How do I expose the sample application so I can reach it from my browser?**

Expose the NGINX deployment as a NodePort service and run `kubectl get svc` to see the assigned port. Then add an inbound rule for that NodePort in the VM’s Network Security Group.

**What storage configuration should I use for the PersistentVolumeClaim?**

Use `storageClassName: openebs-hostpath` and `accessModes: ReadWriteOnce` as shown in the PersistentVolumeClaim manifest. This configuration targets OpenEBS LocalPV for dynamic provisioning.

**How do I know persistent storage is working before I move on?**

Write data to the mounted volume in the NGINX pod, delete the pod, and let it recreate. If the data is still present after the pod comes back, the volume is persisting as expected.

**Do I need a multi-node cluster?**

No. Use a lightweight single-node Kubernetes cluster with K3s on the VM.
