Managing Namespaces and Multi-Tenancy

1. Creating Namespace in Chart

Warning: Avoid templating kind: Namespace inside an app chart. Use helm install --create-namespace or manage namespaces in a separate platform chart. Owning namespaces in templates makes uninstall risky.

2. Using Release Namespace

ReferenceResolves to
{{ .Release.Namespace }}Namespace passed via -n
{{ .Values.global.namespace }}Explicit override

3. Installing Charts Across Namespaces

Example: Per-namespace releases

helm install api ./chart -n team-a --create-namespace
helm install api ./chart -n team-b --create-namespace
helm list --all-namespaces

4. Implementing Namespace Isolation

ControlResource
RBACNamespaced Role + RoleBinding
NetworkNetworkPolicy deny cross-namespace
QuotasResourceQuota per namespace
IdentityServiceAccount per workload

5. Using Namespace-scoped Resources

ResourceScope
Deployment, Service, ConfigMap, SecretNamespaced
Role, RoleBinding, ServiceAccountNamespaced
PVC, NetworkPolicy, HPANamespaced

6. Managing Cluster-scoped Resources

ResourcePattern
ClusterRole, ClusterRoleBindingGate with if + unique names per release
StorageClass, CRDManage in platform chart, not app chart
PersistentVolumeAvoid; prefer dynamic provisioning

7. Implementing Resource Quotas

Example: Tenant ResourceQuota

apiVersion: v1
kind: ResourceQuota
metadata:
  name: {{ .Release.Name }}-quota
  namespace: {{ .Release.Namespace }}
spec:
  hard:
    requests.cpu:    {{ .Values.quota.cpuRequest }}
    requests.memory: {{ .Values.quota.memRequest }}
    limits.cpu:      {{ .Values.quota.cpuLimit }}
    limits.memory:   {{ .Values.quota.memLimit }}
    pods: {{ .Values.quota.maxPods }}

8. Using LimitRange for Namespaces

Example: Default container limits

apiVersion: v1
kind: LimitRange
metadata:
  name: {{ .Release.Name }}-limits
spec:
  limits:
    - type: Container
      default:        { cpu: "500m",  memory: "512Mi" }
      defaultRequest: { cpu: "100m",  memory: "128Mi" }
      max:            { cpu: "2",     memory: "2Gi" }

9. Handling Cross-Namespace References

ReferenceFormat
DNS to Servicesvc.<ns>.svc.cluster.local
Secret referenceCannot — copy via ExternalSecrets / Reflector
ServiceAccount tokenUse TokenRequest API in target namespace

10. Implementing Multi-Tenant Charts