Skip to content

Commit 4d2d8a3

Browse files
Merge pull request #3422 from jasonrandrews/review
EKS cluster with Graviton nodes using Rafay
2 parents 0991159 + f819369 commit 4d2d8a3

6 files changed

Lines changed: 870 additions & 0 deletions

File tree

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
---
2+
title: "Deploy an EKS cluster with Graviton nodes using Rafay"
3+
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.
5+
6+
draft: true
7+
cascade:
8+
draft: true
9+
10+
minutes_to_complete: 60
11+
12+
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.
14+
15+
learning_objectives:
16+
- 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
19+
20+
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
24+
25+
author: Jason Andrews
26+
27+
generate_summary_faq: true
28+
rerun_summary: false
29+
rerun_faqs: false
30+
31+
### Tags
32+
skilllevels: Advanced
33+
subjects: Containers and Virtualization
34+
cloud_service_providers:
35+
- AWS
36+
armips:
37+
- Neoverse
38+
operatingsystems:
39+
- Linux
40+
tools_software_languages:
41+
- Kubernetes
42+
- AWS Elastic Kubernetes Service (EKS)
43+
- Rafay
44+
- NGINX
45+
- rctl
46+
47+
# FIXED, DO NOT MODIFY
48+
# ================================================================================
49+
further_reading:
50+
- resource:
51+
title: Rafay CLI overview
52+
link: https://docs.rafay.co/cli/overview/
53+
type: documentation
54+
- resource:
55+
title: Amazon EKS documentation
56+
link: https://aws.amazon.com/eks/
57+
type: documentation
58+
- resource:
59+
title: AWS Graviton processors
60+
link: https://aws.amazon.com/ec2/graviton/
61+
type: documentation
62+
- resource:
63+
title: Kubernetes documentation
64+
link: https://kubernetes.io/docs/home/
65+
type: documentation
66+
67+
weight: 1 # _index.md always has weight of 1 to order correctly
68+
layout: "learningpathall" # All files under learning paths have this same wrapper
69+
learning_path_main_page: "yes" # Indicates this should be surfaced when looking for related content. Only set for _index.md of learning path content.
70+
---
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
---
2+
# ================================================================================
3+
# FIXED, DO NOT MODIFY THIS FILE
4+
# ================================================================================
5+
weight: 21 # The weight controls the order of the pages. _index.md always has weight 1.
6+
title: "Next Steps" # Always the same, html page title.
7+
layout: "learningpathall" # All files under learning paths have this same wrapper for Hugo processing.
8+
---
Lines changed: 182 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,182 @@
1+
---
2+
title: "Create the EKS cluster"
3+
weight: 3
4+
5+
### FIXED, DO NOT MODIFY
6+
layout: learningpathall
7+
---
8+
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+
11+
## Create the cluster manifest
12+
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:
14+
15+
```yaml
16+
apiVersion: infra.k8smgmt.io/v3
17+
kind: Cluster
18+
metadata:
19+
# The name of the cluster
20+
name: demo-eks-graviton
21+
# The name of the project the cluster will be created in
22+
project: defaultproject
23+
spec:
24+
blueprintConfig:
25+
# The name of the blueprint the cluster will use
26+
name: minimal
27+
# The version of the blueprint the cluster will use
28+
version: latest
29+
# The name of the cloud credential that will be used to create the cluster
30+
cloudCredentials: aws-cloud-credential
31+
config:
32+
# The EKS addons that will be applied to the cluster
33+
addons:
34+
- name: kube-proxy
35+
version: latest
36+
- name: vpc-cni
37+
version: latest
38+
- name: coredns
39+
version: latest
40+
managedNodeGroups:
41+
# The AWS AMI family type the nodes will use
42+
- amiFamily: AmazonLinux2023
43+
# The desired number of nodes that can run in the node group
44+
desiredCapacity: 1
45+
iam:
46+
withAddonPolicies:
47+
# Enables the IAM policy for cluster autoscaler
48+
autoScaler: true
49+
# 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
50+
imageBuilder: true
51+
# The AWS EC2 instance type that will be used for the nodes
52+
instanceType: m7g.large
53+
# The maximum number of nodes that can run in the node group
54+
maxSize: 1
55+
# The minimum number of nodes that can run in the node group
56+
minSize: 1
57+
# The name of the node group that will be created in AWS
58+
name: graviton
59+
metadata:
60+
# The name of the cluster
61+
name: demo-eks-graviton
62+
# The AWS region the cluster will be created in
63+
region: us-east-1
64+
# The tags that will be applied to the AWS cluster resources
65+
tags:
66+
email: user@rafay.co
67+
env: qa
68+
# The Kubernetes version that will be installed on the cluster
69+
version: latest
70+
vpc:
71+
# AutoAllocateIPV6 requests an IPv6 CIDR block with /56 prefix for the VPC
72+
autoAllocateIPv6: false
73+
clusterEndpoints:
74+
# Enables private access to the Kubernetes API server endpoints
75+
privateAccess: true
76+
# Enables public access to the Kubernetes API server endpoints
77+
publicAccess: false
78+
# The CIDR that will be used by the cluster VPC
79+
cidr: 192.168.0.0/16
80+
type: aws-eks
81+
```
82+
83+
Key fields to note:
84+
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.
89+
90+
## Apply the cluster manifest
91+
92+
Submit the manifest to Rafay using `rctl`:
93+
94+
```console
95+
rctl apply -f demo-eks-graviton.yaml
96+
```
97+
98+
The output is similar to:
99+
100+
```output
101+
[
102+
{
103+
"tasksetId": "ko9176k",
104+
"tasksetOperations": [
105+
{
106+
"operationName": "ClusterCreation",
107+
"resourceName": "demo-eks-graviton",
108+
"operationStatus": "PROVISION_TASK_STATUS_INPROGRESS"
109+
},
110+
{
111+
"operationName": "NodegroupCreation",
112+
"resourceName": "graviton",
113+
"operationStatus": "PROVISION_TASK_STATUS_PENDING"
114+
},
115+
{
116+
"operationName": "BlueprintSync",
117+
"resourceName": "demo-eks-graviton",
118+
"operationStatus": "PROVISION_TASK_STATUS_PENDING"
119+
}
120+
],
121+
"tasksetStatus": "PROVISION_TASKSET_STATUS_INPROGRESS",
122+
"comments": "Configuration is being applied to the cluster"
123+
}
124+
]
125+
```
126+
127+
## Monitor cluster provisioning
128+
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+
131+
```console
132+
rctl get cluster demo-eks-graviton
133+
```
134+
135+
The output is similar to:
136+
137+
```output
138+
+-------------------+-----------------------------+---------+-----------+-----------+---------------------------+---------------------+
139+
| NAME | CREATED AT | TYPE | STATUS | BLUEPRINT | PROVISION STATUS | ENVIRONMENT CREATED |
140+
+-------------------+-----------------------------+---------+-----------+-----------+---------------------------+---------------------+
141+
| demo-eks-graviton | 2026-06-24T15:32:19.936269Z | aws-eks | NOT_READY | minimal | INFRA_CREATION_INPROGRESS | false |
142+
+-------------------+-----------------------------+---------+-----------+-----------+---------------------------+---------------------+
143+
```
144+
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.
146+
147+
## Download the kubeconfig
148+
149+
Once the cluster is `READY`, download the kubeconfig file:
150+
151+
```console
152+
rctl kubeconfig download --cluster demo-eks-graviton -f ~/.kube/demo-eks-graviton.kubeconfig
153+
```
154+
155+
The output is similar to:
156+
157+
```output
158+
kubeconfig downloaded to ~/.kube/demo-eks-graviton.kubeconfig
159+
```
160+
161+
Export the path so that `kubectl` uses this cluster:
162+
163+
```console
164+
export KUBECONFIG=~/.kube/demo-eks-graviton.kubeconfig
165+
```
166+
167+
## Verify the nodes
168+
169+
Confirm that the cluster has a running node and that it reports the `arm64` architecture:
170+
171+
```console
172+
kubectl get nodes -L kubernetes.io/arch
173+
```
174+
175+
The output is similar to:
176+
177+
```output
178+
NAME STATUS ROLES AGE VERSION ARCH
179+
ip-192-168-13-74.ec2.internal Ready <none> 26m v1.36.2-eks-93b80c6 arm64
180+
```
181+
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.
8.69 KB
Loading

0 commit comments

Comments
 (0)