Table of Contents

As containerization became a popular choice among businesses, the need for a system to manage and scale these containerized applications became increasingly apparent. In 2013, Google started an internal project to develop a container management system, which later became Kubernetes (K8s), an open-source project developed for container orchestration. In 2014, it was donated to the Cloud Native Computing Foundation (CNCF), a part of the Linux Foundation to foster collaboration and innovation around container orchestration.

Kubernetes addresses the need for managing containerized applications at scale by providing powerful features for orchestration, scaling, service discovery, resource utilization, declarative configuration, and portability. It simplifies the deployment and management of modern, cloud-native applications in diverse environments.


What is Amazon EKS

Amazon Elastic Kubernetes Service (Amazon EKS) is a managed Kubernetes service provided by AWS. It allows users to deploy, manage, and scale containerized infrastructure on AWS infrastructure without the need to install and maintain their own Kubernetes control plane.

Amazon EKS, Kubernetes cluster, AWS EKS dashboard, AWS Kubernetes
Source: AWS Docs

Amazon EKS handles the deployment, scaling, and maintenance of the Kubernetes cluster according to the varying workload demands. It ensures high availability and reliability by deploying the cluster across multiple Availability Zones within a region, thereby reducing single points of failure.

By abstracting the underlying infrastructure, EKS enables developers to focus mainly on application development without worrying about managing the complex infrastructure.


Features of Amazon EKS

From the managed control plane to seamless integrations with AWS services, EKS provides a comprehensive platform for building and scaling modern, cloud-native applications. Some of the key features of Amazon EKS are:

Managed Control Plane: Amazon EKS manages the Kubernetes control plane, including the API server, scheduler, and etcd, eliminating the operational overhead associated with provisioning, scaling, and maintaining these components.

Serverless Compute: Amazon EKS supports serverless computing using AWS Fargate. It helps to run containers without managing the underlying infrastructure. Fargate handles tasks such as server provisioning, scaling, and patching, allowing developers to focus on building and deploying applications.

Integration with AWS Services: EKS seamlessly integrates with other AWS services, enabling users to leverage capabilities such as Amazon EC2 for computing, Amazon EBS for storage, Amazon VPC for networking, AWS IAM for access control, AWS CloudTrail for auditing, and AWS CloudWatch for monitoring and logging.

Cost Monitoring Services: AWS provides various options to enable transparent EKS pricing and monitoring, such as Cost Allocation Tags, Kubecost, and cloud-native cost monitoring tools like AWS CloudTrail and Amazon CloudWatch. providing insights into resource usage, optimization recommendations, and cost allocation across containerized workloads, enabling organizations to optimize their cloud spending efficiently.

Security and Compliance: Fargate provides a secure runtime environment for containers, with built-in isolation mechanisms that prevent containers from accessing each other’s resources. Users can also leverage AWS Identity and Access Management (IAM) for fine-grained access control and strict security policies.


EKS vs ECS – a comparison

Amazon Elastic Kubernetes service and Amazon Elastic Container service are both container orchestration services provided by AWS. Amazon ECS is a simple, easy-to-use AWS-native container orchestration service suitable for users who are already familiar with the AWS ecosystem. EKS serves as a platform to run Kubernetes services on the AWS environment. It is more suitable for organizations and applications that require Kubernetes capabilities.

Feature EKSECS
Underlying technologyKubernetesECS proprietary orchestrator
ComplexityMore complex (requires Kubernetes knowledge)Simpler (easier to set up and manage)
FlexibilityHighly flexible and customizableLess flexible, but easier to integrate with other AWS services
Pricing modelFlat fee per cluster + resource usageResource usage only
Suitable forTeams familiar with Kubernetes, complex workloadsSimpler deployments, easier integration with existing AWS infrastructure
Amazon EKS vs Amazon ECS

The choice between EKS or ECS depends on factors such as the workload complexity, your Kubernetes expertise, and integration requirements with other AWS services.


Amazon EKS Tutorial

In this EKS tutorial, we will learn how to create an EKS cluster and deploy a sample application.

Prerequisites

  • Create and launch an EC2 instance
  • Install or Update to the latest version of AWS CLI
  • Installing or Updating Kubectl
  • Installing eksctl

