1.4.0+ Upgrade Notice

Upgrade Prereqs

Install:

Without glooctl 1.2.5+, glooctl proxy url will output the version mismatch warning on stdout during upgrade, and our curl and hey commands will fail. Without glooctl 1.3.0+, the --version flag will not exist.

Example: Test a Zero-Downtime helm upgrade

You can skip straight to the upgrade steps here.

Setup

Install gloo:

glooctl install gateway --version 1.3.0

Add an upstream:

apiVersion: gloo.solo.io/v1
kind: Upstream
metadata:
  name: json-upstream
  namespace: gloo-system
spec:
  static:
    hosts:
      - addr: jsonplaceholder.typicode.com
        port: 80

And make it routable:

apiVersion: gateway.solo.io/v1
kind: VirtualService
metadata:
  name: test-prefix
  namespace: gloo-system
spec:
  virtualHost:
    routes:
      - matchers:
         - prefix: /posts
        routeAction:
          single:
            upstream:
              name: json-upstream
              namespace: gloo-system
        options:
          autoHostRewrite: true

Wait until the following returns:

curl $(glooctl proxy url)/posts
  ... # omitted for brevity
  {
    "userId": 10,
    "id": 100,
    "title": "at nam consequatur ea labore ea harum",
    "body": "cupiditate quo est a modi nesciunt soluta\nipsa voluptas error itaque dicta in\nautem qui minus magnam et distinctio eum\naccusamus ratione error aut"
  }
]

Upgrading

Now Gloo is installed and ready for upgrade.

Upgrade to Open-Source
Click for Open-Source upgrade instruction

If you are upgrading from a version prior to 1.4.0, if you are running the proxy on the hostNetwork and using a port lower than 1024, you will now need to explicitly enable the addition of the NET_BIND capability. This can be configured as helm value, similar to:

gatewayProxies:
  gatewayProxy:
    podTemplate:
      disableNetBind: false

Upgrade to open-source Gloo 1.4.x (helm 2 or helm 3):


helm upgrade gloo gloo/gloo --namespace gloo-system --version 1.4.11 \
    --set gatewayProxies.gatewayProxy.podTemplate.probes=true

hey -n 6000 -c 10 -q 10 $(glooctl proxy url)/posts & helm upgrade gloo gloo/gloo --namespace gloo-system --version 1.4.11 \
    --set gatewayProxies.gatewayProxy.podTemplate.probes=true

Upgrade to Gloo Enterprise
Click for Gloo Enterprise upgrade instructions

If upgrading from any version of Gloo Enterprise prior to 1.4.0 to Gloo Enterprise 1.4.0 or later, you must delete the apiserver-ui service to avoid more breaking changes:

kubectl delete service -n gloo-system apiserver-ui

Also relevant if you are upgrading from a version prior to 1.4.0, if you are running the proxy on the hostNetwork and using a port lower than 1024, you will now need to explicitly enable the addition of the NET_BIND capability. This can be configured as helm value, similar to:

gloo:
  gatewayProxies:
    gatewayProxy:
      podTemplate:
        disableNetBind: false

Upgrade to Gloo Enterprise 1.4.0 (helm 2 or helm 3):

The --set grafana.persistence.storageClassName=<currently installed pvc storage class> is only required if upgrading from Gloo Enterprise 1.3.0-beta6 or lower and grafana is enabled (the default). In most installations the storage class will be standard, but gp2 is common for EKS and it’s worth confirming the deployed storage class before attempting installation with kubectl get pvc -n gloo-system.


helm upgrade gloo glooe/gloo-ee --namespace gloo-system --version=1.4.0 \
    --set license_key=$LICENSE_KEY \
    --set gloo.gatewayProxies.gatewayProxy.podTemplate.probes=true \
    --set grafana.persistence.storageClassName=standard # if required, storage class must match the PVC that's already deployed

hey -n 6000 -c 10 -q 10 $(glooctl proxy url)/posts & helm upgrade gloo glooe/gloo-ee --namespace gloo-system --version=1.4.0 \
    --set license_key=$LICENSE_KEY \
    --set gloo.gatewayProxies.gatewayProxy.podTemplate.probes=true \
    --set grafana.persistence.storageClassName=standard # if required, storage class must match the PVC that's already deployed

If your initial version was Gloo Enterprise 1.3.0-beta6 or lower, you will always need to provide the grafana.persistence.storageClassName value going forward for upgrades, so add that to your helm values.

Wait for the request distribution at the end to confirm that requests weren’t dropped. You should see a response similar to the following (note that all requests get http 200):

[1] 20563
Release "gloo" has been upgraded. Happy Helming!
NAME: gloo
LAST DEPLOYED: Tue Mar 31 09:02:16 2020
NAMESPACE: gloo-system
STATUS: deployed
REVISION: 6
TEST SUITE: None
➜  gloo git:(doc_upgrade) (⎈ minikube:default)
Summary:
  Total:	17.8115 secs
  Slowest:	1.0715 secs
  Fastest:	0.0179 secs
  Average:	0.1624 secs
  Requests/sec:	280.7173


Response time histogram:
  0.018 [1]	|
  0.123 [1892]	|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  0.229 [2411]	|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  0.334 [493]	|■■■■■■■■
  0.439 [121]	|■■
  0.545 [31]	|■
  0.650 [2]	|
  0.755 [12]	|
  0.861 [2]	|
  0.966 [8]	|
  1.072 [27]	|


Latency distribution:
  10% in 0.0730 secs
  25% in 0.1033 secs
  50% in 0.1438 secs
  75% in 0.1958 secs
  90% in 0.2452 secs
  95% in 0.3176 secs
  99% in 0.6126 secs

Details (average, fastest, slowest):
  DNS+dialup:	0.0000 secs, 0.0179 secs, 1.0715 secs
  DNS-lookup:	0.0000 secs, 0.0000 secs, 0.0000 secs
  req write:	0.0000 secs, 0.0000 secs, 0.0005 secs
  resp wait:	0.1587 secs, 0.0167 secs, 1.0713 secs
  resp read:	0.0036 secs, 0.0002 secs, 0.2522 secs

Status code distribution:
  [200]	5000 responses




[1]  + 20563 done       hey -n 5000 $(glooctl proxy url)/posts

Run glooctl check to ensure everything is healthy:

glooctl check