Skip to main content

Multi-Tenancy

Butler provides multi-tenancy through Teams. Each Team owns a Kubernetes namespace and controls who can create and access clusters within it.

Teams​

A Team is a cluster-scoped CRD that groups users and resources. When you create a Team, Butler creates a namespace with the team's name and sets up RBAC bindings for the team's members.

apiVersion: butler.butlerlabs.dev/v1alpha1
kind: Team
metadata:
name: backend-team
spec:
displayName: "Backend Engineering"
access:
users:
- name: [email protected]
role: admin
- name: [email protected]
role: operator
groups:
- name: backend-engineers
role: operator

All TenantClusters, TenantAddons, and Secrets (kubeconfigs) for this team live in the backend-team namespace.

Roles​

RoleCreate/delete clustersScale clustersManage addonsManage team membersView clusters
adminYesYesYesYesYes
operatorYesYesYesNoYes
viewerNoNoNoNoYes

All roles can retrieve kubeconfigs for clusters in their team.

Multi-Tenancy Modes​

Configure the multi-tenancy mode in ButlerConfig:

ModeBehavior
EnforcedEvery TenantCluster must belong to a team namespace. Users can only access their team's resources.
OptionalTeams are available but not required. Resources without a team are accessible to all authenticated users.
DisabledNo team isolation. All authenticated users see all resources.

Platform Administrators​

Platform admins have full access to all teams and clusters regardless of team membership. They can create teams, manage platform configuration (ButlerConfig), and access the management cluster directly.

Resource Quotas​

Teams support resource limits to prevent any single team from consuming the entire platform:

  • Maximum clusters per team
  • Maximum workers per cluster
  • Maximum total CPU, memory, and storage across all clusters

Butler tracks current usage against these limits in the Team's status.

Environments​

Teams can optionally subdivide into named environments (dev, prod, per-user sandboxes). Each environment carries its own quotas, access overrides, and default cluster shape, sharing the team's overall ceiling.

See Also​