|
| 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. |
0 commit comments