Manual component-based upgrade
Before you begin
Before starting an upgrade, ensure the following conditions are met:
Access to the jump box associated with the PPC v1.1.0 cluster is required. This must be the same jump box used during the PPC v1.1.0 installation.
Create a Velero backup and an OpenSearch snapshot to ensure data recovery is possible, in case of an upgrade failure.
The
contextis set to the cluster where the upgrade operation is to be performed. Run the following command:kubectl config current-contextThe cluster name in the output must match the cluster installed with PPC v1.1.0.
Do not install or manage multiple clusters from the same working directory. Each cluster deployment maintains its own Terraform or OpenTofu state, and reusing a directory can overwrite state files, causing loss of cluster tracking and unintended cleanup behavior.
Use a dedicated directory, per cluster.
Jump box requirement
Ensure that the entire process is performed using the same jump box used for the original installation, with all tools already installed.
Required permissions
| Requirement | Details |
|---|---|
| Azure RBAC | Contributor and User Access Administrator on the target subscription or resource group. |
| Jump box | The same jump box used for the original installation, with all tools already installed. |
| Blob Storage access | Storage Blob Data Contributor on the backup storage account to download the saved terraform.tfvars files. |
Required roles
The Azure principal must have AKS cluster admin access.
The required Azure RBAC Roles are listed in the following table:
| Role | Scope | Used by |
|---|---|---|
| Contributor | Resource group | Create AKS cluster, node pool, storage account, Key Vault |
| User Access Administrator | Resource group | Create role assignments (module 01) |
| Storage Blob Data Contributor | Backup storage account | Access state files in backend, upload module 00 state |
| Key Vault Administrator | Key Vault | Create Key Vault and keys (module 00) |
| AKS Cluster Admin | AKS cluster | Kubernetes API access for Helm, kubectl operations (modules 04, 05) |
Required container registry secrets
Export the container registry credentials as environment variables.
export TF_VAR_username='<registry-username>'
export TF_VAR_password='<registry-password>'
Values to collect before starting
Gather the following values before starting the upgrade.
| Value | Description | Example |
|---|---|---|
| Cluster name | Name of the AKS cluster being upgraded. | <cluster-name> |
| Resource group | Azure resource group containing the cluster. | <resource-group> |
| Azure subscription ID | Unique identifier of the Azure subscription. | <subscription-id> |
| Storage account name | Azure Storage Account used for Velero backups and Terraform remote state. | <storage-account-name> |
| Backup container name | Blob container within the storage account used by Velero. | <container-name> |
Registry username and password (TF_VAR_username, TF_VAR_password) | Container registry credentials, required only if a private registry with authentication is used. | Provided by the organization. |
Upgrading PPC using component-based approach
To upgrade the PPC from v1.1.0 to v1.2.0 using the component-based approach, perform the following steps:
| Step | Action | Description |
|---|---|---|
| 1 | Authenticating with Azure CLI | Authenticates the jump box with Azure CLI and verifies access to the target subscription and resources. |
| 2 | Downloading and extracting the archive | Creates a dedicated working directory and extracts the new PPC release archive. |
| 3 | Obtaining terraform.tfvars from blob storage | Locates the backed-up terraform.tfvars files for each module in Azure Blob Storage. |
| 4 | Configuring container registry secrets | Configures the Harbor pull secret when the registry requires authentication. |
| 5 | Modifying and applying terraform.tfvars files | Downloads each module’s terraform.tfvars from blob storage and applies the Terraform configuration module by module. |
| 6 | Verifying the upgrade | Confirms all cluster nodes are in Ready state, and all pods are in Running or Completed state. |
Upgrading the PPC
To deploy the PPC using component-based installation, perform the following steps:
1. Authenticating with Azure CLI
If you are already authenticated, run the following command to verify your session:
az account show
If the session has expired or you are not logged in, run the following command to authenticate:
az login
az account show
Note: CLI login using Single Sign-On (SSO) is not supported. Use
az login --use-device-codeor authenticate as a Service Principal.
Ensure the target subscription, resource group, managed identities, subnet, and private DNS zone are accessible before continuing.
2. Downloading and extracting the PCT
Create a dedicated directory for the new release and extract the PCT.
- Create a working directory for the upgrade and navigate to it.
mkdir upgrade_120 && cd upgrade_120
- Download and extract the archive to the
upgrade_120directory.
3. Obtaining terraform.tfvars from blob storage
Each module’s terraform.tfvars is backed up to Azure Blob Storage during the original installation. These files are available on the Azure portal under the backup storage account in the infrastructure-manifest container.
| Module | Blob path suffix |
|---|---|
00_backup_storage | infrastructure-manifest/<cluster-name>/tfvars/00_backup_storage/terraform.tfvars |
01_identity | infrastructure-manifest/<cluster-name>/tfvars/01_identity/terraform.tfvars |
02_aks_cluster | infrastructure-manifest/<cluster-name>/tfvars/02_aks_cluster/terraform.tfvars |
03_node_pool | infrastructure-manifest/<cluster-name>/tfvars/03_node_pool/terraform.tfvars |
04_aks_addons | infrastructure-manifest/<cluster-name>/tfvars/04_aks_addons/terraform.tfvars |
05_helm_releases | infrastructure-manifest/<cluster-name>/tfvars/05_helm_releases/terraform.tfvars |
4. Configuring container registry secrets
Configure the container registry pull secret based on your registry type:
If using a private registry with authentication: The upgrade must recreate the Harbor pull secret. Navigate to
/iac/azure/cluster/modules/05_helm_releases/under thedeployment_120directory. Edit theterraform.tfvarsfile to update the value ofharbor_secretparameter withharbor-secret.If the registry supports anonymous image pulls: No action is required. Ensure the
harbor_secretvalue in theterraform.tfvarsfile is empty.
Note: Ensure that the value of the
harbor_secretparameter in the05_helm_releasesmodule is the same in both installation and upgradeterraform.tfvarsfiles.
5. Modifying and applying terraform.tfvars files
For each module, copy the terraform.tfvars from blob storage and save to the upgrade directory, then apply the Terraform configuration before proceeding to the next module.
To navigate to the modules directory, run the following command:
cd upgrade_120/iac/azure/cluster/modules
00_backup_storage
a. Navigate to the 00_backup_storage directory.
cd 00_backup_storage
b. Copy the terraform.tfvars from blob storage and save to the upgrade 00_backup_storage/terraform.tfvars.
az storage blob download \
--account-name <storage-account-name> \
--container-name <container-name> \
--name infrastructure-manifest/<cluster-name>/tfvars/00_backup_storage/terraform.tfvars \
--file iac/azure/cluster/modules/00_backup_storage/terraform.tfvars \
--auth-mode login
c. Restore the existing state file for 00_backup_storage to prevent tofu apply from attempting to recreate existing resources.
az storage blob download \
--account-name <storage-account-name> \
--container-name <container-name> \
--name infrastructure-manifest/<cluster-name>/states/00_backup_storage.tfstate \
--file terraform.tfstate \
--auth-mode login
d. To apply the terraform configuration, run the following command:
tofu init
tofu plan # review the plan that will be created
tofu apply # when prompted with "Enter a value:", type "yes"
e. Synchronize the state file from 00_backup_bucket to the Azure storage account.
bootstrap-scripts/sync-backup-storage-state-to-azure.sh
01_identity
a. Navigate to the 01_identity directory.
cd 01_identity
b. Copy the terraform.tfvars from blob storage and save to the upgrade 01_identity/terraform.tfvars.
az storage blob download \
--account-name <storage-account-name> \
--container-name <container-name> \
--name infrastructure-manifest/<cluster-name>/tfvars/01_identity/terraform.tfvars \
--file iac/azure/cluster/modules/01_identity/terraform.tfvars \
--auth-mode login
c. To apply the terraform configuration, run the following command:
tofu init
tofu plan # review the plan that will be created
tofu apply # when prompted with "Enter a value:", type "yes"
02_aks_cluster
a. Navigate to the 02_aks_cluster directory.
cd 02_aks_cluster
b. Copy the terraform.tfvars from blob storage and save to the upgrade 02_aks_cluster/terraform.tfvars.
az storage blob download \
--account-name <storage-account-name> \
--container-name <container-name> \
--name infrastructure-manifest/<cluster-name>/tfvars/02_aks_cluster/terraform.tfvars \
--file iac/azure/cluster/modules/02_aks_cluster/terraform.tfvars \
--auth-mode login
c. To apply the terraform configuration, run the following command:
tofu init
tofu plan # review the plan that will be created
tofu apply # when prompted with "Enter a value:", type "yes"
03_node_pool
a. Navigate to the 03_node_pool directory.
cd 03_node_pool
b. Copy the terraform.tfvars from blob storage and save to the upgrade 03_node_pool/terraform.tfvars.
az storage blob download \
--account-name <storage-account-name> \
--container-name <container-name> \
--name infrastructure-manifest/<cluster-name>/tfvars/03_node_pool/terraform.tfvars \
--file iac/azure/cluster/modules/03_node_pool/terraform.tfvars \
--auth-mode login
c. To apply the terraform configuration, run the following command:
tofu init
tofu plan # review the plan that will be created
tofu apply # when prompted with "Enter a value:", type "yes"
04_aks_addons
a. Navigate to the 04_aks_addons directory.
cd 04_aks_addons
b. Copy the terraform.tfvars from blob storage and save to the upgrade 04_aks_addons/terraform.tfvars.
az storage blob download \
--account-name <storage-account-name> \
--container-name <container-name> \
--name infrastructure-manifest/<cluster-name>/tfvars/04_aks_addons/terraform.tfvars \
--file iac/azure/cluster/modules/04_aks_addons/terraform.tfvars \
--auth-mode login
c. To apply the terraform configuration, run the following command:
tofu init
tofu plan # review the plan that will be created
tofu apply # when prompted with "Enter a value:", type "yes"
05_helm_releases
a. Navigate to the 05_helm_releases directory.
cd 05_helm_releases
b. Copy the terraform.tfvars from blob storage and save to the upgrade 05_helm_releases/terraform.tfvars.
az storage blob download \
--account-name <storage-account-name> \
--container-name <container-name> \
--name infrastructure-manifest/<cluster-name>/tfvars/05_helm_releases/terraform.tfvars \
--file iac/azure/cluster/modules/05_helm_releases/terraform.tfvars \
--auth-mode login
c. To apply the terraform configuration, run the following command:
tofu init
tofu plan # review the plan that will be created
tofu apply # when prompted with "Enter a value:", type "yes"
6. Verifying the upgrade
After the upgrade completes, perform the following verification steps to confirm the cluster is healthy.
Verify all nodes are Ready
To verify if all nodes are in the Ready state, run the following command:
kubectl get nodes -o wide
Verify all pods are Running
To verify if all pods are in the Running state, run the following command:
kubectl get pods -A
Verify Helm releases
To verify if the helm releases are in the Deployed state, run the following command:
helm list -A
All nodes must be in the Ready state, all pods must be in the Running or Completed state, and the Velero backup storage location must show Available.
Reverting to a previous version of PPC
To revert to a previous version of PPC, restore the cluster using the steps in Restoring the PPC.
Feedback
Was this page helpful?