Skip to content

Commit a628cda

Browse files
Merge pull request #3424 from anupras-mohapatra-arm/servers-and-cloud-computing
Rafay EKS LP review
2 parents 1bf9255 + 535296f commit a628cda

4 files changed

Lines changed: 119 additions & 61 deletions

File tree

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

Lines changed: 58 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,74 @@
11
---
2-
title: "Deploy an EKS cluster with Graviton nodes using Rafay"
2+
title: Deploy an Amazon EKS cluster with AWS Graviton-based nodes using Rafay
33

4-
description: Use the Rafay Kubernetes Operations Platform to provision an Amazon EKS cluster with an Arm Graviton node group and deploy NGINX to verify the setup.
4+
description: Use the Rafay Kubernetes Operations Platform to provision an Amazon EKS cluster with an AWS Graviton-based node group and deploy NGINX to verify the setup.
55

6-
draft: true
7-
cascade:
8-
draft: true
96

107
minutes_to_complete: 60
118

129
who_is_this_for: >
13-
This is an advanced topic for software developers familiar with Kubernetes and AWS who want to learn how to use the Rafay platform to provision and manage EKS clusters backed by Arm Graviton instances.
10+
This is an advanced topic for software developers familiar with Kubernetes and AWS who want to learn how to use the Rafay platform to provision and manage EKS clusters backed by AWS Graviton-based instances.
1411
1512
learning_objectives:
1613
- Connect your AWS account to the Rafay platform using a cross-account IAM role
17-
- Provision an Amazon EKS cluster with an Arm Graviton node group using Rafay
18-
- Deploy and verify NGINX on Arm nodes and clean up all cloud resources
14+
- Provision an Amazon EKS cluster with an AWS Graviton-based node group using Rafay
15+
- Deploy and verify workloads on arm64 nodes and clean up all cloud resources
1916

