Skip to main content

Naming Convention

Kubernetes Namespaces

{project}-{env}-{service}

payments-dev-api
payments-staging-worker
payments-prod-frontend
platform-mgmt-monitoring

ArgoCD Resources

AppProject: {project} → payments
ApplicationSet: {system} → gateway
Application: {system}-{service}-{env} → gateway-api-prod

Backstage Entities

Domain: {project} → payments
System: {system} → gateway
Component: {system}-{service} → gateway-api
Resource: {provider}-{project}-{env}-{type}-{name} → gcp-payments-prod-gke-main
Group: {slug} → team-payments
User: {username} → jane-doe

Crossplane

Infra namespace: {project}-{env}-infra → payments-prod-infra
Claim name: {resourceType}-{name} → cloudsql-main
XR name: {project}-{env}-{type}-{name} → payments-prod-cloudsql-main
ArgoCD App: crossplane-{project}-{env}-{type}-{name}
Backstage entity: {provider}-{project}-{env}-{type}-{name}

Rules That Apply Everywhere

RuleReason
Lowercase, hyphen-separatedDNS-safe and valid in all systems
Max 63 characters per segmentKubernetes namespace limit
No version or region in namesUse labels for those dimensions
No env in Backstage entity namesEntities are env-agnostic; env is observed at runtime
platform-* prefix for shared infraVisually separates app from infra namespaces

Reserved Namespaces

NamespaceStatusReason
argocdFixedArgoCD hardcodes this name internally
kube-systemReservedKubernetes internals
defaultAvoidNever deploy application workloads here
crossplane-systemFixedCrossplane controllers
platform-mgmt-*ConventionPlatform services on the management cluster
platform-{env}-*ConventionPlatform services per environment
{project}-{env}-{service}ConventionApplication workloads
{project}-{env}-infraConventionCrossplane Claims per domain per env