I'll be honest... it took me a while to get on the Kubernetes bandwagon. Initially, I wanted to leverage knowledge I already had -- Docker. With Docker, there was Compose. I had already been using Compose locally for months and Compose could scale via Swarm. The process of bringing up a Swarm is simple and a POC of Swarm took me just a few hours to put together. I had it up across 5 nodes (VMs) running 3 instances of around 15 unique containers.
And then came the realization that none of the cloud providers were on-board with Swarm. I use Azure almost exclusively, but I did look on GCP and AWS to see what the deal was with Swarm. There was no deal. I mean, sure, you can use the Swarm community edition, spin up your own VMs, install the Engines (how Swarm nodes communicate with the Master node) and use it that way... but now you must build your own CI/CD pipeline, monitoring solutions are scarce and it's on you to keep your VMs up to date with the latest software.
Meanwhile, in the Kubernetes land, the experience is from half to fully managed. I've read about half of the Kubernetes documentation now and one thing I see often is how easy everything is to get up and running on Google Cloud Platform. Azure is not far behind in terms of getting the cluster set up, but their tooling is almost non-existent, and monitoring is behind a paywall. AWS on the other hand ... while they do have a Kubernetes solution, when setting up various things in the cluster you must jump through several more hoops to get it up and running.
In the next series of posts, my goal is to describe my experience bringing up a Kubernetes cluster in Azure using their Azure Kubernetes Service (AKS). While we're at it, let's also say Kubernetes is K8s from now on.
Plan is to cover these
- Setting up the Azure CLI and basic CLI commands
- Creating the K8s cluster and hooking it up to Azure Container Service
- How to create integration, staging and production environments using Namespaces
- How to ensure a rogue service doesn't hose your entire cluster via resource requests and limits
- How do microservices inside the cluster talk to each other (hint: Services)
- What does a microservice deployment look like... like a deployment!
- How to limit traffic coming into your cluster (via Ingress controllers)
- How to set up SSL
- How to get a window into your cluster via REST API and SDK
I have done all the bullet points above. The cluster I set up hosts ~20 services in 3 different namespaces (3 20 = 60) with 2-6 replicas (60 2-6 = 120-360). That's not huge, but it's a significant amount of stuff running all at once. Managing this on Azure using Azure App Services would be a nightmare.
The plan is to publish an article once a week until all the above topics are covered. Join me on this journey and let's build a Kubernetes cluster (on AKS) together!
Did you find this article valuable?
Support Paul K by becoming a sponsor. Any amount is appreciated!