Upgrade
Upgrade minor and patch versions of Gloo Mesh (Gloo Platform APIs).
You can use this guide to upgrade the Gloo version of your Gloo components, such as the management server and agents, or to apply changes to the components’ configuration settings.
Make sure that you review the breaking changes 🔥 that were introduced in this release and the impact that they have on your current environment. Then, continue with your upgrade.
Considerations
Consider the following rules before you plan your Gloo Mesh (Gloo Platform APIs) upgrade.
Testing upgrades
During the upgrade, the data plane continues to run, but you might not be able to modify the configurations through the management plane. Because zero downtime is not guaranteed, try testing the upgrade in a staging environment before upgrading your production environment.
Patch and minor versions
Patch version upgrades:You can skip patch versions within the same minor release. For example, you can upgrade from version 2.13.0 to 2.13.2 directly, and skip the patch versions in between.
Minor version upgrades:
- Always upgrade to the latest patch version of the target minor release. For example, if you want to upgrade from version 2.12.0 to 2.13.x, and 2.13.0 is the latest patch version, upgrade to that version and skip any previous patch versions for that minor release.
- Do not skip minor versions during your upgrade. Upgrade minor release versions one at a time. For example, if you want to upgrade from 2.10.x to 2.12.x, you must first upgrade to the latest patch version of the 2.10 minor release. After you upgrade to 2.11.x, you can then plan your upgrade to the latest patch version of the 2.12.x release.
Multicluster only: Version skew policy for management and remote clusters
Plan to always upgrade your Gloo management server and agents to the same target version. Always upgrade the Gloo management server first. Then, roll out the upgrade to the Gloo agents in your workload clusters. During this upgrade process, your management server and agents can be one minor version apart.
For example, let’s say you want to upgrade from 2.12.0 to 2.13.x. Start by upgrading your management server to the latest patch version of the 2.13 minor release. Your management server and agent are still compliant as they are one minor version apart. Then, roll out the 2.13 minor release upgrade to the agents in your workload clusters.
If you plan to upgrade more than one minor releases, you must perform one minor release upgrade at a time. For example, to upgrade your management server and agent from 2.10.x to 2.12.x, you upgrade your management server to the latest patch version of the 2.9 minor release first. Your management server and agent are compliant because they are one minor version apart. Then, you upgrade your agents to the 2.11 minor release. After you verify the 2.11 upgrade, use the same approach to upgrade the management server and agents from 2.11 to the target 2.12 minor release.
If both your management server and agent run the same minor version, the agent can run any patch version that is equal or lower than the management server’s patch version.
Consider the following example version skew scenarios:
| Supported? | Management server version | Agent version | Requirement |
|---|---|---|---|
| ✅ | 2.9.3 | 2.9.1 | The management server and agents run the same minor version. The agent patch version is equal to or lower than the management server. |
| ❌ | 2.9.3 | 2.9.6 | The agent runs the same minor version as the server, but has a patch version greater than the server. |
| ✅ | 2.9.3 | 2.8.1 | The agent runs a minor version no greater than n-1 behind the server. |
| ❌ | 2.9.3 | 2.7.2 | The agent runs a minor version that is greater than n-1 behind the server. |
Step 1: Prepare to upgrade
Review changes from the previous version.
Make sure that you review the breaking changes 🔥 that were introduced in this release and the impact that they have on your current environment.Check that your underlying Kubernetes platform and Istio service mesh run supported versions for the Gloo Mesh (Gloo Platform APIs) version that you want to upgrade to.
- Review the supported versions.
- Compare the supported version against the versions of Kubernetes and Istio that you run in your clusters.
- If necessary, upgrade Istio or Kubernetes to a version that is supported by the Gloo Mesh (Gloo Platform APIs) version that you want to upgrade to.
- For managed Istio installations, see Upgrade Gloo Operator-managed service meshes, or for manually installed Istio, see Upgrade Istio service meshes with Helm.
- For Kubernetes steps, consult your cluster infrastructure provider.
Set the Gloo Mesh (Gloo Platform APIs) version that you want to upgrade to as an environment variable. The latest version is used as an example. You can find other versions in the changelog documentation. Append
-fipsfor a FIPS-compliant image, such as2.13.0-fips. Do not includevbefore the version number.export UPGRADE_VERSION=2.13.0
Step 2: Upgrade the meshctl CLI
Upgrade the meshctl CLI to the version of Gloo Mesh (Gloo Platform APIs) you want to upgrade to.
Re-install
meshctlto the upgrade version.curl -sL https://run.solo.io/meshctl/install | GLOO_MESH_VERSION=v$UPGRADE_VERSION sh -Verify that the client version matches the version you want to upgrade to.
meshctl versionExample output:
{ "client": { "version": "2.13.0" },
Step 3: Upgrade Gloo Mesh (Gloo Platform APIs)
Upgrade your Gloo Mesh (Gloo Platform APIs) installation. The steps differ based on whether you run Gloo Mesh (Gloo Platform APIs) in a single-cluster or multicluster environment.
Single cluster
Scale down the Gloo management server to 0 replicas. This step is required to safely enable safe mode and I/O threads in Redis. If you already enabled safe mode and you do not want to set I/O threads in Redis, you can skip this step.
kubectl scale deployment gloo-mesh-mgmt-server --replicas=0 -n gloo-meshUpdate the
gloo-platformHelm repo.helm repo add gloo-platform https://storage.googleapis.com/gloo-platform/helm-charts helm repo updateApply the Gloo custom resource definitions (CRDs) for the upgrade version.
helm upgrade -i gloo-platform-crds gloo-platform/gloo-platform-crds \ --namespace gloo-mesh \ --version $UPGRADE_VERSION \ --set installEnterpriseCrds=trueGet the Helm values file for your current version.
helm get values gloo-platform -o yaml -n gloo-mesh > gloo-single.yaml open gloo-single.yamlCompare your current Helm chart values with the version that you want to upgrade to. You can get a values file for the upgrade version with the
helm show valuescommand.helm show values gloo-platform/gloo-platform --version $UPGRADE_VERSION > all-values.yamlMake any changes that you want, such as modifications required for breaking changes or to enable new features, by editing your
gloo-single.yamlHelm values file or preparing the--setflags. For example, enabling the Gloo insights engine by including the--set glooInsightsEngine.enabled=trueand--set glooAnalyzer.enabled=truesettings is recommended to help you improve the security and observability of your environment. If you do not want to use certain settings, comment them out.Upgrade the Gloo Mesh (Gloo Platform APIs) Helm installation.
Make sure to include your Helm values when you upgrade either as a configuration file in the
–valuesflag or with–setflags. Otherwise, any previous custom values that you set might be overwritten.helm upgrade gloo-platform gloo-platform/gloo-platform \ --namespace gloo-mesh \ -f gloo-single.yaml \ --version $UPGRADE_VERSIONConfirm that Gloo components, such as the
gloo-mesh-mgmt-server, run the version that you upgraded to.meshctl versionExample output:
"server": [ { "Namespace": "gloo-mesh", "components": [ { "componentName": "gloo-mesh-mgmt-server", "images": [ { "name": "gloo-mesh-mgmt-server", "domain": "gcr.io", "path": "gloo-mesh-mgmt-server", "version": "2.13.0" } ] },If you previously scaled down the Gloo management server, scale it back to the number of replicas that you had before. The following example uses 1 replica.
kubectl scale deployment gloo-mesh-mgmt-server --replicas=1 -n gloo-meshWait until all Gloo agents are connected to the Gloo management server.
meshctl check
Multicluster
Scale down the Gloo management server to 0 replicas. This step is required to safely enable safe mode and I/O threads in Redis. If you already enabled safe mode and you do not want to set I/O threads in Redis, you can skip this step.
kubectl scale deployment gloo-mesh-mgmt-server --context $MGMT_CONTEXT --replicas=0 -n gloo-meshUpdate the
gloo-platformHelm repo.helm repo add gloo-platform https://storage.googleapis.com/gloo-platform/helm-charts helm repo updateGet the Helm values files for your current version.
- Get your current values for the management cluster.
helm get values gloo-platform -n gloo-mesh -o yaml --kube-context $MGMT_CONTEXT > mgmt-plane.yaml open mgmt-plane.yaml - Get your current values for the workload clusters.
helm get values gloo-platform -n gloo-mesh -o yaml --kube-context $REMOTE_CONTEXT > data-plane.yaml open data-plane.yaml - Optional: If you maintain a separate
gloo-agent-addonsHelm release, get the values for that Helm release too. Note that your add-ons might be installed in a different namespace, such asgloo-mesh-addons.helm get values gloo-agent-addons -n gloo-mesh -o yaml --kube-context $REMOTE_CONTEXT > gloo-agent-addons.yaml open gloo-agent-addons.yaml
- Get your current values for the management cluster.
Compare your current Helm chart values with the version that you want to upgrade to. You can get a values file for the upgrade version with the
helm show valuescommand.helm show values gloo-platform/gloo-platform --version $UPGRADE_VERSION > all-values.yamlMake any changes that you want, such as modifications required for breaking changes or to enable new features, by editing your
mgmt-plane.yamlanddata-plane.yamlHelm values files or preparing the--setflags. For example, enabling the Gloo insights engine by including the--set glooInsightsEngine.enabled=truesetting is recommended to help you improve the security and observability of your environment. If you do not want to use certain settings, comment them out.Upgrade the Gloo Mesh (Gloo Platform APIs) Helm release in your management cluster.
You must always upgrade the Gloo management plane before upgrading the Gloo data plane to avoid unexpected behavior. Note that only
n-1minor version skew is supported between the Gloo management server and the agent. For more information, see the skew policy.- Apply the Gloo custom resource definitions (CRDs) for the upgrade version in the management cluster.
helm upgrade -i gloo-platform-crds gloo-platform/gloo-platform-crds \ --kube-context $MGMT_CONTEXT \ --namespace gloo-mesh \ --version $UPGRADE_VERSION \ --set installEnterpriseCrds=true - Upgrade your Helm release in the management cluster. Make sure to include your Helm values when you upgrade either as a configuration file in the
--valuesflag or with--setflags. Otherwise, any previous custom values that you set might be overwritten.helm upgrade gloo-platform gloo-platform/gloo-platform \ --kube-context $MGMT_CONTEXT \ --namespace gloo-mesh \ -f mgmt-plane.yaml \ --version $UPGRADE_VERSION - Confirm that the management plane components, such as the
gloo-mesh-mgmt-server, run the version that you upgraded to.Example output:meshctl version --kubecontext $MGMT_CONTEXT"server": [ { "Namespace": "gloo-mesh", "components": [ { "componentName": "gloo-mesh-mgmt-server", "images": [ { "name": "gloo-mesh-mgmt-server", "domain": "gcr.io", "path": "gloo-mesh-mgmt-server", "version": "2.13.0" } ] },
- Apply the Gloo custom resource definitions (CRDs) for the upgrade version in the management cluster.
If you previously scaled down the Gloo management server, scale it back to the number of replicas that you had before. The following example uses 1 replica.
kubectl scale deployment gloo-mesh-mgmt-server --context $MGMT_CONTEXT --replicas=1 -n gloo-meshWait until all Gloo agents are connected to the Gloo management server.
meshctl check --kubecontext $REMOTE_CONTEXTOpen the Gloo UI and verify that none of your clusters are currently in safe mode. If a cluster is in safe more, the agent’s input snapshot is not yet populated in Redis. You see a yellow banner in the Gloo UI indicating the cluster that triggered safe mode. Wait until the input snapshot is populated and the yellow banner does not display in the Gloo UI anymore.
If a cluster remains in safe mode for a long time, review the logs of the agent by using thekubectl logs <agent-pod> -n gloo-mesh --context $REMOTE_CONTEXTcommand. To learn more about possible reasons for why the cluster remains in safe mode, see Indefinite safe mode.meshctl dashboard --kubecontext $MGMT_CONTEXTUpgrade the Gloo Mesh (Gloo Platform APIs) Helm releases in your workload clusters. Repeat these steps for each workload cluster, and be sure to update the cluster context each time.
Apply the Gloo custom resource definitions (CRDs) for the upgrade version in each workload cluster.
helm upgrade -i gloo-platform-crds gloo-platform/gloo-platform-crds \ --kube-context $REMOTE_CONTEXT \ --namespace=gloo-mesh \ --version=$UPGRADE_VERSION \ --set installEnterpriseCrds=trueUpgrade your Helm release in each workload cluster. Make sure to include your Helm values when you upgrade either as a configuration file in the
--valuesflag or with--setflags. For example, enabling the Gloo insights analyzer by including the--set glooAnalyzer.enabled=truesetting is recommended to help you improve the security and observability of your environment. Otherwise, any previous custom values that you set might be overwritten.helm upgrade gloo-platform gloo-platform/gloo-platform \ --kube-context $REMOTE_CONTEXT \ --namespace gloo-mesh \ -f data-plane.yaml \ --version $UPGRADE_VERSIONOptional: If you maintain a separate
gloo-agent-addonsHelm release, upgrade that Helm release in each workload cluster too. Be sure to update the cluster context for each workload cluster that you repeat this command for. Note that your add-ons might be installed in a different namespace, such asgloo-mesh-addons.helm upgrade gloo-agent-addons gloo-platform/gloo-platform \ --kube-context $REMOTE_CONTEXT \ --namespace gloo-mesh \ -f gloo-agent-addons.yaml \ --version $UPGRADE_VERSIONEnsure that the Gloo agent connects to the Gloo management server.
meshctl check --kubecontext $REMOTE_CONTEXTOpen the Gloo UI and verify that none of your clusters are currently in safe mode. If a cluster is in safe more, the agent’s input snapshot is not yet populated in Redis. You see a yellow banner in the Gloo UI indicating the cluster that triggered safe mode. Wait until the input snapshot is populated and the yellow banner does not display in the Gloo UI anymore.
If a cluster remains in safe mode for a long time, review the logs of the agent by using thekubectl logs <agent-pod> -n gloo-mesh --context $REMOTE_CONTEXTcommand. To learn more about possible reasons for why the cluster remains in safe mode, see Indefinite safe mode.meshctl dashboard --kubecontext $MGMT_CONTEXTConfirm that the data plane components, such as the
gloo-mesh-agent, run the version that you upgraded to.meshctl version --kubecontext $REMOTE_CONTEXTExample output:
{ "componentName": "gloo-mesh-agent", "images": [ { "name": "gloo-mesh-agent", "domain": "gcr.io", "path": "gloo-mesh/gloo-mesh-agent", "version": "2.13.0" } ] },Repeat these steps for each workload cluster, and be sure to update the cluster context each time.
Update your Gloo license
Before your Gloo license expires, you can update the license by patching the license key secret. If you use Solo Enterprise for Istio along with other Solo products such as Gloo Mesh Gateway, you can also update those licenses.
For example, if you notice that your Gloo management plane deployments are in a crash loop, your Gloo license might be expired. You can check the status of your license with the meshctl license check command.
- To pass in a license key directly, encode the key in base64 and pass it in the
--keyflag. For example, to check your Solo Enterprise for Istio license key, you can run the following command:meshctl license check --key $(echo ${SOLO_ISTIO_LICENSE_KEY} | base64 -w0) --context ${MGMT_CONTEXT} - If you store your license keys in a Kubernetes secret, you can pass the secret YAML file in the
--secrets-fileflag instead.meshctl license check --secrets-file license-keys.yaml --context ${MGMT_CONTEXT}
Example output for an expired license:
WARNING Your gloo-mesh license expired on 2024-01-24 19:30:53 +0100 CET. To get a new license, contact Support.
ERROR License is expired. For more info, see https://docs.solo.io/gloo-mesh-enterprise/latest/setup/prepare/licensing/#update-licenses
To update your license key in your Solo installation:
Get a new Solo license key by contacting your account representative. If you use Solo Enterprise for Istio along with other Solo products such as Gloo Mesh Gateway, make sure to ask for up-to-date license keys for all your products.
Save the new license key as an environment variable.
- Gloo Mesh (Gloo Platform APIs):
export GLOO_MESH_LICENSE_KEY=<new-key-string> - Gloo Mesh Gateway:
export GLOO_MESH_GATEWAY_LICENSE_KEY=<new-key-string>
- Gloo Mesh (Gloo Platform APIs):
Update your license in your Gloo installation. The method depends on how you provided your license during your Helm installation.
Optional: If your license expired and the management server pods are in a crash loop, restart the management server pods. If you updated the license before expiration, skip this step.
kubectl rollout restart -n gloo-mesh deployment/gloo-mesh-mgmt-server --context ${MGMT_CONTEXT}Verify that your license check is now valid, and no errors are reported.
- To pass in a license key directly, encode the key in base64 and pass it in the
--keyflag. For example, to check your Solo Enterprise for Istio license key, you can run the following command:meshctl license check --key $(echo ${SOLO_ISTIO_LICENSE_KEY} | base64 -w0) --context ${MGMT_CONTEXT} - If you store your license keys in a Kubernetes secret, you can pass the secret YAML file in the
--secrets-fileflag instead.meshctl license check --secrets-file license-keys.yaml --context ${MGMT_CONTEXT}
Example output:
INFO License key gloo-mesh-license-key for product gloo-mesh is valid. Expires at 08 Oct 24 12:31 CEST SUCCESS Licenses are valid- To pass in a license key directly, encode the key in base64 and pass it in the