Skip to main content

Upgrade

All components in Elemental are managed using Kubernetes. Below is how to use Kubernetes approaches to upgrade the components.

Elemental Teal node upgrade

Elemental Teal is upgraded with the Elemental Operator. Refer to the Elemental Operator documentation for complete information.

There are two ways of selecting nodes for upgrading. Via a cluster target, which will match ALL nodes in a cluster that matches our selector or via node selector, which will match nodes based on the node labels. Node selector allows us to be more targeted with the upgrade while cluster selector just selects all the nodes in a matched cluster.

You can target nodes for an upgrade via a `clusterTarget` by setting it to the cluster name that you want to upgrade. All nodes in a cluster that matches that name will match and be upgraded.
upgrade-cluster-target.yaml
apiVersion: elemental.cattle.io/v1beta1kind: ManagedOSImagemetadata:  name: my-upgrade  namespace: fleet-defaultspec:  # Set to the new Elemental version you would like to upgrade to or track the latest tag  osImage: "registry.opensuse.org/isv/rancher/elemental/stable/teal53/15.4/rancher/elemental-node-image/5.3:latest"  clusterTargets:    - clusterName: my-cluster

Selecting source for upgrade

Just specify an OCI image on the osImage field

upgrade-cluster-target.yaml
apiVersion: elemental.cattle.io/v1beta1kind: ManagedOSImagemetadata:  name: my-upgrade  namespace: fleet-defaultspec:  # Set to the new Elemental version you would like to upgrade to or track the latest tag  osImage: "registry.opensuse.org/isv/rancher/elemental/stable/teal53/15.4/rancher/elemental-node-image/5.3:latest"  clusterTargets:    - clusterName: my-cluster
Warning

If both osImage and ManagedOSVersion are defined in the same ManagedOSImage be aware that osImage takes precedence.

Managing available versions

An ManagedOSVersionChannel resource can be created in a Kubernetes cluster where the Elemental operator is installed to synchronize available versions for upgrades.

It has a syncer in order to generate ManagedOSVersion automatically. Currently, we provide a json syncer and a custom one.

This syncer will fetch a json from url and parse it into valid ManagedOSVersion resources.

managed-os-version-json
apiVersion: elemental.cattle.io/v1beta1kind: ManagedOSVersionChannelmetadata:  name: elemental-versions  namespace: fleet-defaultspec:  options:    URI: "https://raw.githubusercontent.com/rancher/elemental/main/examples/upgrade/versions.json"    Timeout: "1m"  type: json

In both cases the file that the operator expects to parse is a json file with the versions on it as follows

versions.json
[  {    "metadata": {      "name": "v0.1.0"    },    "spec": {      "version": "v0.1.0",      "type": "container",      "metadata": {        "upgradeImage": "foo/bar:v0.1.0"      }    }  },  {    "metadata": {      "name": "v0.2.0"    },    "spec": {      "version": "v0.2.0",      "type": "container",      "metadata": {        "upgradeImage": "foo/bar:v0.2.0"      }    }  }]