Skip to content

Commit 36f92e4

Browse files
Merge branch 'main' into helm2
2 parents b17ff9e + 53b1fc2 commit 36f92e4

6 files changed

Lines changed: 106 additions & 47 deletions

File tree

content/learning-paths/mobile-graphics-and-gaming/onnx/02_setup.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ Depending on the hardware you use you follow different installation paths
2424
1. Linux (Arm64). In the console type:
2525
```console
2626
sudo apt update
27-
sudo apt install -y python3 python3-venv python3-pip build-essential libopenblas-dev
27+
sudo apt install -y python3 python3-venv python3-pip build-essential libopenblas-dev libgl1 libglib2.0-0
2828
```
2929

3030
2. macOS (Apple Sillicon):
@@ -127,4 +127,4 @@ The 01_Init.py script serves as a quick end-to-end validation of your ONNX envir
127127
After export, the script immediately loads the ONNX model with ONNX Runtime and executes a forward pass using the CPU execution provider. This verifies that the installation of ONNX, ONNX Runtime, and PyTorch is correct and that models can flow seamlessly from definition to inference. By printing the output tensor’s shape and the active execution provider, the script demonstrates that the toolchain is fully functional on your Arm64 device, giving you a solid baseline before moving on to more advanced models and optimizations.
128128

129129
## Summary
130-
You now have a fully functional ONNX development environment on Arm64. Python and all required packages are installed, and you successfully exported a small PyTorch model to ONNX using the new Dynamo exporter, ensuring forward compatibility. Running the model with ONNX Runtime confirmed that inference works end-to-end with the CPU execution provider, proving that your toolchain is correctly configured. With this foundation in place, the next step is to build and export a more complete model and run it on Arm64 hardware to establish baseline performance before applying optimizations.
130+
You now have a fully functional ONNX development environment on Arm64. Python and all required packages are installed, and you successfully exported a small PyTorch model to ONNX using the new Dynamo exporter, ensuring forward compatibility. Running the model with ONNX Runtime confirmed that inference works end-to-end with the CPU execution provider, proving that your toolchain is correctly configured. With this foundation in place, the next step is to build and export a more complete model and run it on Arm64 hardware to establish baseline performance before applying optimizations.

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

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,64 @@ gke-helm-arm64-cluster-default-pool-f4ab8a2d-5ldp Ready <none> 5h54m v1
154154

155155
All nodes should be in **Ready** state and the Kubernetes control plane should be accessible.
156156

157+
### Taint the cluster nodes for arm64 support
158+
159+
Taint the nodes to ensure proper scheduling on arm64 VMs. For each node starting with **gke**, run the following taint command.
160+
161+
{{% notice Note %}}
162+
Note the required "-" at the end... its needed!
163+
{{% /notice %}}
164+
165+
For example using the node IDs in the output above:
166+
167+
```console
168+
kubectl taint nodes gke-helm-arm64-cluster-default-pool-f4ab8a2d-5h6f kubernetes.io/arch=arm64:NoSchedule-
169+
kubectl taint nodes gke-helm-arm64-cluster-default-pool-f4ab8a2d-5ldp kubernetes.io/arch=arm64:NoSchedule-
170+
```
171+
172+
Replace the node names with your actual node names from the previous command output.
173+
174+
### Create hyperdisk storage class for our cluster
175+
176+
In order to use the c4a architecture with our cluster, a new storage class must be created.
177+
178+
Create a new file, hyperdisk.yaml, with this content:
179+
```yaml
180+
apiVersion: storage.k8s.io/v1
181+
kind: StorageClass
182+
metadata:
183+
name: my-hyperdisk-sc
184+
provisioner: pd.csi.storage.gke.io
185+
parameters:
186+
type: hyperdisk-balanced # Or hyperdisk-ssd, etc.
187+
reclaimPolicy: Delete
188+
volumeBindingMode: WaitForFirstConsumer
189+
```
190+
191+
Apply the hyperdisk.yaml file to the cluster:
192+
193+
```console
194+
kubectl apply -f ./hyperdisk.yaml
195+
```
196+
197+
Confirm that the new storage class has been added:
198+
199+
```console
200+
kubectl get storageclass
201+
```
202+
203+
The output should contain the new **my-hyperdisk-sc** storage class:
204+
205+
```output
206+
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
207+
my-hyperdisk-sc pd.csi.storage.gke.io Delete WaitForFirstConsumer false 7m27s
208+
premium-rwo pd.csi.storage.gke.io Delete WaitForFirstConsumer true 20m
209+
standard kubernetes.io/gce-pd Delete Immediate true 20m
210+
standard-rwo (default) pd.csi.storage.gke.io Delete WaitForFirstConsumer true 20m
211+
```
212+
213+
The new storage class will be used in the next section.
214+
157215
## What you've accomplished and what's next
158216

159217
You've successfully prepared your GKE environment by installing and configuring the Google Cloud SDK, creating a GKE cluster, connecting kubectl to the cluster, and verifying cluster access. Your environment is now ready to deploy applications using Helm charts.

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

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,18 @@ my-nginx/
2727
└── templates/
2828
```
2929

30+
### Clean templates
31+
32+
The default Helm chart includes several files that aren't required for a basic Nginx deployment. Remove the following files from `my-nginx/templates/` to avoid unnecessary complexity and template errors: ingress.yaml, hpa.yaml, serviceaccount.yaml, tests/, NOTES.txt, and httproute.yaml.
33+
34+
```console
35+
cd ./my-nginx/templates
36+
rm -rf hpa.yaml ingress.yaml serviceaccount.yaml tests/ NOTES.txt httproute.yaml
37+
cd $HOME/helm-microservices
38+
```
39+
40+
Only ngnix-specific templates will be maintained.
41+
3042
### Configure values.yaml
3143

3244
Replace the contents of `my-nginx/values.yaml`:
@@ -94,21 +106,17 @@ A LoadBalancer provides a public IP required for browser access and is a common
94106
### Install and access
95107

96108
```console
109+
cd $HOME/helm-microservices
97110
helm install nginx ./my-nginx
98111
```
99112

100113
```output
101114
NAME: nginx
102-
LAST DEPLOYED: Tue Jan 6 07:55:52 2026
115+
LAST DEPLOYED: Tue Jan 20 20:07:47 2026
103116
NAMESPACE: default
104117
STATUS: deployed
105118
REVISION: 1
106-
NOTES:
107-
1. Get the application URL by running these commands:
108-
NOTE: It may take a few minutes for the LoadBalancer IP to be available.
109-
You can watch its status by running 'kubectl get --namespace default svc -w nginx-my-nginx'
110-
export SERVICE_IP=$(kubectl get svc --namespace default nginx-my-nginx --template "{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}")
111-
echo http://$SERVICE_IP:80
119+
TEST SUITE: None
112120
```
113121

114122
### Access NGINX from a browser
@@ -122,11 +130,11 @@ kubectl get svc
122130
Wait until **EXTERNAL-IP** is assigned.
123131

124132
```output
125-
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
126-
kubernetes ClusterIP 34.118.224.1 <none> 443/TCP 3h22m
127-
nginx-my-nginx LoadBalancer 34.118.239.19 34.63.103.125 80:31501/TCP 52s
128-
postgres-app-my-postgres ClusterIP 34.118.225.2 <none> 5432/TCP 13m
129-
redis-my-redis ClusterIP 34.118.234.155 <none> 6379/TCP 6m53s
133+
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
134+
kubernetes ClusterIP 34.118.224.1 <none> 443/TCP 42m
135+
nginx-my-nginx LoadBalancer 34.118.238.110 34.61.85.5 80:30954/TCP 69s
136+
postgres-app-my-postgres ClusterIP 34.118.233.240 <none> 5432/TCP 27m
137+
redis-my-redis ClusterIP 34.118.229.221 <none> 6379/TCP 8m24s
130138
```
131139

132140
Open the external IP in your browser:

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

Lines changed: 2 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ This approach prevents hard-coding credentials and follows Kubernetes security b
106106

107107
### Create pvc.yaml
108108

109-
Create `my-postgres/templates/pvc.yaml` to request persistent storage:
109+
Create `my-postgres/templates/pvc.yaml` with the following content to request persistent storage so PostgreSQL data remains available even if the pod restarts. Note the specification of the storage class that will be used **my-hyperdisk-sc** which was created and added to our cluster in the previous section. This hyperdisk-based storage class is required for the c4a architecture:
110110

111111
```yaml
112112
apiVersion: v1
@@ -116,6 +116,7 @@ metadata:
116116
spec:
117117
accessModes:
118118
- ReadWriteOnce
119+
storageClassName: my-hyperdisk-sc
119120
resources:
120121
requests:
121122
storage: {{ .Values.persistence.size }}
@@ -212,31 +213,6 @@ REVISION: 1
212213
TEST SUITE: None
213214
```
214215

215-
### Taint the nodes
216-
217-
Taint the nodes to ensure proper scheduling. First, list the nodes:
218-
219-
```console
220-
kubectl get nodes
221-
```
222-
223-
The output is similar to:
224-
225-
```output
226-
NAME STATUS ROLES AGE VERSION
227-
gke-helm-arm64-cluster-default-pool-7400f0d3-dq80 Ready <none> 10m v1.33.5-gke.2072000
228-
gke-helm-arm64-cluster-default-pool-7400f0d3-v3c9 Ready <none> 10m v1.33.5-gke.2072000
229-
```
230-
231-
For each node starting with **gke**, run the taint command. For example:
232-
233-
```console
234-
kubectl taint nodes gke-helm-arm64-cluster-default-pool-7400f0d3-dq80 kubernetes.io/arch=arm64:NoSchedule-
235-
kubectl taint nodes gke-helm-arm64-cluster-default-pool-7400f0d3-v3c9 kubernetes.io/arch=arm64:NoSchedule-
236-
```
237-
238-
Replace the node names with your actual node names from the previous command output.
239-
240216
### Check the runtime status
241217

242218
Check the pod and PVC status:

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

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,11 @@ my-redis/
3030

3131
### Clean templates
3232

33-
Remove unnecessary default files from `my-redis/templates/`:
33+
The default Helm chart includes several files that aren't required for a basic Redis deployment. Remove the following files from `my-redis/templates/` to avoid unnecessary complexity and template errors: ingress.yaml, hpa.yaml, serviceaccount.yaml, tests/, NOTES.txt, and httproute.yaml.
3434

3535
```console
3636
cd ./my-redis/templates
37-
rm -rf hpa.yaml ingress.yaml serviceaccount.yaml tests/ NOTES.txt
37+
rm -rf hpa.yaml ingress.yaml serviceaccount.yaml tests/ NOTES.txt httproute.yaml
3838
cd $HOME/helm-microservices
3939
```
4040

@@ -112,7 +112,13 @@ spec:
112112
Install Redis and validate that it's running:
113113

114114
```console
115+
cd $HOME/helm-microservices
115116
helm install redis ./my-redis
117+
```
118+
119+
Confirm that the redis pod is operating:
120+
121+
```console
116122
kubectl get pods
117123
kubectl get svc
118124
```
@@ -132,12 +138,24 @@ postgres-app-my-postgres-6dbc8759b6-jgpxs 1/1 Running 0 6m38s
132138
redis-my-redis-75c88646fb-6lz8v 1/1 Running 0 13s
133139
134140
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
135-
redis-my-redis ClusterIP 34.118.234.155 <none> 6379/TCP 6m14s
141+
kubernetes ClusterIP 34.118.224.1 <none> 443/TCP 37m
142+
postgres-app-my-postgres ClusterIP 34.118.233.240 <none> 5432/TCP 22m
143+
redis-my-redis ClusterIP 34.118.229.221 <none> 6379/TCP 3m19s
144+
```
145+
146+
Finally, execute a sample ping via redis:
136147

137-
> kubectl exec -it redis-my-redis-75c88646fb-6lz8v -- redis-cli ping
148+
```console
149+
kubectl exec -it <redis-pod> -- redis-cli ping
150+
```
151+
152+
You should see an output similar to:
153+
154+
```output
138155
PONG
139156
```
140157

158+
141159
The Redis pod should be in **Running** state and the service should be **ClusterIP** type.
142160

143161
## What you've accomplished and what's next

themes/arm-design-system-hugo-theme/layouts/robots.txt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,5 @@ Allow: /
2323
User-agent: CCBot
2424
Allow: /
2525

26-
# Sitemaps help AI discovery
27-
Sitemap: https://learn.arm.com/sitemap.xml
28-
Sitemap: https://learn.arm.com/learn-image-sitemap.xml
26+
# Sitemap for page discovery
27+
Sitemap: https://learn.arm.com/sitemap.xml

0 commit comments

Comments
 (0)