The app runs in a Pod. One or more containers, one node. If it dies, it stays dead.
Deployment — A dead Pod is replaced. You want 3, it keeps 3.
Each new Pod gets a new IP. Nothing can call the app by address.
Service — One address that does not change. It finds Pods by label, not by IP.
A public Service is a load balancer. Ten public Services is ten load balancers.
Ingress — One load balancer. Host and path choose the Service.
Ingress is only rules. Nothing in the cluster executes them.
Ingress Controller — nginx, Traefik, or the cloud one. It reads the rules and routes.
The database host is still in the image. Changing it means rebuilding the image.
ConfigMap — Config lives outside the image and is injected when the Pod starts. Same image, every environment.
A password in a ConfigMap is just another key. Anyone who can get the object can read it.
Secret — Credentials in their own object, with their own access. The image never holds them.
Some hours need 2 Pods, some hours need 20. A fixed replica count is wrong both ways.
HPA — CPU crosses a percent of the request, Pods are added. Load drops, they come off.
The HPA added Pods. The nodes are full. The new Pods stay Pending.
Karpenter — A Pending Pod gets a node. The load is gone, the node is gone.
One Pod can take the whole node if Kubernetes was never told how much it needs, or how much it may use.
Requests and Limits — requests is what the scheduler reserves. limits is the cap at runtime.