24. Upgrade Robin CNP Platform

You can upgrade your Robin CNP cluster to the latest version using the GoRobin utility. The GoRobin utility tool helps you to install and upgrade related procedures.

Note

Contact the Robin Support team or Robin Account manager for upgrade files.

The GoRobin utility tool initiates an SSH session to access the nodes in the cluster and runs upgrade commands on all nodes of your cluster.

Note

When you upgrade using GoRobin, it automatically upgrades the Kubernetes versions if required.

24.1. Upgrade Paths

The following are the supported upgrade paths for Robin CNP v5.7.2:

  • Robin CNP v5.7.1-311 (Refresh) to Robin CNP v5.9.0-862

  • Robin CNP v5.7.2-330 to Robin CNP v5.9.0-862

  • Robin CNP v5.7.2-330 (Refresh) to Robin CNP v5.9.0-862

24.2. Prerequisites

Your Robin CNP cluster must meet the following prerequisites before upgrading to the latest version of Robin CNP:

  • The Robin CNP cluster must have an active license.

  • Do not change the GoRobin tar file name.

  • All nodes in the Robin cluster must be accessible before starting the upgrade process.

  • Use Robin CNP super admin credentials for all upgrade steps.

  • All nodes in the cluster must be in sync with the NTP Server.

  • If a Kubernetes upgrade is required as part of the upgrade flow, any pods with a Pod Disruption Budget (PDB) configured must either be deleted beforehand or the associated PDB(s) must be configured such that the respective pods can be evicted cleanly while draining the node via kubeadm during the Kubernetes upgrade.

  • Robin CNP users must not perform any control plane operations during upgrade, including those associated with applications and volumes.

  • Remove any custom taints on master and worker nodes.

  • The root user needs to be present in the sudoers file located at /etc/sudoers.

  • If you have hosts with different login credentials, prepare your host login credentials JSON file.

24.3. Host Login JSON File

You can use the GoRobin utility to perform upgrades on hosts with different login credentials using the host login JSON file. The Host JSON file enables you to provide the following details for each host:

  • Hostname

  • Username

  • password of the username or pem file for host

  • port number for SSH

  • role (master or worker)

Note

Hostnames must be in lowercase letters and cannot contain uppercase letters.

If you don’t specify a role for a host, Robin CNP considers that host as a worker node.

The following is the sample host login JSON file.

{
      "hypervvm-65-6.robinsystems.com": {
            "password": "robin123",
            "role": "master",
            "user": "root",
            "port": "22"
      },
      "hypervvm-65-7.robinsystems.com": {
            "password": "robin123",
            "role": "master",
            "user": "root",
            "port": "22"
      },
      "hypervvm-65-8.robinsystems.com": {
            "password": "robin123",
            "role": "master",
            "user": "root",
            "port": "22"
      },
      "hypervvm-65-9.robinsystems.com": {
            "password": "robin123",
            "user": "root",
            "port": "22"
      },
      "hypervvm-65-10.robinsystems.com": {
            "password": "robin123",
            "user": "root",
            "port": "22"
      }
}

24.4. (Optional) Config JSON file

You can create a Config JSON file to pass custom configurations for hosts during upgrade. The Config JSON file enables you to provide the upgrade options for each host.

You need to provide the Config JSON file when upgrading Robin CNP using the --config-json command option.

{
   "vm-2-61.robinsystems.com":{
         "artifactory-cert":"",
         "host-type":"",
         "image-registry-creds":"",
         "image-registry-prefix":"",
         "robin-image-registry-prefix":"",
         "insecure-registries":"*",
         "kube-reserved-mem":"",
         "sys-reserved-mem":"",
         "memory-manager-policy":"",

   },
   "vm-2-62.robinsystems.com":{
         "artifactory-cert":"",
         "host-type":"",
         "image-registry-creds":"",
         "image-registry-prefix":"",
         "robin-image-registry-prefix":"",
         "insecure-registries":"*",
         "kube-reserved-mem":"",
         "sys-reserved-mem":"",
         "memory-manager-policy":"",
   },
   "vm-2-63.robinsystems.com":{
         "artifactory-cert":"",
         "host-type":"",
         "image-registry-creds":"",
         "image-registry-prefix":"",
         "robin-image-registry-prefix":"",
         "insecure-registries":"*",
         "kube-reserved-mem":"",
         "sys-reserved-mem":"",
         "memory-manager-policy":"",
   },
   "vm-2-64.robinsystems.com":{
         "artifactory-cert":"",
         "host-type":"",
         "image-registry-creds":"",
         "image-registry-prefix":"",
         "robin-image-registry-prefix":"",
         "insecure-registries":"*",
         "kube-reserved-mem":"",
         "sys-reserved-mem":"",
         "memory-manager-policy":"",
   }
}

