Skip to content

Commit 091f118

Browse files
authored
Merge pull request #3354 from pareenaverma/content_review
Longhorn Tech review
2 parents c1ef14f + e5b020f commit 091f118

4 files changed

Lines changed: 37 additions & 65 deletions

File tree

content/learning-paths/servers-and-cloud-computing/longhorn-cobalt/firewall.md

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -50,16 +50,10 @@ This rule allows external access for:
5050

5151
5. After filling in the details, select **Add** to save the rule.
5252

53-
You can now access the Longhorn Web UI externally using:
54-
55-
```text
56-
http://<PUBLIC_IP>:8080
57-
```
58-
5953
## What you've learned and what's next
6054

61-
You've now configured the Azure Network Security Group to allow external traffic for SSH, Kubernetes API access, HTTP workloads, and the Longhorn Web UI.
55+
You've now configured the Azure Network Security Group to allow external traffic for Kubernetes API access, HTTP workloads, and the Longhorn Web UI.
6256

6357
These firewall rules allow secure remote management of the Azure Cobalt 100 virtual machine and external access to the Kubernetes storage dashboard.
6458

65-
Next, you'll create Persistent Volume Claims, deploy workloads using Longhorn storage, and benchmark Kubernetes storage performance on ARM64 infrastructure.
59+
Next, you'll install K3s Kubernetes and Longhorn on the virtual machine, then deploy and configure persistent storage.

content/learning-paths/servers-and-cloud-computing/longhorn-cobalt/install-longhorn.md

Lines changed: 27 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,8 @@ sudo systemctl status iscsid
5757
The output should show that the service is active:
5858

5959
```output
60-
active (running)
60+
Loaded: loaded (/usr/lib/systemd/system/iscsid.service; enabled; preset: enabled)
61+
Active: active (running)
6162
```
6263

6364
### Install K3s Kubernetes
@@ -70,7 +71,7 @@ curl -sfL https://get.k3s.io | sh -
7071

7172
### Verify Kubernetes installation
7273

73-
Check that the Kubernetes node is ready.
74+
Wait a few seconds for K3s to fully initialize, then check that the Kubernetes node is ready.
7475

7576
```bash
7677
sudo kubectl get nodes
@@ -83,6 +84,10 @@ NAME STATUS ROLES AGE VERSION
8384
longhorn-Arm64 Ready control-plane,master 1m v1.35.5+k3s1
8485
```
8586

87+
{{% notice Note %}}
88+
If the ROLES column shows `<none>` immediately after installation, wait 30 to 60 seconds and run the command again. Role labels are applied after the node completes initialization.
89+
{{% /notice %}}
90+
8691
### Configure kubectl access
8792

8893
Create the Kubernetes configuration directory for the current user.
@@ -129,45 +134,39 @@ NAME STATUS ROLES AGE VERSION
129134
longhorn-Arm64 Ready control-plane 5s v1.35.5+k3s1
130135
```
131136

132-
### Create Longhorn storage directory
133-
134-
Create a local directory that Longhorn can use for storing volume replicas on the VM.
135-
136-
```bash
137-
sudo mkdir -p /longhorn
138-
```
139-
140-
Set permissions for the directory:
141-
142-
```bash
143-
sudo chmod 777 /longhorn
144-
```
137+
### Check available disk space
145138

146-
Verify available disk space:
139+
Verify that enough disk space is available on the virtual machine before creating Longhorn volumes. Longhorn stores volume replicas in `/var/lib/longhorn` by default.
147140

148141
```bash
149142
df -h
150143
```
151144

152-
This helps confirm that enough disk space is available before creating Longhorn volumes.
153-
154145
### Install Longhorn
155146

156147
Deploy Longhorn into the Kubernetes cluster using the official Longhorn manifest.
157148

149+
{{% notice Note %}}
150+
The following command uses Longhorn version 1.10.0. The same approach works with other versions. Replace the version in the URL with your version of choice. To find the latest version, see [Longhorn releases on GitHub](https://github.com/longhorn/longhorn/releases).
151+
{{% /notice %}}
152+
158153
```bash
159154
kubectl apply -f https://raw.githubusercontent.com/longhorn/longhorn/v1.10.0/deploy/longhorn.yaml
160155
```
161156

162157
### Verify Longhorn installation
163158

164-
Check the Longhorn pods in the `longhorn-system` namespace.
159+
Longhorn deploys several components including the manager, driver, UI, and CSI controllers. These take several minutes to fully start. Monitor the pod rollout in the `longhorn-system` namespace.
165160

166161
```bash
167-
kubectl get pods -n longhorn-system
162+
kubectl rollout status deployment/longhorn-driver-deployer -n longhorn-system
168163
```
169164

170-
Wait until the pods are running. The output is similar to:
165+
Once the deployment is ready, check that all Longhorn pods are running.
166+
167+
```bash
168+
kubectl get pods -n longhorn-system
169+
```
171170

172171
```output
173172
NAME READY STATUS RESTARTS AGE
@@ -193,12 +192,16 @@ longhorn-ui-77cdc466b5-dbsx5 1/1 Running 0
193192

