diff --git a/content/learning-paths/servers-and-cloud-computing/openebs-cobalt/_index.md b/content/learning-paths/servers-and-cloud-computing/openebs-cobalt/_index.md index 10268915d4..0245416aec 100644 --- a/content/learning-paths/servers-and-cloud-computing/openebs-cobalt/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/openebs-cobalt/_index.md @@ -1,24 +1,20 @@ --- -title: Deploy OpenEBS on Azure Cobalt 100 Arm64 virtual machines for Kubernetes-native persistent storage +title: Use OpenEBS for Kubernetes-native persistent storage on Azure Cobalt 100-based Arm64 virtual machines -draft: true -cascade: - draft: true - -description: Learn how to install and configure OpenEBS LocalPV on an Azure Cobalt 100 Arm64 virtual machine using K3s Kubernetes, provision persistent storage dynamically, deploy stateful applications, and validate persistent storage functionality. +description: Learn how to install and configure OpenEBS LocalPV on an Arm64 virtual machine powered by Azure Cobalt 100 using K3s Kubernetes, provision persistent storage dynamically, deploy stateful applications, and validate persistent storage functionality. minutes_to_complete: 60 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. learning_objectives: - - Install and configure K3s Kubernetes on Azure Cobalt 100 Arm64 virtual machines + - Install and configure K3s Kubernetes on Arm64 virtual machines powered by Azure Cobalt 100 - Deploy OpenEBS LocalPV using Helm - - Configure Kubernetes storage classes and Persistent Volume Claims (PVCs) + - Configure Kubernetes storage classes and PersistentVolumeClaims (PVCs) - Deploy and validate stateful Kubernetes workloads with persistent storage prerequisites: - - A [Microsoft Azure account](https://azure.microsoft.com/) with access to Cobalt 100 based instances (Dpsv6) + - 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 diff --git a/content/learning-paths/servers-and-cloud-computing/openebs-cobalt/background.md b/content/learning-paths/servers-and-cloud-computing/openebs-cobalt/background.md index d4b935ee6d..96502c1129 100644 --- a/content/learning-paths/servers-and-cloud-computing/openebs-cobalt/background.md +++ b/content/learning-paths/servers-and-cloud-computing/openebs-cobalt/background.md @@ -1,5 +1,6 @@ --- -title: Understand OpenEBS on Azure Cobalt 100 +title: Understand how OpenEBS provides Kubernetes-native persistent storage on Azure +description: Learn how OpenEBS LocalPV uses Kubernetes-native storage provisioning to support stateful workloads on Azure Cobalt 100-based Arm64 virtual machines. weight: 2 layout: "learningpathall" @@ -9,33 +10,35 @@ layout: "learningpathall" OpenEBS on Arm-based Azure Cobalt 100 processors provides lightweight, Kubernetes-native persistent storage for cloud-native workloads. Azure Cobalt 100 processors deliver dedicated physical cores per vCPU, enabling consistent and predictable performance for Kubernetes storage operations and stateful applications. -OpenEBS integrates directly with Kubernetes and dynamically provisions Persistent Volumes for applications using Container Storage Interface (CSI) drivers and storage engines. Running OpenEBS on Azure Cobalt 100 enables efficient Arm64-native Kubernetes storage deployments optimized for lightweight cloud-native environments. +OpenEBS integrates directly with Kubernetes and dynamically provisions persistent volumes for applications using Container Storage Interface (CSI) drivers and storage engines. Running OpenEBS on Azure Cobalt 100 enables efficient Arm64-native Kubernetes storage deployments optimized for lightweight cloud-native environments. ## Azure Cobalt 100 Arm-based processor -Azure’s Cobalt 100 is Microsoft’s first-generation, in-house Arm-based processor. Built on Arm Neoverse N2, Cobalt 100 is a 64-bit CPU that delivers strong performance and energy efficiency for cloud-native, scale-out Linux workloads. These workloads include web and application servers, data analytics, open-source databases, and caching systems. Running at 3.4 GHz, Cobalt 100 allocates a dedicated physical core for each vCPU, ensuring consistent and predictable performance. +Azure’s Cobalt 100 is Microsoft’s first-generation, in-house Arm-based processor. Built on Arm Neoverse N2, Cobalt 100 is a 64-bit CPU that delivers strong performance and energy efficiency for cloud-native, scale-out Linux workloads. + +Running at 3.4 GHz, Cobalt 100 allocates a dedicated physical core for each vCPU, ensuring consistent and predictable performance. To learn more, see the Microsoft blog [Announcing the preview of new Azure VMs based on the Azure Cobalt 100 processor](https://techcommunity.microsoft.com/blog/azurecompute/announcing-the-preview-of-new-azure-vms-based-on-the-azure-cobalt-100-processor/4146353). -## How OpenEBS improves Kubernetes storage +## How OpenEBS provides Kubernetes storage OpenEBS is an open-source, Kubernetes-native storage platform designed for stateful workloads running inside Kubernetes clusters. Unlike traditional external storage systems, OpenEBS runs completely inside Kubernetes and dynamically provisions storage volumes directly through Kubernetes APIs. -OpenEBS enables applications to retain persistent data even after pods restart, reschedule, or recreate. This makes OpenEBS ideal for databases, analytics platforms, message queues, and other stateful cloud-native applications. - -To learn more, see the official [OpenEBS documentation](https://openebs.io/docs). +OpenEBS allows applications to retain persistent data on a node even after pods restart, reschedule, or recreate. This makes OpenEBS ideal for databases, analytics platforms, message queues, and other stateful cloud-native applications. OpenEBS provides key capabilities for Kubernetes-native storage management: -- Dynamic Provisioning: Automatically creates Persistent Volumes using Kubernetes Persistent Volume Claims (PVCs). -- Kubernetes-native Architecture: Runs entirely inside Kubernetes without requiring external storage appliances. -- Lightweight Local Storage: OpenEBS LocalPV uses node-local storage optimized for lightweight Kubernetes environments. -- CSI Integration: Integrates with Kubernetes Container Storage Interface (CSI) drivers for standard storage management. -- Stateful Workload Support: Enables persistent storage for databases, web applications, and distributed systems. +- Dynamic provisioning: Automatically creates persistent volumes using Kubernetes PersistentVolumeClaims (PVCs). +- Kubernetes-native architecture: Runs entirely inside Kubernetes without requiring external storage appliances. +- Lightweight local storage: OpenEBS LocalPV uses node-local storage optimized for lightweight Kubernetes environments. +- CSI integration: Integrates with Kubernetes CSI drivers for standard storage management. +- Stateful workload support: Enables persistent storage for databases, web applications, and distributed systems. + +To learn more, see the official [OpenEBS documentation](https://openebs.io/docs). -## Why OpenEBS LocalPV for this learning path +## Why use OpenEBS LocalPV -This learning path uses OpenEBS LocalPV because it is optimized for: +You'll use OpenEBS LocalPV in this Learning Path because it's optimized for: - Single-node Kubernetes clusters - Arm64 environments @@ -45,22 +48,8 @@ This learning path uses OpenEBS LocalPV because it is optimized for: Advanced replicated storage engines such as Mayastor are designed for multi-node production environments and are intentionally excluded from this setup. -## Learning path overview - -In this Learning Path, you'll deploy OpenEBS LocalPV on an Azure Cobalt 100 Arm64 virtual machine using a lightweight K3s Kubernetes cluster. - -You'll learn how to: - -- Install Kubernetes using K3s -- Deploy OpenEBS LocalPV -- Configure Kubernetes storage classes -- Create Persistent Volume Claims (PVCs) -- Deploy stateful applications -- Validate persistent storage functionality -- Expose Kubernetes applications externally using Azure networking - ## What you've learned and what's next -You now understand why Azure Cobalt 100 and OpenEBS are a strong combination for lightweight Kubernetes-native persistent storage on Arm64 infrastructure. +You now understand why Azure Cobalt 100 and OpenEBS are a strong combination for lightweight Kubernetes-native persistent storage on Arm64 infrastructure. You've also learned how OpenEBS provides persistent storage and why OpenEBS LocalPV is suited for this Learning Path. Next, you'll create an Azure Cobalt 100 Arm64 virtual machine to host the Kubernetes cluster. diff --git a/content/learning-paths/servers-and-cloud-computing/openebs-cobalt/firewall.md b/content/learning-paths/servers-and-cloud-computing/openebs-cobalt/firewall.md index c4107c34cc..70d017b607 100644 --- a/content/learning-paths/servers-and-cloud-computing/openebs-cobalt/firewall.md +++ b/content/learning-paths/servers-and-cloud-computing/openebs-cobalt/firewall.md @@ -1,5 +1,6 @@ --- title: Allow access to the OpenEBS application on Azure +description: Open an Azure Network Security Group rule for a Kubernetes NodePort service and verify browser access to an OpenEBS-backed application. weight: 6 ### FIXED, DO NOT MODIFY @@ -8,15 +9,13 @@ layout: learningpathall ## Configure external traffic for the OpenEBS application -To allow external traffic to the Kubernetes application running with OpenEBS persistent storage on an Azure virtual machine, open the Kubernetes NodePort in the Network Security Group (NSG). +To allow external traffic to the Kubernetes application, open the Kubernetes NodePort in the Network Security Group (NSG) of your virtual machine (VM). -The NSG can be attached to the virtual machine's network interface or subnet. +{{% notice Note %}}For more information about Azure setup, see the [Getting started with Microsoft Azure Platform Learning Path](/learning-paths/servers-and-cloud-computing/csp/azure/).{{% /notice %}} -{{% notice Note %}}For more information about Azure setup, see [Getting started with Microsoft Azure Platform](/learning-paths/servers-and-cloud-computing/csp/azure/).{{% /notice %}} +### Identify the Kubernetes NodePort -## Identify the Kubernetes NodePort - -In the previous step you exposed the NGINX deployment as a NodePort service. Run the following command on your VM to find the port that Kubernetes assigned. +In the previous section, you exposed the NGINX deployment as a NodePort service. Run the following command on your VM to find the port that Kubernetes assigned: ```bash kubectl get svc @@ -29,15 +28,15 @@ NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) nginx-openebs NodePort 10.x.x.x 80:31635/TCP ``` -In this example, the NodePort exposed externally is `31635`. Kubernetes assigns this port dynamically, so your value may differ. Use the port shown in your own output in the firewall rule below. +In this example, the NodePort is `31635`. Kubernetes assigns this port dynamically, so your value may differ. Use the port shown in your own output in the firewall rule. ### Add an inbound firewall rule in Azure -To expose the Kubernetes NodePort externally, create a firewall rule. +To expose the Kubernetes NodePort externally, create a firewall rule: -1. Navigate to the [Azure portal](https://portal.azure.com), go to **Virtual Machines**, and select your virtual machine. +1. Navigate to the [Azure portal](https://portal.azure.com), then go to **Virtual Machines**, and select your VM. -![Azure Portal Virtual Machines page with the target VM selected. Check that you are opening the correct virtual machine before configuring its network access.#center](images/virtual_machine.png "Virtual Machines") +![Azure Portal Virtual Machines page with the target VM selected. Check that you are opening the correct virtual machine before configuring its network access.#center](images/virtual_machine.png "Virtual machines") 2. In the left menu, select **Networking**, then select **Network settings**. @@ -49,28 +48,28 @@ To expose the Kubernetes NodePort externally, create a firewall rule. 4. Configure the inbound security rule with the following settings: -- **Source:** My IP address -- **Source IP addresses:** *(auto-populated with your current public IP)* -- **Source port ranges:** * -- **Destination:** Any -- **Destination port ranges:** **31635** *(replace with your actual NodePort)* -- **Protocol:** TCP -- **Action:** Allow -- **Name:** allow-openebs-port + - **Source:** My IP address + - **Source IP addresses:** *(auto-populated with your current public IP)* + - **Source port ranges:** `*` + - **Destination:** Any + - **Destination port ranges:** **31635** *(replace with your actual NodePort)* + - **Protocol:** TCP + - **Action:** Allow + - **Name:** `allow-openebs-port` -{{% notice Note %}}Setting Source to My IP address restricts access to the Kubernetes application to your current machine only. Source port ranges remains * because this refers to the client's ephemeral outbound port, which is dynamically assigned. If your IP address changes or you need to access the application from another machine, update the source IP in this rule.{{% /notice %}} +{{% notice Note %}}Setting **Source** to `My IP address` restricts access to the Kubernetes application to your current machine only. The **Source port ranges** setting remains set to `*` because this refers to the client's ephemeral outbound port, which is dynamically assigned. If your IP address changes or you need to access the application from another machine, update the source IP in this rule.{{% /notice %}} -5. After filling in the details, select **Add** to save the rule. +5. After providing the details, select **Add** to save the rule. ## Access the application -Open the following URL in your browser. Replace `` with the public IP address of your Azure virtual machine, and replace `31635` with your actual NodePort if it differs. +Open the following URL in your browser. Replace `` with the public IP address of your Azure VM, and replace `31635` with your NodePort if it differs. ```text http://:31635 ``` -You should see the content written to the Persistent Volume in the previous step: +You should see the content written to the persistent volume in the previous section: ```output OpenEBS on Azure Cobalt D4ps Arm64 @@ -78,10 +77,24 @@ OpenEBS on Azure Cobalt D4ps Arm64 ![NGINX application running on Kubernetes with persistent storage provisioned by OpenEBS LocalPV on Azure Cobalt 100 Arm64.#center](images/openebs-browser.png "NGINX application using OpenEBS persistent storage") -## What you've learned +## (Optional) Clean up resources + +Delete the deployment: + +```bash +kubectl delete -f nginx-openebs.yaml +``` + +Delete the PVC: + +```bash +kubectl delete -f pvc.yaml +``` + +## What you've accomplished You've configured the Azure Network Security Group to allow external access to the Kubernetes application running with OpenEBS LocalPV persistent storage, and confirmed that the application is reachable from your browser. -The persistent data written earlier survived pod recreation and is now served by a stateful NGINX workload backed by OpenEBS on an Azure Cobalt 100 Arm64 virtual machine. +The persistent data that you wrote earlier survived pod recreation and is now served by a stateful NGINX workload backed by OpenEBS. -In this Learning Path, you provisioned an Azure Cobalt 100 Arm64 virtual machine, installed a single-node K3s Kubernetes cluster, deployed OpenEBS LocalPV as the default storage class, created persistent volumes for a stateful application, and validated that data survived pod restarts on Arm64 infrastructure. +You can use the workflow described in this Learning Path to add persistent storage backed by OpenEBS to your own Kubernetes applications running on Arm-based cloud infrastructure. diff --git a/content/learning-paths/servers-and-cloud-computing/openebs-cobalt/instance.md b/content/learning-paths/servers-and-cloud-computing/openebs-cobalt/instance.md index 4e421f9680..3de9d8b255 100644 --- a/content/learning-paths/servers-and-cloud-computing/openebs-cobalt/instance.md +++ b/content/learning-paths/servers-and-cloud-computing/openebs-cobalt/instance.md @@ -1,36 +1,37 @@ --- -title: Create an Azure Cobalt 100 Arm64 virtual machine +title: Create an Arm64 virtual machine powered by Azure Cobalt 100 +description: Create an Azure Cobalt 100-based Arm64 virtual machine in the Azure portal and prepare it for a Kubernetes storage deployment. weight: 3 ### FIXED, DO NOT MODIFY layout: learningpathall --- -## Set up the Azure virtual machine +## Set up an Azure virtual machine -In this section, you'll launch the Azure portal to create a virtual machine (VM) with the Arm-based Azure Cobalt 100 processor. +In this section, you'll use the Azure portal to create a virtual machine (VM) powered by the Arm-based Azure Cobalt 100 processor. -This Learning Path focuses on general-purpose virtual machines in the Dpsv6 series. For more information, see the [Microsoft Azure guide for the Dpsv6 size series](https://learn.microsoft.com/en-us/azure/virtual-machines/sizes/general-purpose/dpsv6-series). +You'll create a general-purpose virtual machine in the Dpsv6 series. For more information, see the [Microsoft Azure guide for the Dpsv6 size series](https://learn.microsoft.com/en-us/azure/virtual-machines/sizes/general-purpose/dpsv6-series). -While the steps to create this instance are included here for convenience, you can also see [Deploy a Cobalt 100 virtual machine on Azure Learning Path](/learning-paths/servers-and-cloud-computing/cobalt/). +While the steps to create this instance are included here for convenience, for more detailed steps, you can also see [Deploy a Cobalt 100 virtual machine on Azure Learning Path](/learning-paths/servers-and-cloud-computing/cobalt/). -### Create an Arm-based virtual machine in the Azure portal +### Use the Azure portal to create an Arm-based virtual machine To create an Azure virtual machine using the Azure portal: 1. Launch the Azure portal and navigate to **Virtual Machines**. 2. Select **Create**, and select **Virtual Machine** from the drop-down list. -3. In the **Basic** tab, fill in the instance details such as **Virtual machine name** and **Region**. +3. In the **Basic** tab, provide instance details such as **Virtual machine name** and **Region**. 4. Select **Ubuntu Pro 24.04 LTS** as the image for your virtual machine, and select **Arm64** as the VM architecture. 5. In the **Size** field, select **See all sizes** and select the D-Series v6 family of virtual machines. -6. Select **D4ps_v6** from the list as shown in the diagram below: +6. Select **D4ps_v6** from the list as shown in the following screenshot: ![Azure Portal showing D-Series v6 VM size selection with D4ps_v6 highlighted#center](images/instance.png "Select D4ps_v6 from the D-Series v6 family") 7. For **Authentication type**, select **SSH public key**. {{% notice Note %}} -Azure generates an SSH key pair for you and lets you save it for future use. This method is fast, secure, and easy for connecting to your virtual machine. +Azure generates an SSH key pair for you that you can save for future use. This method is fast, secure, and easy for connecting to your VM. {{% /notice %}} 8. Fill in the **Administrator username** for your VM. @@ -41,7 +42,7 @@ RSA offers better security with keys longer than 3072 bits. {{% /notice %}} 10. Give your SSH key a key pair name. -11. In the **Inbound port rules**, select **HTTP (80)** and **SSH (22)** as the inbound ports, as shown in the following image: +11. In the **Inbound port rules**, select **HTTP (80)** and **SSH (22)** as the inbound ports, as shown in the following screenshot: ![Azure Portal inbound port configuration showing SSH and HTTP selected. Check that the required access settings are in place before creating the virtual machine.#center](images/instance1.png "Configure inbound port rules for HTTP and SSH access") @@ -53,14 +54,14 @@ RSA offers better security with keys longer than 3072 bits. ![Azure Portal showing Create button and SSH key download dialog#center](images/instance4.png "Download SSH key and create the virtual machine") -Your virtual machine should be ready and running in a few minutes. You can SSH into the virtual machine using the private key, along with the public IP details. +Your VM should be ready and running in a few minutes. You can SSH into the VM using the private key, along with the public IP details. ![Azure Portal deployment result showing that the virtual machine was created successfully. Look for the successful deployment status and the connection details you will use to access the virtual machine in the next step.#center](images/final-vm.png "Successful VM deployment confirmation") -{{% notice Note %}}To learn more about Arm-based virtual machines in Azure, see "Getting Started with Microsoft Azure" in [Get started with Arm-based cloud instances](/learning-paths/servers-and-cloud-computing/csp/azure/).{{% /notice %}} +{{% notice Note %}}To learn more about Arm-based virtual machines in Azure, see the "Getting Started with Microsoft Azure" section in the [Get started with Arm-based cloud instances Learning Path](/learning-paths/servers-and-cloud-computing/csp/azure/).{{% /notice %}} ## What you've accomplished and what's next -You've created an Azure Cobalt 100 Arm64 virtual machine running Ubuntu 24.04 LTS with SSH authentication configured. The virtual machine is now ready for deploying Kubernetes and OpenEBS LocalPV workloads. +You've created an Arm64 VM powered by Azure Cobalt 100 running Ubuntu 24.04 LTS with SSH authentication configured. The VM is now ready for deploying Kubernetes and OpenEBS LocalPV workloads. -Next, you'll install K3s Kubernetes on the VM and deploy OpenEBS LocalPV to build a lightweight Kubernetes-native persistent storage platform for stateful applications and cloud-native workloads. +Next, you'll install K3s Kubernetes on the VM and deploy OpenEBS LocalPV to build a lightweight Kubernetes-native persistent storage platform. diff --git a/content/learning-paths/servers-and-cloud-computing/openebs-cobalt/openebs-installation.md b/content/learning-paths/servers-and-cloud-computing/openebs-cobalt/openebs-installation.md index 3b2480bd4b..629f245873 100644 --- a/content/learning-paths/servers-and-cloud-computing/openebs-cobalt/openebs-installation.md +++ b/content/learning-paths/servers-and-cloud-computing/openebs-cobalt/openebs-installation.md @@ -1,18 +1,19 @@ --- -title: Deploy OpenEBS on Azure Cobalt 100 +title: Deploy OpenEBS on an Arm-based virtual machine +description: Install K3s, deploy OpenEBS LocalPV with Helm, and configure OpenEBS as the default storage class on an Arm64 virtual machine. weight: 4 ### FIXED, DO NOT MODIFY layout: learningpathall --- -## Set up OpenEBS on the VM +## Set up OpenEBS on the virtual machine -In this section, you'll install OpenEBS LocalPV on an Azure Cobalt 100 Arm-based virtual machine (VM) using a lightweight single-node Kubernetes cluster. +In this section, you'll install OpenEBS LocalPV using a lightweight single-node Kubernetes cluster on the virtual machine (VM) that you created in the previous section. -You'll configure Kubernetes storage provisioning and prepare the environment for persistent workloads. +You'll configure Kubernetes storage provisioning and prepare the environment for persistent workloads. -## Update your system +### Update your system Start by updating the package index and installing the latest package updates on the virtual machine. @@ -20,7 +21,7 @@ Start by updating the package index and installing the latest package updates on sudo apt update && sudo apt upgrade -y ``` -## Install required dependencies +### Install required dependencies Install the tools required for Kubernetes and Helm setup. @@ -28,12 +29,10 @@ Install the tools required for Kubernetes and Helm setup. sudo apt install -y curl wget git apt-transport-https ``` -## Install Kubernetes using K3s +### Install Kubernetes using K3s K3s is a lightweight Kubernetes distribution optimized for edge systems, Arm64 environments, and single-node deployments. -### Install K3s - Run the following command to install K3s: ```bash @@ -53,7 +52,7 @@ NAME STATUS ROLES AGE VERSION openebs-arm64 Ready control-plane 7s v1.35.5+k3s1 ``` -## Configure kubectl access +### Configure kubectl access Create the Kubernetes configuration directory: @@ -99,17 +98,17 @@ NAME STATUS ROLES AGE VERSION openebs-arm64 Ready control-plane 62s v1.35.5+k3s1 ``` -## Install Helm +### Install Helm Helm is the Kubernetes package manager used to deploy OpenEBS. -### Install Helm +Install Helm: ```bash curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash ``` -Verify: +Verify that Helm installed successfully: ```bash helm version @@ -120,7 +119,7 @@ The output is similar to: ```output version.BuildInfo{Version:"v3.21.0", GitCommit:"e0878d41b711792be60777fd65ad23a101e6b85f", GitTreeState:"clean", GoVersion:"go1.25.10"} ``` -## Add the OpenEBS repository +### Add the OpenEBS repository Add the official OpenEBS Helm repository: @@ -128,20 +127,22 @@ Add the official OpenEBS Helm repository: helm repo add openebs https://openebs.github.io/openebs ``` -## Update Helm repositories +### Update Helm repositories + +After adding the OpenEBS repository, update Helm repositories: ```bash helm repo update ``` -The output will look similar to: +The output is similar to: ```output ...Successfully got an update from the "openebs" chart repository Update Complete. ⎈Happy Helming!⎈ ``` -## Deploy OpenEBS LocalPV +### Install lightweight OpenEBS Create the `openebs` namespace that will hold all OpenEBS components. @@ -149,9 +150,7 @@ Create the `openebs` namespace that will hold all OpenEBS components. kubectl create namespace openebs ``` -## Install lightweight OpenEBS - -This deployment installs only OpenEBS LocalPV components and disables Mayastor, Loki, Alloy, and observability services, which are unnecessary for a single-node setup. +Install OpenEBS LocalPV components and disable Mayastor, Loki, Alloy, and observability services, which are unnecessary for a single-node setup: {{% notice Note %}} The following command installs the latest available OpenEBS chart. To pin to a specific version, add `--version ` to the command. To find available versions, run `helm search repo openebs/openebs --versions`. @@ -166,15 +165,15 @@ helm install openebs openebs/openebs \ --set obs.enabled=false ``` -### Verify OpenEBS installation +## Verify OpenEBS installation -OpenEBS components take a moment to start. Wait for the pods to become ready before continuing. +OpenEBS components take a moment to start. Wait for the pods to become ready before continuing: ```bash kubectl wait --for=condition=Ready pod -l app=openebs-localpv-provisioner -n openebs --timeout=120s ``` -Then check all OpenEBS pods are running. +Then check whether all OpenEBS pods are running: ```bash kubectl get pods -n openebs @@ -208,12 +207,6 @@ openebs-hostpath openebs.io/local Delete WaitForFirstConsu ``` ## Configure OpenEBS as the default storage class -Set OpenEBS HostPath as the default storage class: - -```bash -kubectl patch storageclass openebs-hostpath \ - -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}' -``` Remove the default flag from the K3s local-path storage class: @@ -222,7 +215,14 @@ kubectl patch storageclass local-path \ -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}' ``` -Verify: +Set OpenEBS HostPath as the default storage class: + +```bash +kubectl patch storageclass openebs-hostpath \ + -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}' +``` + +Verify that the configuration commands worked: ```bash kubectl get sc @@ -236,8 +236,6 @@ local-path rancher.io/local-path Delete WaitForFirs openebs-hostpath (default) openebs.io/local Delete WaitForFirstConsumer false 71s ``` -## Verify OpenEBS resources - Check all OpenEBS resources: ```bash @@ -246,8 +244,8 @@ kubectl get all -n openebs At this stage, OpenEBS LocalPV is successfully configured and ready to provision persistent storage volumes for Kubernetes workloads. -## What you've learned and what's next +## What you've accomplished and what's next -You now have a lightweight single-node Kubernetes cluster running on Azure Cobalt 100 Arm64 with OpenEBS LocalPV configured as the default storage class. +You've now created a lightweight single-node Kubernetes cluster running on an Arm64 virtual machine powered by Azure Cobalt 100. You've configured OpenEBS LocalPV as the default storage class. -Next, you'll create a Persistent Volume Claim, deploy a stateful NGINX application, validate data persistence, and expose the application so you can open the required port in the Azure Network Security Group. +Next, you'll create a PersistentVolumeClaim (PVC), deploy a stateful NGINX application, and validate data persistence. diff --git a/content/learning-paths/servers-and-cloud-computing/openebs-cobalt/openebs-persistent-storage-validation.md b/content/learning-paths/servers-and-cloud-computing/openebs-cobalt/openebs-persistent-storage-validation.md index 54b9348cd3..2227ab8010 100644 --- a/content/learning-paths/servers-and-cloud-computing/openebs-cobalt/openebs-persistent-storage-validation.md +++ b/content/learning-paths/servers-and-cloud-computing/openebs-cobalt/openebs-persistent-storage-validation.md @@ -1,5 +1,6 @@ --- -title: Validate Persistent Storage with OpenEBS on Azure Cobalt 100 +title: Validate persistent storage with OpenEBS on an Arm-based virtual machine +description: Create a PersistentVolumeClaim, deploy NGINX with OpenEBS LocalPV storage, and validate data persistence after pod recreation. weight: 5 ### FIXED, DO NOT MODIFY @@ -8,13 +9,13 @@ layout: learningpathall ## Create and validate persistent storage -In this section, you'll create a Persistent Volume Claim (PVC), deploy a stateful NGINX application, and validate persistent storage behavior using OpenEBS LocalPV. +In this section, you'll create a PersistentVolumeClaim (PVC), deploy a stateful NGINX application, and validate persistent storage behavior using OpenEBS LocalPV. -You'll verify that data persists even after the application pod is deleted and recreated. +You'll verify that data persists on the single-node cluster even after the application pod is deleted and recreated. -## Create a Persistent Volume Claim +### Create a PersistentVolumeClaim -Create a Persistent Volume Claim (PVC) manifest: +Create a PersistentVolumeClaim (PVC) manifest: ```bash cat > pvc.yaml < 136m ``` -Check the Persistent Volume (PV): +Check the persistent volume: ```bash kubectl get pv @@ -146,9 +148,9 @@ NAME CAPACITY ACCESS MODES RECLAIM POL pvc-4784909a-837e-457d-90aa-0aa6867f26de 5Gi RWO Delete Bound default/openebs-pvc openebs-hostpath 134m ``` -The output confirms that the Persistent Volume has been dynamically created and attached. +The output confirms that the persistent volume has been dynamically created and attached. -## Write persistent data +### Write persistent data Get the pod name: @@ -174,7 +176,7 @@ The output is similar to: OpenEBS on Azure Cobalt D4ps Arm64 ``` -## Validate persistence after pod recreation +### Validate persistence after pod recreation Delete the NGINX pod: @@ -188,7 +190,7 @@ Wait for Kubernetes to recreate the pod: kubectl get pods -w ``` -Press `Ctrl + C` after the new pod reaches the Running state. +Press `Ctrl + C` after the new pod reaches the `Running` state. Get the new pod name: @@ -208,11 +210,11 @@ The output is similar to: OpenEBS on Azure Cobalt D4ps Arm64 ``` -This confirms that the Persistent Volume retains data even after the pod is deleted and recreated. +This response confirms that the persistent volume retains data on the single-node cluster even after the pod is deleted and recreated. -## Expose the application +## Expose the NGINX application -Create a NodePort service to expose the NGINX application externally. Kubernetes assigns the external port dynamically — you'll use the assigned port to open the corresponding firewall rule in the next step. +Create a NodePort service to expose the NGINX application externally: ```bash kubectl expose deployment nginx-openebs \ @@ -220,7 +222,7 @@ kubectl expose deployment nginx-openebs \ --port 80 ``` -Verify the service and note the NodePort assigned. +Verify the service and note the NodePort assigned: ```bash kubectl get svc @@ -234,26 +236,12 @@ kubernetes ClusterIP 10.x.x.x 443/TCP 143m nginx-openebs NodePort 10.x.x.x 80:31635/TCP 7s ``` -Note the NodePort value (in this example `31635`). You'll need it to create the Azure firewall rule in the next step. Your value may differ because Kubernetes assigns NodePorts dynamically. - -## Cleanup resources - -Delete the deployment: - -```bash -kubectl delete -f nginx-openebs.yaml -``` - -Delete the PVC: - -```bash -kubectl delete -f pvc.yaml -``` +Note the NodePort value (in this example `31635`). You'll need it to create the Azure firewall rule in the next section. Your value might differ because Kubernetes assigns NodePorts dynamically. -## What you've learned +## What you've accomplished and what's next -You successfully created dynamically provisioned Persistent Volumes using OpenEBS LocalPV on a single-node Kubernetes cluster running on Azure Cobalt 100 Arm64. +You've now successfully created dynamically provisioned persistent volumes using OpenEBS LocalPV on a single-node Kubernetes cluster running on an Arm-based Azure VM. -You validated persistent storage functionality by recreating application pods while preserving data across restarts, and exposed the application as a Kubernetes NodePort service. +You've also validated persistent storage functionality by recreating application pods while preserving data across restarts, and exposed the application as a Kubernetes NodePort service. Next, you'll open the NodePort in the Azure Network Security Group so the application is reachable from your browser.