Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
---
title: "Deploy an EKS cluster with Graviton nodes using Rafay"

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.

draft: true
cascade:
draft: true

minutes_to_complete: 60

who_is_this_for: >
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.

learning_objectives:
- Connect your AWS account to the Rafay platform using a cross-account IAM role
- Provision an Amazon EKS cluster with an Arm Graviton node group using Rafay
- Deploy and verify NGINX on Arm nodes and clean up all cloud resources

prerequisites:
- An Amazon Web Services (AWS) [account](https://aws.amazon.com/)
- A [Rafay account](https://rafay.co)
- The [AWS CLI](/install-guides/aws-cli/) installed and configured

author: Jason Andrews

generate_summary_faq: true
rerun_summary: false
rerun_faqs: false

### Tags
skilllevels: Advanced
subjects: Containers and Virtualization
cloud_service_providers:
- AWS
armips:
- Neoverse
operatingsystems:
- Linux
tools_software_languages:
- Kubernetes
- AWS Elastic Kubernetes Service (EKS)
- Rafay
- NGINX
- rctl

# FIXED, DO NOT MODIFY
# ================================================================================
further_reading:
- resource:
title: Rafay CLI overview
link: https://docs.rafay.co/cli/overview/
type: documentation
- resource:
title: Amazon EKS documentation
link: https://aws.amazon.com/eks/
type: documentation
- resource:
title: AWS Graviton processors
link: https://aws.amazon.com/ec2/graviton/
type: documentation
- resource:
title: Kubernetes documentation
link: https://kubernetes.io/docs/home/
type: documentation

weight: 1 # _index.md always has weight of 1 to order correctly
layout: "learningpathall" # All files under learning paths have this same wrapper
learning_path_main_page: "yes" # Indicates this should be surfaced when looking for related content. Only set for _index.md of learning path content.
---
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
---
# ================================================================================
# FIXED, DO NOT MODIFY THIS FILE
# ================================================================================
weight: 21 # The weight controls the order of the pages. _index.md always has weight 1.
title: "Next Steps" # Always the same, html page title.
layout: "learningpathall" # All files under learning paths have this same wrapper for Hugo processing.
---
Original file line number Diff line number Diff line change
@@ -0,0 +1,182 @@
---
title: "Create the EKS cluster"
weight: 3

### FIXED, DO NOT MODIFY
layout: learningpathall
---

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.

## Create the cluster manifest

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:

```yaml
apiVersion: infra.k8smgmt.io/v3
kind: Cluster
metadata:
# The name of the cluster
name: demo-eks-graviton
# The name of the project the cluster will be created in
project: defaultproject
spec:
blueprintConfig:
# The name of the blueprint the cluster will use
name: minimal
# The version of the blueprint the cluster will use
version: latest
# The name of the cloud credential that will be used to create the cluster
cloudCredentials: aws-cloud-credential
config:
# The EKS addons that will be applied to the cluster
addons:
- name: kube-proxy
version: latest
- name: vpc-cni
version: latest
- name: coredns
version: latest
managedNodeGroups:
# The AWS AMI family type the nodes will use
- amiFamily: AmazonLinux2023
# The desired number of nodes that can run in the node group
desiredCapacity: 1
iam:
withAddonPolicies:
# Enables the IAM policy for cluster autoscaler
autoScaler: true
# 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
imageBuilder: true
# The AWS EC2 instance type that will be used for the nodes
instanceType: m7g.large
# The maximum number of nodes that can run in the node group
maxSize: 1
# The minimum number of nodes that can run in the node group
minSize: 1
# The name of the node group that will be created in AWS
name: graviton
metadata:
# The name of the cluster
name: demo-eks-graviton
# The AWS region the cluster will be created in
region: us-east-1
# The tags that will be applied to the AWS cluster resources
tags:
email: user@rafay.co
env: qa
# The Kubernetes version that will be installed on the cluster
version: latest
vpc:
# AutoAllocateIPV6 requests an IPv6 CIDR block with /56 prefix for the VPC
autoAllocateIPv6: false
clusterEndpoints:
# Enables private access to the Kubernetes API server endpoints
privateAccess: true
# Enables public access to the Kubernetes API server endpoints
publicAccess: false
# The CIDR that will be used by the cluster VPC
cidr: 192.168.0.0/16
type: aws-eks
```

Key fields to note:

- `cloudCredentials` — must exactly match the credential name you entered in the Rafay console
- `project` - must be the project you attached the credential to
- `instanceType: m7g.large` — a Graviton3 instance with Arm Neoverse processors
- `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.

## Apply the cluster manifest

Submit the manifest to Rafay using `rctl`:

```console
rctl apply -f demo-eks-graviton.yaml
```

The output is similar to:

```output
[
{
"tasksetId": "ko9176k",
"tasksetOperations": [
{
"operationName": "ClusterCreation",
"resourceName": "demo-eks-graviton",
"operationStatus": "PROVISION_TASK_STATUS_INPROGRESS"
},
{
"operationName": "NodegroupCreation",
"resourceName": "graviton",
"operationStatus": "PROVISION_TASK_STATUS_PENDING"
},
{
"operationName": "BlueprintSync",
"resourceName": "demo-eks-graviton",
"operationStatus": "PROVISION_TASK_STATUS_PENDING"
}
],
"tasksetStatus": "PROVISION_TASKSET_STATUS_INPROGRESS",
"comments": "Configuration is being applied to the cluster"
}
]
```

## Monitor cluster provisioning

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.

```console
rctl get cluster demo-eks-graviton
```

The output is similar to:

```output
+-------------------+-----------------------------+---------+-----------+-----------+---------------------------+---------------------+
| NAME | CREATED AT | TYPE | STATUS | BLUEPRINT | PROVISION STATUS | ENVIRONMENT CREATED |
+-------------------+-----------------------------+---------+-----------+-----------+---------------------------+---------------------+
| demo-eks-graviton | 2026-06-24T15:32:19.936269Z | aws-eks | NOT_READY | minimal | INFRA_CREATION_INPROGRESS | false |
+-------------------+-----------------------------+---------+-----------+-----------+---------------------------+---------------------+
```

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.

## Download the kubeconfig

Once the cluster is `READY`, download the kubeconfig file:

```console
rctl kubeconfig download --cluster demo-eks-graviton -f ~/.kube/demo-eks-graviton.kubeconfig
```

The output is similar to:

```output
kubeconfig downloaded to ~/.kube/demo-eks-graviton.kubeconfig
```

Export the path so that `kubectl` uses this cluster:

```console
export KUBECONFIG=~/.kube/demo-eks-graviton.kubeconfig
```

## Verify the nodes

Confirm that the cluster has a running node and that it reports the `arm64` architecture:

```console
kubectl get nodes -L kubernetes.io/arch
```

The output is similar to:

```output
NAME STATUS ROLES AGE VERSION ARCH
ip-192-168-13-74.ec2.internal Ready <none> 26m v1.36.2-eks-93b80c6 arm64
```

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.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading