This procedure covers upgrading from Apigee hybrid version 1.14.x to Apigee hybrid version 1.15.1 and from previous releases of hybrid 1.15.x to version 1.15.1.
Use the same procedures for minor version upgrades (for example version 1.14 to 1.15) and for patch release upgrades (for example 1.15.0 to 1.15.1).
If you are upgrading from Apigee hybrid version 1.13 or older, you must first upgrade to hybrid version 1.14 before upgrading to version 1.15.1. See the instructions for Upgrading Apigee hybrid to version 1.14.
Changes from Apigee hybrid v1.14
Please note the following changes:
- Apigee hybrid monetization: Starting in version 1.15.1, Apigee hybrid now supports recurring, top-up, and setup fees for monetization. For information see Enabling monetization for Apigee hybrid.
- Wildcards (*) in proxy basepaths: Starting in v1.15.1, the use of wildcards is now supported in Apigee proxy basepaths. To implement this change follow the procedure in Known issue 378686709.
- 
    Large message payload support: Starting in version 1.15 and also in the 1.14.2 patch release, Apigee now supports message payloads up to 30MB. For information see:
    - Configure large message payload support in Apigee hybrid
- runtime.resources.limits.memoryin the Configuration property reference.
- runtime.resources.requests.memoryin the Configuration property reference.
 
- Stricter class instantiation checks: Apigee hybrid,
    the JavaCallout policy now includes additional security during Java class instantiation. The enhanced security measure prevents the deployment of policies that directly or indirectly attempt actions that require permissions that are not allowed.
    In the most cases, existing policies will continue to function as expected without any issues. However, there is a possibility that policies relying on third-party libraries, or those with custom code that indirectly triggers operations requiring elevated permissions, could be affected. 
For additional information about features in Hybrid version 1.14, see the Apigee hybrid v1.14.0 release notes.
Prerequisites
Before upgrading to hybrid version 1.15, make sure your installation meets the following requirements:
- If your hybrid installation is running a version older than v1.14, you must upgrade to version 1.14 before upgrading to v1.15. See Upgrading Apigee hybrid to version 1.14.
- Helm version v3.14.2+.
- kubectl: A supported version of- kubectlappropriate for your Kubernetes platform version. see Supported platforms and versions:- kubectl.
- cert-manager: A supported version of cert-manager. See Supported platforms and versions: cert-manager. If needed, you will upgrade cert-manager in the Prepare to upgrade to version 1.15 section below.
Before you upgrade to 1.15.1 - limitations and important notes
- Apigee hybrid 1.15.1 introduces a new enhanced per-environment proxy limit that lets you deploy more proxies and shared flows in a single environment. See Limits: API Proxies to understand the limits on the number of proxies and shared flows you may deploy per environment. This feature is available only on newly created hybrid organizations, and cannot be applied to upgraded orgs. To use this feature, perform a fresh installation of hybrid 1.15.1, and create a new organization. - This feature is available exclusively as part of the 2024 subscription plan, and is subject to the entitlements granted under that subscription. See Enhanced per-environment proxy limits to learn more about this feature. 
- Upgrading to Apigee hybrid version 1.15 may require downtime. - When upgrading the Apigee controller to version 1.15.1, all Apigee deployments undergo a rolling restart. To minimize downtime in production hybrid environments during a rolling restart, make sure you are running at least two clusters (in the same or different region/data center). Divert all production traffic to a single cluster and take the cluster you are about to upgrade offline, and then proceed with the upgrade process. Repeat the process for each cluster. - Apigee recommends that once you begin the upgrade, you should upgrade all clusters as soon as possible to reduce the chances of production impact. There is no time limit on when all remaining clusters must be upgraded after the first one is upgraded. However, until all remaining clusters are upgraded Cassandra backup and restore cannot work with mixed versions. For example, a backup from Hybrid 1.14 cannot be used to restore a Hybrid 1.15 instance. 
- Management plane changes do not need to be fully suspended during an upgrade. Any required temporary suspensions to management plane changes are noted in the upgrade instructions below. 
Upgrading to version 1.15.1 overview
The procedures for upgrading Apigee hybrid are organized in the following sections:
Prepare to upgrade to version 1.15
Back up your hybrid installation
- These instructions use the environment variable APIGEE_HELM_CHARTS_HOME for the directory
    in your file system where you have installed the Helm charts. If needed, change directory
    into this directory and define the variable with the following command:
  Linuxexport APIGEE_HELM_CHARTS_HOME=$PWD echo $APIGEE_HELM_CHARTS_HOMEMac OSexport APIGEE_HELM_CHARTS_HOME=$PWD echo $APIGEE_HELM_CHARTS_HOMEWindowsset APIGEE_HELM_CHARTS_HOME=%CD% echo %APIGEE_HELM_CHARTS_HOME%
