# Part 3: Provision

## What Will You Do  
In this part of the self-paced exercise, you will provision an Amazon EKS cluster based on a declarative cluster specification

---

## Step 1: Cluster Spec  
- Open Terminal (on macOS/Linux) or Command Prompt (Windows) and navigate to the folder where you forked the Git repository  
- Navigate to the folder "/getstarted/autoscaler/cluster"

The "autoscaler-eks-cluster.yaml" file contains the declarative specification for our Amazon EKS Cluster.

### Cluster Details  
The following items may need to be updated/customized if you made changes to these or used alternate names.
- cluster name: "autoscaler-cluster"  
- project: "defaultproject"  
- blueprint: "autoscaler-blueprint"  
- blueprintversion: "v1"  
- cloud provider: "aws-cloud-credential"  
- name: "autoscaler-cluster"  
- region: "us-west-2"

```
apiVersion: infra.k8smgmt.io/v3
kind: Cluster
metadata:
  name: autoscaler-cluster
  project: defaultproject
spec:
  blueprintConfig:
    name: autoscaler-blueprint
    version: v1
  cloudCredentials: aws-cloud-credential
  config:
    addons:
    - name: kube-proxy
      version: latest
    - name: vpc-cni
      version: latest
    - name: coredns
      version: latest
    iam:
      withOIDC: true
    managedNodeGroups:
    - amiFamily: AmazonLinux2
      iam:
        withAddonPolicies:
          autoScaler: true
      desiredCapacity: 2
      instanceType: t3.large
      maxSize: 2
      minSize: 1
      name: ng-1
    metadata:
      name: autoscaler-cluster
      region: us-west-2
      tags:
        email: user@rafay.co
        env: qa
      version: latest
    network:
      cni:
        name: aws-cni
    vpc:
      autoAllocateIPv6: false
      clusterEndpoints:
        privateAccess: true
        publicAccess: false
      cidr: 192.168.0.0/16
  type: aws-eks
```

---

## Step 2: Provision Cluster  
- Type the command below to provision the EKS cluster

```
rctl apply -f autoscaler-eks-cluster.yaml
```

If there are no errors, you will be presented with a "Task ID" that you can use to check progress/status. Note that this step requires creation of infrastructure in your AWS account and can take ~20-30 minutes to complete.

```
{
  "taskset_id": "emplg72",
  "operations": [\
    {\
      "operation": "NodegroupCreation",\
      "resource_name": "ng-1",\
      "status": "PROVISION_TASK_STATUS_PENDING"\
    },\
    {\
      "operation": "ClusterCreation",\
      "resource_name": "autoscaler-cluster",\
      "status": "PROVISION_TASK_STATUS_PENDING"\
    }\
  ],
  "comments": "The status of the operations can be fetched using taskset_id",
  "status": "PROVISION_TASKSET_STATUS_PENDING"
}
```

- Navigate to the "defaultproject" project in your Org  
- Click on Infrastructure -> Clusters. You should see something like the following

- Click on the cluster name to monitor progress

---

## Step 3: Verify Cluster  
Once provisioning is complete, you should see the cluster in the web console

- Click on the kubectl link and type the following command

```
kubectl get nodes
```

You should see something like the following

```
NAME                                           STATUS   ROLES    AGE   VERSION
ip-192-168-24-14.us-west-1.compute.internal    Ready    <none>   11m   v1.21.5-eks-bc4871b
ip-192-168-90-123.us-west-1.compute.internal   Ready    <none>   11m   v1.21.5-eks-bc4871b
```

---

## Step 4: Verify Cluster Autoscaler  
Now, let us verify the Cluster Autoscaler resources are operational on the EKS cluster

- Click on the kubectl link and type the following command

```
kubectl get pod -n autoscaler
```

You should see something like the following

```
NAME                                                       READY   STATUS    RESTARTS   AGE
autoscaler-addon-aws-cluster-autoscaler-54bcf79cdf-t5zcl   1/1     Running   0          8m
```

---

## Recap  
Congratulations! At this point, you have successfully configured and provisioned an Amazon EKS cluster with Cluster Autoscaler in your AWS account using the RCTL CLI.

---
