Skip to content

Commit 304edf4

Browse files
Merge pull request #2132 from ArmDeveloperEcosystem/main
production update
2 parents 0f2031a + 22463b4 commit 304edf4

File tree

6 files changed

+110
-106
lines changed

6 files changed

+110
-106
lines changed

.wordlist.txt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4448,4 +4448,8 @@ wlan
44484448
wlp
44494449
wlx
44504450
xquartz
4451-
zenohd
4451+
zenohd
4452+
Kompanio
4453+
Zenoh's
4454+
instrumentable
4455+
subprocesses

content/learning-paths/cross-platform/multiplying-matrices-with-sme2/7-sme2-matmul-intr.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ is exactly what was shown in Figure 2 earlier in the Learning Path. Note again t
201201
202202
Once again, intrinsics makes it easy to fully leverage SME2, provided you have a
203203
solid understanding of its available instructions. The compiler is automatically
204-
handling many low-level aspects (saving / restoring of the diferent contexts),
204+
handling many low-level aspects (saving / restoring of the different contexts),
205205
as well as not using registers that are reserved on specific platforms (like
206206
`x18`). Predicates handle corner cases elegantly, ensuring robust execution.
207207
Most importantly, the code adapts to different SVL values across various

content/learning-paths/servers-and-cloud-computing/arm-cost-savings/_index.md

Lines changed: 0 additions & 62 deletions
This file was deleted.
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
---
2+
title: Build multi-architecture applications with Red Hat OpenShift Pipelines on AWS
3+
4+
minutes_to_complete: 30
5+
6+
who_is_this_for: This topic is for OpenShift administrators who want to migrate their applications to Arm.
7+
8+
learning_objectives:
9+
- Migrate existing OpenShift applications to Arm-based nodes
10+
11+
prerequisites:
12+
- An AWS account with an OpenShift 4.18 cluster running x86 compute nodes
13+
- Red Hat OpenShift Pipelines (Tekton) Operator installed in your cluster
14+
- Familiarity with the `oc` CLI, container fundamentals, and basic Tekton concepts (Task, Pipeline, PipelineRun)
15+
- Cluster access with cluster-admin or equivalent permissions to configure nodes and pipelines
16+
17+
author: Jeff Young
18+
19+
# Tags
20+
skilllevels: Advanced
21+
subjects: CI-CD
22+
armips:
23+
- Neoverse
24+
tools_software_languages:
25+
- Tekton
26+
- OpenShift
27+
operatingsystems:
28+
- Linux
29+
30+
further_reading:
31+
- resource:
32+
title: Red Hat OpenShift documentation
33+
link: https://docs.openshift.com/container-platform/latest/welcome/index.html
34+
type: documentation
35+
- resource:
36+
title: OpenShift Pipelines (Tekton) documentation
37+
link: https://docs.openshift.com/container-platform/latest/cicd/pipelines/understanding-openshift-pipelines.html
38+
type: documentation
39+
- resource:
40+
title: OpenShift multi-architecture compute machines
41+
link: https://docs.redhat.com/en/documentation/openshift_container_platform/4.18/html/postinstallation_configuration/configuring-multi-architecture-compute-machines-on-an-openshift-cluster
42+
type: documentation
43+
- resource:
44+
title: OpenShift ImageStreams documentation
45+
link: https://docs.openshift.com/container-platform/latest/openshift_images/image-streams-managing.html
46+
type: documentation
47+
- resource:
48+
title: Migrating to multi-architecture compute machines
49+
link: https://docs.redhat.com/en/documentation/openshift_container_platform/4.18/html-single/updating_clusters/#migrating-to-multi-payload
50+
type: documentation
51+
52+
### FIXED, DO NOT MODIFY
53+
# ================================================================================
54+
weight: 1
55+
layout: "learningpathall"
56+
learning_path_main_page: "yes"
57+
---
Lines changed: 47 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,64 +1,72 @@
11
---
2-
title: Migrate an x86 workload to Arm on AWS
2+
title: Migrate an x86 workload to Arm on AWS
33
weight: 2
44

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

9-
Migrating workloads from x86 to Arm on AWS can help reduce costs and improve performance. The steps below explain how to assess your workload compatibility, enable multi-architecture support in Red Hat OpenShift, configure arm64 nodes, rebuild and verify container images, and safely transition your deployments.
9+
Migrating container workloads from x86 to Arm on AWS can help reduce cloud costs, improve energy efficiency, and enhance performance. This Learning Path shows you how to assess workload compatibility, enable multi-architecture support in Red Hat OpenShift, configure Arm64 nodes, rebuild and verify container images, and transition your deployments safely.
1010

