Skip to content

Commit fbeffef

Browse files
Refactor Helm learning path documentation for clarity and consistency, including updates to installation instructions, environment setup, and deployment examples for NGINX, PostgreSQL, and Redis.
1 parent 43c4aeb commit fbeffef

10 files changed

Lines changed: 157 additions & 107 deletions

File tree

content/learning-paths/servers-and-cloud-computing/helm-on-gcp/_index.md

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
11
---
22
title: Install and validate Helm on Google Cloud C4A Arm-based VMs
33

4-
draft: true
5-
cascade:
6-
draft: true
7-
84
minutes_to_complete: 60
95

106
who_is_this_for: This is an introductory topic intended for developers who want to get hands-on experience using Helm on Linux Arm64 systems, specifically Google Cloud C4A virtual machines powered by Axion processors.
@@ -75,3 +71,9 @@ weight: 1
7571
layout: "learningpathall"
7672
learning_path_main_page: "yes"
7773
---
74+
75+
Helm is the package manager for Kubernetes, simplifying application deployment and lifecycle management. Google Axion C4A instances, powered by Arm Neoverse-V2 processors, provide an efficient platform for running Kubernetes workloads.
76+
77+
In this Learning Path, you learn how to install and configure Helm on a Google Cloud C4A virtual machine, create Kubernetes clusters, and deploy applications using both official and custom Helm charts. You validate Helm's core functionality and explore deployment patterns for PostgreSQL, Redis, and NGINX on Arm-based infrastructure.
78+
79+
By the end of this Learning Path, you'll have practical experience with Helm on Arm64 systems and understand how to deploy cloud-native applications on Google's Axion processors.

content/learning-paths/servers-and-cloud-computing/helm-on-gcp/background.md

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

99
## Explore Google Axion C4A instances in Google Cloud
1010

11-
Google Axion C4A is a family of Arm-based virtual machines built on Googles custom Axion CPU, which is based on Arm Neoverse-V2 cores. Designed to deliver high performance with improved energy efficiency, these virtual machines offer strong performance for modern cloud workloads such as CI/CD pipelines, microservices, media processing, and general-purpose applications.
11+
Google Axion C4A is a family of Arm-based VMs built on Google's custom Axion processors, which use Arm Neoverse-V2 cores. These VMs deliver high performance with improved energy efficiency for modern cloud workloads such as CI/CD pipelines, microservices, media processing, and general-purpose applications.
1212

13-
The C4A series provides an Arm-based alternative to x86 virtual machines, enabling developers to evaluate cost, performance, and efficiency trade-offs in Google Cloud. For Kubernetes users, Axion C4A instances provide a practical way to run Arm-native clusters and validate tooling such as Helm on modern cloud infrastructure.
13+
The C4A series provides an Arm-based alternative to x86 VMs, enabling developers to evaluate cost, performance, and efficiency trade-offs in Google Cloud. For Kubernetes users, C4A instances provide a practical way to run Arm-native clusters and validate tooling such as Helm on modern cloud infrastructure.
1414

