Install Crossplane

This document is for an older version of Crossplane.

This document applies to Crossplane version v1.9 and not to the latest release v1.11.

Install Crossplane

Crossplane can be easily installed into any existing Kubernetes cluster using the regularly published Helm chart. The Helm chart contains all the custom resources and controllers needed to deploy and configure Crossplane.



Helm charts for Crossplane are currently published to the stable and master channels.


The stable channel is the most recent release of Crossplane that is considered ready for the community.

1kubectl create namespace crossplane-system
3helm repo add crossplane-stable
4helm repo update
6helm install crossplane --namespace crossplane-system crossplane-stable/crossplane


The master channel contains the latest commits, with all automated tests passing. master is subject to instability, incompatibility, and features may be added or removed without much prior notice. It is recommended to use one of the more stable channels, but if you want the absolute newest Crossplane installed, then you can use the master channel.

To install the Helm chart from master, you will need to pass the specific version returned by the search command:

1kubectl create namespace crossplane-system
2helm repo add crossplane-master
3helm repo update
4helm search repo crossplane-master --devel
6helm install crossplane --namespace crossplane-system crossplane-master/crossplane --devel --version <version>

Uninstalling the Chart

To uninstall/delete the crossplane deployment:

1helm delete crossplane --namespace crossplane-system

That command removes all Kubernetes components associated with Crossplane, including all the custom resources and controllers.


The following tables lists the configurable parameters of the Crossplane chart and their default values.

affinityEnable affinity for Crossplane pod{}
image.tagImage tagmaster
image.pullPolicyImage pull policy used in all containersIfNotPresent
imagePullSecretsNames of image pull secrets to usedockerhub
registryCaBundleConfig.nameName of ConfigMap containing additional CA bundle for fetching from package registries{}
registryCaBundleConfig.keyKey to use from ConfigMap containing additional CA bundle for fetching from package registries{}
replicasThe number of replicas to run for the Crossplane pods1
deploymentStrategyThe deployment strategy for the Crossplane and RBAC Manager (if enabled) podsRollingUpdate
leaderElectionEnable leader election for Crossplane Managers podtrue
nodeSelectorEnable nodeSelector for Crossplane pod{}
customLabelsCustom labels to add into metadata{}
customAnnotationsCustom annotations to add to the Crossplane deployment and pod{}
serviceAccount.customAnnotationsCustom annotations to add to the serviceaccount of Crossplane{}
priorityClassNamePriority class name for Crossplane and RBAC Manager (if enabled) pods""
resourcesCrossplane.limits.cpuCPU resource limits for Crossplane100m
resourcesCrossplane.limits.memoryMemory resource limits for Crossplane512Mi
resourcesCrossplane.requests.cpuCPU resource requests for Crossplane100m
resourcesCrossplane.requests.memoryMemory resource requests for Crossplane256Mi
securityContextCrossplane.runAsUserRun as user for Crossplane65532
securityContextCrossplane.runAsGroupRun as group for Crossplane65532
securityContextCrossplane.allowPrivilegeEscalationAllow privilege escalation for Crossplanefalse
securityContextCrossplane.readOnlyRootFilesystemReadOnly root filesystem for Crossplanetrue
provider.packagesThe list of Provider packages to install together with Crossplane[]
configuration.packagesThe list of Configuration packages to install together with Crossplane[]
packageCache.mediumStorage medium for package cache. Memory means volume will be backed by tmpfs, which can be useful for development.""
packageCache.sizeLimitSize limit for package cache. If medium is Memory then maximum usage would be the minimum of this value the sum of all memory limits on containers in the Crossplane pod.5Mi
packageCache.pvcName of the PersistentVolumeClaim to be used as the package cache. Providing a value will cause the default emptyDir volume to not be mounted.""
tolerationsEnable tolerations for Crossplane pod{}
resourcesRBACManager.limits.cpuCPU resource limits for RBAC Manager100m
resourcesRBACManager.limits.memoryMemory resource limits for RBAC Manager512Mi
resourcesRBACManager.requests.cpuCPU resource requests for RBAC Manager100m
resourcesRBACManager.requests.memoryMemory resource requests for RBAC Manager256Mi
securityContextRBACManager.runAsUserRun as user for RBAC Manager65532
securityContextRBACManager.runAsGroupRun as group for RBAC Manager65532
securityContextRBACManager.allowPrivilegeEscalationAllow privilege escalation for RBAC Managerfalse
securityContextRBACManager.readOnlyRootFilesystemReadOnly root filesystem for RBAC Managertrue
rbacManager.affinityEnable affinity for RBAC Managers pod{}
rbacManager.deployDeploy RBAC Manager and its required rolestrue
rbacManager.nodeSelectorEnable nodeSelector for RBAC Managers pod{}
rbacManager.replicasThe number of replicas to run for the RBAC Manager pods1
rbacManager.leaderElectionEnable leader election for RBAC Managers podtrue
rbacManager.managementPolicyThe extent to which the RBAC manager will manage permissions. All indicates to manage all Crossplane controller and user roles. Basic indicates to only manage Crossplane controller roles and the crossplane-admin, crossplane-edit, and crossplane-view user roles.All
rbacManager.tolerationsEnable tolerations for RBAC Managers pod{}
rbacManager.skipAggregatedClusterRolesOpt out of deploying aggregated ClusterRolesfalse
metrics.enabledExpose Crossplane and RBAC Manager metrics endpointfalse
extraEnvVarsCrossplaneList of extra environment variables to set in the crossplane deployment. Any . in variable names will be replaced with _ (example: SAMPLE.KEY=value1 becomes SAMPLE_KEY=value1).{}
extraEnvVarsRBACManagerList of extra environment variables to set in the crossplane rbac manager deployment. Any . in variable names will be replaced with _ (example: SAMPLE.KEY=value1 becomes SAMPLE_KEY=value1).{}
webhooks.enabledEnable webhook functionality for Crossplane as well as packages installed by Crossplane.false

Command Line

You can pass the settings with helm command line parameters. Specify each parameter using the --set key=value[,key=value] argument to helm install. For example, the following command will install Crossplane with an image pull policy of IfNotPresent.

1helm install --namespace crossplane-system crossplane-stable/crossplane --set image.pullPolicy=IfNotPresent

Settings File

Alternatively, a yaml file that specifies the values for the above parameters (values.yaml) can be provided while installing the chart.

1helm install crossplane --namespace crossplane-system crossplane-stable/crossplane -f values.yaml

Here are the sample settings to get you started.

 1replicas: 1
 3deploymentStrategy: RollingUpdate
 6  repository: crossplane/crossplane
 7  tag: alpha
 8  pullPolicy: Always
11- dockerhub