Upgrade PaletteAI
This page guides you through upgrading PaletteAI to a new version. PaletteAI consists of two Helm charts that must be upgraded in the following order:
mural-crds- Contains Custom Resource Definitions (CRDs)mural- The main application
Upgrade With Flux
Use Flux to automatically manage your PaletteAI installation, upgrades, and CRD lifecycle. Flux monitors the OCI registry for new chart versions and automatically upgrades the Helm release as new versions become available.
Prerequisites
-
PaletteAI installed.
-
kubectl installed and available in your
$PATH. -
The
KUBECONFIGenvironment variable set to the path of the PaletteAI hub cluster'skubeconfigfile.export KUBECONFIG=<kubeconfig-location>
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.6.0"
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.0.0"
url: oci://public.ecr.aws/mural/mural
EOF -
Apply both OCIRepository resources 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 HelmRelease resources to your cluster.
kubectl apply --filename mural-crds-helm-release.yaml
kubectl apply --filename mural-helm-release.yaml
Validate
-
Verify that both OCIRepository resources 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 -
Verify that both HelmRelease resources 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 -
Verify 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
-
PaletteAI installed.
-
helm installed and available in your
$PATH. -
kubectl installed and available in your
$PATH. -
The
KUBECONFIGenvironment variable set to the path of the PaletteAI hub cluster'skubeconfigfile.export KUBECONFIG=<kubeconfig-location> -
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.6.0 --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.0.0 \
--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. -
Verify 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 -
Verify that all PaletteAI pods are in a
Runningstate.kubectl get pods --namespace mural-system