Upgrade Crossplane v2 to Upbound Crossplane
This guide explains how to upgrade from the Open-Source version of Crossplane v2 to Upbound Crossplane (UXP) with both Community and Commercial licenses.
Upbound Crossplane (UXP) is the AI-native distribution of Crossplane by Upbound. UXP builds on Crossplane v2.0 and maintains full compatibility with open-source Crossplane. Use this guide when you want to upgrade to gain enhanced stability and features like improved package management and observability.
Prerequisites
To upgrade to Upbound Crossplane, your control plane must be running Crossplane v2.0.1 or greater.
To upgrade an older version of Crossplane, refer to the Crossplane upgrade documentation and come back to this guide when your control plane is v2.0.1 or greater.
To determine your Crossplane version, use the crossplane
CLI and look for the
Server Version
:
crossplane version
Client Version: v1.16.0
Server Version: v2.0.2
Upbound recommends backing up your critical resources before beginning this process.
Version compatibility and breaking changes
Make sure you understand the version compatibility and breaking changes before you begin your upgrade.
Version compatibility
When upgrading from OSS Crossplane, the target UXP version must match the Crossplane version up to the -up.N
suffix:
- ❌ Crossplane
v2.0.1
→ UXPv2.1.1-up.N
- ✅ Crossplane
v2.0.1
→ UXPv2.0.1-up.N
To upgrade an older version of Crossplane to UXP, upgrade Crossplane first and return when your control plane matches the version of UXP.
Breaking change You must now specify fully qualified package URLs:
- ❌
package: provider-aws:v0.34.0
- ✅
package: xpkg.upbound.io/crossplane-contrib/provider-aws:v0.34.0
Using fully qualified images was already a best practice, but Crossplane now enforces this practice to avoid confusion and unexpected behavior. This ensures users know which registry their packages use.
Before upgrading to Upbound Crossplane, please ensure all your Packages are
using fully qualified images that explicitly specify a registry
(registry.example.com/repo/package:tag
).
Verify packages and backup Crossplane resources
Prepare your environment for upgrade by verifying package configurations and creating backups.
-
Review your existing Crossplane packages:
# Check existing packages for fully qualified images
kubectl get pkgThe output should look like the following:
NAME INSTALLED HEALTHY PACKAGE
provider.pkg.crossplane.io/upbound-provider-aws-s3 True True xpkg.upbound.io/upbound/provider-aws-s3:v1.21.1
provider.pkg.crossplane.io/upbound-provider-family-aws True True xpkg.upbound.io/upbound/provider-family-aws:v2.0.1 -
Review your existing Crossplane resources:
# Backup all Crossplane configurations
kubectl get configurations.pkg -o yaml > configurations-backup.yaml
kubectl get providers.pkg -o yaml > providers-backup.yaml
kubectl get functions.pkg -o yaml > functions-backup.yaml
# Backup your claims and managed resources
kubectl get claim -A -o yaml > claims-backup.yaml
kubectl get managed -o yaml > managed-resources-backup.yaml -
Verify your current Crossplane version and health:
# Check current version
helm list -n crossplane-system
# Verify all resources are healthy
kubectl get configurations.pkg
kubectl get providers.pkg
kubectl get functions.pkgExpected healthy state:
- Configurations:
INSTALLED: True
,HEALTHY: True
- Providers:
INSTALLED: True
,HEALTHY: True
- Functions:
INSTALLED: True
,HEALTHY: True
- Claims:
SYNCED: True
,READY: True
- Configurations:
-
Capture your critical cluster workloads that depend on Crossplane to plan for minimal disruption.
Create a ClusterAdmin
Grant your control plane the ability to create the necessary Kubernetes resources.
-
Create a ClusterRoleBinding:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: crossplane-clusteradmin
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: crossplane
namespace: crossplane-system -
Save as
rbac.yaml
and apply it:kubectl apply -f rbac.yaml
The ClusterRoleBinding gives full admin access to Crossplane. While this is fine for development purposes, it's advised for production scenarios to be diligent in what permissions you grant Crossplane. Only give it what's necessary to create and manage the resources you need it to.
Upgrade to Community UXP
Moving from open source Crossplane to Community UXP provides enhanced stability and features like improved package management and observability. This upgrade path uses a free Community license.
-
Set version of UXP to install:
-
Choose your upgrade method and run the upgrade:
- Helm Install
- Up CLI
Add the Upbound repository and upgrade your Crossplane cluster:
helm repo add upbound-stable https://charts.upbound.io/stable && helm repo update
helm upgrade --install crossplane --namespace crossplane-system oci://xpkg.upbound.io/upbound/crossplane --version "${UXP_VERSION}"First, download the CLI:
curl -sL "https://cli.upbound.io" | sh
Next, upgrade your Crossplane cluster to UXP:
up uxp upgrade "${UXP_VERSION}"
Upgrade to Commercial UXP
Moving from open source Crossplane to a Commercial UXP v2 provides production
level enterprise features like ProviderVPA
, Knative
, and enterprise support.
This upgrade path uses a paid Commercial license. Review our pricing plans
for more information.
-
Set version of UXP to install:
-
Choose your upgrade method and run the upgrade:
- Helm Install
- Up CLI
Add the Upbound repository and upgrade your Crossplane cluster:
helm repo add upbound-stable https://charts.upbound.io/stable && helm repo update
helm upgrade --install crossplane --namespace crossplane-system oci://xpkg.upbound.io/upbound/crossplane --version "${UXP_VERSION}"First, download the CLI:
curl -sL "https://cli.upbound.io" | sh
Next, upgrade your Crossplane cluster to UXP:
up uxp upgrade "${UXP_VERSION}"
-
Install your Commercial License:
up uxp license apply /path/to/license.json
Verify your upgrade
-
Check that all resources are healthy:
kubectl get configurations.pkg
kubectl get providers.pkg
kubectl get functions.pkg
kubectl get claim -A
kubectl get managed -
Verify your commercial features (Commercial only):
After applying the license, check for
VPA
resources:kubectl -n crossplane-system get vpa
Provider revisions should be healthy:
kubectl get providerrevisions.pkg
-
Verify function revision runtime update (Commercial only):
Function revisions should show healthy runtime status:
kubectl get functionrevisions.pkg
Expected output:
NAME HEALTHY RUNTIME IMAGE STATE AGE
crossplane-contrib-function-auto-ready-35bfe51b9ce9 True True xpkg.upbound.io/crossplane-contrib/function-auto-ready:v0.5.0 Active 16m
crossplane-contrib-function-patch-and-transform-d000d8ce634a True True xpkg.upbound.io/crossplane-contrib/function-patch-and-transform:v0.9.0 Active 17m
Next steps
After upgrading to Upbound Crossplane, try out these features:
- The developer experience improvements with our builders workshop
- Browse all your managed resources with the Crossplane Web UI
- Query resource states in real-time with Upbound Query API
- Leverage Intelligent Control Planes to Dynamically scale an RDS Instance
- Join the #Upbound channel on the Crossplane Slack for questions and support