1515
To learn more about Google Axion, see the Google blog [Introducing Google Axion Processors, our new Arm-based CPUs](https://cloud.google.com/blog/products/compute/introducing-googles-new-arm-based-cpu).
1616

1717
## Explore Helm
1818

1919
Helm is the package manager for Kubernetes. It simplifies application deployment, upgrades, rollbacks, and lifecycle management by packaging Kubernetes resources into reusable charts.
2020

21-
Helm runs as a lightweight CLI that interacts directly with the Kubernetes API. Because it is architecture-agnostic, it works consistently across x86 and Arm64 clusters, including those running on Google Axion C4A instances.
21+
As a lightweight CLI, Helm interacts directly with the Kubernetes API. Its architecture-agnostic design ensures consistent behavior across x86 and Arm64 clusters, including those running on Google Axion C4A instances.
2222

23-
In this Learning Path, you use Helm to deploy and manage applications on an Arm-based Kubernetes environment and verify common workflows such as install, upgrade, and uninstall operations.
23+
In this Learning Path you'll use Helm to deploy and manage applications on an Arm-based Kubernetes environment, verifying common workflows such as install, upgrade, and uninstall operations.
2424

2525
For more information, see the [Helm website](https://helm.sh/).

content/learning-paths/servers-and-cloud-computing/helm-on-gcp/baseline.md

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ layout: learningpathall
1010
This section walks you through baseline testing to confirm that Helm works correctly on an Arm64-based Kubernetes cluster by validating core workflows such as install, upgrade, and uninstall.
1111

1212
## Add Helm repository
13+
1314
Add the Bitnami Helm chart repository and update the local index:
1415

1516
```console
@@ -26,12 +27,12 @@ Update Complete. ⎈Happy Helming!⎈
2627
```
2728

2829
## Install a sample application
29-
Install a sample NGINX application using a Helm chart:
30+
31+
Install a sample NGINX application to validate that Helm can create releases:
3032

3133
```console
3234
helm install nginx bitnami/nginx
3335
```
34-
Deploy a simple test app to validate that Helm can create releases on the cluster.
3536

3637
The output is similar to:
3738
```output
@@ -49,7 +50,8 @@ APP VERSION: 1.29.4
4950

5051

5152
## Validate deployment
52-
Verify that the Helm release is created:
53+
54+
Verify that Helm created the release:
5355

5456
```console
5557
helm list
@@ -78,14 +80,18 @@ NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)
7880
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 3m33s
7981
nginx LoadBalancer 10.96.88.148 <pending> 80:30166/TCP,443:32128/TCP 117s
8082
```
81-
All pods should be in the **Running** state. If pods are in **Pending** state, wait 30 to 60 seconds for container images to download, then retry the commands above.
83+
84+
All pods should be in **Running** state. If pods show **Pending**, wait 30 to 60 seconds for container images to download and retry.
8285

8386

8487
## Validate Helm lifecycle
88+
8589
Confirm that Helm supports the full application lifecycle on Arm64.
8690

8791
### Upgrade the release
8892

93+
Update the existing release to a new revision:
94+
8995
```console
9096
helm upgrade nginx bitnami/nginx
9197
```
@@ -97,7 +103,8 @@ Release "nginx" has been upgraded. Happy Helming!
97103
```
98104

99105
### Uninstall the release
100-
Ensure Helm can cleanly remove the release and associated resources.
106+
107+
Remove the release and associated resources:
101108

102109
```console
103110
helm uninstall nginx

content/learning-paths/servers-and-cloud-computing/helm-on-gcp/benchmarking.md

Lines changed: 28 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,17 @@ weight: 10
55
### FIXED, DO NOT MODIFY
66
layout: learningpathall
77
---
8-
## Overview
8+
## Run concurrent Helm benchmarks
99

10-
This section explains how to benchmark Helm CLI concurrency on an Arm64-based GCP SUSE virtual machine.
11-
12-
Since Helm does not provide built-in performance metrics, concurrency behavior is measured by running multiple Helm commands in parallel and recording the total execution time.
10+
In this section, you'll benchmark Helm CLI concurrency on your Arm64-based GCP SUSE VM. Since Helm doesn't provide built-in performance metrics, you'll measure concurrency behavior by running multiple Helm commands in parallel and recording total execution time.
1311

1412
### Prerequisites
1513

1614
{{% notice Note %}}
17-
Ensure the local Kubernetes cluster created earlier is running and has sufficient resources to deploy multiple NGINX replicas.
15+
Ensure the local Kubernetes cluster is running and has sufficient resources to deploy multiple NGINX replicas.
1816
{{% /notice %}}
1917

20-
Before starting the benchmark, ensure Helm is installed and the Kubernetes cluster is accessible.
18+
Verify Helm and Kubernetes access:
2119

2220
```console
2321
helm version
@@ -26,7 +24,8 @@ kubectl get nodes
2624
All nodes should be in `Ready` state.
2725

2826
### Add a Helm repository
29-
Helm installs applications using "charts." Configure Helm to download charts from the Bitnami repository and update the local chart index.
27+
28+
Configure Helm to download charts from the Bitnami repository:
3029

3130
```console
3231
helm repo add bitnami https://charts.bitnami.com/bitnami
@@ -41,7 +40,8 @@ kubectl create namespace helm-bench
4140
```
4241

4342
### Warm-up run (recommended)
44-
Prepare the cluster by pulling container images and initializing caches.
43+
44+
Prepare the cluster by pulling container images:
4545

4646
```console
4747
helm install warmup bitnami/nginx \
@@ -75,7 +75,8 @@ helm uninstall warmup -n helm-bench
7575
Helm does not provide native concurrency or throughput metrics. Concurrency benchmarking is performed by executing multiple Helm CLI operations in parallel and measuring overall completion time.
7676
{{% /notice %}}
7777
### Concurrent Helm install benchmark (no wait)
78-
Run multiple Helm installs in parallel using background jobs.
78+
79+
Run multiple Helm installs in parallel:
7980

8081
```console
8182
time (
@@ -88,10 +89,8 @@ done
8889
wait
8990
)
9091
```
91-
This step simulates multiple teams deploying applications at the same time.
92-
Helm submits all requests without waiting for pods to fully start.
9392

94-
This measures Helm concurrency handling, Kubernetes API responsiveness, and Helm CLI client-side execution behavior on Arm64.
93+
This measures Helm concurrency handling, Kubernetes API responsiveness, and client-side execution on Arm64.
9594

9695
You should see an output similar to:
9796
```output
@@ -102,7 +101,7 @@ sys 0m0.339s
102101

103102
### Verify deployments
104103

105-
Confirm that Helm reports all components were installed successfully and that Kubernetes created and started the applications:
104+
Confirm that all components were installed successfully:
106105

107106
```console
108107
helm list -n helm-bench
@@ -112,7 +111,8 @@ kubectl get pods -n helm-bench
112111
All releases should be in `deployed` state and pods should be in `Running` status.
113112

114113
### Concurrent Helm install benchmark (with --wait)
115-
Run a benchmark that includes workload readiness time.
114+
115+
Run a benchmark that includes workload readiness time:
116116

117117
```console
118118
time (
@@ -138,7 +138,12 @@ sys 0m0.312s
138138

139139
### Metrics to record
140140

141-
Record the following metrics: total elapsed time (overall time taken to complete all installs), number of parallel installs, any failures or Kubernetes API errors, and pod readiness delay (time pods take to become Ready under resource pressure).
141+
Record the following:
142+
143+
- Total elapsed time (overall time taken to complete all installs)
144+
- Number of parallel installs
145+
- Any failures or Kubernetes API errors
146+
- Pod readiness delay (time pods take to become Ready under resource pressure)
142147

143148
### Benchmark summary
144149
Results from the earlier run on the `c4a-standard-4` (4 vCPU, 16 GB memory) Arm64 VM in GCP (SUSE):
@@ -149,19 +154,20 @@ Results from the earlier run on the `c4a-standard-4` (4 vCPU, 16 GB memory) Arm6
149154
| Parallel Install (With Wait) | 3 | Yes | 15m | **12.92 s** |
150155

151156
Key observations:
152-
- In this configuration, Helm CLI operations complete efficiently on an Arm64-based Axion C4A virtual machine, establishing a baseline for further testing.
153-
- The --wait flag significantly increases total execution time because Helm waits for workloads to reach a Ready state, reflecting scheduler and image-pull delays rather than Helm CLI overhead.
154-
- For this baseline test, parallel Helm installs complete with minimal contention, indicating that client-side execution and Kubernetes API handling are not bottlenecks at this scale.
155-
- End-to-end workload readiness dominates total deployment time, showing that cluster resource availability and container image pulls have a greater impact than Helm CLI execution.
157+
158+
- Helm CLI operations complete efficiently on an Arm64-based Axion C4A VM, establishing a baseline for further testing
159+
- The `--wait` flag significantly increases total execution time because Helm waits for workloads to reach Ready state, reflecting scheduler and image-pull delays rather than Helm CLI overhead
160+
- Parallel Helm installs complete with minimal contention, indicating that client-side execution and Kubernetes API handling aren't bottlenecks at this scale
161+
- End-to-end workload readiness dominates total deployment time, showing that cluster resource availability and container image pulls have greater impact than Helm CLI execution
156162

157163
## What you've accomplished
158164

159-
You have successfully benchmarked Helm concurrency on a Google Axion C4A Arm64 virtual machine. The benchmarks demonstrated that:
165+
You have successfully benchmarked Helm concurrency on a Google Axion C4A Arm64 VM:
160166

161-
- Helm CLI operations execute efficiently on Arm64 architecture with the Axion processor
167+
- Helm CLI operations execute efficiently on Arm64 architecture with Axion processors
162168
- Parallel Helm installs complete in under 4 seconds when not waiting for pod readiness
163169
- Using the `--wait` flag extends deployment time to reflect actual workload initialization
164170
- Kubernetes API and client-side performance scale well under concurrent load
165171
- Image pulling and resource scheduling have more impact on total deployment time than Helm CLI execution
166172

167-
These results establish a performance baseline for deploying containerized workloads with Helm on Arm64-based cloud infrastructure, helping you make informed decisions about deployment strategies and resource allocation.
173+
These results establish a performance baseline for deploying containerized workloads with Helm on Arm64-based cloud infrastructure.

content/learning-paths/servers-and-cloud-computing/helm-on-gcp/gke-cluster-for-helm.md

Lines changed: 33 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,27 @@
11
---
2-
title: Prepare GKE Cluster for Helm Deployments
2+
title: Prepare a GKE cluster for Helm deployments
33
weight: 6
44

55
### FIXED, DO NOT MODIFY
66
layout: learningpathall
77
---
88

9-
## Overview
10-
This section explains how to prepare a **Google Kubernetes Engine (GKE) cluster** for deploying Helm charts.
11-
The prepared GKE cluster is used to deploy the following services using custom Helm charts:
9+
## Set up your GKE environment
10+
11+
In this section you'll prepare a Google Kubernetes Engine (GKE) cluster for deploying Helm charts. The GKE cluster hosts the following services:
1212

1313
- PostgreSQL
1414
- Redis
1515
- NGINX
1616

17-
This setup differs from the earlier KinD-based local cluster, which was intended only for local validation.
17+
This setup differs from the earlier KinD-based local cluster, which was used only for local validation.
1818

1919
## Prerequisites
2020

21-
Before starting, ensure that Docker, kubectl, and Helm are installed, and that you have a Google Cloud account available. If Helm and kubectl aren't installed, complete the **Install Helm** section first.
21+
Ensure that Docker, kubectl, and Helm are installed, and that you have a Google Cloud account available. If Helm and kubectl aren't installed, complete the previous section first.
22+
23+
### Verify kubectl installation
2224

23-
### Verify kubectl Installation
2425
Confirm that kubectl is available:
2526

2627
```console
@@ -32,46 +33,50 @@ Client Version: v1.30.1
3233
Kustomize Version: v5.0.4-0.20230601165947-6ce0bf390ce3
3334
```
3435

35-
### Install Python 3.11
36+
### Install Python 3.11
3637

37-
Install python3.11:
38+
Install Python 3.11:
3839

3940
```bash
4041
sudo zypper install -y python311
4142
which python3.11
4243
```
4344

4445
### Install Google Cloud SDK (gcloud)
46+
4547
The Google Cloud SDK is required to create and manage GKE clusters.
4648

47-
**Download and extract:**
49+
Download and extract:
4850

4951
```console
5052
wget https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-460.0.0-linux-arm.tar.gz
5153
tar -xvf google-cloud-sdk-460.0.0-linux-arm.tar.gz
5254
```
5355

54-
**Install gcloud:**
56+
Install gcloud:
5557

5658
```console
5759
./google-cloud-sdk/install.sh
5860
```
5961

60-
The shell will exit. Bring up a new SSH Shell:
62+
After installation completes, exit and reconnect to apply the PATH changes:
63+
6164
```console
6265
exit
6366
```
6467

6568
### Initialize gcloud
69+
6670
Authenticate and configure the Google Cloud CLI:
6771

6872
```console
6973
gcloud init
7074
```
7175

72-
During initialization, select **Login with a new account**. You'll be prompted to use your browser to authenticate to Google and receive an auth code to copy back. Select the project you want to use and choose default settings when unsure.
76+
During initialization, select **Login with a new account**. You'll be prompted to authenticate using your browser and receive an auth code to copy back. Select the project you want to use and choose default settings when unsure.
7377

7478
### Get the list of Google project IDs
79+
7580
Retrieve the list of project IDs:
7681

7782
```console
@@ -85,28 +90,35 @@ PROJECT_ID NAME PROJECT_NUMBER
8590
arm-lp-test arm-lp-test 834184475014
8691
```
8792

88-
Note the **PROJECT_ID** for the project you want to set as active for use in the next step.
89-
### Set the Active Project
93+
Note the **PROJECT_ID** for use in the next step.
94+
95+
### Set the active project
96+
9097
Ensure the correct GCP project is selected:
9198

9299
```console
93-
gcloud config set project YOUR_PROJECT_ID
100+
gcloud config set project <YOUR_PROJECT_ID>
94101
```
95102

103+
Replace `<YOUR_PROJECT_ID>` with your actual project ID from the previous step.
104+
96105
### Install the auth plugin for gcloud
106+
97107
```console
98108
gcloud components install gke-gcloud-auth-plugin
99109
```
100110

101111
### Enable Kubernetes API
112+
102113
Enable the required API for GKE:
103114

104115
```console
105116
gcloud services enable container.googleapis.com
106117
```
107118

108-
### Create a GKE Cluster
109-
Create a Kubernetes cluster to host Helm deployments. Replace `YOUR_PROJECT_ID` with the project ID you set previously.
119+
### Create a GKE cluster
120+
121+
Create a Kubernetes cluster to host Helm deployments:
110122

111123
```console
112124
gcloud container clusters create helm-arm64-cluster \
@@ -116,17 +128,17 @@ gcloud container clusters create helm-arm64-cluster \
116128
--no-enable-ip-alias
117129
```
118130

119-
This creates a standard GKE cluster. You can adjust the node count and machine type later as needed.
131+
### Configure kubectl access to GKE
120132

121-
### Configure kubectl Access to GKE
122133
Fetch cluster credentials:
123134

124135
```console
125136
gcloud container clusters get-credentials helm-arm64-cluster \
126137
--zone us-central1-a
127138
```
128139

129-
### Verify Cluster Access
140+
### Verify cluster access
141+
130142
Confirm Kubernetes access:
131143

132144
```console

0 commit comments

Comments
 (0)