11-
This example assumes you have the [OpenShift Pipelines Tutorial](https://github.com/openshift/pipelines-tutorial) built and running on x86.
11+
This example uses the [OpenShift Pipelines Tutorial](https://github.com/openshift/pipelines-tutorial) as the baseline and assumes it is running on x86 infrastructure.
1212

13-
### 1. Assess Workload Compatibility
13+
## Assess workload compatibility
1414

15-
Before migrating, determine whether your applications can run on 64-bit Arm architecture. Most modern applications built with portable runtimes such as Java, Go, Python, or Node.js can run seamlessly on 64-bit Arm with little or no modifications. Check your container images and dependencies for 64-bit Arm compatibility.
15+
Before migrating, confirm that your applications can run on the Arm 64-bit (`arm64`) architecture. Most modern applications built with portable runtimes such as Java, Go, Python, or Node.js run on Arm with little or no changes. Check your container images and dependencies for compatibility.
1616

17-
To check if your container images support multiple architectures (such as arm64 and amd64), you can use tools like [KubeArchInspect](https://learn.arm.com/learning-paths/servers-and-cloud-computing/kubearchinspect/) to analyze images in your Kubernetes cluster.
17+
Use the following tools to inspect container images for multi-architecture support:
1818

19-
Additionally, you can use the Python script provided in [Learn how to use Docker](https://learn.arm.com/learning-paths/cross-platform/docker/check-images/) to inspect images for multi-architecture support.
19+
- [KubeArchInspect](https://learn.arm.com/learning-paths/servers-and-cloud-computing/kubearchinspect/): scans container images in your Kubernetes cluster.
20+
- [Docker inspect script](https://learn.arm.com/learning-paths/cross-platform/docker/check-images/): checks local image manifests for platform variants.
2021

21-
The OpenShift Pipelines Tutorial supports arm64 and doesn't have any architecture restrictions.
22+
{{% notice Note %}}
23+
The OpenShift Pipelines Tutorial supports `arm64` and has no architecture restrictions.
24+
{{% /notice %}}
2225

23-
### 2. Enable Multi-Arch Support in Red Hat OpenShift
2426

25-
Red Hat OpenShift supports multi-architecture workloads, allowing you to run both x86 and Arm based nodes in the same cluster.
27+
## Enable multi-architecture support in Red Hat OpenShift
2628

27-
Red Hat OpenShift's [documentation](https://docs.redhat.com/en/documentation/openshift_container_platform/4.18/html/postinstallation_configuration/configuring-multi-architecture-compute-machines-on-an-openshift-cluster#multi-architecture-verifying-cluster-compatibility_creating-multi-arch-compute-nodes-aws) provides full details for the process.
29+
OpenShift supports multi-architecture workloads, allowing you to run x86 and Arm nodes in the same cluster.
2830

29-
To check if your cluster is multi-architecture compatible, use the OpenShift CLI and run:
31+
To check if your cluster is multi-architecture compatible, run:
3032

3133
```bash
3234
oc adm release info -o jsonpath="{ .metadata.metadata }"
3335
```
3436

35-
If the output includes `"release.openshift.io/architecture": "multi"`, your cluster supports multi-architecture compute nodes.
37+
If the output includes:
38+
39+
```json
40+
"release.openshift.io/architecture": "multi"
41+
```
42+
43+
...then your cluster supports multi-architecture nodes.
3644

3745
If your cluster is not multi-architecture compatible, you must migrate it to use the multi-architecture release payload. This involves updating your OpenShift cluster to a version that supports multi-architecture and switching to the multi-architecture payload. For step-by-step instructions, see the OpenShift documentation on [migrating to a cluster with multi-architecture compute machines](https://docs.redhat.com/en/documentation/openshift_container_platform/4.18/html-single/updating_clusters/#migrating-to-multi-payload). Once migration is complete, you can add compute nodes with different architectures.
3846

39-
### 3. Add 64-bit Arm MachineSets
47+
## Add 64-bit Arm MachineSets
4048

4149
To take advantage of Arm-based compute, you need to add new MachineSets to your OpenShift cluster that use Arm (Graviton) EC2 instances. This step enables your cluster to schedule workloads on Arm nodes, allowing you to run and test your applications on the target architecture while maintaining your existing x86 nodes for a smooth migration.
4250

43-
#### Decide on a scheduling strategy
51+
## Decide on a scheduling strategy
4452

4553
When introducing Arm nodes into your OpenShift cluster, you need to control which workloads are scheduled onto these new nodes. There are two main approaches:
4654

47-
- **Manual scheduling with Taints and Tolerations:** By applying a taint to your Arm nodes, you ensure that only workloads with a matching toleration are scheduled there. This gives you precise control over which applications run on Arm, making it easier to test and migrate workloads incrementally.
48-
- **Automated scheduling with the Multiarch Tuning Operator:** This operator helps automate the placement of workloads on the appropriate architecture by managing node affinity and tolerations for you. This is useful for larger environments or when you want to simplify multi-architecture workload management.
55+
- **Manual scheduling with Taints and Tolerations:** by applying a taint to your Arm nodes, you ensure that only workloads with a matching toleration are scheduled there. This gives you precise control over which applications run on Arm, making it easier to test and migrate workloads incrementally.
56+
- **Automated scheduling with the Multiarch Tuning Operator:** this operator helps automate the placement of workloads on the appropriate architecture by managing node affinity and tolerations for you. This is useful for larger environments or when you want to simplify multi-architecture workload management.
4957

50-
For scenarios with a single workload in the build pipeline, the manual taint and toleration method can be used. The following taint can be added to new Arm machine sets:
58+
For manual scheduling, add the following taint:
5159

52-
```
53-
taints:
54-
- effect: NoSchedule
55-
key: newarch
56-
value: arm64
60+
```yaml
61+
taints:
62+
- effect: NoSchedule
63+
key: newarch
64+
value: arm64
5765
```
5866
5967
This prevents existing x86 workloads from being scheduled to the Arm nodes, ensuring only workloads that explicitly tolerate this taint will run on Arm.
6068
61-
#### Reimport needed ImageStreams with import-mode set to PreserveOriginal
69+
## Reimport needed ImageStreams with import-mode set to PreserveOriginal
6270
6371
When running workloads on Arm nodes, you may need to ensure that the required container images are available for the arm64 architecture. OpenShift uses ImageStreams to manage container images, and by default, these may only include x86 (amd64) images.
6472
@@ -71,19 +79,23 @@ oc import-image php -n openshift --all --confirm --import-mode='PreserveOriginal
7179
oc import-image python -n openshift --all --confirm --import-mode='PreserveOriginal'
7280
```
7381

74-
This step is important to avoid image pull errors when deploying workloads to Arm nodes.
82+
{{% notice Note %}}
83+
This avoids image pull errors when deploying on Arm nodes.
84+
{{% /notice %}}
85+
7586

76-
### 4. Rebuild and Verify Container Images
87+
## Rebuild and verify container images
7788

7889
To build 64-bit Arm compatible images, the OpenShift Pipelines Tutorial has been modified to patch deployments with the Tekton Task's podTemplate information. This will allow you to pass a podTemplate for building and deploying your newly built application on the target architecture. It also makes it easy to revert back to 64-bit x86 by re-running the pipeline without the template.
7990

8091
{{% notice Note %}}
81-
Red Hat OpenShift only supports native architecture container builds. Cross-architecture container builds are not supported.
92+
Red Hat OpenShift only supports native builds. Cross-architecture builds are not supported.
8293
{{% /notice %}}
8394

95+
## Define a podTemplate
8496
Create a podTemplate defining a toleration and a node affinity to make the builds deploy on Arm machines.
8597

86-
Save the code below in a file named `arm64.yaml`
98+
Save the following as `arm64.yaml`:
8799

88100
```yaml
89101
tolerations:
@@ -172,30 +184,23 @@ Finally the `04_pipeline.yaml` needs to be updated to pass the taskrun-name to t
172184

173185
```yaml
174186
- name: update-deployment
175-
taskRef:
187+
taskRef:
176188
name: update-deployment
177-
params:
189+
params:
178190
- name: deployment
179-
value: $(params.deployment-name)
191+
value: $(params.deployment-name)
180192
- name: IMAGE
181-
value: $(params.IMAGE)
182-
- name: taskrun-name //add these
183-
value: $(context.taskRun.name) //lines
193+
value: $(params.IMAGE)
194+
- name: taskrun-name
195+
value: $(context.taskRun.name)
184196
```
185197

186198
Now the UI and API can be redeployed using the `arm64.yaml` podTemplate. This will force all parts of the build pipeline and deployment to the tainted Arm nodes.
187199

188200
Run the `tkn` command:
189201

190202
```bash
191-
tkn pipeline start build-and-deploy \\\\
192-
--prefix-name build-deploy-api-pipelinerun-arm64 \\\\
193-
-w name=shared-workspace,volumeClaimTemplateFile=https://raw.githubusercontent.com/openshift/pipelines-tutorial/master/01\_pipeline/03\_persistent\_volume\_claim.yaml \\\\
194-
-p deployment-name=pipelines-vote-api \\\\
195-
-p git-url=https://github.com/openshift/pipelines-vote-api.git \\\\
196-
-p IMAGE=image-registry.openshift-image-registry.svc:5000/pipelines-tutorial/pipelines-vote-api-arm64
197-
--use-param-defaults \\\\
198-
--pod-template arm64.yaml
203+
tkn pipeline start build-and-deploy --prefix-name build-deploy-api-pipelinerun-arm64 -w name=shared-workspace,volumeClaimTemplateFile=https://raw.githubusercontent.com/openshift/pipelines-tutorial/master/01_pipeline/03_persistent_volume_claim.yaml -p deployment-name=pipelines-vote-api -p git-url=https://github.com/openshift/pipelines-vote-api.git -p IMAGE=image-registry.openshift-image-registry.svc:5000/pipelines-tutorial/pipelines-vote-api-arm64 --use-param-defaults --pod-template arm64.yaml
199204
```
200205

201206
Once the pods are up and running, you can safely remove the x86 worker nodes from the cluster, and remove the taints from the Arm worker nodes (if you choose to do so).

0 commit comments

Comments
 (0)