Upgrade option

Description

artifactory-cert

Path to the CA certificate file for the Artifactory registry

host-type

Type of host. Valid values are physical, ec2, azure, gcp or ibm.

image-registry-creds

Credentials to log in to the Artifactory registry. Use the format <username>:<password>.

image-registry-prefix

Registry prefix for pulling Kubernetes images from Artifactory.

robin-image-registry-prefix

Registry prefix for pulling robinsys and robinimg images for Robin CNP deployments.

insecure-registries

Registry hostnames for which Transport Layer Security (TLS) verification is skipped during container image pulls. Use this option only for registries that do not use valid certificates.Registry hostname to skip TLS verification for container image pulls

kube-reserved-mem

Memory to reserve for Kubernetes processes in the cluster. Specify any integer value using units such as Gi, Mi, G, or M (for example, 1Gi, 500Mi, 2G, or 600M). The default value is 462Mi.

sys-reserved-mem

Memory to reserve for the operating system and other system daemons in the cluster. Specify any integer value using units such as Gi, Mi, G, or M (for example, 1Gi, 500Mi, 2G, or 600M). The default value is 462Mi.

memory-manager-policy

Policy for Memory Manager. The valid values are Static

Note

To verify that the policy for memory-manager is set to Static post-upgrade, run the robin config list | grep policy and check the Kubelet state file located at /var/lib/kubelet/memory_manager_state.

24.5. Upgrade using GoRobin Single Command

You can upgrade your Robin CNP cluster to the latest version using the GoRobin command.

Note

When you upgrade using the single command option, the GoRobin utility tool automatically upgrades the Kubernetes versions if required.

24.5.1. Step 1 - Prepare for Upgrade

Complete the following steps to prepare for upgrading to Robin CNP v5.9.0:

  1. Verify all prerequisites and supported upgrade paths.

  2. Access your cluster using your login credentials.

  3. After you receive upgrade files, copy the upgrade files to your host system.

Note

Contact the Robin Support team or Robin Account manager for upgrade files.

24.5.2. Step 2 - Prepare Host Login JSON and Config JSON files

Before upgrading your Robin CNP cluster, you must prepare Host Login JSON and Config JSON files for your cluster. You can use either your old Host Login JSON and Config JSON files prepared during Robin CNP installation or generate new Host Login JSON and Config JSON files.

Note

You must generate a new Host Login JSON file if you added a node in your Robin CNP cluster after its installation.

To generate the latest Host Login JSON and Config JSON files, run the following command:

# ./gorobin_5.9.0-723 onprem generate-json-files --primary-master <primary_master> --ssh-user <ssh_user> --ssh-password <ssh_password>

--primary-master

IP address or hostname of primary master node.

--ssh-user

SSH username.

--ssh-password

SSH password or path to SSH private key.

--sshnopwd

Use this option when passwordless SSH is enabled for all hosts.

--ssh-port

SSH port. The default port is 22.

Example

# ./gorobin_5.9.0-831 onprem generate-json-files --primary-master vnode-103-152 --ssh-user root --ssh-password admin

Generating host/config json files                                      DONE
Generated host and config json files at /root

24.5.3. Step 3 - (Optional) Copy GoRobin tar file and perform host pre-upgrade step on Nodes

You can copy the Gorobin upgrade tar file and perform the host pre-upgrade step on all nodes of the cluster. The copy-gorobin-tar command performs the following operations on all nodes of a cluster:

  • Copies OS-specific upgrade scripts and tar files to the root directory of each node.

  • Runs host pre-upgrade step on all nodes to prepare for upgrade.

Note

This step is particularly useful for large clusters, as it copies the GoRobin files and runs the host pre-upgrade step before upgrading the Robin CNP cluster to save the overall time required to upgrade the Robin CNP cluster.

Always use the GoRobin command to copy the gorobintar file to other nodes. Do not copy manually.

To copy the Robin CNP installation files to all nodes, run the following command:

./gorobin_5.9.0-700 onprem copy-gorobin-tar -hj <path/to/host_json> --gorobintar <path/to/gorobintar>

-hj, --hosts-json

Path to the Host Login JSON file containing details of all hosts. Its format can be seen here.

--db-path

Path to the directory for the SQLite database. The default directory is /root for the root user and /home/<username> for the non-root user.

--gorobintar

Path to the GoRobintar file.

--extract-dir

Path to the directory on the driver node to untar the GoRobintar. The default directory is /root for the root user and /home/<username> for the non-root user.

--log-dir

Path to the directory for GoRobin logs on the driver node.

--remote-gorobin-dir

Path to the parent directory on remote hosts where a version-specific (gorobintar-<version>) subdirectory is created. All OS-specific installation files (scripts and tar files) are copied into this subdirectory during the copy step. The default directory is /root for the root user and /home/<username> for non-root users.

