It looks like containers are here to stay. They are everywhere, from personal laptops to public cloud and private data centers. And these days, when talking about containers, it’s difficult or almost impossible, not to mention Kubernetes. Kubernetes is an open-source system for automating the deployment, scaling, and management of containerized applications. Even though I like Kubernetes, I think we should not use it as a magical solution for every problem and every new project/product. As a reminder, your goal is to build a product that solves the problem for your users. To help you on this journey, you need the most simple, least time-consuming infrastructure.
Here are a couple of reasons why you should postpone your Kubernetes journey:
- You have a simple and straightforward application that does not need expensive resources or high-level services;
- You are not deeply committed to microservices;
- You have a small user base, low load, and relatively simple architecture;
- You don’t think about vendor lock-in. Kubernetes is kind of vendor lock-in itself but more on this next time;
- You understand that scaling is an issue for tomorrow;
- You understand that Kubernetes has a steep learning curve, and you don’t want to use Kubernetes just because everyone else does;
- You are a small team, and investing your time, effort, and money in Kubernetes could be overkill.
If not Kubernetes, then what? Let’s look at three major cloud providers and a few options to start with:
AWS:
App Runner
AWS App Runner is a fully managed service that makes it easy for developers to quickly deploy containerized web applications and APIs at scale and with no prior infrastructure experience required.
Notes and Links:
- Currently supported regions: Europe (Ireland), Asia Pacific (Tokyo), US East (N. Virginia), US East (Ohio), US West (Oregon)
- Current supported configurations (cpu/memory): 1vCPU/2GB, 1vCPU/3GB, 1vCPU/4GB, 2vCPU/4GB
- Accessing container images only from AWS ECR (private and public)
- https://docs.aws.amazon.com/apprunner/latest/dg/service-source-image.html
- https://aws.amazon.com/apprunner/faqs/
ECS with EC2
Amazon ECS is a fully managed container orchestration service that makes it easy for you to deploy, manage, and scale containerized applications.
Notes and Links:
- Docker is the only container platform
- No additional charge for Amazon ECS, paying for AWS resources only
- https://aws.amazon.com/ecs/features/
Fargate
AWS Fargate is a serverless and pay-as-you-go compute engine that lets you focus on building applications without managing servers.
Notes and Links:
- ECS concepts apply
- There are no EC2 to manage
- Cost based on vCPU, memory, Operating Systems, CPU Architecture, and storage
- https://aws.amazon.com/fargate/pricing/
- https://aws.amazon.com/fargate/getting-started/
Lambda
Lambda is a computing service that lets you run code without provisioning or managing servers. You can also package and deploy Lambda functions as container images.
Notes and Links:
- Supports only Linux-based container images
- https://docs.aws.amazon.com/lambda/latest/dg/images-create.html
- https://aws.amazon.com/blogs/aws/new-for-aws-lambda-container-image-support/
Azure
Azure Container Instances
Develop apps fast without managing virtual machines or having to learn new tools—it is just your application in a container running in the cloud.
Notes and Links:
- Does not provide autoscaling, load balancing, and certificates
- Positions itself between Azure Functions (FaaS) & Azure Kubernetes Service (Cluster PaaS)
- 4 CPU and 16GB RAM is max for a container group
- Pay for the CPU and memory usage while it runs
Azure Container Apps
Azure Container Apps enables you to run microservices and containerized applications on a serverless platform.
Notes and Links:
- Powered by Kubernetes but no direct access to Kubernetes APIs
- Supports service discovery, traffic splitting, long-running processes and can run background tasks
- Optimized for running general-purpose containers, especially for applications that span many microservices deployed in containers
- Billed based on resource allocation measured in vCPU seconds (vCPU-s) and gibibyte seconds (GiB-s) and the total number of requests processed each month
- Pricing has two modes: Active and Idle. Check out: https://azure.microsoft.com/en-gb/pricing/details/container-apps/?ocid=AID3042118
App Service / Web App for Containers
Run containerized web apps on Windows and Linux
Notes and Links:
- You need Azure App Service with a Service Plan
- Container images from Azure Container Registry, Docker Hub, or a private Docker repository
- https://learn.microsoft.com/en-us/troubleshoot/azure/app-service/faqs-app-service-linux
GCP
Cloud Run
Run containerized applications in GCP without the overhead of managing the underlying infrastructure.
Notes and Links:
- Use cases: https://cloud.google.com/run#section-5
- Pay when your code is running, billed to the nearest 100 milliseconds.
- It can also be deployed into Anthos GKE clusters
- Pricing: https://cloud.google.com/run#section-13
Container-Optimized OS VM
Container-Optimized OS from Google is an operating system image for your Compute Engine VMs that is optimized for running Docker containers.
Notes and links:
- https://cloud.google.com/container-optimized-os/docs/concepts/features-and-benefits
- https://cloud.google.com/container-optimized-os/docs/concepts/features-and-benefits#limitations
- https://cloud.google.com/compute/docs/containers/deploying-containers
Let me know if I missed something.
Feel free to leave a comment below the blog post.