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.
Originally published in the ProductDock blog section