--sshnopwd

Use this option when passwordless SSH is enabled for all hosts.

--driver-http-port

Port for the HTTP file server on the driver node. Remote hosts use this server to pull GoRobintar files. The default port is 8765.

--monitor-timeout

Timeout in seconds for monitor tasks waiting for scripts to complete on remote hosts. The default value is 3600 seconds.

--host-pre-upgrade

Run the host pre-upgrade step on all hosts after copying upgrade scripts and tar files. To avoid re-running this step during the upgrade, use the --skip-host-pre-upgrade flag with the upgrade-cluster command.

--skip-pre-upgrade-space-check

Skip the disk space check for loading Docker images during the host pre-upgrade step.

Note

This option is used only with the --host-pre-upgrade flag.

--installer-log-file

Custom path for logs for the Robin installer scripts on remote nodes. The default path is /var/log/robin-install.log. Note: This option is used only with the --host-pre-upgrade flag.

--artifactory-installation

Skip copying the robinimg.tar.gz and k8simg.tar.gz files to other nodes within the cluster. These images will be pulled from the Artifactory registry during installation.

Example

# ./gorobin_5.9.0-714 onprem copy-gorobin-tar -hj host.json --gorobintar gorobintar-5.9.0-714.tar
Copying Gorobin Tar to Hosts
Processing host/config json files                                      DONE ... 1.13s
Extracting gorobin tar                                                 DONE ... 85.5s
Pulling gorobintar on all hosts                                        DONE ... 87.47s
Copied Gorobin tar to all hosts successfully!

24.5.4. Step 4 - Upgrade Robin CNP

Run the following command to upgrade Robin CNP in a single step:

# ./gorobin onprem upgrade-cluster -hj <hosts_json> --gorobintar <path/to/gorobintar> --robin-admin-user <robin-admin-user> --robin-admin-passwd <robin-admin-passwd>

Option

Description

-hj, --hosts-json

Path to the Host Login JSON file containing details of all hosts. Its format can be seen here.

-cj, --config-json

Path to the Config JSON file containing configuration parameters for each host. Its format can be seen here.

--db-path

Path to the directory for the SQLite database. The default directory is /root for the root user and /home/<username> for the non-root user.

--robin-admin-user

Username for the admin user of the Robin CNP cluster. The default username is robin.

--robin-admin-password, --robin-admin-passwd

Password for admin user of Robin CNP cluster. The default password is Robin123.

--gorobintar

Path to the GoRobintar file.

--extract-dir

Path to the directory on the driver node to untar the GoRobintar. At least 25 GB of space is required. The default directory is /root for the root user and /home/<username> for the non-root user.

--log-dir

Path to the installation logs for GoRobin on the driver node. The default path is /var/log/robin-install.log.

--remote-gorobin-dir

Path to the parent directory on remote hosts where a version-specific (gorobintar-<version>) subdirectory is created. All OS-specific installation files (scripts and tar files) are copied into this subdirectory during the copy step. The default directory is /root for the root user and /home/<username> for non-root users.

--skip-gorobintar-copy, --skip-gorobintar-push

Skip the copying of GoRobintar to other nodes. Use this option if the GoRobintar files are already copied to all nodes using the copy-gorobin-tar command.

--skip-host-pre-upgrade

Skip the host pre-upgrade step. Use this option if the --host-pre-upgrade flag is used with the copy-gorobin-tar command.

--best-effort-qos

Enable best-effort Quality of Service (QoS).

--post-k8sver-upgrade-restart-cri

Restart the container runtime interface (CRI) after every Kubernetes version upgrade.

--external-db-server

IP address of the external database server.

--external-db-port

Port number for the external database server.

--external-db-admin-user

Admin username for the external database.

--external-db-admin-password

Password of the admin username for the external database.

--db-robin-password

Custom password for the Robin internal database.

--skip-pre-upgrade-job-check

Skip checking any active Robin jobs before starting the upgrade.

--skip-pre-upgrade-space-check

Skip the disk space checks for loading Docker images before starting the upgrade.

--enable-device-ownership

Enables the device_ownership_from_security_context option in the container runtime config. This allows non-root containers to access host devices such as /dev/vhost-net and /dev/vfio/* without manual chown commands on each node. This config applies to CRI-O on RHEL 9 and also works on RHEL 8 and Rocky Linux 8 through udev rules.

--skip-robin-version-check

Skip host status and image version checks after the Robin CNP upgrade.

--sshnopwd

Use this option when passwordless SSH is enabled for all hosts.

--driver-http-port

Port for the HTTP file server on the driver node. Remote hosts use this server to pull GoRobintar files. The default port is 8765.

--yes

Do not prompt for confirmation.

--monitor-timeout

Timeout in seconds for monitor tasks waiting for scripts to complete on remote hosts. The default value is 3600 seconds.

--installer-log-file

Path for logs for the Robin installer scripts on remote nodes. The default path is /var/log/robin-install.log.

--node-drain-factor

Specifies the fraction of total worker nodes to drain simultaneously during Kubernetes upgrades. The default value is 0.33. Valid values are from 0.1 to 1.0.

--k8s-upgrade-version

Upgrade the Kubernetes version for the Robin CNP cluster.

--rotate-kms-key

Rotate the robin-master encryption key. This option only applies if the Key Management Service (KMS) is set to Vault.

Example

# ./gorobin_5.9.0-849 onprem upgrade-cluster -hj host.json --gorobintar gorobintar-5.9.0-849-bin.tar --robin-admin-user admin --robin-admin-password Admin123

Upgrading Robin HA Cluster

Processing host/config json files                                      DONE ... 1.52s
Extracting gorobin tar                                                 DONE ... 95.91s
Pulling gorobintar on all hosts                                        DONE ... 95.94s
Executing host pre-upgrade steps on all hosts                          DONE ... 397.76s
Executing k8s pre-upgrade steps on all hosts                           DONE ... 140.64s
Executing k8splus pre-upgrade steps primary master                     DONE ... 59.81s
Executing robin pre-upgrade steps on primary master                    DONE ... 35.69s
Upgrading host components on all hosts                                 DONE ... 87.41s
Upgrading k8s components on all hosts                                  DONE ... 45.95s
Upgrading robin networking components                                  DONE ... 9.88s
Upgrading robin cluster                                                DONE ... 259.73s
Executing host post-upgrade steps on all hosts                         DONE ... 19.84s
Executing k8s post-upgrade steps on all hosts                          DONE ... 307.18s
Executing k8splus post-upgrade steps on primary master                 DONE ... 9.88s
Executing robin post-upgrade steps on primary master                   DONE ... 25.63s
Robin HA cluster upgraded successfully!

24.6. Verify upgrade status

Once you upgrade your cluster to the latest Robin CNP version, you can verify whether your Robin CNP cluster is updated to the latest Robin CNP version.

To verify the upgrade status, login to the robin-master Pod and run the following command:

# rbash master
# robin upgrade status

Example

# robin upgrade status

CANDIDATE ROBIN VERSION: 5.9.0-853

Host/Entity         | From (Robin Ver) | To (Robin Ver) | From (K8S Ver) | To (K8S Ver) | Current State
--------------------+------------------+----------------+----------------+--------------+------------------
Robin Control Plane | 5.9.0-831        | 5.9.0-853      | -              | -            | UPGRADE_COMPLETE
vnode-103-152       | 5.9.0-831        | 5.9.0-853      | 1.35.5         | 1.35.5       | UPGRADE_COMPLETE
vnode-103-159       | 5.9.0-831        | 5.9.0-853      | 1.35.5         | 1.35.5       | UPGRADE_COMPLETE
vnode-103-168       | 5.9.0-831        | 5.9.0-853      | 1.35.5         | 1.35.5       | UPGRADE_COMPLETE

To verify the status of hosts, run the following command:

# robin host list

Example

# robin host list
Id           | Hostname      | Version   | Status | RPool   | Avail. Zone | LastOpr | Roles | Cores       | GPUs  | Mem         | HDD(#/Alloc/Total) | SSD(#/Alloc/Total) | Pod Usage | Joined Time
-------------+---------------+-----------+--------+---------+-------------+---------+-------+-------------+-------+-------------+--------------------+--------------------+-----------+----------------------
1789474092:1 | vnode-103-152 | 5.9.0-853 | Ready  | default | N/A         | ONLINE  | S,C   | 8.6/7.4/16  | 0/0/0 | 15G/15G/31G | 2/16G/399G         | -/-/-              | 64/46/110 | 15 Sep 2026 05:11:23
1789474092:2 | vnode-103-159 | 5.9.0-853 | Ready  | default | N/A         | ONLINE  | C,S   | 10.8/5.2/16 | 0/0/0 | 18G/12G/31G | 2/10G/399G         | -/-/-              | 81/29/110 | 15 Sep 2026 05:12:21
1789474092:3 | vnode-103-168 | 5.9.0-853 | Ready  | default | N/A         | ONLINE  | S,C   | 10.6/5.4/16 | 0/0/0 | 18G/12G/31G | 2/22G/399G         | -/-/-              | 79/31/110 | 15 Sep 2026 05:13:12

* Note: all values indicated above in the format XX/XX/XX represent the Free/Allocated/Total values of the respective resource unless otherwise specified. In addition allocated values for compute resource such as cpu, memory and pod usage includes reserved values for the corresponding resource.