- Make a backup copy of your version 1.14
    $APIGEE_HELM_CHARTS_HOME/directory. You can use any backup process. For example, you can create atarfile of your entire directory with:tar -czvf $APIGEE_HELM_CHARTS_HOME/../apigee-helm-charts-v1.14-backup.tar.gz $APIGEE_HELM_CHARTS_HOME
- Back up your Cassandra database following the instructions in Cassandra backup and recovery.
- If you are using service cert files (.json) in your overrides to authenticate service accounts, make sure your service account cert files reside in the correct Helm chart directory. Helm charts cannot read files outside of each chart directory.This step is not required if you are using Kubernetes secrets or Workload Identity Federation for GKE to authenticate service accounts. The following table shows the destination for each service account file, depending on your type of installation: ProdService account Default filename Helm chart directory apigee-cassandraPROJECT_ID-apigee-cassandra.json$APIGEE_HELM_CHARTS_HOME/apigee-datastore/apigee-loggerPROJECT_ID-apigee-logger.json$APIGEE_HELM_CHARTS_HOME/apigee-telemetry/apigee-martPROJECT_ID-apigee-mart.json$APIGEE_HELM_CHARTS_HOME/apigee-org/apigee-metricsPROJECT_ID-apigee-metrics.json$APIGEE_HELM_CHARTS_HOME/apigee-telemetry/apigee-runtimePROJECT_ID-apigee-runtime.json$APIGEE_HELM_CHARTS_HOME/apigee-envapigee-synchronizerPROJECT_ID-apigee-synchronizer.json$APIGEE_HELM_CHARTS_HOME/apigee-env/apigee-udcaPROJECT_ID-apigee-udca.json$APIGEE_HELM_CHARTS_HOME/apigee-org/apigee-watcherPROJECT_ID-apigee-watcher.json$APIGEE_HELM_CHARTS_HOME/apigee-org/Non-prodMake a copy of the apigee-non-prodservice account file in each of the following directories:Service account Default filename Helm chart directories apigee-non-prodPROJECT_ID-apigee-non-prod.json$APIGEE_HELM_CHARTS_HOME/apigee-datastore/
 $APIGEE_HELM_CHARTS_HOME/apigee-telemetry/
 $APIGEE_HELM_CHARTS_HOME/apigee-org/
 $APIGEE_HELM_CHARTS_HOME/apigee-env/
- 
    Make sure that your TLS certificate and key files (.crt,.key, and/or.pem) reside in the$APIGEE_HELM_CHARTS_HOME/apigee-virtualhost/directory.
Upgrade your Kubernetes version
Check your Kubernetes platform version and if needed, upgrade your Kubernetes platform to a version that is supported by both hybrid 1.14 and hybrid 1.15. Follow your platform's documentation if you need help.
Remove/upgrade Istio CRDs
  During upgrade from Apigee hybrid versions 1.14.1 or older, the presence of istio.io Custom Resource Definitions (CRDs) in an Apigee hybrid cluster may cause failed readiness probes in the discovery containers of the apigee-ingressgateway-manager pods.
    If gateway.networking.k8s.io/v1 is installed in your cluster,apigee-ingressgateway-manager may fail to upgrade. For example, gateway.networking.k8s.io/v1 is usually installed in clusters running on Google Distributed Cloud (software only) on bare metal v1.32 or later.