After completing the installations, configure the EC2 instance with AWS CLI credentials.

AWs CLI configuration for Amazon EKS

Step 1: Create an EKS Cluster

Use the following command to create an EKS cluster. It creates an Amazon EKS cluster named “eks-cluster-demo1” in the “us-west-2” region using the eksctl command-line tool.

eksctl create cluster --name eks-cluster-demo1 --region us-west-2

eksctl” is a command-line tool used for creating, managing, and operating Kubernetes clusters on EKS. It simplifies the process of provisioning and managing EKS clusters by providing a convenient interface for cluster configuration, deployment, scaling, and upgrades.

After 10-15, your cluster will be provisioned and you will get the following output:

AWS EC2 console, Generating EKS cluster using eksctl command line tool

You can check the cluster information using the following command

kubectl cluster-info

kubectl” enables users to perform various operations such as creating, updating, and deleting Kubernetes resources like pods, deployments, services, and more, making it a crucial component in Kubernetes administration and development workflows.

AWS EKS tutorial, EKS cluster creation, kubectl command line tool to view cluster info

Step 2: Deploy an application on the EKS Cluster

After creating the cluster, you can deploy your application using the following commands.

Step 2.1: Create a namespace using the below command.

kubectl create namespace eks-sample-app

A namespace is a logical partitioning mechanism that allows users to create multiple virtual clusters within the same physical Kubernetes cluster.

Step 2.2: Create a YAML manifest file with specifications to run your deployment.

vi sample-deployment.yaml

Here is a sample deployment for your reference which pulls a container image from a public repository and deploys three replicas (individual Pods) of it to your cluster.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: eks-sample-linux-deployment
  namespace: eks-sample-app
  labels:
    app: eks-sample-linux-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: eks-sample-linux-app
  template:
    metadata:
      labels:
        app: eks-sample-linux-app
    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: kubernetes.io/arch
                operator: In
                values:
                - amd64
                - arm64
      containers:
      - name: nginx
        image: public.ecr.aws/nginx/nginx:1.23
        ports:
        - name: http
          containerPort: 80
        imagePullPolicy: IfNotPresent
      nodeSelector:
        kubernetes.io/os: linux

Apply the deployment manifest to your cluster.

[ec2-user@ip-172-31-47-1 ~]$ kubectl apply -f sample-deployment.yaml
deployment.apps/eks-sample-linux-deployment created

Thus your app deployment is successful.

Step 3: Inspect your resources

To view all the existing resources in the namespace, run the command

kubectl get all -n eks-sample-app

It lists all resources of various types, including pods, services, deployments, replica sets, and other objects, that belong to the specified namespace.

AWS EKS namespace, EKS deployments, Kubernetes pods, services, replica set

Amazon EKS pricing structure

You can use AWS EKS to run Kubernetes applications both on the cloud and on-premise environments. Users can utilize Amazon EC2 or AWS Fargate to run EKS on AWS infrastructure, and use AWS Outposts service to run it on customer data centers.

The EKS pricing structure consists of two components – a cluster fee and resource utilization fees. A cluster fee is the cost of an EKS cluster that you create and the resource utilization fee includes the cost of other resources you consume.

Cost of Amazon EKS Clusters

Every Amazon EKS cluster incurs a cost of $0.10 per hour. This fee is independent of your chosen deployment option. It applies regardless of whether you run it on AWS cloud, on-premises with AWS Outposts, or on different Kubernetes versions using extended support.

EKS with Amazon EC2

When you are deploying the EKS cluster with Amazon EC2, the EKS pricing includes the cost of the underlying EC2 instances that host your pods. The cost heavily depends on the specific application you run, your instance size, size, and running time. Please check out our EC2 pricing and cost optimization article to find the appropriate EC2 instance that fits your budget.

For example, Running a single, low-traffic application on a small EC2 instance (like t2.micro) alongside the $0.10/hour EKS cluster fee, could cost between $20 and $50 per month.

Hosting several low- to medium-traffic applications on a few t2.medium or m5.large instances, with the EKS fee, might fall in the $100 to $200 per month range.

