Upgrade
Upgrade the control plane and any gateway proxies that run in your cluster.
Prepare to upgrade
Before you upgrade Solo Enterprise for kgateway, review the following information.
Review the kgateway release notes for any breaking changes or new features that you need to be aware of.
Review the Solo Enterprise for kgateway release notes for any breaking changes or new features that you need to be aware of.
Note that in version 2.1.0,Gloowas removed from all resources, Helm charts, pod names, and more to align with Solo.io's branding. Because of that, you must migrate all your existing configuration to the new CRD and update CI/CD pipelines. For a mapping of the changes that are included in this release, see the release notes.Check the supported version compatibility matrix. If the version of Solo Enterprise for kgateway that you are upgrading to requires a different version of Kubernetes, the Kubernetes Gateway API, or Istio, upgrade those technologies accordingly.
Decide on the Kubernetes Gateway API version that you want to use.
- For help, review the Upgrade Notes in the Kubernetes Gateway API docs for each version.
- Check if you might need to install the experimental channel for the features that you want to use.
Install the custom resources of the Kubernetes Gateway API version that you want to upgrade to, such as the standard 1.4.0 version.
Standard channel:
kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.4.0/standard-install.yamlExperimental channel: Note that some CRDs are prefixed with
Xto indicate that the entire CRD is experimental and subject to change.kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.4.0/experimental-install.yaml
Example output:
customresourcedefinition.apiextensions.k8s.io/gatewayclasses.gateway.networking.k8s.io created customresourcedefinition.apiextensions.k8s.io/gateways.gateway.networking.k8s.io created customresourcedefinition.apiextensions.k8s.io/httproutes.gateway.networking.k8s.io created customresourcedefinition.apiextensions.k8s.io/referencegrants.gateway.networking.k8s.io created customresourcedefinition.apiextensions.k8s.io/grpcroutes.gateway.networking.k8s.io createdCheck the Kubernetes Gateway API CRDs. Remove any outdated CRDs.
kubectl get crds -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.spec.versions[*].name}{"\t"}{.metadata.annotations.gateway\.networking\.k8s\.io/bundle-version}{"\t"}{.metadata.annotations.gateway\.networking\.k8s\.io/channel}{"\n"}{end}' | grep gateway.networking.k8s.ioExample output:
gatewayclasses.gateway.networking.k8s.io v1 v1beta1 v1.2.0 experimental gateways.gateway.networking.k8s.io v1 v1beta1 v1.2.0 experimental grpcroutes.gateway.networking.k8s.io v1 v1.2.0 experimental httproutes.gateway.networking.k8s.io v1 v1beta1 v1.2.0 experimental
For Kubernetes upgrades, consult your cloud infrastructure provider.
For Istio upgrades, consult the docs based on the way that you installed Istio. Example providers:
Upgrade
Set the version you want to upgrade to in an environment variable, such as the latest patch version (
2.1.5) .export NEW_VERSION=2.1.5Apply the new CRDs for the control and data plane by using Helm.
Optional: To check the CRDs locally, download the CRDs to a
helmdirectory.helm template --version $NEW_VERSION enterprise-kgateway-crds oci://us-docker.pkg.dev/solo-public/enterprise-kgateway/charts/enterprise-kgateway-crds --output-dir ./helmUpgrade the CRDs in your cluster:
helm upgrade -i --namespace kgateway-system --version $NEW_VERSION enterprise-kgateway-crds oci://us-docker.pkg.dev/solo-public/enterprise-kgateway/charts/enterprise-kgateway-crds
Make any changes to your Helm values.
Get the Helm values file for your current version.
helm get values enterprise-kgateway -n kgateway-system -o yaml > values.yaml open values.yamlCompare your current Helm chart values with the version that you want to upgrade to.
Show all values:
helm show values oci://us-docker.pkg.dev/solo-public/enterprise-kgateway/charts/enterprise-kgateway --version $NEW_VERSIONGet a file with all values: You can get a
enterprise-kgateway/values.yamlfile for the upgrade version by pulling and inspecting the Helm chart locally.helm pull oci://us-docker.pkg.dev/solo-public/enterprise-kgateway/charts/enterprise-kgateway --version $NEW_VERSION tar -xvf enterprise-kgateway-$NEW_VERSION.tgz open enterprise-kgateway/values.yaml
Make any changes that you want by editing your
values.yamlHelm values file or preparing the--setflags. For development v2.2.0-main builds, include thecontroller.image.pullPolicy=Alwayssetting or refer to the exact image digest to avoid using cached images.
Upgrade the Solo Enterprise for kgateway control plane Helm installation.
- Make sure to include your Helm values when you upgrade either as a configuration file or with
--setflags. Otherwise, any previous custom values that you set might be overwritten. - When using the development build 2.2.0-main, add the
--set controller.image.pullPolicy=Alwaysoption to ensure you get the latest image. Alternatively, you can specify the exact image digest. - To use experimental Gateway API features, include the experimental feature gate,
--set controller.extraEnv.KGW_ENABLE_GATEWAY_API_EXPERIMENTAL_FEATURES=true.
helm upgrade -i -n kgateway-system enterprise-kgateway oci://us-docker.pkg.dev/solo-public/enterprise-kgateway/charts/enterprise-kgateway \ -f values.yaml \ --version $NEW_VERSION- Make sure to include your Helm values when you upgrade either as a configuration file or with
Verify that the control plane runs the upgraded version.
kubectl -n kgateway-system get pod -l app.kubernetes.io/name=enterprise-kgateway -o jsonpath='{.items[0].spec.containers[0].image}'Example output:
us-docker.pkg.dev/solo-public/enterprise-kgateway/enterprise-kgatewayy-controller:2.1.0Confirm that the control plane is up and running.
kubectl get pods -n kgateway-system