There are two options to fix these issues:
- Delete the istio.ioCRDs if you are not using Istio for any purpose other than Apigee in your cluster.
- Update the apigee-ingressgateway-manager clusterroleto add permissions foristio.io.
Afer each of the above options, you will need to restart your apigee-ingressgateway-manager pods.
  See Known Issue 416634326 and Known Issue 419856132 for more information about istio.io CRDs and gateway.networking.k8s.io/v1 in Apigee hybrid.
- 
    Determine if you have istio.ioCRDs in your cluster with the following command:kubectl get crd -o custom-columns=NAME:metadata.name | grep istio.io Your output will look something like the following if your cluster has istio.ioCRDs:kubectl get crd -o custom-columns=NAME:metadata.name | grep istio.ioauthorizationpolicies.security.istio.io destinationrules.networking.istio.io envoyfilters.networking.istio.io gateways.networking.istio.io peerauthentications.security.istio.io proxyconfigs.networking.istio.io requestauthentications.security.istio.io serviceentries.networking.istio.io sidecars.networking.istio.io telemetries.telemetry.istio.io virtualservices.networking.istio.io wasmplugins.extensions.istio.io workloadentries.networking.istio.io workloadgroups.networking.istio.io
- Optional: Save the CRDs locally in case you need to recreate them:
    kubectl get crd $(cat istio-crd.csv) -o yaml > istio-crd.yaml 
Delete CRDs
- 
          List the istio.ioCRDs in your cluster to a CSV file:kubectl get crd -o custom-columns=NAME:metadata.name | grep istio.io > istio-crd.csv 
- Optional: Save the CRDs locally in case you need to recreate them:
          kubectl get crd $(cat istio-crd.csv) -o yaml > istio-crd.yaml 
- 
          Delete the istio.ioCRDs:Dry run: kubectl delete crd $(cat istio-crd.csv) --dry-run=client Execute: kubectl delete crd $(cat istio-crd.csv) 
Update clusterrole
- 
            Get the current apigee-ingressgateway-manager clusterrole:
            kubectl get clusterrole apigee-ingressgateway-manager-apigee -o yaml > apigee-ingressgateway-manager-apigee-clusterrole.yaml 
- 
            Copy the clusterrole to a new location:
            cp apigee-ingressgateway-manager-apigee-clusterrole.yaml apigee-ingressgateway-manager-apigee-clusterrole-added-istio-permissions.yaml 
- 
            Add the following additional permissions to the end of the file:
            - apiGroups: - gateway.networking.k8s.io resources: - gatewayclasses - gateways - grpcroutes - httproutes - referencegrants verbs: - get - list - watch - apiGroups: - networking.istio.io resources: - sidecars - destinationrules - gateways - virtualservices - envoyfilters - workloadentries - serviceentries - workloadgroups - proxyconfigs verbs: - get - list - watch - apiGroups: - security.istio.io resources: - peerauthentications - authorizationpolicies - requestauthentications verbs: - get - list - watch - apiGroups: - telemetry.istio.io resources: - telemetries verbs: - get - list - watch - apiGroups: - extensions.istio.io resources: - wasmplugins verbs: - get - list - watch 
- 
            Apply the role:
            kubectl -n APIGEE_NAMESPACE apply -f apigee-ingressgateway-manager-apigee-clusterrole-added-istio-permissions.yaml 
After you have completed the above options, you will need to restart your apigee-ingressgateway-manager pods.
- 
          List the ingress-managerpods to reinstall or recreate:kubectl get deployments -n APIGEE_NAMESPACE Example output: NAME READY UP-TO-DATE AVAILABLE AGE apigee-controller-manager 1/1 1 1 32d apigee-ingressgateway-manager 2/2 2 2 32d 
- 
          Restart the ingress-managerpods:kubectl rollout restart deployment -n APIGEE_NAMESPACE apigee-ingressgateway-manager 
