# Upgrade Guide: SMCP 5.11 to SMCP 5.12

## Prerequisites

Before beginning the upgrade process, ensure the following requirements are met:

1. [Minimum Requirements](https://github.com/platform9/pcd-docs-gitbook/blob/main/PEC/requirements/README.md)
2. Minimum Kubernetes version for Workload Cluster should be `v1.28.`

## Upgrade Procedure

### 1. Backup Current System (optional)

Follow the [Backup Guide](https://github.com/platform9/pcd-docs-gitbook/blob/main/PEC/backup-guide/README.md) to back up the 5.11 management plane. Before proceeding, verify that the backup was created successfully.

2. Download and Install New Artifacts.

To obtain and install the SMCP 5.12 artifacts:

**a.** Download the download script:

{% tabs %}
{% tab title="None" %}

```none
wget https://raw.githubusercontent.com/platform9/support-locker/master/edge-stack/download.sh
```

{% endtab %}
{% endtabs %}

**b.** Make the script executable:

{% tabs %}
{% tab title="None" %}

```none
chmod u+x download.sh
```

{% endtab %}
{% endtabs %}

**c.** Run the download script:

{% tabs %}
{% tab title="None" %}

```none
./download.sh <PF9-SHARED-SECRET> v-5.12.1-<airctl_version>
```

{% endtab %}
{% endtabs %}

Replace `<PF9-SHARED-SECRET>` with your Platform9 shared secret.

**d.** After downloading the artifacts, verify their integrity using the following command:

{% tabs %}
{% tab title="Bash" %}

```bash
curl --user-agent <secret> https://pf9-airctl.s3-accelerate.amazonaws.com/<version>/md5sum.txt | md5sum -c -
```

{% endtab %}
{% endtabs %}

Replace `<secret>` with the same one used to download the airctl build from S3 and `<version>` with the SMCP version you're installing (e.g., v5.12.0).

**e.** Run the install.sh script to extract and place the artifacts under `/opt/pf9/airctl` directory.

{% tabs %}
{% tab title="Bash" %}

```bash
bash install.sh v-5.12.1-<airctl-version>
```

{% endtab %}
{% endtabs %}

Refer to the [SMCP 5.12 release notes ](https://platform9.com/docs/5.12/PEC/smcp-5-12-release-notes)for the exact `airctl` version used by the `install.sh` script.

For example, when upgrading to SMCP v5.12.0 :

{% tabs %}
{% tab title="example" %}

```bash
bash install.sh v-5.12.1-3802903
```

{% endtab %}
{% endtabs %}

### 3. Configure New Management Cluster

Update configuration files before deployment:

1. Edit `airctl-config.yaml`:
   1. Update `hostAgentRepo` to use SMCP 5.12 images.
   2. `dockerRepo` to use SMCP 5.12 images.
2. Edit `nodelet-bootstrap.yaml`:
   1. Update `systemImages` to use SMCP 5.12 image files
   2. Set `userImages` to point to SMCP 5.11 image files
   3. Add `isAirgapped: true` for offline installations

Example `airctl-config.yaml` and `nodelet-bootstrap.yaml` snippet:

{% tabs %}
{% tab title="airctl-config.yaml" %}

```yaml
hostAgentRepo: /opt/pf9/airctl/hostagent-8-v-5.12.1-3802903.tar.gz
dockerRepo: /opt/pf9/airctl/docker-8-v-5.12.1-3802903.tar.gz
```

{% endtab %}
{% endtabs %}

{% tabs %}
{% tab title="nodelet-bootstrap.yaml" %}

```yaml
isAirgapped: true
systemImages:
- /opt/pf9/airctl/imgs/kubedu-imgs-v-5.12.1-3802903.tar.gz
- /opt/pf9/airctl/imgs/nodelet-imgs-v-5.12.1-3802903.tar.gz
userImages:
- /opt/pf9/airctl/imgs/kubedu-imgs-v-5.11.1-3501826.tar.gz
```

{% endtab %}
{% endtabs %}

### 4. Upgrade Management Cluster

Starting from the 5.12 release, in-place upgrades are supported. Use the `upgrade-mgmt` command to perform an in-place upgrade of the management cluster.

{% tabs %}
{% tab title="Bash" %}

```bash
airctl advanced-ddu upgrade-mgmt --verbose
```

{% endtab %}
{% endtabs %}

### 5. Verify DU Status

Check that the DU is in a ready state:

{% tabs %}
{% tab title="Bash" %}

```bash
airctl status
# This command displays the current status of the DU
```

{% endtab %}
{% endtabs %}

Wait until all components show as ready before proceeding.

### 6. Upgrade DU Components

To upgrade the DU components to`5.12`, follow the [upgrade guide](https://github.com/platform9/pcd-docs-gitbook/blob/main/PEC/Upgrade-guide/README.md).

After upgrade, verify DU status again:

{% tabs %}
{% tab title="Bash" %}

```bash
airctl status
{% endtab %}
{% tab language="none" %}
// Click to edit code
```

{% endtab %}
{% endtabs %}

### 7. Verify Upgrade in GUI

Log in to the management UI and confirm the version is displayed as 5.12.

### 8. Push New Kubernetes Images

Push images for Kubernetes **1.29**, **1.30**, and **1.31** to the registry (if applicable):

{% tabs %}
{% tab title="Bash" %}

```bash
sudo airctl advanced-du push-images --img-tar [tar file name]
```

{% endtab %}
{% endtabs %}

To push all new images at once:

{% tabs %}
{% tab title="Bash" %}

```bash
ls -1 /opt/pf9/airctl/imgs/k8s* | xargs -I{} sh -c "sudo /opt/pf9/airctl/airctl --config /opt/pf9/airctl/conf/airctl-config.yaml advanced-du push-images --img-tar {}"
```

{% endtab %}
{% endtabs %}

{% hint style="info" %}
**NOTE**

If the **privateRegistryType** value is **custom,** the images must be manually pushed to the custom registry.
{% endhint %}

### 9. Upgrade Host Components

Upgrade the host-side components:

{% hint style="info" %}
**NOTE**

If the upgrade is performed on Ubuntu, execute the following commands in reverse order: first, run `airctl upgrade-hosts`, followed by `airctl configure-hosts`.

Refer to the [known issues](https://platform9.com/docs/5.12/PEC/smcp-5-12-release-notes#known-issues) for more information.
{% endhint %}

{% tabs %}
{% tab title="Bash" %}

```bash
airctl configure-hosts --reset-pf9-managed-docker-conf --skip-docker-install --skip-docker-img-import --verbose
# This command configures hosts with new settings

airctl hosts-status
# Check the status of hosts before proceeding

airctl upgrade-hosts --verbose
# This command upgrades the host components
```

{% endtab %}
{% endtabs %}

### 10. Verify Status and Version

After upgrading, verify management plane services are ready. At this point all the components have been upgraded to SMCP 5.12. Run the following command to verify.

{% tabs %}
{% tab title="Bash" %}

```bash
airctl status
# Check the status of management plane

airctl version
# The output should be: v-5.12.1-3802903

kubectl get nodes -o wide
# Ensure all the nodes are in Ready state
```

{% endtab %}
{% endtabs %}

Now, proceed with the actual workload cluster upgrades either using the [GUI](https://github.com/platform9/pcd-docs-gitbook/blob/main/kubernetes/upgrade-cluster/README.md) or [API](https://platform9.com/docs/qbert#postupgrade-a-cluster-identified-by-the-uuid).
