Kubernetes Internals Best Practices
These practices translate how Kubernetes actually works - reconciliation loops, a single etcd source of truth, and an unreliable network - into concrete design habits.
Search across all documentation pages
These practices translate how Kubernetes actually works - reconciliation loops, a single etcd source of truth, and an unreliable network - into concrete design habits.
They apply whether you are shipping an app onto a cluster or building controllers and operators on top of the API.
Read the groups top to bottom; they move from application design to controllers to cluster operations.
Treat each bold item as a rule of thumb with a short rationale, not an absolute law.
If you build operators, groups B and C are essential; if you only deploy workloads, groups A and D matter most.
spec and let controllers figure out how, instead of scripting imperative changes.preStop hooks so rolling updates stay clean during convergence.spec as a client and only status as the owning controller, and use the status subresource where available.You should be able to explain, for any workload you run, why it will converge and how it behaves during a node or control-plane failure.
Your controllers should survive being killed mid-reconcile, replayed events, and update conflicts without corrupting state.
If you can force-delete a node's Pods, restart a controller, and lose an etcd member without data loss, your design respects how Kubernetes really works.
Why design for eventual consistency instead of expecting instant changes? Because Kubernetes converges through independent loops with no cross-object transaction. Given stable intent it reaches the goal, but not atomically or instantly.
What is the single most important controller rule? Idempotency. Reconcile can run repeatedly for one change, so acting on current state and checking before creating keeps you correct.
Why should I never write to etcd directly? The API server enforces authentication, authorization, admission, and validation. Bypassing it skips all safety and can corrupt cluster state.
How do I avoid stuck deletions? Ensure every finalizer has a healthy controller that removes it after cleanup. A missing or failing controller leaves objects stuck with a deletionTimestamp.
Why back up etcd specifically? etcd holds all cluster state. A YAML repo rebuilds intent, but only an etcd snapshot captures the full live state, including status and generated objects.
Stack versions: This page was written for Kubernetes 1.36.2, Docker Engine 29.6.1 (BuildKit default), containerd (CRI runtime on nodes), Helm 3, Compose v2, Argo CD (latest - verify at build), and Gateway API (GA - verify controller support at build).
Reviewed by Chris St. John·Last updated Jul 16, 2026