- 
          After a few minutes, monitor the apigee-ingressgateway-managerpods:watch -n 10 kubectl -n APIGEE_NAMESPACE get pods -l app=apigee-ingressgateway-manager Example output: NAME READY STATUS RESTARTS AGE apigee-ingressgateway-manager-12345abcde-678wx 3/3 Running 0 10m apigee-ingressgateway-manager-12345abcde-901yz 3/3 Running 0 10m 
Install the hybrid 1.15.1 runtime
Configure the data collection pipeline.
Starting with hybrid v1.14, new analytics and debug data pipeline is enabled by default for all Apigee hybrid orgs. You must follow the steps in enable analytics publisher access to configure the authorization flow.
Prepare for the Helm charts upgrade
- Pull the Apigee Helm charts.
   
  Apigee hybrid charts are hosted in Google Artifact Registry: oci://us-docker.pkg.dev/apigee-release/apigee-hybrid-helm-chartsUsing the pullcommand, copy all of the Apigee hybrid Helm charts to your local storage with the following command:export CHART_REPO=oci://us-docker.pkg.dev/apigee-release/apigee-hybrid-helm-charts export CHART_VERSION=1.15.1helm pull $CHART_REPO/apigee-operator --version $CHART_VERSION --untarhelm pull $CHART_REPO/apigee-datastore --version $CHART_VERSION --untarhelm pull $CHART_REPO/apigee-env --version $CHART_VERSION --untarhelm pull $CHART_REPO/apigee-ingress-manager --version $CHART_VERSION --untarhelm pull $CHART_REPO/apigee-org --version $CHART_VERSION --untarhelm pull $CHART_REPO/apigee-redis --version $CHART_VERSION --untarhelm pull $CHART_REPO/apigee-telemetry --version $CHART_VERSION --untarhelm pull $CHART_REPO/apigee-virtualhost --version $CHART_VERSION --untar
- Upgrade cert-manager if needed.
    If you need to upgrade your cert-manager version, install the new version with the following command: kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.17.4/cert-manager.yaml See Supported platforms and versions: cert-manager for a list of supported versions. 
- If your Apigee namespace is not apigee, edit theapigee-operator/etc/crds/default/kustomization.yamlfile and replace thenamespacevalue with your Apigee namespace.apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization namespace: APIGEE_NAMESPACE If you are using apigeeas your namespace you do not need to edit the file.
- Install the updated Apigee CRDs:
  
  
  
    - 
        Use the kubectldry-run feature by running the following command:kubectl apply -k apigee-operator/etc/crds/default/ --server-side --force-conflicts --validate=false --dry-run=server 
- 
        After validating with the dry-run command, run the following command: kubectl apply -k apigee-operator/etc/crds/default/ \ --server-side \ --force-conflicts \ --validate=false 
- Validate the installation with the kubectl get crdscommand:kubectl get crds | grep apigee Your output should look something like the following: apigeedatastores.apigee.cloud.google.com 2024-08-21T14:48:30Z apigeedeployments.apigee.cloud.google.com 2024-08-21T14:48:30Z apigeeenvironments.apigee.cloud.google.com 2024-08-21T14:48:31Z apigeeissues.apigee.cloud.google.com 2024-08-21T14:48:31Z apigeeorganizations.apigee.cloud.google.com 2024-08-21T14:48:32Z apigeeredis.apigee.cloud.google.com 2024-08-21T14:48:33Z apigeerouteconfigs.apigee.cloud.google.com 2024-08-21T14:48:33Z apigeeroutes.apigee.cloud.google.com 2024-08-21T14:48:33Z apigeetelemetries.apigee.cloud.google.com 2024-08-21T14:48:34Z cassandradatareplications.apigee.cloud.google.com 2024-08-21T14:48:35Z 
 
- 
        
- 
    Check the labels on the cluster nodes. By default, Apigee schedules data pods on nodes with the label cloud.google.com/gke-nodepool=apigee-dataand runtime pods are scheduled on nodes with the labelcloud.google.com/gke-nodepool=apigee-runtime. You can customize your node pool labels in theoverrides.yamlfile.For more information, see Configuring dedicated node pools. 
