Kubernetes Versus Amazon ECS: A Peculiar Comparison

Michael Handa Amazon Web Services, Cloud Technology, Containerization, Kubernetes, Microservices

Many would say that comparing Kubernetes with Amazon’s EC2 container service, or ECS, is like comparing apples and oranges. But are they really that different? That’s what we’ll be exploring in this blog.

We’ll be looking at what each of these services offers, and in which aspects they are similar —  as well as their differences. This comparison will allow you to select the solution that is best for you, depending on your specific needs.

We won’t go into detail about what Kubernetes is here, since we covered it extensively in one of our earlier blog posts.

What is ECS?

Amazon’s EC2 Container Service was one of the early adopters of Docker containers. EC2 has been around since 2015, and has seen a high adoption rate as a result of the many benefits it offers. It leverages the AWS network to unlock myriad features and ensures cost effectiveness through economies of scale. Many industry giants, such as Samsung and General Electric, rely upon ECS for their mission-critical applications.

Essentially, ECS uses clusters of EC2 computing instances as Docker hosts. Amazon employs ECS to power many of its core services like SageMaker, AWS Batch, Amazon Lex, and its recommendation engine, and is evidence of the security, reliability, and high availability it offers.

Tale of the Tape

Kubernetes Vs. ECS is truly a peculiar comparison. These two services have so much in common, yet are fundamentally different. As a matter of fact, Amazon EKS (Elastic Kubernetes Service) is one of the best implementations of a managed Kubernetes service. So you can experience the best of both Kubernetes and ECS on AWS itself.

However, that may well be where the similarities end. We’ll be looking at the major aspects in which these two services differ, and how they affect your applications.

Technology

One of the main differences between these two services is their underlying technologies. ECS is a proprietary solution that leverages Amazon’s EC2 and Fargate platforms to host Docker containers providing serverless computing, on-demand pricing, scalability, security, reliability, and cost-efficiency.

As a part of the AWS ecosystem, ECS enables you to easily integrate with numerous AWS services related to security, AI, Machine learning, storage, and more. 

Kubernetes, on the other hand, is an open-source container orchestration solution that can be hosted on many platforms, and offers a lot more flexibility in terms of configuration and non-standard applications.

This fundamental difference leads to many of the other differences between these two platforms, which are discussed below.

Vendor Lock-in

If you are already on ECS or are planning on using it, you need to keep in mind that it entails a high level of vendor lock-in. Unlike with Kubernetes, you will not be able to migrate your containerized application to any other provider or platform.

Kubernetes support continues to increase with service providers, including EKS, Azure Kubernetes Service (AKS), Google Kubernetes Engine (GKE), and also self hosting (on-premise). In addition to the ease of moving to other managed Kubernetes providers, you also will be able to deploy your applications on hybrid and multi-cloud solutions.

Ease of Deployment

Deployment is one aspect in which ECS comes out on top. Because ECS is a native solution, you will be able to complete the initial setup and deploy tasks easily through the AWS Management Console. The initial setup becomes even simpler because you won’t need to set up the control plane, unlike with Kubernetes.

Kubernetes requires a little more expertise. If you are on EKS, you will have the benefit of setting up through the AWS Management Console, but you will still need to configure and deploy pods via Kops. Some other platforms require even more manual intervention.

Container Limit (per Instance)

ECS allows up to 120 tasks per instance, whereas Kubernetes has much higher limits in general — even supporting up to 750 pods per instance on EKS. These limits may look very important at first glance, but become critical when deploying large apps that require thousands of pods and nodes.

Flexibility for Configurations and Troubleshooting

Given that ECS is a proprietary managed service, it offers little in terms of configuration. This is even more true if you use the Fargate platform, as there is no access to cluster nodes, which restrict troubleshooting altogether. The opposite is true with Kubernetes, as flexibility and customizability come as part of the deal.

Load balancing is another vital aspect of containerized apps. AWS takes care of this through its Elastic Load Balancing (ELB) service on ECS. However, with Kubernetes, while there is a lot of flexibility in this aspect, you will require some level of expertise.

Security

AWS offers many services like its Identity and Access Management (IAM) on ECS to ensure the security of containerized apps by allowing IAM roles to be assigned per task. Again, this benefit comes with being locked-in with ECS.

On AWS, both ECS and EKS have the benefit of being secured through its Elastic Container Registry (ECR). But securing container infrastructure has generally been a challenging task, and you will need to put in considerable effort to secure Kubernetes based apps, especially if they are hosted on-premise.

Pricing

Comparing the pricing of ECS and Kubernetes becomes somewhat complicated because the latter is supported by so many providers offering many pricing plans. Let’s start by comparing pricing for ECS and AWS’s own Kubernetes offering – EKS. 

Both ECS and EKS use EC2 instances, and pricing depends on many factors like whether you select on-demand or spot instances, the platform, and the specifications. While these factors affect both solutions similarly, there are others that will increase the cost of each in diverse ways.

One such factor is that Kubernetes requires master nodes, which cost 10 cents per hour — almost double that of worker nodes. This is a mandatory cost factor of Kubernetes that does not affect ECS. On the other hand, if you do not have a dedicated team to manage your ECS tasks, you will need to opt for Fargate instances, which cost relatively more for larger workloads. Again, pricing depends on the computing resources and memory required.

Google Kubernetes Engine (GKE) and Azure Kubernetes Engine (AKE) are two of the other prominent managed Kubernetes providers. Pricing for computing services are quite on par with AWS, but exact pricing depends on the select specification and configurations. What is to be noted is that AKE does not charge additionally for cluster management, while GKE will follow suit with EKS and begin charging for cluster management at $.10 per hour effective June 2020.

In essence, the flexibility of Kubernetes comes with an additional cost for cluster management. This cost can be quite considerable for applications that require a higher number of clusters. You can read more about cost-effective cluster management on one of our other blog posts.

If you are relatively new to containerized applications, or already have applications that leverage AWS services, ECS is the recommended option for you. It will save you cluster management costs and allow you to easily deploy your applications.

If these conditions don’t apply to you, then Kubernetes can offer much flexibility, both in terms of configuring your applications as well as being able to migrate across managed Kubernetes providers.There are a lot more articles about Kubernetes and other container solutions on our blog at BlueSentry.