Team & Onboarding Best Practices
The headline rule: no production kubectl write access for developers without training wheels.
Search across all documentation pages
The headline rule: no production kubectl write access for developers without training wheels.
Everything below is how you make that rule feel like enablement rather than obstruction.
Treat each group as a checkpoint in the onboarding arc, from day one through production ownership.
Adopt them in order. Groups A and B pay for themselves in the first week; group E only matters once teams are shipping.
Each practice is a default, not a law. Where you deviate, write down why, because undocumented exceptions become the new default within a quarter.
get, list, watch, and logs in their own dev namespace learns more in an hour than a week of documentation. Access is not the risk; scope is.kubectl apply or one PR, and a URL that returns 200. The feedback loop is the lesson.Role plus RoleBinding bounds a mistake to one tenant. Reserve ClusterRole and ClusterRoleBinding for the platform team and controllers.cluster-admin to a human. Use a just-in-time break-glass path that expires and is audited. If break-glass is used weekly, your normal permissions are wrong.pods/exec in prod is not.kubectl auth can-i --as-group is the only proof that a Role does what the diagram claims. Test the denials, not just the grants.restricted on every tenant namespace. RBAC decides who may create a Pod; admission decides what a Pod may be. You need both.securityContext, and a PDB is the highest-leverage artifact a platform team owns.HTTPRoute; the platform owns the Gateway. Ownership without the ability to break the front door.ResourceQuota does not have a quota. Same reasoning for PriorityClass.failureThreshold: 3" does not.LimitRange default and a Kyverno rule, not a lesson.A new engineer should reach a deployed, reachable workload on day one, using their own credentials, without a platform engineer typing anything.
Any developer should be able to answer "can I change this myself?" from a table, not from Slack.
Nobody should hold standing write access to production, and nobody should feel blocked by that - because the PR path is fast and reads are open.
Your most common review comment from six months ago should now be enforced automatically and never typed again.
And when a developer makes their worst plausible mistake, it should stay inside their namespace, hit a quota, and page nobody.
Is "no prod kubectl" realistic for a small team? The write half is, from about five engineers onward, because GitOps costs little once configured. Keep reads open regardless.
What if an incident needs immediate prod changes? That is what break-glass is for - just-in-time elevation, audited, expiring. It should be rare enough to notice and reliable enough to trust.
How long should onboarding to production ownership take? Two to six weeks for an experienced engineer new to your platform, most of it spent in staging with paired reviews.
Do we need a service mesh to do this well? No. Namespaces, RBAC, Pod Security Standards, quotas, and default-deny NetworkPolicies cover the boundaries. A mesh adds identity and traffic control on top.
What is the single highest-leverage thing to build first? The golden-path template. Every other guardrail gets cheaper once the default manifest is already correct.
How do we avoid becoming a ticket queue? Watch the platform column of your contract table and treat every recurring ticket type as a self-service primitive waiting to be built.
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