Install the Apigee hybrid Helm charts
- If you have not, navigate into your APIGEE_HELM_CHARTS_HOMEdirectory. Run the following commands from that directory.
- Upgrade the Apigee Operator/Controller:
      
      Dry run: helm upgrade operator apigee-operator/ \ --install \ --namespace APIGEE_NAMESPACE \ -f OVERRIDES_FILE \ --dry-run=server Upgrade the chart: helm upgrade operator apigee-operator/ \ --install \ --namespace APIGEE_NAMESPACE \ -f OVERRIDES_FILE Verify Apigee Operator installation: helm ls -n APIGEE_NAMESPACE NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION operator apigee 3 2024-08-21 00:42:44.492009 -0800 PST deployed apigee-operator-1.15.1 1.15.1 Verify it is up and running by checking its availability: kubectl -n APIGEE_NAMESPACE get deploy apigee-controller-manager NAME READY UP-TO-DATE AVAILABLE AGE apigee-controller-manager 1/1 1 1 7d20h 
- Upgrade the Apigee datastore:
      Dry run: helm upgrade datastore apigee-datastore/ \ --install \ --namespace APIGEE_NAMESPACE \ -f OVERRIDES_FILE \ --dry-run=server Upgrade the chart: helm upgrade datastore apigee-datastore/ \ --install \ --namespace APIGEE_NAMESPACE \ -f OVERRIDES_FILE Verify apigeedatastoreis up and running by checking its state:kubectl -n APIGEE_NAMESPACE get apigeedatastore default NAME STATE AGE default running 2d 
- Upgrade Apigee telemetry:
      Dry run: helm upgrade telemetry apigee-telemetry/ \ --install \ --namespace APIGEE_NAMESPACE \ -f OVERRIDES_FILE \ --dry-run=server Upgrade the chart: helm upgrade telemetry apigee-telemetry/ \ --install \ --namespace APIGEE_NAMESPACE \ -f OVERRIDES_FILE Verify it is up and running by checking its state: kubectl -n APIGEE_NAMESPACE get apigeetelemetry apigee-telemetry NAME STATE AGE apigee-telemetry running 2d 
- Upgrade Apigee Redis:
      Dry run: helm upgrade redis apigee-redis/ \ --install \ --namespace APIGEE_NAMESPACE \ -f OVERRIDES_FILE \ --dry-run=server Upgrade the chart: helm upgrade redis apigee-redis/ \ --install \ --namespace APIGEE_NAMESPACE \ -f OVERRIDES_FILE Verify it is up and running by checking its state: kubectl -n APIGEE_NAMESPACE get apigeeredis default NAME STATE AGE default running 2d 
- Upgrade Apigee ingress manager:
      Dry run: helm upgrade ingress-manager apigee-ingress-manager/ \ --install \ --namespace APIGEE_NAMESPACE \ -f OVERRIDES_FILE \ --dry-run=server Upgrade the chart: helm upgrade ingress-manager apigee-ingress-manager/ \ --install \ --namespace APIGEE_NAMESPACE \ -f OVERRIDES_FILE Verify it is up and running by checking its availability: kubectl -n APIGEE_NAMESPACE get deployment apigee-ingressgateway-manager NAME READY UP-TO-DATE AVAILABLE AGE apigee-ingressgateway-manager 2/2 2 2 2d 
- Upgrade the Apigee organization:
      Dry run: helm upgrade ORG_NAME apigee-org/ \ --install \ --namespace APIGEE_NAMESPACE \ -f OVERRIDES_FILE \ --dry-run=server Upgrade the chart: helm upgrade ORG_NAME apigee-org/ \ --install \ --namespace APIGEE_NAMESPACE \ -f OVERRIDES_FILE Verify it is up and running by checking the state of the respective org: kubectl -n APIGEE_NAMESPACE get apigeeorg NAME STATE AGE apigee-org1-xxxxx running 2d 
