Skip to content

Commit b9a3929

Browse files
fix: standardize nginx references and improve documentation clarity across multi-architecture learning path
1 parent f7579f2 commit b9a3929

File tree

9 files changed

+53
-42
lines changed

9 files changed

+53
-42
lines changed

content/learning-paths/servers-and-cloud-computing/multiarch_nginx_on_aks/_index.md

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,13 @@ learning_objectives:
99
- Create a hybrid AKS cluster with both x86 and Arm64 nodes
1010
- Deploy nginx using multi-architecture container images across different node types
1111
- Verify nginx deployment and functionality on each architecture
12-
- Compare performance between x86 and Arm64 `nginx` instances
12+
- Compare performance between x86 and Arm64 nginx instances
1313
- Learn techniques for deploying multi-architecture Kubernetes workloads
1414

1515

1616
prerequisites:
1717
- An [Azure account](https://azure.microsoft.com/en-us/free/)
18-
- A local machine with [`jq`](https://jqlang.org/download/), [`curl`](https://curl.se/download.html), [`wrk`](https://github.com/wg/wrk), [Azure CLI](/install-guides/azure-cli/) and [`kubectl`](/install-guides/kubectl/) installed
18+
- A local machine with [`jq`](https://jqlang.org/download/), [`curl`](https://curl.se/download.html), [`wrk`](https://github.com/wg/wrk), [Azure CLI](/install-guides/azure-cli/), and [`kubectl`](/install-guides/kubectl/) installed
1919

2020
author:
2121
- Geremy Cohen
@@ -40,19 +40,23 @@ tools_software_languages:
4040

4141
further_reading:
4242
- resource:
43-
title: NGINX website
43+
title: nginx website
4444
link: https://nginx.org/
4545
type: website
4646
- resource:
47-
title: nginx Docker Hub
47+
title: nginx on Docker Hub
4848
link: https://hub.docker.com/_/nginx
4949
type: documentation
5050
- resource:
5151
title: Azure Kubernetes Service (AKS) documentation
5252
link: https://docs.microsoft.com/en-us/azure/aks/
5353
type: documentation
5454
- resource:
55-
title: Learn how to tune Nginx
55+
title: Learn how to deploy nginx [Arm Learning Path]
56+
link: https://learn.arm.com/learning-paths/servers-and-cloud-computing/nginx/
57+
type: documentation
58+
- resource:
59+
title: Learn how to tune nginx [Arm Learning Path]
5660
link: https://learn.arm.com/learning-paths/servers-and-cloud-computing/nginx_tune/
5761
type: documentation
5862

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
---
2+
# ================================================================================
3+
# FIXED, DO NOT MODIFY THIS FILE
4+
# ================================================================================
5+
weight: 21 # Set to always be larger than the content in this path to be at the end of the navigation.
6+
title: "Next Steps" # Always the same, html page title.
7+
layout: "learningpathall" # All files under learning paths have this same wrapper for Hugo processing.
8+
---

content/learning-paths/servers-and-cloud-computing/multiarch_nginx_on_aks/apply-configuration.md

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ layout: learningpathall
88

99
## Install btop monitoring tool on nginx pods
1010

11-
Now that you have all your `nginx` deployments running across Intel and Arm architectures, you can monitor performance across each architecture using `wrk` to generate load and `btop` to monitor system performance.
11+
Now that you have all your nginx deployments running across Intel and Arm architectures, you can monitor performance across each architecture using `wrk` to generate load and `btop` to monitor system performance.
1212

1313
{{% notice Note %}}
1414
This Learning Path uses [`wrk`](https://github.com/wg/wrk) to generate HTTP load testing. You can easily install `wrk` using `apt` or `brew` package managers.
@@ -39,7 +39,7 @@ Installing btop on nginx-intel-deployment-6f5bff9667-zdrqc...
3939

4040
The `nginx_util.sh` script includes a `put config` command that:
4141

42-
- Applies a performance-optimized `nginx` configuration to all pods
42+
- Applies a performance-optimized nginx configuration to all pods
4343
- Installs `btop` monitoring tool on all pods for system monitoring
4444
- Restarts pods with the new configuration
4545

@@ -60,8 +60,7 @@ Because pods are ephemeral, you need to reinstall `btop` if pods restart or get
6060

6161

6262
## Set up real-time performance monitoring
63-
64-
You can now log in to any pod and use `btop` to monitor system performance. There are many variables that can affect an individual workload's performance, and `btop` (like `top`) is a great first step in understanding those variables.
63+
You can now log in to any pod and monitor system performance with `btop`. Many factors can affect workload performance, and `btop` (like `top`) is an excellent starting point for understanding these metrics.
6564

6665
{{% notice Note %}}
6766
Network performance can impact load testing accuracy when running from your local machine. If you experience low request rates (under 70,000 requests/s), consider running the test from an Azure VM in the same region as your cluster.
@@ -73,7 +72,7 @@ Running two btop terminals, one for each pod, is a convenient way to view perfor
7372
To bring up btop on both Arm and Intel pods, follow these steps:
7473

7574
- Open two new terminal windows
76-
- In one terminal, run `login arm` from the `nginx` utility script to enter the pod
75+
- In one terminal, run `login arm` from the nginx utility script to enter the pod
7776
- In the second terminal, run `login intel` from the `nginx` utility script to enter the pod
7877
- Once inside each pod, run `btop` to see real-time system monitoring
7978

@@ -101,7 +100,7 @@ You should now see something similar to the image below, with one terminal for e
101100

102101
![Two terminal windows displaying btop system monitoring interface with CPU, memory, and process information for nginx pods running on different architectures in an idle state alt-text#center](images/btop_idle.png)
103102

104-
To visualize performance with `btop` against the Arm and Intel pods via the load balancer service endpoints, you can use the `nginx_util.sh` wrapper to generate load to both simultaneously:
103+
To visualize performance with btop against the Arm and Intel pods using the load balancer service endpoints, you can use the `nginx_util.sh` wrapper to generate load to both simultaneously:
105104

106105
```bash
107106
./nginx_util.sh wrk both

content/learning-paths/servers-and-cloud-computing/multiarch_nginx_on_aks/create-test-utility.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,21 @@ weight: 4
66
layout: learningpathall
77
---
88

9-
## Overview
9+
## Understand the utility script’s purpose
1010

11-
In this section, you'll create a utility script that simplifies working with your multi-architecture Kubernetes deployment. This script acts as a convenient wrapper around common `kubectl` and testing commands, making it easier to interact with `nginx` pods across different architectures.
11+
In this section, you'll create a utility script that simplifies working with your multi-architecture Kubernetes deployment. This script acts as a convenient wrapper around common kubectl and testing commands, making it easier to interact with nginx pods across different architectures.
1212

13-
Instead of typing long `kubectl` commands repeatedly, you'll use this utility to quickly test services, monitor performance, and access pods on both Arm and Intel nodes. This approach saves time and reduces errors, especially when comparing behavior across architectures.
13+
Instead of typing long kubectl commands repeatedly, you'll use this utility to quickly test services, monitor performance, and access pods on both Arm and Intel nodes. This approach saves time and reduces errors, especially when comparing behavior across architectures.
1414

1515
By the end of this section, you'll have a ready-to-use tool that streamlines the testing and monitoring tasks you'll perform throughout the rest of this Learning Path.
1616

1717
## Get to know the utility script
18-
The utility script provides three main functions to help you work with your multi-architecture `nginx` deployment. You can use it to test services across different architectures, monitor performance, and access pods directly.
18+
The utility script provides three main functions to help you work with your multi-architecture nginx deployment. You can use it to test services across different architectures, monitor performance, and access pods directly.
1919

20-
The script provides the following key commands to interact with your `nginx` deployment:
20+
The script provides the following key commands to interact with your nginx deployment:
2121

22-
- `curl intel|arm|multiarch` tests `nginx` services and show which pod served the request
23-
- `put btop` installs `btop` monitoring tool on all pods
22+
- `curl intel|arm|multiarch` tests nginx services and show which pod served the request
23+
- `put btop` installs btop monitoring tool on all pods
2424
- `login intel|arm` is an interactive bash access to architecture-specific pods
2525

2626
These commands streamline common tasks you'll perform when working with multi-architecture deployments. The `curl` command helps you verify that requests are being properly distributed across different architectures, while the `login` command gives you direct access to pods for debugging or configuration changes.
@@ -55,4 +55,4 @@ The script displays its usage instructions:
5555
Invalid first argument. Use 'curl', 'wrk', 'put', or 'login'.
5656
```
5757

58-
You're now ready to deploy `nginx` to the Intel nodes in the cluster.
58+
You're now ready to deploy nginx to the Intel nodes in the cluster.

content/learning-paths/servers-and-cloud-computing/multiarch_nginx_on_aks/deploy-arm.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@ layout: learningpathall
88

99
## Add the Arm deployment and service
1010

11-
In this section, you'll add `nginx` on Arm to your existing cluster, completing your multi-architecture Intel/Arm environment for comprehensive performance comparison.
11+
In this section, you'll add nginx on Arm to your existing cluster, completing your multi-architecture Intel/Arm environment for comprehensive performance comparison.
1212

1313
When you apply the arm_nginx.yaml file, it creates two Kubernetes objects:
1414

15-
- A deployment named `nginx-arm-deployment` that pulls the multi-architecture `nginx` image from DockerHub, launches a pod on the Arm node, and mounts the shared ConfigMap as `/etc/nginx/nginx.conf`
15+
- A deployment named `nginx-arm-deployment` that pulls the multi-architecture nginx image from DockerHub, launches a pod on the Arm node, and mounts the shared ConfigMap as `/etc/nginx/nginx.conf`
1616
- A service called `nginx-arm-svc` that acts as a load balancer, targeting pods with both `app: nginx-multiarch` and `arch: arm` labels
1717

1818
Copy and paste the following commands into a terminal to download and apply the Arm deployment and service:
@@ -33,7 +33,7 @@ service/nginx-arm-svc created
3333

3434
Take a closer look at the `arm_nginx.yaml` deployment file and you'll see settings optimized for the Arm architecture:
3535

36-
The `nodeSelector` value of `kubernetes.io/arch: arm64` ensures that the deployment only runs on Arm nodes, utilizing the `arm64` version of the `nginx` container image.
36+
The `nodeSelector` value of `kubernetes.io/arch: arm64` ensures that the deployment only runs on Arm nodes, utilizing the `arm64` version of the nginx container image.
3737

3838
```yaml
3939
spec:
@@ -85,11 +85,11 @@ NAME DATA AGE
8585
nginx-config 1 10m
8686
```
8787

88-
When the pods show `Running` and the service shows a valid `External IP`, you're ready to test the `nginx` Arm service.
88+
When the pods show `Running` and the service shows a valid `External IP`, you're ready to test the nginx Arm service.
8989

9090
## Test the nginx web service on Arm
9191

92-
Run the following command to make an HTTP request to the Arm `nginx` service using the script you created earlier:
92+
Run the following command to make an HTTP request to the Arm nginx service using the script you created earlier:
9393

9494
```bash
9595
./nginx_util.sh curl arm
@@ -108,7 +108,7 @@ Response:
108108
Served by: nginx-arm-deployment-5bf8df95db-wznff
109109
```
110110

111-
If you see similar output, you have successfully added Arm nodes to your cluster running `nginx`.
111+
If you see similar output, you have successfully added Arm nodes to your cluster running nginx.
112112

113113
## Compare both architectures
114114

content/learning-paths/servers-and-cloud-computing/multiarch_nginx_on_aks/deploy-intel.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,12 @@ layout: learningpathall
88

99
## Deployment and service
1010

11-
In this section, you'll add a new namespace, deployment, and service for `nginx` on Intel x86 architecture. The result will be a K8s cluster running `nginx` accessible through the Internet using a load balancer.
11+
In this section, you'll add a new namespace, deployment, and service for nginx on Intel x86 architecture. The result will be a K8s cluster running nginx accessible through the Internet using a load balancer.
1212

1313
The deployment configuration uses three separate files to organize the different components:
1414

15-
- A file called `namespace.yaml` that creates a dedicated `nginx` namespace to contain all your Kubernetes `nginx` objects.
16-
- A file called `nginx-configmap.yaml` that contains a shared ConfigMap called `nginx-config` with performance-optimized `nginx` settings that both Intel and Arm deployments will use.
15+
- A file called `namespace.yaml` that creates a dedicated nginx namespace to contain all your Kubernetes nginx objects.
16+
- A file called `nginx-configmap.yaml` that contains a shared ConfigMap called `nginx-config` with performance-optimized nginx settings that both Intel and Arm deployments will use.
1717
- A file called `intel_nginx.yaml` that creates two main Kubernetes objects:
1818
- A deployment called `nginx-intel-deployment` that pulls the multi-architecture [nginx image](https://hub.docker.com/_/nginx) from DockerHub and runs it on the Intel node
1919
- A service called `nginx-intel-svc` that acts as a load balancer for pods labeled with both `app: nginx-multiarch` and `arch: intel`. The deployment automatically mounts the shared ConfigMap as `/etc/nginx/nginx.conf` to apply the optimized configuration.
@@ -72,7 +72,7 @@ The service selector uses both `app: nginx-multiarch` and `arch: intel` labels t
7272
arch: intel
7373
```
7474

75-
Because the final goal is to run `nginx` on multiple architectures, the deployment uses the standard `nginx` image from DockerHub. This image supports multiple architectures, including amd64 (Intel) and arm64 (Arm).
75+
Because the final goal is to run nginx on multiple architectures, the deployment uses the standard nginx image from DockerHub. This image supports multiple architectures, including amd64 (Intel) and arm64 (Arm).
7676

7777
```yaml
7878
containers:
@@ -81,7 +81,7 @@ Because the final goal is to run `nginx` on multiple architectures, the deployme
8181
```
8282

8383
{{% notice Note %}}
84-
You can set `nginx` as your default namespace to avoid typing `-nnginx` in future commands:
84+
You can set nginx as your default namespace to avoid typing `-nnginx` in future commands:
8585
```bash
8686
kubectl config set-context --current --namespace=nginx
8787
```
@@ -123,11 +123,11 @@ NAME DATA AGE
123123
nginx-config 1 51s
124124
```
125125

126-
With the pods in a `Ready` state and the service showing a valid `External IP`, you're now ready to test the `nginx` Intel service.
126+
With the pods in a `Ready` state and the service showing a valid `External IP`, you're now ready to test the nginx Intel service.
127127

128128
## Test the Intel service
129129

130-
Run the following to make an HTTP request to the Intel `nginx` service:
130+
Run the following to make an HTTP request to the Intel nginx service:
131131

132132
```bash
133133
./nginx_util.sh curl intel
@@ -147,6 +147,6 @@ Response:
147147
Served by: nginx-intel-deployment-758584d5c6-2nhnx
148148
```
149149

150-
If you see similar output, you've successfully configured your AKS cluster with an Intel node, running an `nginx` deployment and service with the `nginx` multi-architecture container image.
150+
If you see similar output, you've successfully configured your AKS cluster with an Intel node, running an nginx` deployment and service with the nginx multi-architecture container image.
151151

152152

content/learning-paths/servers-and-cloud-computing/multiarch_nginx_on_aks/deploy-multiarch.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@ layout: learningpathall
88

99
## Add a multi-architecture service to your cluster
1010

11-
You now have `nginx` running on Intel and Arm nodes with architecture-specific services. In this section, you'll create a multi-architecture service that can route to any available `nginx` pod regardless of architecture, providing load balancing across both architectures.
11+
You now have nginx running on Intel and Arm nodes with architecture-specific services. In this section, you'll create a multi-architecture service that can route to any available nginx pod regardless of architecture, providing load balancing across both architectures.
1212

1313
## Create the multiarch service
1414

15-
The multiarch service targets all pods with the `app: nginx-multiarch` label (all `nginx` deployments share this label). It uses `sessionAffinity: None` to ensure requests are distributed across all available pods without stickiness, and can route to Intel or Arm pods based on availability and load balancing algorithms.
15+
The multiarch service targets all pods with the `app: nginx-multiarch` label (all nginx deployments share this label). It uses `sessionAffinity: None` to ensure requests are distributed across all available pods without stickiness, and can route to Intel or Arm pods based on availability and load balancing algorithms.
1616

1717
Run the following commands to download and apply the multiarch service:
1818

@@ -59,7 +59,7 @@ You are ready to test the multiarch service.
5959

6060
## Test the nginx multiarch service
6161

62-
Run the following to make HTTP requests to the multiarch `nginx` service:
62+
Run the following to make HTTP requests to the multiarch nginx service:
6363

6464
```bash
6565
./nginx_util.sh curl multiarch

content/learning-paths/servers-and-cloud-computing/multiarch_nginx_on_aks/overview.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@ weight: 2
55
layout: learningpathall
66
---
77

8-
## Project Overview
8+
## Project overview
99

10-
Arm processors are transforming cloud infrastructure, offering improved performance per watt and cost efficiency for web server workloads. In this Learning Path, you'll deploy [`nginx`](https://nginx.org/) on both Arm and x86 architectures within a single Kubernetes cluster on Azure AKS.
10+
Arm processors are transforming cloud infrastructure, offering improved performance per watt and cost efficiency for web server workloads. In this Learning Path, you'll deploy [nginx](https://nginx.org/) on both Arm and x86 architectures within a single Kubernetes cluster on Azure AKS.
1111

12-
You'll create a cluster with both Arm-based and x86 nodes, which lets you deploy the same `nginx` workload on different architectures. This setup allows you to compare how `nginx` performs on each architecture and understand the practical aspects of running mixed workloads in Kubernetes.
12+
You'll create a cluster with both Arm-based and x86 nodes, which lets you deploy the same nginx workload on different architectures. This setup allows you to compare how nginx performs on each architecture and understand the practical aspects of running mixed workloads in Kubernetes.
1313

1414
## Why deploy nginx on both Arm and x86 nodes in Kubernetes?
1515

@@ -18,7 +18,7 @@ Many developers start their Arm journey by adding Arm-based nodes to existing x8
1818
This approach offers several advantages:
1919

2020
- Gradual migration: you can leverage your existing Kubernetes expertise to add Arm nodes without disrupting current x86 workloads.
21-
- Container compatibility: multi-architecture container images allow the same `nginx` deployment to run on both architectures with minimal configuration changes.
21+
- Container compatibility: multi-architecture container images allow the same nginx deployment to run on both architectures with minimal configuration changes.
2222
- Performance comparison: running both architectures in the same cluster provides an ideal environment for benchmarking Arm versus x86 performance under identical conditions.
2323

24-
This Learning Path walks you through how to create an initial AKS environment and install `nginx` on x86. From there, you'll add Arm-based nodes running the same exact workload. You'll see how to run simple tests to verify functionality, and then run performance testing to better understand the performance characteristics of each architecture.
24+
This Learning Path walks you through how to create an initial AKS environment and install nginx on x86. From there, you'll add Arm-based nodes running the same exact workload. You'll see how to run simple tests to verify functionality, and then run performance testing to better understand the performance characteristics of each architecture.

content/learning-paths/servers-and-cloud-computing/multiarch_nginx_on_aks/spin_up_aks_cluster.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ weight: 3
66
layout: learningpathall
77
---
88

9-
## Overview
9+
## Set up a multi-architecture AKS cluster
1010

1111
In this section, you'll create a multi-architecture Azure Kubernetes Service (AKS) cluster that supports both Intel and Arm-based nodes. This setup allows you to deploy and compare workloads across different CPU architectures within the same Kubernetes environment.
1212

0 commit comments

Comments
 (0)