Skip to content

Commit 92b95a4

Browse files
Merge pull request #1342 from jasonrandrews/new-content
new Learning path on KubeArchInspect
2 parents a67dcf9 + d7f291c commit 92b95a4

File tree

6 files changed

+278
-0
lines changed

6 files changed

+278
-0
lines changed
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
---
2+
title: Migrate containers to Arm using KubeArchInspect
3+
4+
minutes_to_complete: 15
5+
6+
who_is_this_for: This is an introductory topic for software developers who want to know if the containers running in a Kubernetes cluster are avilable for the Arm architecture.
7+
8+
learning_objectives:
9+
- Run KubeArchInspect to get a quick report of the containers running in a Kubernetes cluster.
10+
- Discover which images support the Arm architecture.
11+
- Understand common reasons for an image not supporting Arm.
12+
- Make configuration changes to upgrade images with Arm support.
13+
14+
prerequisites:
15+
- A running Kubernetes cluster accessible with `kubectl`.
16+
17+
author_primary: Jason Andrews
18+
19+
### Tags
20+
skilllevels: Introductory
21+
subjects: Performance and Architecture
22+
armips:
23+
- Neoverse
24+
tools_software_languages:
25+
- Kubernetes
26+
operatingsystems:
27+
- Linux
28+
29+
30+
### FIXED, DO NOT MODIFY
31+
# ================================================================================
32+
weight: 1 # _index.md always has weight of 1 to order correctly
33+
layout: "learningpathall" # All files under learning paths have this same wrapper
34+
learning_path_main_page: "yes" # This should be surfaced when looking for related content. Only set for _index.md of learning path content.
35+
---
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
---
2+
next_step_guidance: Now you know how to use the KubeArchInspect tool to understand the Arm support of your Kubernetes cluster images.
3+
4+
recommended_path: /learning-paths/servers-and-cloud-computing/eks-multi-arch/
5+
6+
further_reading:
7+
- resource:
8+
title: Kubernetes documentation
9+
link: https://kubernetes.io/docs/home/
10+
type: documentation
11+
- resource:
12+
title: Amazon Elastic Kubernetes Service
13+
link: https://aws.amazon.com/eks/
14+
type: documentation
15+
- resource:
16+
title: Azure Kubernetes Service (AKS)
17+
link: https://learn.microsoft.com/en-us/azure/aks/
18+
type: documentation
19+
- resource:
20+
title: Arm workloads on GKE
21+
link: https://cloud.google.com/kubernetes-engine/docs/concepts/arm-on-gke
22+
type: documentation
23+
24+
# ================================================================================
25+
# FIXED, DO NOT MODIFY
26+
# ================================================================================
27+
weight: 21 # set to always be larger than the content in this path, and one more than 'review'
28+
title: "Next Steps" # Always the same
29+
layout: "learningpathall" # All files under learning paths have this same wrapper
30+
---
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
---
2+
review:
3+
- questions:
4+
question: >
5+
Which of the following statements is true about kubearchinspect?
6+
answers:
7+
- KubeArchInspect displays a report of the images running in a Kubernetes cluster, but it does not identify which images support arm64.
8+
- KubeArchInspect displays a report of the images running in a Kubernetes cluster and identifies which images support arm64.
9+
- KubeArchInspect displays a report of the images running in a Kubernetes cluster and identifies which images are running on arm64.
10+
correct_answer: 2
11+
explanation: >
12+
KubeArchInspect displays a report of the images running in a Kubernetes cluster and identifies which ones support arm64. The report is generated by connecting to the source registry for each image and checking which architectures are available.
13+
14+
- questions:
15+
question: >
16+
True or False: KubeArchInspect automatically upgrades images to the latest version.
17+
answers:
18+
- "True"
19+
- "False"
20+
correct_answer: 2
21+
explanation: >
22+
KubeArchInspect does not automatically upgrade images to the latest version. It only identifies the images that are available.
23+
24+
- questions:
25+
question: >
26+
Which of the following is NOT a way to improve your cluster's Arm compatibility?
27+
answers:
28+
- Upgrade images to a newer version -- if they support arm64.
29+
- Find an alternative image that supports arm64.
30+
- Request that the developers of an image build and publish an arm64 version.
31+
- Contact the Kubernetes community to upgrade your cluster.
32+
correct_answer: 4
33+
explanation: >
34+
KubeArchInspect helps you identify the available images that support arm64, but it does not upgrade the cluster. You would have to upgrade the cluster manually using the appropriate Kubernetes commands.
35+
36+
37+
# ================================================================================
38+
# FIXED, DO NOT MODIFY
39+
# ================================================================================
40+
title: "Review" # Always the same title
41+
weight: 20 # Set to always be larger than the content in this path
42+
layout: "learningpathall" # All files under learning paths have this same wrapper
43+
---
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
---
2+
title: Analyze the results
3+
weight: 4
4+
5+
### FIXED, DO NOT MODIFY
6+
layout: learningpathall
7+
---
8+
9+
## Identifying issues and opportunities
10+
11+
After running KubeArchInspect, you can examine the output to determine if the cluster image architectures are suitable for your needs.
12+
13+
If you want to run an all Arm cluster, you need to use images which include arm64 support.
14+
15+
For example, in the previous report, you see some images of concern:
16+
17+
```output
18+
Legends:
19+
✅ - Supports arm64, ❌ - Does not support arm64, ⬆ - Upgrade for arm64 support, ❗ - Some error occurred
20+
------------------------------------------------------------------------------------------------
21+
22+
602401143452.dkr.ecr.eu-west-1.amazonaws.com/eks/csi-snapshotter:v6.3.2-eks-1-28-11 ❌
23+
...
24+
602401143452.dkr.ecr.eu-west-1.amazonaws.com/eks/csi-node-driver-registrar:v2.9.2-eks-1-28-11 ❌
25+
...
26+
sergrua/kube-tagger:release-0.1.1 ❌
27+
```
28+
29+
These images are identified as not supporting arm64 (``).
30+
31+
## Addressing issues
32+
33+
The KubeArchInspect report provides valuable information for improving the cluster's performance and compatibility with the Arm architecture.
34+
35+
Several approaches can be taken to address the issues identified:
36+
37+
* **Upgrade images:** If an image with an available arm64 version (``) is detected, consider upgrading to that version. This can be done by modifying the deployment configuration and restarting the containers using the new image tag.
38+
* **Find alternative images:** For images with no available arm64 version, look for alternative images that offer arm64 support. For example, instead of a specific image from the registry, try using a more general image like `busybox`, which supports multiple architectures, including arm64.
39+
* **Request Arm support:** If there is no suitable alternative image available, you can contact the image developers or the Kubernetes community and request them to build and publish an arm64 version of the image.
40+
41+
KubeArchInspect provides an efficient way to understand and improve the Arm architecture support within your Kubernetes cluster, ensuring your cluster runs efficiently and effectively.
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
---
2+
title: Install KubeArchInspect
3+
weight: 2
4+
5+
### FIXED, DO NOT MODIFY
6+
layout: learningpathall
7+
---
8+
9+
{{% notice Note %}}
10+
KubeArchInspect is a command-line tool which requires a running Kubernetes cluster.
11+
12+
Make sure you can connect to your Kubernetes cluster using `kubectl`.
13+
{{% /notice %}}
14+
15+
## How do I install KubeArchInspect?
16+
17+
For Arm Linux, download the KubeArchInspect package from GitHub:
18+
19+
```console
20+
wget https://github.com/ArmDeveloperEcosystem/kubearchinspect/releases/download/v0.2.0/kubearchinspect_Linux_arm64.tar.gz
21+
```
22+
23+
Extract the files from the release package:
24+
25+
```console
26+
tar xvfz kubearchinspect_Linux_arm64.tar.gz
27+
```
28+
29+
The `kubearchinspect` binary is now in the current directory.
30+
31+
If you are using a different platform, such as Windows or macOS, you can get other release packges from the [GitHub releases area](https://github.com/ArmDeveloperEcosystem/kubearchinspect/releases/).
32+
33+
You can run `kubearchinspect` from the current location or copy it to a directory in your search path such as `/usr/local/bin`.
34+
35+
## How do I verify KubeArchInspect is installed?
36+
37+
Confirm KubeArchInspect works correctly by running the `kubearchinspect` command:
38+
39+
```console
40+
./kubearchinspect images --help
41+
```
42+
43+
If KubeArchInspect is working correctly, the usage message is displayed:
44+
45+
```output
46+
Check which images in your cluster support arm64.
47+
48+
Usage:
49+
kubearchinspect images [flags]
50+
51+
Flags:
52+
-d, --debug Enable debug mode
53+
-h, --help help for images
54+
```
55+
56+
You are now ready to use KubeArchInspect.
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
---
2+
title: Run KubeArchInspect
3+
weight: 3
4+
5+
### FIXED, DO NOT MODIFY
6+
layout: learningpathall
7+
---
8+
9+
KubeArchInspect identifies images in a Kubernetes cluster which have support for the Arm architecture. It checks each image against the image registry, checking the available architectures for each image tag. The results can be used to identify potential issues or opportunities for optimizing the cluster for Arm.
10+
11+
## How do I run KubeArchInspect?
12+
13+
To run KubeArchInspect, you need to have `kubearchinspect` installed and ensure that the `kubectl` command is configured to connect to your cluster. If not already configured, you should set up `kubectcl` to connect to your cluster.
14+
15+
Run KubeArchInspect with the following command:
16+
17+
```console
18+
kubearchinspect images
19+
```
20+
21+
KubeArchInspect connects to the Kubernetes cluster and generates a list of images in use.
22+
23+
For each image found, it connects to the source registry for the image and checks which architectures are available, producing a report like the example below:
24+
25+
```output
26+
Legends:
27+
✅ - Supports arm64, ❌ - Does not support arm64, ⬆ - Upgrade for arm64 support, ❗ - Some error occurred
28+
------------------------------------------------------------------------------------------------
29+
30+
602401143452.dkr.ecr.eu-west-1.amazonaws.com/eks/coredns:v1.9.3-eksbuild.10 ❗
31+
602401143452.dkr.ecr.eu-west-1.amazonaws.com/eks/csi-snapshotter:v6.3.2-eks-1-28-11 ❌
32+
quay.io/kiwigrid/k8s-sidecar:1.21.0 ✅
33+
grafana/grafana:9.3.1 ✅
34+
redis:6.2.4-alpine ✅
35+
602401143452.dkr.ecr.eu-west-1.amazonaws.com/amazon/aws-network-policy-agent:v1.0.6-eksbuild.1 ❗
36+
registry.k8s.io/autoscaling/cluster-autoscaler:v1.25.3 ✅
37+
602401143452.dkr.ecr.eu-west-1.amazonaws.com/eks/csi-node-driver-registrar:v2.9.2-eks-1-28-11 ❌
38+
docker.io/bitnami/metrics-server:0.6.2-debian-11-r20 ⬆
39+
amazon/aws-for-fluent-bit:2.10.0 ✅
40+
quay.io/argoproj/argocd:v2.0.5 ⬆
41+
quay.io/prometheus/node-exporter:v1.5.0 ✅
42+
registry.k8s.io/ingress-nginx/controller:v1.9.4@sha256:5b161f051d017e55d358435f295f5e9a297e66158f136321d9b04520ec6c48a3 ❗
43+
quay.io/prometheus-operator/prometheus-operator:v0.63.0 ✅
44+
registry.k8s.io/kube-state-metrics/kube-state-metrics:v2.8.1 ✅
45+
mirrors--ghcr-io.mirror.com/banzaicloud/vault-secrets-webhook:1.18.0 ✅
46+
quay.io/prometheus-operator/prometheus-config-reloader:v0.63.0 ✅
47+
mirrors--dockerhub.mirror.com/grafana/grafana:9.3.8 ✅
48+
curlimages/curl:7.85.0 ✅
49+
602401143452.dkr.ecr.eu-west-1.amazonaws.com/eks/csi-attacher:v4.4.2-eks-1-28-11 ❗
50+
602401143452.dkr.ecr.eu-west-1.amazonaws.com/eks/livenessprobe:v2.11.0-eks-1-28-11 ❗
51+
busybox:1.31.1 ✅
52+
quay.io/prometheus/prometheus:v2.42.0 ✅
53+
docker.io/bitnami/external-dns:0.14.0-debian-11-r2 ✅
54+
dsgcore--docker.mirror.com/jcaap:3.7 ❗
55+
602401143452.dkr.ecr.eu-west-1.amazonaws.com/eks/csi-provisioner:v3.6.2-eks-1-28-11 ❗
56+
602401143452.dkr.ecr.eu-west-1.amazonaws.com/eks/csi-resizer:v1.9.2-eks-1-28-11 ❗
57+
602401143452.dkr.ecr.eu-west-1.amazonaws.com/eks/kube-proxy:v1.25.16-minimal-eksbuild.1 ❗
58+
quay.io/kiwigrid/k8s-sidecar:1.22.0 ✅
59+
quay.io/prometheus/blackbox-exporter:v0.24.0 ✅
60+
amazon/cloudwatch-agent:1.247350.0b251780 ✅
61+
602401143452.dkr.ecr.eu-west-1.amazonaws.com/eks/aws-ebs-csi-driver:v1.26.0 ❗
62+
sergrua/kube-tagger:release-0.1.1 ❌
63+
docker.io/alpine:3.13 ✅
64+
quay.io/prometheus/alertmanager:v0.25.0 ✅
65+
602401143452.dkr.ecr.eu-west-1.amazonaws.com/amazon-k8s-cni-init:v1.15.4-eksbuild.1 ❗
66+
602401143452.dkr.ecr.eu-west-1.amazonaws.com/amazon-k8s-cni:v1.15.4-eksbuild.1 ❗
67+
```
68+
69+
Each image running in the cluster appears on a separate line, including name, tag (version), and test result.
70+
71+
A green tick indicates the image already supports arm64, a red cross that arm64 support is not available, an upward arrow shows that arm64 support is included in a newer version.
72+
73+
A red exclamation mark is shown when an error occurs checking the image. This may indicate an error connecting to the image registry.

0 commit comments

Comments
 (0)