- Upgrade the environment.
      You must install one environment at a time. Specify the environment with --set env=ENV_NAME.Dry run: helm upgrade ENV_RELEASE_NAME apigee-env/ \ --install \ --namespace APIGEE_NAMESPACE \ --set env=ENV_NAME \ -f OVERRIDES_FILE \ --dry-run=server - ENV_RELEASE_NAME is a name used to keep track of installation and upgrades of the
          apigee-envchart. This name must be unique from the other Helm release names in your installation. Usually this is the same asENV_NAME. However, if your environment has the same name as your environment group, you must use different release names for the environment and environment group, for exampledev-env-releaseanddev-envgroup-release. For more information on releases in Helm, see Three big concepts in the Helm documentation.
- ENV_NAME is the name of the environment you are upgrading.
- OVERRIDES_FILE is your new overrides file for v.1.15.1
 Upgrade the chart: helm upgrade ENV_RELEASE_NAME apigee-env/ \ --install \ --namespace APIGEE_NAMESPACE \ --set env=ENV_NAME \ -f OVERRIDES_FILE Verify it is up and running by checking the state of the respective env: kubectl -n APIGEE_NAMESPACE get apigeeenv NAME STATE AGE GATEWAYTYPE apigee-org1-dev-xxx running 2d 
- ENV_RELEASE_NAME is a name used to keep track of installation and upgrades of the
          
- 
        Upgrade the environment groups (virtualhosts).- You must upgrade one environment group (virtualhost) at a time. Specify the environment
          group with --set envgroup=ENV_GROUP_NAME. Repeat the following commands for each environment group mentioned in the overrides.yaml file:Dry run: helm upgrade ENV_GROUP_RELEASE_NAME apigee-virtualhost/ \ --install \ --namespace APIGEE_NAMESPACE \ --set envgroup=ENV_GROUP_NAME \ -f OVERRIDES_FILE \ --dry-run=server ENV_GROUP_RELEASE_NAME is the name with which you previously installed the apigee-virtualhostchart. It is usually ENV_GROUP_NAME.Upgrade the chart: helm upgrade ENV_GROUP_RELEASE_NAME apigee-virtualhost/ \ --install \ --namespace APIGEE_NAMESPACE \ --set envgroup=ENV_GROUP_NAME \ -f OVERRIDES_FILE 
- Check the state of the ApigeeRoute (AR).
          Installing the virtualhostscreates ApigeeRouteConfig (ARC) which internally creates ApigeeRoute (AR) once the Apigee watcher pulls environment group-related details from the control plane. Therefore, check that the corresponding AR's state is running:kubectl -n APIGEE_NAMESPACE get arc NAME STATE AGE apigee-org1-dev-egroup 2d kubectl -n APIGEE_NAMESPACE get ar NAME STATE AGE apigee-org1-dev-egroup-xxxxxx running 2d 
 
- You must upgrade one environment group (virtualhost) at a time. Specify the environment
          group with 
- After you have verified all the installations are upgraded successfully, delete the older apigee-operatorrelease from theapigee-systemnamespace.- Uninstall the old operatorrelease:helm delete operator -n apigee-system 
- Delete the apigee-systemnamespace:kubectl delete namespace apigee-system 
 
- Uninstall the old 
- Upgrade operatoragain in your Apigee namespace to re-install the deleted cluster-scoped resources:helm upgrade operator apigee-operator/ \ --install \ --namespace APIGEE_NAMESPACE \ --atomic \ -f overrides.yaml 
Validate policies after upgrade from v1.14.0 or earlier
Use this procedure to validate the behavior of the JavaCallout policy after upgrading from 1.14.0.
- Check whether the Java JAR files request unnecessary permissions.
    After the policy is deployed, check the runtime logs to see if the following log message is present: "Failed to load and initialize class ...". If you observe this message, it suggests that the deployed JAR requested unnecessary permissions. To resolve this issue, investigate the Java code and update the JAR file.
- Investigate and update the Java code.
    Review any Java code (including dependencies) to identify the cause of potentially unallowed operations. When found, modify the source code as required. 
- Test policies with the security check enabled.
    In a non-production environment, enable the security check flag and redeploy your policies with an updated JAR. To set the flag: - In the apigee-env/values.yamlfile, setconf_security-secure.constructor.onlytotrueunderruntime:cwcAppend:. For example:# Apigee Runtime runtime: cwcAppend: conf_security-secure.constructor.only: true 