Remember, these are just estimates, and the actual costs can be significantly higher or lower depending on your specific circumstances. For a more accurate estimate of your AWS charges, check out our AWS Pricing Calculator.

EKS with Fargate

You can run your Kubernetes pods in AWS Fargate without the need to manage, scale, or provision your EC2 instances. It provides a serverless option where you pay for the vCPU-second and GiB-memory consumed by your containerized applications.

Assuming that your application uses a micro vCPU and 256 MB memory with an average of 50% CPU utilization, running 24/7, let us estimate the cost:

EKS cluster: $0.10 per hour * 24 hours/day * 30 days/month = $7.20 per month.

Based on Fargate pricing, with micro vCPU at $0.00625 per vCPU-hour and memory at $0.0045 per GiB-hour, we can estimate:

vCPU cost: 0.5 vCPU * $0.00625 * 24 hours/day * 30 days/month = $2.25 per month.

Memory cost: 0.25 GiB * $0.0045 * 24 hours/day * 30 days/month = $1.35 per month.

Total Fargate cost: $2.25 + $1.35 = $3.60 per month per application.

Per application: $7.20 (EKS) + $3.60 (Fargate) = $10.80 per month.

This is a rough estimate and the actual cost will vary based on specific resource usage, application complexity, and running time.

EKS with Outposts

When deploying EKS on-premises using Outposts, the EKS service fee remains at $0.10 per hour. However, you’ll be charged separately for the underlying Amazon Outposts capacity based on the rack size and configuration.

For a small organization, a single Outposts rack with minimal compute resources might roughly cost around $5,000 per month. This could include a few EC2 instances for worker nodes. Therefore, for a small organization using EKS with a minimal Outposts setup could roughly range from $5,074 to $5,100 per month.

Amazon EKS Extended Support for Kubernetes Versions

Amazon EKS Extended Support for Kubernetes Versions is a service provided by Amazon Web Services (AWS) that allows customers to run Kubernetes clusters on Amazon EKS with long-term support for specific Kubernetes versions beyond their official end-of-life dates. This service enables customers to continue using older Kubernetes versions without sacrificing security, stability, or compatibility, ensuring a smooth transition for their containerized workloads while maintaining compliance and reliability.

EKS pricing covered under this extended support is $0.60 per hour for each Amazon EKS cluster. This $0.60 is inclusive of the $0.10 per cluster per hour you pay for the EKS cluster.

Amazon EKS Anywhere

EKS Anywhere is a deployment option that enables customers to run Kubernetes clusters on their own infrastructure, whether it be on-premises data centers or in other cloud environments. It helps customers deploy and manage Kubernetes clusters on their own infrastructure while benefiting from the operational efficiency of the Amazon EKS ecosystem.

It provides a flexible and consistent platform for running containerized applications across hybrid and multi-cloud environments.

Subscription TermPrice per cluster per yearMonthly billing per cluster
1-year$24,000$2,000
3-year$18,000$1,500
Amazon EKS Anywhere – Pricing Table

Please note that the per-cluster pricing remains flat and does not change based on the size of the cluster. Customers can include one or multiple Amazon EKS Anywhere cluster licenses in a single Amazon EKS Anywhere Enterprise Subscription purchase.

Additional Charges

The additional charges include the charges for networking and storage resources. It includes services such as Amazon VPC (Virtual Private Cloud) and Amazon EBS (Elastic Block Store) volumes.


Conclusion

With Amazon EKS, users can benefit from a fully managed Kubernetes service that simplifies the deployment, management, and scaling of applications while enjoying the scalability, reliability, and security provided by AWS infrastructure. By grasping the nuances of EKS pricing, and its deployment options businesses can optimize their cloud spend while maximizing the value derived from running containerized applications.


How can we help?

Are your cloud bills reaching sky-high levels? Don’t let cloud costs weigh you down anymore. With Economize, you can slash your cloud expenditures by up to 30% effortlessly. Book a free demo with us today and discover how we can help you start saving in as little as 10 minutes.

Heera Ravindran

Content Marketer at Economize. An avid writer and a zealous reader who specializes in technical content and has a passion for all things Cloud and FinOps.