2017
prerequisites:
21-
- An Amazon Web Services (AWS) [account](https://aws.amazon.com/)
22-
- A [Rafay account](https://rafay.co)
23-
- The [AWS CLI](/install-guides/aws-cli/) installed and configured
18+
- An Amazon Web Services (AWS) [account](https://aws.amazon.com/) with sufficient IAM permissions to create roles, EKS clusters, EC2 instances, CloudFormation stacks, and related resources.
19+
- A [Rafay account](https://rafay.co).
20+
- The [AWS CLI](/install-guides/aws-cli/) installed and configured.
21+
22+
# START generated_summary_faq
23+
generated_summary_faq:
24+
template_version: summary-faq-v3
25+
generated_at: '2026-06-24T20:45:31Z'
26+
generator: ai
27+
ai_assisted: true
28+
ai_review_required: true
29+
model: gpt-5
30+
prompt_template: summary-faq-v3
31+
source_hash: 76cbd5e4b3a61e9604e0df9b3ba2a5e5af4aa9a0c295ece3c4ee5a98ec365630
32+
summary_generated_at: '2026-06-24T20:45:31Z'
33+
summary_source_hash: 76cbd5e4b3a61e9604e0df9b3ba2a5e5af4aa9a0c295ece3c4ee5a98ec365630
34+
faq_generated_at: '2026-06-24T20:45:31Z'
35+
faq_source_hash: 76cbd5e4b3a61e9604e0df9b3ba2a5e5af4aa9a0c295ece3c4ee5a98ec365630
36+
summary: >-
37+
In this Learning Path, you'll provision an Amazon EKS cluster on Arm using
38+
the Rafay Kubernetes Operations Platform and validate workloads on AWS Graviton-based nodes.
39+
You'll define a declarative cluster manifest in Rafay referencing an existing project,
40+
blueprint, and cloud credential. Then, you'll create the EKS cluster and deploy NGINX pinned to arm64
41+
to confirm scheduling on Graviton-based instances. Finally, you'll remove the NGINX workload and deprovision the EKS resources to avoid ongoing cloud costs.
42+
faqs:
43+
- question: How do I know the AWS connection to Rafay is set up correctly before creating the
44+
cluster?
45+
answer: >-
46+
Ensure the cross-account IAM role is configured in AWS and added to Rafay as a cloud credential.
47+
In the cluster manifest, reference this credential by name. If it's missing or has insufficient
48+
permissions, cluster creation will fail.
49+
- question: Which fields in the Rafay cluster manifest must match existing configuration?
50+
answer: >-
51+
The project, blueprint name and version, and the cloud credential must already exist in
52+
Rafay. If any of these don't match, the cluster won't be created.
53+
- question: What result should I expect when the EKS cluster is ready to use?
54+
answer: >-
55+
A running cluster with a Graviton-based (`arm64`) node group will be available for workloads.
56+
Nodes should advertise the label `kubernetes.io/arch=arm64`, indicating they can run `arm64`
57+
pods.
58+
- question: How do I verify that the NGINX deployment is running on Graviton nodes?
59+
answer: >-
60+
The provided manifest pins the pods using `nodeSelector: kubernetes.io/arch: arm64`. After
61+
deployment, the pod should schedule and run on nodes labeled `arm64`. If it remains `Pending`,
62+
verify the node group is active and the selector matches node labels.
63+
- question: What should I clean up to avoid ongoing AWS charges?
64+
answer: >-
65+
Delete the NGINX workload and namespace created for the test, then deprovision the EKS cluster
66+
from Rafay. This releases the associated AWS resources.
67+
# END generated_summary_faq
2468

2569
author: Jason Andrews
2670

27-
generate_summary_faq: true
71+
generate_summary_faq: false
2872
rerun_summary: false
2973
rerun_faqs: false
3074

@@ -53,7 +97,7 @@ further_reading:
5397
type: documentation
5498
- resource:
5599
title: Amazon EKS documentation
56-
link: https://aws.amazon.com/eks/
100+
link: https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html
57101
type: documentation
58102
- resource:
59103
title: AWS Graviton processors
@@ -68,3 +112,4 @@ weight: 1 # _index.md always has weight of 1 to order corr
68112
layout: "learningpathall" # All files under learning paths have this same wrapper
69113
learning_path_main_page: "yes" # Indicates this should be surfaced when looking for related content. Only set for _index.md of learning path content.
70114
---
115+

content/learning-paths/servers-and-cloud-computing/rafay-eks/cluster.md

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
11
---
2-
title: "Create the EKS cluster"
2+
title: Create an Amazon EKS cluster using a Rafay cluster manifest
3+
description: Create and apply a Rafay cluster manifest to provision an Amazon EKS cluster with an AWS Graviton-based node group, then download kubeconfig and verify the nodes report arm64.
34
weight: 3
45

56
### FIXED, DO NOT MODIFY
67
layout: learningpathall
78
---
89

9-
In this section, you define and provision an EKS cluster with a Graviton-based node group using Rafay's declarative manifest format. You then apply the manifest with RCTL, wait for the cluster to reach a ready state, and download the kubeconfig so you can interact with the cluster.
10-
1110
## Create the cluster manifest
1211

13-
The Rafay platform uses a declarative YAML manifest to define your EKS cluster. Create a file named `demo-eks-graviton.yaml` with the following content:
12+
The Rafay platform uses a declarative YAML manifest to define your EKS cluster.
13+
14+
Create a file named `demo-eks-graviton.yaml` with the following content:
1415

1516
```yaml
1617
apiVersion: infra.k8smgmt.io/v3
@@ -48,7 +49,7 @@ spec:
4849
autoScaler: true
4950
# Allows for full ECR (Elastic Container Registry) access. This is useful for building, for example, a CI server that needs to push images to ECR
5051
imageBuilder: true
51-
# The AWS EC2 instance type that will be used for the nodes
52+
# The Amazon EC2 instance type that will be used for the nodes
5253
instanceType: m7g.large
5354
# The maximum number of nodes that can run in the node group
5455
maxSize: 1
@@ -82,10 +83,10 @@ spec:
8283
8384
Key fields to note:
8485
85-
- `cloudCredentials` must exactly match the credential name you entered in the Rafay console
86-
- `project` - must be the project you attached the credential to
87-
- `instanceType: m7g.large` — a Graviton3 instance with Arm Neoverse processors
88-
- `publicAccess: false` — the Kubernetes API server has no public endpoint. You reach the cluster exclusively through RCTL, which routes traffic through the Rafay control plane.
86+
- `cloudCredentials` must exactly match the credential name you entered in the Rafay console.
87+
- `project` must be the project you attached the credential to.
88+
- `instanceType` must be a Graviton-based EC2 instance type with Arm Neoverse processors. In this manifest, it's Graviton3-based `m7g.large`.
89+
- `publicAccess` must be `false`. The Kubernetes API server has no public endpoint. You reach the cluster exclusively through RCTL, which routes traffic through the Rafay control plane.
8990

9091
## Apply the cluster manifest
9192

@@ -126,11 +127,12 @@ The output is similar to:
126127

127128
## Monitor cluster provisioning
128129

129-
Poll the cluster status until it reports `READY`. Provisioning typically takes 15–20 minutes as Rafay creates the VPC, EKS control plane, and managed node group.
130+
Poll the cluster status until it reports `READY`:
130131

131132
```console
132133
rctl get cluster demo-eks-graviton
133134
```
135+
Provisioning typically takes 15–20 minutes as Rafay creates the VPC, EKS control plane, and managed node group.
134136

135137
The output is similar to:
136138

@@ -142,11 +144,11 @@ The output is similar to:
142144
+-------------------+-----------------------------+---------+-----------+-----------+---------------------------+---------------------+
143145
```
144146

145-
While waiting, you can run the command again every few minutes. You will see various status values before the status changes to `READY`. You can also check the AWS CloudFormation console to see project and look for any stack errors.
147+
While waiting, you can run the command again every few minutes. You'll see various status values before the status changes to `READY`. You can also check the AWS CloudFormation console to look for any stack errors.
146148

147149
## Download the kubeconfig
148150

149-
Once the cluster is `READY`, download the kubeconfig file:
151+
After the cluster is `READY`, download the kubeconfig file:
150152

151153
```console
152154
rctl kubeconfig download --cluster demo-eks-graviton -f ~/.kube/demo-eks-graviton.kubeconfig
@@ -179,4 +181,10 @@ NAME STATUS ROLES AGE VERSION AR
179181
ip-192-168-13-74.ec2.internal Ready <none> 26m v1.36.2-eks-93b80c6 arm64
180182
```
181183

182-
The `arm64` value in the `ARCH` column confirms that the node is running on an AWS Graviton instance. Your EKS cluster is ready to accept workloads. In the next section, you will deploy NGINX to this cluster and verify it runs on the Graviton node.
184+
The `arm64` value in the `ARCH` column confirms that the node is running on an AWS Graviton-based instance. Your EKS cluster is ready to accept workloads.
185+
186+
## What you've accomplished and what's next
187+
188+
You've now defined and provisioned an Amazon EKS cluster with a Graviton-based node group using Rafay's declarative manifest format. You then applied the manifest with RCTL, waited for the cluster to reach a ready state, and downloaded the kubeconfig so you can interact with the cluster.
189+
190+
In the next section, you'll deploy NGINX to this cluster and verify it runs on the Graviton-based node.

content/learning-paths/servers-and-cloud-computing/rafay-eks/nginx.md

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
11
---
2-
title: "Deploy NGINX and clean up"
2+
title: Deploy NGINX to the Amazon EKS cluster and clean up
3+
description: Deploy NGINX to an Amazon EKS cluster on AWS Graviton-based nodes, test in-cluster connectivity, and clean up the Kubernetes and cloud resources.
34
weight: 4
45

56
### FIXED, DO NOT MODIFY
67
layout: learningpathall
78
---
89

9-
With the cluster running, you can now validate it by deploying a workload. In this section, you deploy NGINX using a manifest that pins pods to `arm64` nodes, verify the pod reaches a `Running` state, and test connectivity from inside the cluster. You then clean up all provisioned resources.
10-
1110
## Deploy NGINX
1211

13-
With the EKS cluster running on Graviton nodes, deploy NGINX to confirm that arm64 workloads schedule and run correctly.
12+
With the Amazon EKS cluster running on Graviton-based nodes, deploy NGINX to confirm that `arm64` workloads schedule and run correctly.
1413

1514
Create a file named `nginx-graviton.yaml` with the following content:
1615

@@ -104,7 +103,9 @@ nginx-arm-svc ClusterIP 10.100.42.137 <none> 80/TCP 30s
104103

105104
## Test NGINX connectivity
106105

107-
The NGINX service is type `ClusterIP`, which means it has no external IP and is only reachable from within the cluster network. The cluster also has `publicAccess: false`, so there is no public Kubernetes API endpoint. Both constraints mean you cannot test connectivity from your laptop directly. Instead, run a one-off pod inside the cluster that sends a request to the service and then deletes itself:
106+
The NGINX service is type `ClusterIP`, which means it has no external IP and is reachable only from within the cluster network. The cluster also has `publicAccess: false`, so there's no public Kubernetes API endpoint. Both constraints mean you can't test connectivity from your local machine directly.
107+
108+
Instead, run a one-off pod inside the cluster that sends a request to the service and then deletes itself:
108109

109110
```console
110111
kubectl run curl-test --rm -it --image=curlimages/curl --restart=Never -- curl http://nginx-arm-svc.nginx.svc
@@ -127,9 +128,9 @@ working. Further configuration is required.</p>
127128
pod "curl-test" deleted
128129
```
129130

130-
The NGINX welcome page confirms that the workload is running and reachable on your Graviton-backed EKS cluster.
131+
The NGINX welcome page confirms that the workload is running and reachable on your Graviton-based EKS cluster.
131132

132-
## Clean up
133+
## Clean up resources
133134

134135
Remove the NGINX workload and then delete the cluster to avoid ongoing AWS charges.
135136

@@ -148,7 +149,7 @@ service "nginx-arm-svc" deleted
148149
```
149150

150151
{{< notice warning >}}
151-
Deleting the cluster through RCTL triggers the removal of the EKS control plane, managed node group, and associated CloudFormation stacks in your AWS account. If you do not run this command, AWS will continue to charge you for the running EC2 instances and EKS control plane.
152+
Deleting the cluster through RCTL triggers the removal of the EKS control plane, managed node group, and associated CloudFormation stacks in your AWS account. If you don't run this command, AWS will continue to charge you for the running EC2 instances and EKS control plane.
152153
{{< /notice >}}
153154

154155
Delete the EKS cluster through Rafay:
@@ -157,13 +158,9 @@ Delete the EKS cluster through Rafay:
157158
rctl delete cluster demo-eks-graviton
158159
```
159160

160-
## Summary
161+
## What you've accomplished
161162

162-
In this Learning Path you:
163+
You've now deployed NGINX using a manifest that pins pods to `arm64` nodes, verified the pod reaches a `Running` state, and tested connectivity from inside the cluster. You then cleaned up all provisioned resources.
163164

164-
- Connected your AWS account to the Rafay platform using a cross-account IAM role and cloud credential.
165-
- Provisioned a private Amazon EKS cluster with a Graviton (`m7g.large`) node group using a declarative Rafay manifest and `rctl`.
166-
- Deployed NGINX with a `nodeSelector` that pins workloads to `arm64` nodes, confirming that Arm-native containers schedule and run correctly.
167-
- Tested in-cluster connectivity using a one-off curl pod, and cleaned up all AWS and Rafay resources.
165+
Rafay's control plane handles cluster access without requiring a public Kubernetes API endpoint, so you can use Rafay to run private, Graviton-based EKS clusters at scale.
168166

169-
Rafay's control plane handles cluster access without requiring a public Kubernetes API endpoint, making it straightforward to run private, Graviton-backed EKS clusters at scale.

0 commit comments

Comments
 (0)