194193
### Access the Longhorn UI
195194

196-
Expose the Longhorn frontend service using port forwarding.
195+
Expose the Longhorn frontend service using port forwarding. Run this command in a dedicated terminal session, as it must remain active while you use the dashboard.
197196

198197
```bash
199198
kubectl -n longhorn-system port-forward --address 0.0.0.0 service/longhorn-frontend 8080:80
200199
```
201200

201+
{{% notice Note %}}
202+
The port-forward connection closes when the terminal session ends. If you lose access to the dashboard, run the command again in a new terminal.
203+
{{% /notice %}}
204+
202205
Open the Longhorn Web UI in your browser. Replace `<PUBLIC_IP>` with the public IP address of your Azure VM.
203206

204207
```text
@@ -211,32 +214,9 @@ In the Longhorn dashboard, you can view the number of volumes, available schedul
211214

212215
### Configure Longhorn for a single-node cluster
213216

214-
By default, Longhorn expects multiple nodes and uses a higher replica count. Since this learning path uses a single Azure Cobalt 100 VM, configure the replica count as `1`.
215-
216-
Inside the Longhorn UI, go to:
217-
218-
```text
219-
Settings
220-
```
221-
222-
Find the following setting:
223-
224-
```text
225-
Default Replica Count
226-
```
227-
228-
Update the values:
229-
230-
```text
231-
V1 Data Engine: 1
232-
V2 Data Engine: 1
233-
```
234-
235-
Click:
217+
By default, Longhorn expects multiple nodes and uses a higher replica count. Since this Learning Path uses a single Azure Cobalt 100 VM, configure the replica count to `1` so that volumes can be scheduled on a single node.
236218

237-
```text
238-
Save
239-
```
219+
In the Longhorn UI, select **Settings**. Find the **Default Replica Count** setting and set both **V1 Data Engine** and **V2 Data Engine** to `1`. Select **Save**.
240220

241221
![Longhorn Settings page showing the Default Replica Count configuration for single-node Kubernetes deployment on Azure Cobalt 100 Arm64 virtual machine. Ensure both V1 and V2 Data Engine replica counts are configured to 1 before creating Persistent Volumes in the single-node Longhorn environment.#center](images/longhorn-replica.png "Longhorn Replica Configuration for Single-Node Kubernetes Cluster")
242222

content/learning-paths/servers-and-cloud-computing/longhorn-cobalt/instance.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,6 @@ Your virtual machine should be ready and running in a few minutes. You can SSH i
6161

6262
## What you've accomplished and what's next
6363

64-
You've created an Azure Cobalt 100 Arm64 virtual machine running Ubuntu 24.04 LTS with K3s Kubernetes installed and networking configured for Longhorn access. The Kubernetes environment is now ready for deploying and managing persistent storage workloads.
64+
You've created an Azure Cobalt 100 Arm64 virtual machine running Ubuntu 24.04 LTS with SSH and HTTP access configured. The virtual machine is now ready for the next steps.
6565

66-
Next, you'll install Longhorn on the Kubernetes cluster, configure the Longhorn Web UI, create Persistent Volumes, and validate Kubernetes-native storage functionality on Azure Cobalt 100 Arm64 infrastructure.
66+
Next, you'll open the additional ports required for Kubernetes and Longhorn access in the Azure Network Security Group.

content/learning-paths/servers-and-cloud-computing/longhorn-cobalt/longhorn-storage-validation-and-benchmark.md

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ The fio pod will install the benchmarking utility and keep the container running
197197

198198
### Open fio container shell
199199

200-
Open a shell inside the fio container.
200+
Open a shell inside the fio container. The following commands in this section run inside the container, not on the host VM.
201201

202202
```bash
203203
kubectl exec -it fio-test -- bash
@@ -244,15 +244,13 @@ benchmark: (groupid=0, jobs=2): err= 0: pid=3344: Tue May 26 04:06:33 2026
244244
write: IOPS=40.5k, BW=158MiB/s (166MB/s)(10.0GiB/64649msec)
245245
```
246246

247-
The benchmark validates storage performance and confirms that Longhorn volumes are functioning correctly on the Azure Cobalt 100 Arm64 virtual machine.
247+
After the benchmark completes, exit the container shell.
248248

249-
You should observe:
249+
```bash
250+
exit
251+
```
250252

251-
- PVC successfully provisioned
252-
- Longhorn storage mounted correctly
253-
- Data persists after pod recreation
254-
- fio benchmark completes successfully
255-
- Stable storage performance on Arm64 Kubernetes
253+
The benchmark confirms that Longhorn volumes are functioning correctly on the Azure Cobalt 100 Arm64 virtual machine.
256254

257255
## What you've learned
258256

0 commit comments

Comments
 (0)