How to Set Up an EKS Cluster with eksctl command line

How to Set Up an EKS Cluster with eksctl command line

Autopublished from RSS Original article

How to Set Up an EKS Cluster with Managed Node Group and AWS Ingress Controller: A Step-by-Step Guide to create through eksctl

I will guide you through the process of setting up an Amazon Elastic Kubernetes Service (EKS) cluster with a Managed Node Group and AWS Ingress Controller. This will allow you to efficiently manage your containerized applications and handle incoming traffic effectively.

Prerequisites

Before we begin, make sure you have the following prerequisites in place:

  1. An AWS account with the necessary permissions to create EKS clusters and related resources.

  2. The AWS Command Line Interface (CLI) installed and configured with access to your AWS account.

  3. kubectl (Kubernetes command-line tool) installed and configured on your local machine.

  4. Basic knowledge of Kubernetes concepts.

Step 1: Create an EKS Cluster

1.1. Open your terminal and ensure that your AWS CLI is properly configured.

1.2. Use the AWS CLI to create an EKS cluster with the following command:

aws eks create-cluster --name --version --role-arn --resources-vpc-config subnetIds=,securityGroupIds=

Replace the placeholders with your desired values. The <cluster-name> is the name of your EKS cluster, <Kubernetes-version> is the desired Kubernetes version, <eks-service-role-ARN> is the ARN of the IAM role for the EKS service, and <subnet-IDs> and <security-group-IDs> are the IDs of the subnets and security groups where your EKS nodes will reside.

1.3. Wait for the cluster to be created. This might take a few minutes.

Step 2: Create a Managed Node Group

2.1. To create a Managed Node Group, use the following AWS CLI command:

aws eks create-nodegroup --cluster-name --nodegroup-name --instance-types --subnet-ids --ami-type --remote-access ec2SshKey=

Replace <nodegroup-name> with your preferred name for the node group, <instance-type> with the desired EC2 instance type for the nodes, <subnet-IDs> with the IDs of the subnets where the nodes will be deployed, <ami-type> with the AMI type (AL2_x86_64 or AL2_x86_64_GPU), and <EC2-key-pair> with the name of your EC2 key pair for SSH access.

2.2. Wait for the Managed Node Group to be created and for nodes to join the cluster.

Step 3: Deploy the AWS Ingress Controller

3.1. Deploy the AWS Load Balancer Controller, which is the AWS Ingress Controller for EKS clusters, using the following command:

kubectl apply -k "github.com/aws/eks-charts/stable/aws-load-b.."

3.2. Next, add the AWS Helm repository and install the AWS Load Balancer Controller:

helm repo add eks aws.github.io/eks-charts helm upgrade -i aws-load-balancer-controller eks/aws-load-balancer-controller -n kube-system --set clusterName=

Ensure you replace <cluster-name> with the name of your EKS cluster.

3.3. Wait for the controller to be deployed and ready.

kubectl cluster-info kubectl get nodes kubectl get nodegroups kubectl get deployment -n kube-system alb-ingress-controller

Step 4: Create an Ingress Resource

Create an Ingress resource that defines how incoming traffic should be routed to your services. Here’s an example Ingress resource:

#alb-ingress.yaml

Annotations Reference: kubernetes-sigs.github.io/aws-alb-ingress-c..

apiVersion: extensions/v1beta1 kind: Ingress metadata: name: ingress-service labels: app:my-app-deployment annotations:

Ingress Core Settings

kubernetes.io/ingress.class: "alb" alb.ingress.kubernetes.io/scheme: internet-facing

Health Check Settings

alb.ingress.kubernetes.io/healthcheck-proto..: HTTP alb.ingress.kubernetes.io/healthcheck-port: traffic-port alb.ingress.kubernetes.io/healthcheck-path: / alb.ingress.kubernetes.io/healthcheck-inter..: '15' alb.ingress.kubernetes.io/healthcheck-timeo..: '5' alb.ingress.kubernetes.io/success-codes: '200' alb.ingress.kubernetes.io/healthy-threshold..: '2' alb.ingress.kubernetes.io/unhealthy-thresho..: '2' spec: rules:

  • http: paths:
    • path: /* backend: serviceName: api1 servicePort: 80

Apply the Ingress resource to your cluster with the following command:

kubectl apply -f alb-ingress.yaml

Step 5: Create a Deployment and Service

Create a Kubernetes Deployment manifest for your application:

deployment.yaml

apiVersion: apps/v1 kind: Deployment metadata: name: my-app-deployment spec: replicas: 3 selector: matchLabels: app: my-app template: metadata: labels: app: my-app spec: containers:

  • name: my-app-container image: ports:
    • containerPort: 80

Apply the Deployment manifest:

kubectl apply -f deployment.yaml

Create a Kubernetes Service manifest for your application:

service.yaml

apiVersion: v1 kind: Service metadata: name: my-app-deployment labels: app: my-app-deployment spec: type: NodePort selector: app: my-app-deployment ports:

  • port: 80 targetPort: 80

Apply the Service manifest:

kubectl apply -f service.yaml

Step 5: Verify the Setup

5.1. To ensure that everything is set up correctly, check the status of your EKS cluster, Managed Node Group, and Ingress Controller using the AWS CLI and kubectl.

5.2. Test the Ingress configuration by accessing your application through the AWS Application Load Balancer’s DNS name or IP address.

kubectl get deployments kubectl describe deployment my-deployment kubectl get services kubectl describe service my-service kubectl get ingress kubectl describe ingress my-ingress

Congratulations! You have successfully set up an EKS cluster with a Managed Node Group and AWS Ingress Controller, allowing you to deploy and manage containerized applications efficiently.

Did you find this article valuable?

Support Abhay Singh by becoming a sponsor. Any amount is appreciated!