Core Concepts
Introductions and explanations
Let's go back to basics. Kubernetes is a system for running and coordinating containerized apps in a cluster: it’s a way better way to handle infrastructure. But wait! What are containerized apps?! Good point.
Here are a few things that are handy to know ahead of getting into K8s: VMs, containers, and Docker [medium.freecodecamp].
The official docs: What is Kubernetes? [kubernetes]
A very detailed intro to Kubernetes [digitalocean].
Before we read more, let’s do a thing: here’s a guide to getting a Hello World Node.js app set up using Minikub [kubernetes].
And Colossus [github/lucperkins] is an example microservice architecture for Kubernetes using Bazel, Go, Java, Kubernetes and some others stuff I decided not to list
The history of Kubernetes [blog.risingstack].
7 reasons Kubernetes are ideal for CI/CD [thenewstack].
The current state of building images on Kubernetes [thenewstack].
And lessons learned from using Kubernetes for a year [techbeacon].
Hard Core: Kubernetes Core Concepts
Just the facts, maam
Alright, so you understand the broad strokes of what Kubernetes is, terrific! Now let’s take a closer look:
A good high-level summary of the core concepts in K8s [blog.arungupta]. This is what I read first when preparing for this project.
The official documentation covers the core concepts very exhaustively [kubernetes]. To highlight a few important bits:
If that’s all a little too dense, this post from YLD Engineering is a nice light start [medium/yld-engineering].
And if you only have 10 minutes [omerio].
Or 5 minutes! [youtube/vmwarecloudnative]
Assistant to the Regional Manager: Installing and Managing Kubernetes
Get it, and keep it it humming!
Now, to get a Kubernetes installation of our very own!
But, to be more specific:
a guide to installing Kubernetes on a Mac with Docker [rominirani].
On Windows, with Minikube, a tool that allows for local installation of K8s [rominirani].
On Ubuntu [techrepublic].
kubeadm [kubernetes] makes it easy to bootstrap a minimum viable Kubernetes cluster that conforms to best practices, that you can use as a master cluster. A quick and dirty guide to doing so [mirantis].
Or, you could use kops [github/kubernetes]. A guide to doing so [kubernetes] and an explanation of what it is [cloudacademy].
kubectl
And more tips for kubectl [github/mhausenblas].
A kubectl cheat sheet [kubernetes].
Object of Affection: Kubernetes Objects
OK, so: Kubernetes Objects are persistent entities that can be queried and updated via the API.
A Kubernetes object is a “record of intent”–once you create the object, the Kubernetes system will constantly work to ensure that object exists. By creating an object, you’re effectively telling the Kubernetes system what you want your cluster’s workload to look like; this is your cluster’s desired state.
The above is from the official documentation on Kubernetes Objects [kubernetes], and I include the quote here because reading this was one of those moments where it all clicked for me.
Advanced, lesser-known Kubernetes Objects you should check out [engineering.opsgenie].
Cluster Interaction: Kubernetes Clusters
Muster your cluster, buster!
Accessing clusters through the Kubernetes API [kubernetes]
An overview of administering clusters [kubernetes].
Various ways to access clusters [kubernetes],
The Cluster API is a project to bring declarative, Kubernetes-style APIs to cluster creation and management [github/kubernetes-sigs]. It’s a prototype, but looks promising.
And how to manage a cluster in Azure Container Service [medium/@somakdas].
Deploy, There! Kubernetes Deployments
You know, like "ahoy there"? Does that work? I think that works
Then the obligatory documentation on deployments [kubernetes].
kubernetes-deploy [github/shopify] is a tool that lets you deploy a K8s app and then understand the results–in a pass/fail sense.
“The ultimate guide” to deployments [platform9].
All Wrapped Up in a Pretty Little Package! Package Management
Sharing the love
Helm [helm] is the most-commonly-used package manager for Kubernetes. Why this matters [platform9].
A quickstart guide to Helm [github/helm].
And then a more exhaustive guide [medium/@gajus].
How to deploy K8s apps with Helm [cloudacademy].
A guide to Helm best practices [github/helm] and then authoring awesome charts [github/helm].
The Monster Mesh: Networking and Service Mesh
Making sure everyone is talking to the right people
Networking and service mesh is a somewhat complex issue: what follows here is by no means a final look at the subject, this will most definitely be updated throughout the month as I look into the issue more thoroughly. But here we go:
If two containers are sitting on the same physical machine, on the same hypervisor, on the same Docker instance, do you really need to jump all the way out to the NIC to facilitate communication between them? Does the application layer addressing stay the same? Is it better to facilitate that communication using an overlay? Do you do it over L2 or L3? What about multi-tenancy?
Kubernetes networking is hard: what you can do about it [cloudcomputing-news].
A hacker’s guide to Kubernetes networking [thenewstack].
The docs covering cluster networking [kubernetes].
Kubernetes networking 101 [aquasec]
Service Mesh
Service mesh is a dedicated infrastructure layer for managing service-to-service communication.
A nice little intro to service mesh [akomljen].
A guide to choosing your mesh [thenewstack].
An overview of Istio 1.0 [thenewstack].