Kubernetes started as Google's internal container orchestration system called Borg. They open-sourced it in 2014, and it's now the standard for running containerized workloads at scale. If you're running Docker containers in production, you probably need Kubernetes.

What Kubernetes does

Kubernetes automates deployment, scaling, and management of containerized applications. You describe the desired state. Kubernetes makes it happen and keeps it that way. If a container crashes, Kubernetes restarts it. If traffic spikes, it spins up more replicas. You stop managing servers manually.

How a cluster is structured

Control plane: The brain. It runs the API server, scheduler, controller manager, and etcd. The API server is the entry point for all cluster operations. etcd is a distributed key-value store that holds the cluster's state. The scheduler assigns workloads to nodes. The controller manager keeps the actual state matching the desired state.

Worker nodes: Where your containers actually run. Each node runs kubelet (communicates with the control plane), kube-proxy (handles network routing), and a container runtime like containerd.

Core concepts

Pod: The smallest deployable unit. Usually wraps a single container, though you can run multiple tightly coupled containers in one pod.

Deployment: Manages a set of pod replicas. You tell it how many copies of your app to run and what container image to use. It handles rolling updates and rollbacks.

Service: A stable network endpoint for a set of pods. Pods come and go, but the Service keeps a consistent IP and DNS name. Kubernetes handles load balancing across the pods behind it.

ConfigMap and Secret: Inject configuration and credentials into pods without hardcoding them in container images.

Namespace: Logical partitions within a cluster. Good for separating teams or environments.

Deploying an application

You write a YAML manifest describing your Deployment and apply it with kubectl apply -f deployment.yaml. Kubernetes creates the pods, keeps them running, and exposes them via a Service. That's the basic flow.

For scaling, run kubectl scale deployment webapp --replicas=5 or configure a Horizontal Pod Autoscaler (HPA) to scale automatically based on CPU or memory.

Rolling updates and rollbacks

When you push a new image version, Kubernetes rolls it out gradually. Old pods come down as new ones come up. If the new version is broken, kubectl rollout undo deployment/webapp takes you back to the previous version in seconds.

Essential kubectl commands

kubectl apply -f file.yaml - apply a configuration to the cluster

kubectl get pods - list running pods

kubectl describe pod <name> - detailed info about a pod

kubectl scale deployment <name> --replicas=N - scale a deployment

kubectl rollout status deployment/<name> - check rollout progress

kubectl rollout undo deployment/<name> - roll back to previous version

kubectl logs <pod> - view pod logs

On Azure, AKS (Azure Kubernetes Service) manages the control plane for you. You pay for worker nodes, not the control plane. That makes it much cheaper to run for most workloads.