- Update the apigee-envchart for the environment to apply the change. For example:helm upgrade ENV_RELEASE_NAME apigee-env/ \ --install \ --namespace APIGEE_NAMESPACE \ --set env=ENV_NAME \ -f OVERRIDES_FILE ENV_RELEASE_NAME is a name used to keep track of installation and upgrades of the apigee-envchart. This name must be unique from the other Helm release names in your installation. Usually this is the same asENV_NAME. However, if your environment has the same name as your environment group, you must use different release names for the environment and environment group, for exampledev-env-releaseanddev-envgroup-release. For more information on releases in Helm, see Three big concepts in the Helm documentation.
 If the log message "Failed to load and initialize class ..."is still present, continue modifying and testing the JAR until the log message no longer appears.
- In the 
- Enable the security check in the production environment.
    After you have thoroughly tested and verified the JAR file in the non-production environment, enable the security check in your production environment by setting the flag conf_security-secure.constructor.onlytotrueand updating theapigee-envchart for the production environment to apply the change.
Rolling back to a previous version
  To roll back to the previous version, use the older chart version to roll back the upgrade process in the reverse order. Start with apigee-virtualhost and work your way back to apigee-operator, and then revert the CRDs.
- Revert all the charts from apigee-virtualhosttoapigee-datastore. The following commands assume you are using the charts from the previous version (v1.14.x).Run the following command for each environment group: helm upgrade ENV_GROUP_RELEASE_NAME apigee-virtualhost/ \ --install \ --namespace apigee \ --atomic \ --set envgroup=ENV_GROUP_NAME \ -f 1.14_OVERRIDES_FILE Run the following command for each environment: helm upgrade ENV_RELEASE_NAME apigee-env/ \ --install \ --namespace apigee \ --atomic \ --set env=ENV_NAME \ -f 1.14_OVERRIDES_FILE Revert the remaining charts except for apigee-operator.helm upgrade ORG_NAME apigee-org/ \ --install \ --namespace apigee \ --atomic \ -f 1.14_OVERRIDES_FILE helm upgrade ingress-manager apigee-ingress-manager/ \ --install \ --namespace apigee \ --atomic \ -f 1.14_OVERRIDES_FILE helm upgrade redis apigee-redis/ \ --install \ --namespace apigee \ --atomic \ -f 1.14_OVERRIDES_FILE helm upgrade telemetry apigee-telemetry/ \ --install \ --namespace apigee \ --atomic \ -f 1.14_OVERRIDES_FILE helm upgrade datastore apigee-datastore/ \ --install \ --namespace apigee \ --atomic \ -f 1.14_OVERRIDES_FILE 
- Create the apigee-systemnamespace.kubectl create namespace apigee-system 
- Patch the resource annotation back to the apigee-systemnamespace.kubectl annotate --overwrite clusterIssuer apigee-ca-issuer meta.helm.sh/release-namespace='apigee-system' 
- If you have changed the release name as well, update the annotation with the operatorrelease name.kubectl annotate --overwrite clusterIssuer apigee-ca-issuer meta.helm.sh/release-name='operator' 
- Install apigee-operatorback into theapigee-systemnamespace.helm upgrade operator apigee-operator/ \ --install \ --namespace apigee-system \ --atomic \ -f 1.14_OVERRIDES_FILE 
- Revert the CRDs by reinstalling the older CRDs.
kubectl apply -k apigee-operator/etc/crds/default/ \ --server-side \ --force-conflicts \ --validate=false 
- Clean up the apigee-operatorrelease from the APIGEE_NAMESPACE namespace to complete the rollback process.helm uninstall operator -n APIGEE_NAMESPACE 
- Some cluster-scoped resources, such as clusterIssuer, are deleted whenoperatoris uninstalled. Reinstall them with the following command:helm upgrade operator apigee-operator/ \ --install \ --namespace apigee-system \ --atomic \ -f 1.14_OVERRIDES_FILE