Skip to main content

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:

  1. mural-crds - Contains Custom Resource Definitions (CRDs)
  2. mural - The main application
tip

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

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 KUBECONFIG environment variable set to the path of the PaletteAI hub cluster's kubeconfig file.

    export KUBECONFIG=<kubeconfig-location>

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.6.0"
    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.0.0"
    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. Verify 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. Verify 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. Verify 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

  • PaletteAI installed.

  • helm installed and available in your $PATH.

  • kubectl installed and available in your $PATH.

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

    export KUBECONFIG=<kubeconfig-location>
  • 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.6.0 --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.0.0 \
    --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. Verify 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. Verify that all PaletteAI pods are in a Running state.

    kubectl get pods --namespace mural-system