Containers have become the standard output of the development process. They are mostly used in a micro-services architecture, as small functional building blocks. According to the IDC over 85% of organizations in the world are already using Containers in some of their environments and over 40% are using Containers in production. The adoption rate is tremendous and continues to accelerate.
With this growth, some challenges have risen in regards to the operational support of container-based applications. Common concerns include the containers themselves, managing in which they live, gaining control over the operations they are allowed to perform, deployment practices and general security and compliance. Access to resources for containers can be problematic and difficult, not to mention the management of the infrastructure underneath the pool of containers that requires provisioning, management, auto-scaling and even patching.
Following these challenges, Kubernetes has emerged as the standard for container orchestration. How did this happen? That will be a good story for another blog post :).
With Kubernetes, containers can be managed by clusters in public cloud, hybrid cloud and even in a multi-cloud environment. However, deploying and managing Kubernetes on your own is hard and managed Kubernetes services have emerged as a streamlined way to deploy containers in the public cloud. Managed Kubernetes is evolving and, slowly, serverless containers are becoming a norm.
What Role does the VM play with Containers?
Managing underlying virtual machines that run Kubernetes adds significant operational overhead and the “serverless” container services available from the public cloud vendors are solving that problem. While useful, these services are far from being cost-effective and fully featured.
In this blog post, we will take a look at different services offered by the top three cloud providers and showcase how Spotinst Ocean can help you use the elastic infrastructure in a cost and performance optimized manner. SpotInst Ocean delivers better ROI by leveraging the public and on-premises data center for efficient deployment of container clusters with Kubernetes.
Container Services with VM overhead
Container Services without VM overhead
Amazon Web Services
Amazon Web Services offers a variety of container services to meet the needs of modern containerized workloads. Elastic Container Service by AWS is one of the early container services in the market with a proprietary orchestration engine. After Kubernetes emerged as the standard for container orchestration, AWS EKS, their managed Kubernetes Service, was offered as a cloud service. AWS Fargate is AWS’ serverless container offering that supports AWS ECS for container orchestration.
- Amazon’s strength lies in giving customers more flexibility to use container services. They offer two different types of container services, Amazon ECS and EKS. While ECS offers more flexibility in load balancers and integration with IAM roles for containers in a task, it uses a proprietary orchestration tool. AWS EKS offers a standard based Kubernetes container orchestration. AWS Fargate is a serverless container offering and that currently supports ECS only today.
- With EKS, there is additional operational overhead in deploying applications since the user is required to manage the underlying virtual machines.
- The integration of EKS with other AWS services is limited at this point. For example, EC2 node provisioning is a separate process normally done with Cloudformation templates. Furthermore, infrastructure requirements such as storage classes needs to be manually configured.
- No Fargate support for Kubernetes
- At scale, Fargate is significantly more expensive than managing list price on-demand instances.
AWS Fargate is the easiest way to use ECS in a serverless model. Fargate provides a simpleway for developers to get started with deploying containers, however, users tend to prefer Kubernetes for production environments and without Fargate support, this makes that transition difficult. Moreover, the pricing model of Fargate is at a premium and dramatically increases the overall cost of the cluster.
Google offers Google App Engine, a Platform as a Service offering with support for OCI compatible containers, with Google Kubernetes Engine, their managed Kubernetes service. They do not have an equivalent to AWS Fargate but Google App Engine’s flexible pricing provides similar advantages. AWS Fargate and Google App Engine however, are not an apples to apples comparison and there are some significant differences.
- Google Kubernetes Engine runs the most recent versions of Kubernetes, giving developers faster access to newer Kubernetes features
- Well integrated with other Google Services including as well as native integrations with Istio service mesh. Service mesh projects such as Istio and linkerd are becoming popular way to provide service discovery and enforcement within Kubernetes.
- Google offers an On-Premises version Kubernetes Engine hybrid cloud deployments.
- Lack of a dedicated service like AWS Fargate or Azure Container Instances.
Google Kubernetes Engine is a good choice for seamless hybrid Kubernetes environments. With that said it adds significant operational overhead due to the lack of a serverless offering. The pricing model is based on on-demand instances which are sub-optimal when taking advantage of elastic infrastructure. Google App Engine provides a better user experience, but it is highly opinionated and lacks the flexibility of Google Kubernetes Engine.
Microsoft Azure offers a managed Kubernetes service called Azure Kubernetes Service (AKS) and a serverless container service called Azure Container Instances (ACI). While AKS is priced based on the underlying virtual machines, Azure Container Deployments are priced based on Container Groups which contain one or more instances. The cost of container groups is based on the memory and vCPU needed by the entire group.
- Azure Container Instances (ACI) are integrated with Kubernetes, providing users a way to use Kubernetes clusters without managing the underlying infrastructure.
- Both AKS and ACI are well integrated with many Azure services, making it easy for Azure customers to use Kubernetes
- Support for both Windows and Linux containers
- Lack of support for hybrid deployment
- At scale, price becomes an operational issue and hard to manage.
- Still missing important feature parity elements in networking and storage.
No to VMs, Yes to Containers
The hype of running containers without VMS is real
We are witnessing a major trend and shift in managing Containers clusters that pushes towards more abstraction of infrastructure, less VM management overhead, and more focus on Containers, Pods as the “first-class citizens”. With that trend, platforms like AWS Fargate, Azure Container Instances (ACI) and Spotinst Ocean are getting popular very rapidly. It does not make sense to manage VMs anymore, scale them and take care of the overhead associated with it.