Upgrade PaletteAI
This page explains how to upgrade PaletteAI to a new version. Use the workflow that matches your installation method:
- If you installed PaletteAI with Helm, use the Upgrade with Flux or Upgrade Manually workflow.
- If you installed PaletteAI with the appliance method, skip to Upgrade Appliance. Appliance upgrades use a content bundle downloaded from Artifact Studio.
For Helm-based deployments, PaletteAI consists of two Helm charts that must be upgraded in the following order:
-
First, upgrade
mural-crds, which contains the Custom Resource Definitions (CRDs). -
Second, upgrade
mural, which contains the main application.
Prerequisites
-
PaletteAI installed.
-
kubectl installed.
-
The
KUBECONFIGenvironment variable is set to the path of the PaletteAI hub cluster'skubeconfigfile.export KUBECONFIG=<kubeconfig-location>
Upgrade with Flux
Use Flux to automatically manage your PaletteAI installation, upgrades, and CRD lifecycle. Flux monitors the OCI registry and upgrades the Helm release when new chart versions appear.
Enablement
-
Create a file named
mural-crds-oci-repository.yamlfor themural-crdschart.cat << EOF > mural-crds-oci-repository.yaml
apiVersion: source.toolkit.fluxcd.io/v1
kind: OCIRepository
metadata:
name: mural-crds
namespace: mural-system
spec:
interval: 10m
ref:
semver: "0.7.4"
url: oci://public.ecr.aws/mural/mural-crds
EOF -
Create a file named
mural-oci-repository.yamlfor themuralchart.cat << EOF > mural-oci-repository.yaml
apiVersion: source.toolkit.fluxcd.io/v1
kind: OCIRepository
metadata:
name: mural
namespace: mural-system
spec:
interval: 10m
ref:
semver: "1.1.0-rc.3"
url: oci://public.ecr.aws/mural/mural
EOF -
Apply both
OCIRepositoryresources to your cluster.kubectl apply --filename mural-crds-oci-repository.yaml
kubectl apply --filename mural-oci-repository.yaml -
Create a file named
mural-crds-helm-release.yamlfor themural-crdschart.cat << EOF > mural-crds-helm-release.yaml
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: mural-crds
namespace: mural-system
spec:
interval: 10m
chartRef:
kind: OCIRepository
name: mural-crds
namespace: mural-system
install:
crds: Create
upgrade:
crds: CreateReplace
EOF -
Create a file named
mural-helm-release.yamlfor themuralchart. ThedependsOnfield ensures that themural-crdschart is upgraded before themuralchart.cat << EOF > mural-helm-release.yaml
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: mural
namespace: mural-system
spec:
interval: 10m
chartRef:
kind: OCIRepository
name: mural
namespace: mural-system
dependsOn:
- name: mural-crds
values:
# Your custom values here
EOF -
Apply both
HelmReleaseresources to your cluster.kubectl apply --filename mural-crds-helm-release.yaml
kubectl apply --filename mural-helm-release.yaml
Validate
-
Confirm that both
OCIRepositoryresources were created and are ready.kubectl get ocirepository --namespace mural-systemExample OutputNAME URL READY STATUS AGE
mural-crds oci://public.ecr.aws/mural/mural-crds True stored artifact for digest ... 10s
mural oci://public.ecr.aws/mural/mural True stored artifact for digest ... 10s -
Check that both
HelmReleaseresources were created.kubectl get helmrelease --namespace mural-systemExample OutputNAME READY STATUS AGE
mural-crds True Helm upgrade succeeded for release mural-system/mural... 5m
mural True Helm upgrade succeeded for release mural-system/mural... 5m -
Ensure that all PaletteAI pods are in a
Runningstate.kubectl get pods --namespace mural-system
Upgrade Manually
If you prefer to manage upgrades manually, follow these steps to upgrade both charts in the correct order.
The mural-crds chart must be upgraded before the mural chart. Upgrading in the wrong order may cause deployment failures or undefined behavior.
Prerequisites
-
helm installed and available in your
$PATH. -
Access to the PaletteAI
values.yamlfile configured for your environment.
Enablement
-
Upgrade the
mural-crdschart.helm template mural-crds oci://public.ecr.aws/mural/mural-crds --version 0.7.4 --include-crds | kubectl apply --server-side --force-conflicts -f -Example OutputPulled: public.ecr.aws/mural/mural-crds:0.5.0
Digest: sha256:406eff86daf9ebdd38a17794390628a353374b6e1a5b856a5f89a702d45dfc79
customresourcedefinition.apiextensions.k8s.io/clustermanagementaddons.addon.open-cluster-management.io serverside-applied
customresourcedefinition.apiextensions.k8s.io/managedclusters.cluster.open-cluster-management.io serverside-applied
customresourcedefinition.apiextensions.k8s.io/managedclustersets.cluster.open-cluster-management.io serverside-applied
customresourcedefinition.apiextensions.k8s.io/managedclusteraddons.addon.open-cluster-management.io serverside-applied
customresourcedefinition.apiextensions.k8s.io/managedclustersetbindings.cluster.open-cluster-management.io serverside-applied
customresourcedefinition.apiextensions.k8s.io/addondeploymentconfigs.addon.open-cluster-management.io serverside-applied
customresourcedefinition.apiextensions.k8s.io/clusterclaims.cluster.open-cluster-management.io serverside-applied
customresourcedefinition.apiextensions.k8s.io/placements.cluster.open-cluster-management.io serverside-applied
customresourcedefinition.apiextensions.k8s.io/addontemplates.addon.open-cluster-management.io serverside-applied
customresourcedefinition.apiextensions.k8s.io/placementdecisions.cluster.open-cluster-management.io serverside-applied
customresourcedefinition.apiextensions.k8s.io/addonplacementscores.cluster.open-cluster-management.io serverside-applied
customresourcedefinition.apiextensions.k8s.io/hubs.fleetconfig.open-cluster-management.io serverside-applied
customresourcedefinition.apiextensions.k8s.io/spokes.fleetconfig.open-cluster-management.io serverside-applied
customresourcedefinition.apiextensions.k8s.io/artifactgenerators.source.extensions.fluxcd.io serverside-applied
customresourcedefinition.apiextensions.k8s.io/buckets.source.toolkit.fluxcd.io serverside-applied
customresourcedefinition.apiextensions.k8s.io/externalartifacts.source.toolkit.fluxcd.io serverside-applied
customresourcedefinition.apiextensions.k8s.io/gitrepositories.source.toolkit.fluxcd.io serverside-applied
customresourcedefinition.apiextensions.k8s.io/helmcharts.source.toolkit.fluxcd.io serverside-applied
customresourcedefinition.apiextensions.k8s.io/helmreleases.helm.toolkit.fluxcd.io serverside-applied
customresourcedefinition.apiextensions.k8s.io/helmrepositories.source.toolkit.fluxcd.io serverside-applied
customresourcedefinition.apiextensions.k8s.io/kustomizations.kustomize.toolkit.fluxcd.io serverside-applied
customresourcedefinition.apiextensions.k8s.io/ocirepositories.source.toolkit.fluxcd.io serverside-applied
customresourcedefinition.apiextensions.k8s.io/fluxcdconfigs.fluxcd.open-cluster-management.io serverside-applied
customresourcedefinition.apiextensions.k8s.io/aiworkloads.spectrocloud.com serverside-applied
customresourcedefinition.apiextensions.k8s.io/componentdefinitions.spectrocloud.com serverside-applied
customresourcedefinition.apiextensions.k8s.io/computeconfigs.spectrocloud.com serverside-applied
customresourcedefinition.apiextensions.k8s.io/computepoolevaluations.spectrocloud.com serverside-applied
customresourcedefinition.apiextensions.k8s.io/computepools.spectrocloud.com serverside-applied
customresourcedefinition.apiextensions.k8s.io/computes.spectrocloud.com serverside-applied
customresourcedefinition.apiextensions.k8s.io/definitionrevisions.spectrocloud.com serverside-applied
customresourcedefinition.apiextensions.k8s.io/environments.spectrocloud.com serverside-applied
customresourcedefinition.apiextensions.k8s.io/policydefinitions.spectrocloud.com serverside-applied
customresourcedefinition.apiextensions.k8s.io/profilebundles.spectrocloud.com serverside-applied
customresourcedefinition.apiextensions.k8s.io/projects.spectrocloud.com serverside-applied
customresourcedefinition.apiextensions.k8s.io/scalingpolicies.spectrocloud.com serverside-applied
customresourcedefinition.apiextensions.k8s.io/settings.spectrocloud.com serverside-applied
customresourcedefinition.apiextensions.k8s.io/tenants.spectrocloud.com serverside-applied
customresourcedefinition.apiextensions.k8s.io/traitdefinitions.spectrocloud.com serverside-applied
customresourcedefinition.apiextensions.k8s.io/variablesets.spectrocloud.com serverside-applied
customresourcedefinition.apiextensions.k8s.io/workloaddeployments.spectrocloud.com serverside-applied
customresourcedefinition.apiextensions.k8s.io/workloadprofiles.spectrocloud.com serverside-applied
customresourcedefinition.apiextensions.k8s.io/workloads.spectrocloud.com serverside-applied -
Upgrade the
muralchart. The--waitflag ensures that Helm waits for all resources to be ready before marking the release as successful.helm upgrade mural oci://public.ecr.aws/mural/mural --version 1.1.0-rc.3 \
--namespace mural-system --values values.yaml --waitExample OutputPulled: public.ecr.aws/mural/mural:0.7.0
Digest: sha256:406eff86daf9ebdd38a17794390628a353374b6e1a5b856a5f89a702d45dfc79
Release "mural" has been upgraded. Happy Helming!
NAME: mural
LAST DEPLOYED: Wed Feb 18 21:19:03 2026
NAMESPACE: mural-system
STATUS: deployed
REVISION: 2
TEST SUITE: None
Validate
-
Check both Helm release statuses.
helm status mural-crds --namespace mural-system
helm status mural --namespace mural-systemBoth outputs should show
STATUS: deployedand display the latest revision numbers. -
Confirm that all CRDs are present.
kubectl get crds | grep --extended-regexp "(spectrocloud.com|fluxcd.io|open-cluster-management.io)"Example Outputaddondeploymentconfigs.addon.open-cluster-management.io 2026-01-22T19:41:58Z
addonplacementscores.cluster.open-cluster-management.io 2026-01-22T19:41:58Z
addontemplates.addon.open-cluster-management.io 2026-01-22T19:41:58Z
aiworkloads.spectrocloud.com 2026-01-14T18:10:36Z
appliedmanifestworks.work.open-cluster-management.io 2026-01-14T18:18:10Z
artifactgenerators.source.extensions.fluxcd.io 2026-01-20T23:11:13Z
awscloudconfigs.cluster.spectrocloud.com 2026-01-14T18:05:25Z
# ... output omitted for readability -
Ensure that all PaletteAI pods are in a
Runningstate.kubectl get pods --namespace mural-system
Upgrade Appliance
Follow these steps to upgrade the PaletteAI Management Appliance using a content bundle downloaded from Artifact Studio. Use this workflow only for appliance-based deployments. If you installed PaletteAI with Helm charts, use Upgrade with Flux or Upgrade Manually.
For additional background, refer to the Palette Management Appliance Upgrade guide.
The upgrade process incurs downtime for the PaletteAI management cluster, but workload clusters remain operational.
Prerequisites
-
A healthy PaletteAI management cluster with access to the Local UI of the leader node.
-
Access to Artifact Studio to download the installation assets for PaletteAI.
-
The content bundle for the target PaletteAI version.
Enablement
-
Sign in to Artifact Studio.
If you do not have access to Artifact Studio, contact your Spectro Cloud representative or open a support ticket.
-
On the Artifact Studio landing page, select the PaletteAI card that matches your deployment.
- Select Install PaletteAI Enterprise for standard PaletteAI appliance deployments.
- Select Install PaletteAI VerteX for PaletteAI VerteX deployments.
-
Use the version drop-down to select the target PaletteAI version.
-
In the download modal, download the Content Bundle asset for the target version.
tipFor appliance upgrades, download only the Content Bundle asset, not the ISO, Helm chart, or MON Key.
-
Log in to the Local UI of the leader node at
https://<node-ip>:5080. -
From the left main menu, select Content. Select Actions > Upload Content and upload the downloaded content bundle. Wait for the upload and sync to complete.
-
From the left main menu, select Cluster and select the Configuration tab.
-
Select the Update drop-down menu and select Review Changes. Review the proposed changes carefully.
warningEnsure the configured Zot password matches the password used during the initial PaletteAI installation. Some upgrade paths may also require you to re-enter configuration values from the original installation.
-
Select Confirm Changes, then select Update to start the upgrade.
-
After the appliance upgrade completes, update the Flux resources on the management cluster to match the new version.
Update the
spec.ref.semverfield on themural-crdsandmuralOCIRepositoryresources:kubectl patch ocirepository mural-crds --namespace mural-system \
--type merge --patch '{"spec":{"ref":{"semver":"0.7.4"}}}'kubectl patch ocirepository mural --namespace mural-system \
--type merge --patch '{"spec":{"ref":{"semver":"1.1.0-rc.3"}}}'Review and update any changed values in the
muralHelmRelease:kubectl edit helmrelease mural --namespace mural-system
Validate
-
Log in to the Local UI at
https://<node-ip>:5080. -
From the left main menu, select Cluster. Confirm that the
palette-aipack displays the upgraded version and is in a Running status. -
Check that both
HelmReleaseresources have reconciled successfully.kubectl get helmrelease --namespace mural-systemBoth
mural-crdsandmuralshould showREADY: True.
Next Steps
- If you upgraded the appliance, confirm that spoke clusters are healthy and reconciling correctly. For spoke architecture and management, refer to the Hub and Spoke Model and your platform's installation guide, such as EKS or GKE.