Skip to main content
Version: v0.1.x

Upgrade PaletteAI

This page explains how to upgrade PaletteAI to a new version. Use the workflow that matches your installation method:

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.

info

For production environments, we recommend using Flux or Argo CD to manage the PaletteAI Helm chart lifecycle. Both solutions can be configured to handle CRD upgrades automatically.

Prerequisites

  • PaletteAI installed.

  • kubectl installed.

  • The KUBECONFIG environment variable is set to the path of the PaletteAI hub cluster's kubeconfig file.

    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

  1. Create a file named mural-crds-oci-repository.yaml for the mural-crds chart.

    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
  2. Create a file named mural-oci-repository.yaml for the mural chart.

    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
  3. Apply both OCIRepository resources to your cluster.

    kubectl apply --filename mural-crds-oci-repository.yaml
    kubectl apply --filename mural-oci-repository.yaml
  4. Create a file named mural-crds-helm-release.yaml for the mural-crds chart.

    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
  5. Create a file named mural-helm-release.yaml for the mural chart. The dependsOn field ensures that the mural-crds chart is upgraded before the mural chart.

    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
  6. Apply both HelmRelease resources to your cluster.

    kubectl apply --filename mural-crds-helm-release.yaml
    kubectl apply --filename mural-helm-release.yaml

Validate

  1. Confirm that both OCIRepository resources were created and are ready.

    kubectl get ocirepository --namespace mural-system
    Example Output
    NAME          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
  2. Check that both HelmRelease resources were created.

    kubectl get helmrelease --namespace mural-system
    Example Output
    NAME          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
  3. Ensure that all PaletteAI pods are in a Running state.

    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.

danger

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.yaml file configured for your environment.

Enablement

  1. Upgrade the mural-crds chart.

    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 Output
    Pulled: 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
  2. Upgrade the mural chart. The --wait flag 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 --wait
    Example Output
    Pulled: 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

  1. Check both Helm release statuses.

    helm status mural-crds --namespace mural-system
    helm status mural --namespace mural-system

    Both outputs should show STATUS: deployed and display the latest revision numbers.

  2. Confirm that all CRDs are present.

    kubectl get crds | grep --extended-regexp "(spectrocloud.com|fluxcd.io|open-cluster-management.io)"
    Example Output
    addondeploymentconfigs.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
  3. Ensure that all PaletteAI pods are in a Running state.

    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.

info

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

  1. Sign in to Artifact Studio.

    If you do not have access to Artifact Studio, contact your Spectro Cloud representative or open a support ticket.

  2. 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.
  3. Use the version drop-down to select the target PaletteAI version.

  4. In the download modal, download the Content Bundle asset for the target version.

    tip

    For appliance upgrades, download only the Content Bundle asset, not the ISO, Helm chart, or MON Key.

  5. Log in to the Local UI of the leader node at https://<node-ip>:5080.

  6. 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.

  7. From the left main menu, select Cluster and select the Configuration tab.

  8. Select the Update drop-down menu and select Review Changes. Review the proposed changes carefully.

    warning

    Ensure 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.

  9. Select Confirm Changes, then select Update to start the upgrade.

  10. After the appliance upgrade completes, update the Flux resources on the management cluster to match the new version.

    Update the spec.ref.semver field on the mural-crds and mural OCIRepository resources:

    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 mural HelmRelease:

    kubectl edit helmrelease mural --namespace mural-system

Validate

  1. Log in to the Local UI at https://<node-ip>:5080.

  2. From the left main menu, select Cluster. Confirm that the palette-ai pack displays the upgraded version and is in a Running status.

  3. Check that both HelmRelease resources have reconciled successfully.

    kubectl get helmrelease --namespace mural-system

    Both mural-crds and mural should show READY: 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.