From d5b88f5ecc58d20350740d1df57d740871bbadba Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 5 Jun 2024 16:56:36 +0000 Subject: [PATCH 01/14] Bump goreleaser/goreleaser-action from 5.1.0 to 6.0.0 (#2095) * Bump goreleaser/goreleaser-action from 5.1.0 to 6.0.0 Bumps [goreleaser/goreleaser-action](https://github.com/goreleaser/goreleaser-action) from 5.1.0 to 6.0.0. - [Release notes](https://github.com/goreleaser/goreleaser-action/releases) - [Commits](https://github.com/goreleaser/goreleaser-action/compare/5742e2a039330cbb23ebf35f046f814d4c6ff811...286f3b13b1b49da4ac219696163fb8c1c93e1200) --- updated-dependencies: - dependency-name: goreleaser/goreleaser-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] * Update goreleaser config --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Luca Comellini --- .github/workflows/ci.yml | 2 +- .github/workflows/conformance.yml | 2 +- .github/workflows/functional.yml | 2 +- .goreleaser.yml | 3 ++- 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 297a2667d9..accef7c249 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -164,7 +164,7 @@ jobs: if: github.ref_type == 'tag' - name: Build binary - uses: goreleaser/goreleaser-action@5742e2a039330cbb23ebf35f046f814d4c6ff811 # v5.1.0 + uses: goreleaser/goreleaser-action@286f3b13b1b49da4ac219696163fb8c1c93e1200 # v6.0.0 with: version: latest args: ${{ github.ref_type == 'tag' && 'release' || 'build --snapshot' }} --clean diff --git a/.github/workflows/conformance.yml b/.github/workflows/conformance.yml index d6d3c1a3a3..b8398e7f71 100644 --- a/.github/workflows/conformance.yml +++ b/.github/workflows/conformance.yml @@ -77,7 +77,7 @@ jobs: working-directory: ./tests - name: Build binary - uses: goreleaser/goreleaser-action@5742e2a039330cbb23ebf35f046f814d4c6ff811 # v5.1.0 + uses: goreleaser/goreleaser-action@286f3b13b1b49da4ac219696163fb8c1c93e1200 # v6.0.0 with: version: latest args: build --snapshot --clean diff --git a/.github/workflows/functional.yml b/.github/workflows/functional.yml index dadd05e0f6..d24a1fc0e1 100644 --- a/.github/workflows/functional.yml +++ b/.github/workflows/functional.yml @@ -65,7 +65,7 @@ jobs: type=ref,event=branch,suffix=-rc,enable=${{ startsWith(github.ref, 'refs/heads/release') }} - name: Build binary - uses: goreleaser/goreleaser-action@5742e2a039330cbb23ebf35f046f814d4c6ff811 # v5.1.0 + uses: goreleaser/goreleaser-action@286f3b13b1b49da4ac219696163fb8c1c93e1200 # v6.0.0 with: version: latest args: build --snapshot --clean diff --git a/.goreleaser.yml b/.goreleaser.yml index 96ae8af317..395385aa6c 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -1,3 +1,4 @@ +version: 2 env: - CGO_ENABLED=0 @@ -26,7 +27,7 @@ builds: binary: gateway changelog: - skip: true + disable: true archives: - id: gateway From 521760b5f271b8b9b26dbb47c03eb72cf40249f8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 5 Jun 2024 17:15:43 +0000 Subject: [PATCH 02/14] Bump prettier from 3.3.0 to 3.3.1 in /internal/mode/static/nginx/modules (#2094) * Bump prettier from 3.3.0 to 3.3.1 in /internal/mode/static/nginx/modules Bumps [prettier](https://github.com/prettier/prettier) from 3.3.0 to 3.3.1. - [Release notes](https://github.com/prettier/prettier/releases) - [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md) - [Commits](https://github.com/prettier/prettier/compare/3.3.0...3.3.1) --- updated-dependencies: - dependency-name: prettier dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] * Update pre-commit --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Luca Comellini --- .pre-commit-config.yaml | 2 +- internal/mode/static/nginx/modules/package-lock.json | 8 ++++---- internal/mode/static/nginx/modules/package.json | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 40d1b31400..1872663eb0 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -33,7 +33,7 @@ repos: hooks: - id: prettier additional_dependencies: - - prettier@3.3.0 # https://github.com/pre-commit/pre-commit/issues/3133 + - prettier@3.3.1 # https://github.com/pre-commit/pre-commit/issues/3133 types: - javascript diff --git a/internal/mode/static/nginx/modules/package-lock.json b/internal/mode/static/nginx/modules/package-lock.json index 17abfea953..d1d4ae55a9 100644 --- a/internal/mode/static/nginx/modules/package-lock.json +++ b/internal/mode/static/nginx/modules/package-lock.json @@ -10,7 +10,7 @@ }, "devDependencies": { "@vitest/coverage-v8": "^1.6.0", - "prettier": "3.3.0", + "prettier": "3.3.1", "vitest": "^1.5.3" } }, @@ -1527,9 +1527,9 @@ } }, "node_modules/prettier": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.0.tgz", - "integrity": "sha512-J9odKxERhCQ10OC2yb93583f6UnYutOeiV5i0zEDS7UGTdUt0u+y8erxl3lBKvwo/JHyyoEdXjwp4dke9oyZ/g==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.1.tgz", + "integrity": "sha512-7CAwy5dRsxs8PHXT3twixW9/OEll8MLE0VRPCJyl7CkS6VHGPSlsVaWTiASPTyGyYRyApxlaWTzwUxVNrhcwDg==", "dev": true, "bin": { "prettier": "bin/prettier.cjs" diff --git a/internal/mode/static/nginx/modules/package.json b/internal/mode/static/nginx/modules/package.json index b777ee5514..e9c0b79a72 100644 --- a/internal/mode/static/nginx/modules/package.json +++ b/internal/mode/static/nginx/modules/package.json @@ -11,7 +11,7 @@ }, "devDependencies": { "@vitest/coverage-v8": "^1.6.0", - "prettier": "3.3.0", + "prettier": "3.3.1", "vitest": "^1.5.3" }, "type": "module" From 3674d4a7e091901723a43d999137350184343e1a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 5 Jun 2024 20:25:00 +0000 Subject: [PATCH 03/14] Bump actions/dependency-review-action from 4.3.2 to 4.3.3 (#2098) Bumps [actions/dependency-review-action](https://github.com/actions/dependency-review-action) from 4.3.2 to 4.3.3. - [Release notes](https://github.com/actions/dependency-review-action/releases) - [Commits](https://github.com/actions/dependency-review-action/compare/0c155c5e8556a497adf53f2c18edabf945ed8e70...72eb03d02c7872a771aacd928f3123ac62ad6d3a) --- updated-dependencies: - dependency-name: actions/dependency-review-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/dependency-review.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dependency-review.yml b/.github/workflows/dependency-review.yml index 726388e124..cbcf8a3ffd 100644 --- a/.github/workflows/dependency-review.yml +++ b/.github/workflows/dependency-review.yml @@ -15,6 +15,6 @@ jobs: uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6 - name: "Dependency Review" - uses: actions/dependency-review-action@0c155c5e8556a497adf53f2c18edabf945ed8e70 # v4.3.2 + uses: actions/dependency-review-action@72eb03d02c7872a771aacd928f3123ac62ad6d3a # v4.3.3 with: config-file: "nginxinc/k8s-common/dependency-review-config.yml@main" From e0c12757780d973a60ac899d2c847cc964fa9024 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 5 Jun 2024 14:58:44 -0600 Subject: [PATCH 04/14] Bump sigs.k8s.io/controller-runtime from 0.18.3 to 0.18.4 (#2099) * Bump sigs.k8s.io/controller-runtime from 0.18.3 to 0.18.4 Bumps [sigs.k8s.io/controller-runtime](https://github.com/kubernetes-sigs/controller-runtime) from 0.18.3 to 0.18.4. - [Release notes](https://github.com/kubernetes-sigs/controller-runtime/releases) - [Changelog](https://github.com/kubernetes-sigs/controller-runtime/blob/main/RELEASE.md) - [Commits](https://github.com/kubernetes-sigs/controller-runtime/compare/v0.18.3...v0.18.4) --- updated-dependencies: - dependency-name: sigs.k8s.io/controller-runtime dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] * Update tests deps --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Luca Comellini --- go.mod | 2 +- go.sum | 4 ++-- tests/go.mod | 2 +- tests/go.sum | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/go.mod b/go.mod index 28f4bb1198..7c685cfcfc 100644 --- a/go.mod +++ b/go.mod @@ -23,7 +23,7 @@ require ( k8s.io/apiextensions-apiserver v0.30.1 k8s.io/apimachinery v0.30.1 k8s.io/client-go v0.30.1 - sigs.k8s.io/controller-runtime v0.18.3 + sigs.k8s.io/controller-runtime v0.18.4 sigs.k8s.io/controller-tools v0.15.0 sigs.k8s.io/gateway-api v1.1.0 ) diff --git a/go.sum b/go.sum index d004c3550e..46185ed051 100644 --- a/go.sum +++ b/go.sum @@ -239,8 +239,8 @@ k8s.io/kube-openapi v0.0.0-20240423202451-8948a665c108 h1:Q8Z7VlGhcJgBHJHYugJ/K/ k8s.io/kube-openapi v0.0.0-20240423202451-8948a665c108/go.mod h1:yD4MZYeKMBwQKVht279WycxKyM84kkAx2DPrTXaeb98= k8s.io/utils v0.0.0-20240423183400-0849a56e8f22 h1:ao5hUqGhsqdm+bYbjH/pRkCs0unBGe9UyDahzs9zQzQ= k8s.io/utils v0.0.0-20240423183400-0849a56e8f22/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= -sigs.k8s.io/controller-runtime v0.18.3 h1:B5Wmmo8WMWK7izei+2LlXLVDGzMwAHBNLX68lwtlSR4= -sigs.k8s.io/controller-runtime v0.18.3/go.mod h1:TVoGrfdpbA9VRFaRnKgk9P5/atA0pMwq+f+msb9M8Sg= +sigs.k8s.io/controller-runtime v0.18.4 h1:87+guW1zhvuPLh1PHybKdYFLU0YJp4FhJRmiHvm5BZw= +sigs.k8s.io/controller-runtime v0.18.4/go.mod h1:TVoGrfdpbA9VRFaRnKgk9P5/atA0pMwq+f+msb9M8Sg= sigs.k8s.io/controller-tools v0.15.0 h1:4dxdABXGDhIa68Fiwaif0vcu32xfwmgQ+w8p+5CxoAI= sigs.k8s.io/controller-tools v0.15.0/go.mod h1:8zUSS2T8Hx0APCNRhJWbS3CAQEbIxLa07khzh7pZmXM= sigs.k8s.io/gateway-api v1.1.0 h1:DsLDXCi6jR+Xz8/xd0Z1PYl2Pn0TyaFMOPPZIj4inDM= diff --git a/tests/go.mod b/tests/go.mod index 340732c06d..de2d94554c 100644 --- a/tests/go.mod +++ b/tests/go.mod @@ -13,7 +13,7 @@ require ( k8s.io/apiextensions-apiserver v0.30.1 k8s.io/apimachinery v0.30.1 k8s.io/client-go v0.30.1 - sigs.k8s.io/controller-runtime v0.18.3 + sigs.k8s.io/controller-runtime v0.18.4 sigs.k8s.io/gateway-api v1.1.0 sigs.k8s.io/yaml v1.4.0 ) diff --git a/tests/go.sum b/tests/go.sum index e0d2d41333..c20eb05948 100644 --- a/tests/go.sum +++ b/tests/go.sum @@ -208,8 +208,8 @@ k8s.io/utils v0.0.0-20240423183400-0849a56e8f22 h1:ao5hUqGhsqdm+bYbjH/pRkCs0unBG k8s.io/utils v0.0.0-20240423183400-0849a56e8f22/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= pgregory.net/rapid v1.1.0 h1:CMa0sjHSru3puNx+J0MIAuiiEV4N0qj8/cMWGBBCsjw= pgregory.net/rapid v1.1.0/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= -sigs.k8s.io/controller-runtime v0.18.3 h1:B5Wmmo8WMWK7izei+2LlXLVDGzMwAHBNLX68lwtlSR4= -sigs.k8s.io/controller-runtime v0.18.3/go.mod h1:TVoGrfdpbA9VRFaRnKgk9P5/atA0pMwq+f+msb9M8Sg= +sigs.k8s.io/controller-runtime v0.18.4 h1:87+guW1zhvuPLh1PHybKdYFLU0YJp4FhJRmiHvm5BZw= +sigs.k8s.io/controller-runtime v0.18.4/go.mod h1:TVoGrfdpbA9VRFaRnKgk9P5/atA0pMwq+f+msb9M8Sg= sigs.k8s.io/gateway-api v1.1.0 h1:DsLDXCi6jR+Xz8/xd0Z1PYl2Pn0TyaFMOPPZIj4inDM= sigs.k8s.io/gateway-api v1.1.0/go.mod h1:ZH4lHrL2sDi0FHZ9jjneb8kKnGzFWyrTya35sWUTrRs= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= From 23f75a4c9d30d986d6187be1d4f8f64a763e789e Mon Sep 17 00:00:00 2001 From: Saylor Berman Date: Wed, 5 Jun 2024 15:14:14 -0600 Subject: [PATCH 05/14] Fix GRPCRoute check in tests (#2100) Problem: When running the upgrade tests, the grpcroute check fails because they don't exist in the previous version of the API. Solution: Check that grpcroutes even exist first, don't return an error if they don't. --- tests/framework/resourcemanager.go | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tests/framework/resourcemanager.go b/tests/framework/resourcemanager.go index c7c231c69b..caae52e855 100644 --- a/tests/framework/resourcemanager.go +++ b/tests/framework/resourcemanager.go @@ -398,6 +398,13 @@ func (rm *ResourceManager) waitForHTTPRoutesToBeReady(ctx context.Context, names } func (rm *ResourceManager) waitForGRPCRoutesToBeReady(ctx context.Context, namespace string) error { + // First, check if grpcroute even exists for v1. If not, ignore. + var routeList v1.GRPCRouteList + err := rm.K8sClient.List(ctx, &routeList, client.InNamespace(namespace)) + if err != nil && strings.Contains(err.Error(), "no matches for kind") { + return nil + } + return wait.PollUntilContextCancel( ctx, 500*time.Millisecond, From c5f8dbe112ca1be261f73b9f5b4925cda3d5860a Mon Sep 17 00:00:00 2001 From: Saylor Berman Date: Wed, 5 Jun 2024 15:32:24 -0600 Subject: [PATCH 06/14] Add retries to tracing tests (#2101) Problem: The tracing tests are still flaky as to whether or not the traces properly show up. The issues isn't really know right now. Solution: Add retries to the test in an attempt to remediate the intermittent issue. --- tests/suite/tracing_test.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tests/suite/tracing_test.go b/tests/suite/tracing_test.go index 0e2168f140..dfe23d487e 100644 --- a/tests/suite/tracing_test.go +++ b/tests/suite/tracing_test.go @@ -23,7 +23,10 @@ import ( "github.com/nginxinc/nginx-gateway-fabric/tests/framework" ) -var _ = Describe("Tracing", Label("functional", "tracing"), func() { +// This test can be flaky when waiting to see traces show up in the collector logs. +// Sometimes they get there right away, sometimes it takes 30 seconds. Retries were +// added to attempt to mitigate the issue, but it didn't fix it 100% +var _ = Describe("Tracing", FlakeAttempts(2), Label("functional", "tracing"), func() { var ( files = []string{ "hello-world/apps.yaml", From 9e55882977ba17b7385652c7f063bd6ed99c42bf Mon Sep 17 00:00:00 2001 From: Luca Comellini Date: Thu, 6 Jun 2024 07:26:36 -0700 Subject: [PATCH 07/14] Use helm-docs to automatically generate Helm docs (#2058) Problem: It's hard to keep the README up-to-date and it's a manual process Solution: Use norwoodj/helm-docs to automatically generate the docs from the values.yaml file --- .github/workflows/ci.yml | 3 + Makefile | 4 + charts/nginx-gateway-fabric/.helmignore | 1 + charts/nginx-gateway-fabric/README.md | 121 +++++---- charts/nginx-gateway-fabric/README.md.gotmpl | 257 ++++++++++++++++++ charts/nginx-gateway-fabric/_templates.gotmpl | 30 ++ charts/nginx-gateway-fabric/values.yaml | 132 ++++----- 7 files changed, 430 insertions(+), 118 deletions(-) create mode 100644 charts/nginx-gateway-fabric/README.md.gotmpl create mode 100644 charts/nginx-gateway-fabric/_templates.gotmpl diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index accef7c249..3775f9bce5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -75,6 +75,9 @@ jobs: - name: Check if generated manifests are up to date run: make generate-manifests && git diff --exit-code + - name: Check if helm docs are up to date + run: make helm-docs && git diff --exit-code + unit-tests: name: Unit Tests runs-on: ubuntu-22.04 diff --git a/Makefile b/Makefile index 047dd875db..fdb17fd17e 100644 --- a/Makefile +++ b/Makefile @@ -199,6 +199,10 @@ njs-unit-test: ## Run unit tests for the njs httpmatches module lint-helm: ## Run the helm chart linter docker run --pull always --rm -v $(CURDIR):/nginx-gateway-fabric -w /nginx-gateway-fabric quay.io/helmpack/chart-testing:latest ct lint --config .ct.yaml +.PHONY: helm-docs +helm-docs: ## Generate the Helm chart documentation + docker run --pull always --rm -v $(CURDIR):/nginx-gateway-fabric -w /nginx-gateway-fabric jnorwood/helm-docs:latest --chart-search-root=charts --template-files _templates.gotmpl --template-files README.md.gotmpl + .PHONY: load-images load-images: ## Load NGF and NGINX images on configured kind cluster. kind load docker-image $(PREFIX):$(TAG) $(NGINX_PREFIX):$(TAG) diff --git a/charts/nginx-gateway-fabric/.helmignore b/charts/nginx-gateway-fabric/.helmignore index c1347c2c27..8612fd290e 100644 --- a/charts/nginx-gateway-fabric/.helmignore +++ b/charts/nginx-gateway-fabric/.helmignore @@ -1,2 +1,3 @@ # Patterns to ignore when building packages. *.png +*.gotmpl diff --git a/charts/nginx-gateway-fabric/README.md b/charts/nginx-gateway-fabric/README.md index 45efa1ff67..fca37162ca 100644 --- a/charts/nginx-gateway-fabric/README.md +++ b/charts/nginx-gateway-fabric/README.md @@ -1,9 +1,13 @@ + # NGINX Gateway Fabric Helm Chart +![Version: 1.2.0](https://img.shields.io/badge/Version-1.2.0-informational?style=flat-square) ![AppVersion: edge](https://img.shields.io/badge/AppVersion-edge-informational?style=flat-square) + - [NGINX Gateway Fabric Helm Chart](#nginx-gateway-fabric-helm-chart) - [Introduction](#introduction) - [Prerequisites](#prerequisites) - [Installing the Gateway API resources](#installing-the-gateway-api-resources) + - [Requirements](#requirements) - [Installing the Chart](#installing-the-chart) - [Installing the Chart from the OCI Registry](#installing-the-chart-from-the-oci-registry) - [Installing the Chart via Sources](#installing-the-chart-via-sources) @@ -32,7 +36,7 @@ This chart deploys the NGINX Gateway Fabric in your Kubernetes cluster. ### Installing the Gateway API resources -> **Note** +> [!NOTE] > > The [Gateway API resources](https://github.com/kubernetes-sigs/gateway-api) from the standard channel must be > installed before deploying NGINX Gateway Fabric. If they are already installed in your cluster, please ensure @@ -43,6 +47,10 @@ This chart deploys the NGINX Gateway Fabric in your Kubernetes cluster. kubectl kustomize https://github.com/nginxinc/nginx-gateway-fabric/config/crd/gateway-api/standard | kubectl apply -f - ``` +## Requirements + +Kubernetes: `>= 1.25.0-0` + ## Installing the Chart ### Installing the Chart from the OCI Registry @@ -115,7 +123,7 @@ helm install ngf oci://ghcr.io/nginxinc/charts/nginx-gateway-fabric --create-nam ## Upgrading the Chart -> **Note** +> [!NOTE] > > See [below](#configure-delayed-termination-for-zero-downtime-upgrades) for instructions on how to configure delayed > termination if required for zero downtime upgrades in your environment. @@ -171,7 +179,7 @@ helm upgrade ngf . -n nginx-gateway To achieve zero downtime upgrades (meaning clients will not see any interruption in traffic while a rolling upgrade is being performed on NGF), you may need to configure delayed termination on the NGF Pod, depending on your environment. -> **Note** +> [!NOTE] > > When proxying Websocket or any long-lived connections, NGINX will not terminate until that connection is closed > by either the client or the backend. This means that unless all those connections are closed by clients/backends @@ -210,7 +218,7 @@ being performed on NGF), you may need to configure delayed termination on the NG terminationGracePeriodSeconds: 50 ``` -> **Note** +> [!NOTE] > > More information on container lifecycle hooks can be found > [here](https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks) and a detailed @@ -243,53 +251,58 @@ kubectl kustomize https://github.com/nginxinc/nginx-gateway-fabric/config/crd/ga ## Configuration -The following tables lists the configurable parameters of the NGINX Gateway Fabric chart and their default values. - -| Parameter | Description | Default Value | -| ------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | -| `nginxGateway.image.repository` | The repository for the NGINX Gateway Fabric image. | ghcr.io/nginxinc/nginx-gateway-fabric | -| `nginxGateway.image.tag` | The tag for the NGINX Gateway Fabric image. | edge | -| `nginxGateway.image.pullPolicy` | The `imagePullPolicy` for the NGINX Gateway Fabric image. | Always | -| `nginxGateway.lifecycle` | The `lifecycle` of the nginx-gateway container. | {} | -| `nginxGateway.extraVolumeMounts` | Extra `volumeMounts` for the nginxGateway container. | {} | -| `nginxGateway.gatewayClassName` | The name of the GatewayClass for the NGINX Gateway Fabric deployment. | nginx | -| `nginxGateway.gatewayClassAnnotations` | Set of custom annotations for GatewayClass objects. | {} | -| `nginxGateway.gatewayControllerName` | The name of the Gateway controller. The controller name must be of the form: DOMAIN/PATH. The controller's domain is gateway.nginx.org. | gateway.nginx.org/nginx-gateway-controller | -| `nginxGateway.kind` | The kind of the NGINX Gateway Fabric installation - currently, only Deployment is supported. | deployment | -| `nginxGateway.config` | The dynamic configuration for the control plane that is contained in the NginxGateway resource | [See nginxGateway.config section](values.yaml) | -| `nginxGateway.configAnnotations` | Set of custom annotations for NginxGateway objects. | {} | -| `nginxGateway.readinessProbe.enable` | Enable the /readyz endpoint on the control plane. | true | -| `nginxGateway.readinessProbe.port` | Port in which the readiness endpoint is exposed. | 8081 | -| `nginxGateway.readinessProbe.initialDelaySeconds` | The number of seconds after the Pod has started before the readiness probes are initiated. | 3 | -| `nginxGateway.replicaCount` | The number of replicas of the NGINX Gateway Fabric Deployment. | 1 | -| `nginxGateway.leaderElection.enable` | Enable leader election. Leader election is used to avoid multiple replicas of the NGINX Gateway Fabric reporting the status of the Gateway API resources. | true | -| `nginxGateway.leaderElection.lockName` | The name of the leader election lock. A Lease object with this name will be created in the same Namespace as the controller. | Autogenerated | -| `nginxGateway.securityContext.allowPrivilegeEscalation` | Some environments may need this set to true in order for the control plane to successfully reload NGINX. | false | -| `nginxGateway.productTelemetry.enable` | Enable the collection of product telemetry. | true | -| `nginxGateway.gwAPIExperimentalFeatures.enable` | Enable the experimental features of Gateway API which are supported by NGINX Gateway Fabric. Requires the Gateway APIs installed from the experimental channel. | false | -| `nginx.image.repository` | The repository for the NGINX image. | ghcr.io/nginxinc/nginx-gateway-fabric/nginx | -| `nginx.image.tag` | The tag for the NGINX image. | edge | -| `nginx.image.pullPolicy` | The `imagePullPolicy` for the NGINX image. | Always | -| `nginx.plus` | Is NGINX Plus image being used | false | -| `nginx.config` | The configuration for the data plane that is contained in the NginxProxy resource. | [See nginx.config section](values.yaml) | -| `nginx.usage.secretName` | The namespace/name of the Secret containing the credentials for NGINX Plus usage reporting. | | -| `nginx.usage.serverURL` | The base server URL of the NGINX Plus usage reporting server. | | -| `nginx.usage.clusterName` | The display name of the Kubernetes cluster in the NGINX Plus usage reporting server. | | -| `nginx.usage.insecureSkipVerify` | Disable client verification of the NGINX Plus usage reporting server certificate. | false | -| `nginx.lifecycle` | The `lifecycle` of the nginx container. | {} | -| `nginx.extraVolumeMounts` | Extra `volumeMounts` for the nginx container. | {} | -| `terminationGracePeriodSeconds` | The termination grace period of the NGINX Gateway Fabric pod. | 30 | -| `tolerations` | The `tolerations` of the NGINX Gateway Fabric pod. | [] | -| `nodeSelector` | The `nodeSelector` of the NGINX Gateway Fabric pod. | {} | -| `affinity` | The `affinity` of the NGINX Gateway Fabric pod. | {} | -| `serviceAccount.annotations` | The `annotations` for the ServiceAccount used by the NGINX Gateway Fabric deployment. | {} | -| `serviceAccount.name` | Name of the ServiceAccount used by the NGINX Gateway Fabric deployment. | Autogenerated | -| `service.create` | Creates a service to expose the NGINX Gateway Fabric pods. | true | -| `service.type` | The type of service to create for the NGINX Gateway Fabric. | Loadbalancer | -| `service.externalTrafficPolicy` | The `externalTrafficPolicy` of the service. The value `Local` preserves the client source IP. | Local | -| `service.annotations` | The `annotations` of the NGINX Gateway Fabric service. | {} | -| `service.ports` | A list of ports to expose through the NGINX Gateway Fabric service. Update it to match the listener ports from your Gateway resource. Follows the conventional Kubernetes yaml syntax for service ports. | [ port: 80, targetPort: 80, protocol: TCP, name: http; port: 443, targetPort: 443, protocol: TCP, name: https ] | -| `metrics.disable` | Disable exposing metrics in the Prometheus format. | false | -| `metrics.port` | Set the port where the Prometheus metrics are exposed. Format: [1024 - 65535] | 9113 | -| `metrics.secure` | Enable serving metrics via https. By default metrics are served via http. Please note that this endpoint will be secured with a self-signed certificate. | false | -| `extraVolumes` | Extra `volumes` for the NGINX Gateway Fabric pod. | [] | +The following table lists the configurable parameters of the NGINX Gateway Fabric chart and their default values. + +| Key | Description | Type | Default | +|-----|-------------|------|---------| +| `affinity` | The affinity of the NGINX Gateway Fabric pod. | object | `{}` | +| `extraVolumes` | extraVolumes for the NGINX Gateway Fabric pod. Use in conjunction with nginxGateway.extraVolumeMounts and nginx.extraVolumeMounts to mount additional volumes to the containers. | list | `[]` | +| `metrics.enable` | Enable exposing metrics in the Prometheus format. | bool | `true` | +| `metrics.port` | Set the port where the Prometheus metrics are exposed. Format: [1024 - 65535] | int | `9113` | +| `metrics.secure` | Enable serving metrics via https. By default metrics are served via http. Please note that this endpoint will be secured with a self-signed certificate. | bool | `false` | +| `nginx.config` | The configuration for the data plane that is contained in the NginxProxy resource. | object | `{}` | +| `nginx.extraVolumeMounts` | extraVolumeMounts are the additional volume mounts for the nginx container. | list | `[]` | +| `nginx.image.pullPolicy` | | string | `"Always"` | +| `nginx.image.repository` | The NGINX image to use. | string | `"ghcr.io/nginxinc/nginx-gateway-fabric/nginx"` | +| `nginx.image.tag` | | string | `"edge"` | +| `nginx.lifecycle` | The lifecycle of the nginx container. | object | `{}` | +| `nginx.plus` | Is NGINX Plus image being used | bool | `false` | +| `nginx.usage.clusterName` | The display name of the Kubernetes cluster in the NGINX Plus usage reporting server. | string | `""` | +| `nginx.usage.insecureSkipVerify` | Disable client verification of the NGINX Plus usage reporting server certificate. | bool | `false` | +| `nginx.usage.secretName` | The namespace/name of the Secret containing the credentials for NGINX Plus usage reporting. | string | `""` | +| `nginx.usage.serverURL` | The base server URL of the NGINX Plus usage reporting server. | string | `""` | +| `nginxGateway.config.logging.level` | Log level. Supported values "info", "debug", "error". | string | `"info"` | +| `nginxGateway.configAnnotations` | Set of custom annotations for NginxGateway objects. | object | `{}` | +| `nginxGateway.extraVolumeMounts` | extraVolumeMounts are the additional volume mounts for the nginx-gateway container. | list | `[]` | +| `nginxGateway.gatewayClassAnnotations` | Set of custom annotations for GatewayClass objects. | object | `{}` | +| `nginxGateway.gatewayClassName` | The name of the GatewayClass that will be created as part of this release. Every NGINX Gateway Fabric must have a unique corresponding GatewayClass resource. NGINX Gateway Fabric only processes resources that belong to its class - i.e. have the "gatewayClassName" field resource equal to the class. | string | `"nginx"` | +| `nginxGateway.gatewayControllerName` | The name of the Gateway controller. The controller name must be of the form: DOMAIN/PATH. The controller's domain is gateway.nginx.org. | string | `"gateway.nginx.org/nginx-gateway-controller"` | +| `nginxGateway.gwAPIExperimentalFeatures.enable` | Enable the experimental features of Gateway API which are supported by NGINX Gateway Fabric. Requires the Gateway APIs installed from the experimental channel. | bool | `false` | +| `nginxGateway.image.pullPolicy` | | string | `"Always"` | +| `nginxGateway.image.repository` | The NGINX Gateway Fabric image to use | string | `"ghcr.io/nginxinc/nginx-gateway-fabric"` | +| `nginxGateway.image.tag` | | string | `"edge"` | +| `nginxGateway.kind` | The kind of the NGINX Gateway Fabric installation - currently, only deployment is supported. | string | `"deployment"` | +| `nginxGateway.leaderElection.enable` | Enable leader election. Leader election is used to avoid multiple replicas of the NGINX Gateway Fabric reporting the status of the Gateway API resources. If not enabled, all replicas of NGINX Gateway Fabric will update the statuses of the Gateway API resources. | bool | `true` | +| `nginxGateway.leaderElection.lockName` | The name of the leader election lock. A Lease object with this name will be created in the same Namespace as the controller. | string | Autogenerated if not set or set to "". | +| `nginxGateway.lifecycle` | The lifecycle of the nginx-gateway container. | object | `{}` | +| `nginxGateway.productTelemetry.enable` | Enable the collection of product telemetry. | bool | `true` | +| `nginxGateway.readinessProbe.enable` | Enable the /readyz endpoint on the control plane. | bool | `true` | +| `nginxGateway.readinessProbe.initialDelaySeconds` | The number of seconds after the Pod has started before the readiness probes are initiated. | int | `3` | +| `nginxGateway.readinessProbe.port` | Port in which the readiness endpoint is exposed. | int | `8081` | +| `nginxGateway.replicaCount` | The number of replicas of the NGINX Gateway Fabric Deployment. | int | `1` | +| `nginxGateway.securityContext.allowPrivilegeEscalation` | Some environments may need this set to true in order for the control plane to successfully reload NGINX. | bool | `false` | +| `nodeSelector` | The nodeSelector of the NGINX Gateway Fabric pod. | object | `{}` | +| `service.annotations` | The annotations of the NGINX Gateway Fabric service. | object | `{}` | +| `service.create` | Creates a service to expose the NGINX Gateway Fabric pods. | bool | `true` | +| `service.externalTrafficPolicy` | The externalTrafficPolicy of the service. The value Local preserves the client source IP. | string | `"Local"` | +| `service.ports` | A list of ports to expose through the NGINX Gateway Fabric service. Update it to match the listener ports from your Gateway resource. Follows the conventional Kubernetes yaml syntax for service ports. | list | `[{"name":"http","port":80,"protocol":"TCP","targetPort":80},{"name":"https","port":443,"protocol":"TCP","targetPort":443}]` | +| `service.type` | The type of service to create for the NGINX Gateway Fabric. | string | `"LoadBalancer"` | +| `serviceAccount.annotations` | | object | `{}` | +| `serviceAccount.imagePullSecret` | The name of the secret containing docker registry credentials. Secret must exist in the same namespace as the helm release. | string | `""` | +| `serviceAccount.imagePullSecrets` | A list of secret names containing docker registry credentials. Secrets must exist in the same namespace as the helm release. | list | `[]` | +| `serviceAccount.name` | The name of the service account of the NGINX Gateway Fabric pods. Used for RBAC. | string | Autogenerated if not set or set to "" | +| `terminationGracePeriodSeconds` | The termination grace period of the NGINX Gateway Fabric pod. | int | `30` | +| `tolerations` | Tolerations for the NGINX Gateway Fabric pod. | list | `[]` | + +---------------------------------------------- +Autogenerated from chart metadata using [helm-docs](https://github.com/norwoodj/helm-docs) diff --git a/charts/nginx-gateway-fabric/README.md.gotmpl b/charts/nginx-gateway-fabric/README.md.gotmpl new file mode 100644 index 0000000000..438fa67db6 --- /dev/null +++ b/charts/nginx-gateway-fabric/README.md.gotmpl @@ -0,0 +1,257 @@ +# NGINX Gateway Fabric Helm Chart + +{{ template "chart.versionBadge" . }}{{ template "chart.appVersionBadge" . }} + +- [NGINX Gateway Fabric Helm Chart](#nginx-gateway-fabric-helm-chart) + - [Introduction](#introduction) + - [Prerequisites](#prerequisites) + - [Installing the Gateway API resources](#installing-the-gateway-api-resources) + - [Requirements](#requirements) + - [Installing the Chart](#installing-the-chart) + - [Installing the Chart from the OCI Registry](#installing-the-chart-from-the-oci-registry) + - [Installing the Chart via Sources](#installing-the-chart-via-sources) + - [Pulling the Chart](#pulling-the-chart) + - [Installing the Chart](#installing-the-chart-1) + - [Custom installation options](#custom-installation-options) + - [Service type](#service-type) + - [Upgrading the Chart](#upgrading-the-chart) + - [Upgrading the Gateway Resources](#upgrading-the-gateway-resources) + - [Upgrading the CRDs](#upgrading-the-crds) + - [Upgrading the Chart from the OCI Registry](#upgrading-the-chart-from-the-oci-registry) + - [Upgrading the Chart from the Sources](#upgrading-the-chart-from-the-sources) + - [Configure Delayed Termination for Zero Downtime Upgrades](#configure-delayed-termination-for-zero-downtime-upgrades) + - [Uninstalling the Chart](#uninstalling-the-chart) + - [Uninstalling the Gateway Resources](#uninstalling-the-gateway-resources) + - [Configuration](#configuration) + + +## Introduction + +This chart deploys the NGINX Gateway Fabric in your Kubernetes cluster. + +## Prerequisites + +- [Helm 3.0+](https://helm.sh/docs/intro/install/) +- [kubectl](https://kubernetes.io/docs/tasks/tools/) + +### Installing the Gateway API resources + +> [!NOTE] +> +> The [Gateway API resources](https://github.com/kubernetes-sigs/gateway-api) from the standard channel must be +> installed before deploying NGINX Gateway Fabric. If they are already installed in your cluster, please ensure +> they are the correct version as supported by the NGINX Gateway Fabric - +> [see the Technical Specifications](https://github.com/nginxinc/nginx-gateway-fabric/blob/main/README.md#technical-specifications). + +```shell +kubectl kustomize https://github.com/nginxinc/nginx-gateway-fabric/config/crd/gateway-api/standard | kubectl apply -f - +``` + +{{ template "chart.requirementsSection" . }} + +## Installing the Chart + +### Installing the Chart from the OCI Registry + +To install the latest stable release of NGINX Gateway Fabric in the `nginx-gateway` namespace, run the following command: + +```shell +helm install ngf oci://ghcr.io/nginxinc/charts/nginx-gateway-fabric --create-namespace -n nginx-gateway +``` + +`ngf` is the name of the release, and can be changed to any name you want. This name is added as a prefix to the Deployment name. + +If the namespace already exists, you can omit the optional `--create-namespace` flag. If you want the latest version from the `main` branch, add `--version 0.0.0-edge` to your install command. + +To wait for the Deployment to be ready, you can either add the `--wait` flag to the `helm install` command, or run +the following after installing: + +```shell +kubectl wait --timeout=5m -n nginx-gateway deployment/ngf-nginx-gateway-fabric --for=condition=Available +``` + +### Installing the Chart via Sources + +#### Pulling the Chart + +```shell +helm pull oci://ghcr.io/nginxinc/charts/nginx-gateway-fabric --untar +cd nginx-gateway-fabric +``` + +This will pull the latest stable release. To pull the latest version from the `main` branch, specify the +`--version 0.0.0-edge` flag when pulling. + +#### Installing the Chart + +To install the chart into the `nginx-gateway` namespace, run the following command. + +```shell +helm install ngf . --create-namespace -n nginx-gateway +``` + +`ngf` is the name of the release, and can be changed to any name you want. This name is added as a prefix to the Deployment name. + +If the namespace already exists, you can omit the optional `--create-namespace` flag. + +To wait for the Deployment to be ready, you can either add the `--wait` flag to the `helm install` command, or run +the following after installing: + +```shell +kubectl wait --timeout=5m -n nginx-gateway deployment/ngf-nginx-gateway-fabric --for=condition=Available +``` + +### Custom installation options + +#### Service type + +By default, the NGINX Gateway Fabric helm chart deploys a LoadBalancer Service. + +To use a NodePort Service instead: + +```shell +helm install ngf oci://ghcr.io/nginxinc/charts/nginx-gateway-fabric --create-namespace -n nginx-gateway --set service.type=NodePort +``` + +To disable the creation of a Service: + +```shell +helm install ngf oci://ghcr.io/nginxinc/charts/nginx-gateway-fabric --create-namespace -n nginx-gateway --set service.create=false +``` + +## Upgrading the Chart + +> [!NOTE] +> +> See [below](#configure-delayed-termination-for-zero-downtime-upgrades) for instructions on how to configure delayed +> termination if required for zero downtime upgrades in your environment. + +### Upgrading the Gateway Resources + +Before you upgrade a release, ensure the Gateway API resources are the correct version as supported by the NGINX +Gateway Fabric - [see the Technical Specifications](../../README.md#technical-specifications).: + +To upgrade the Gateway CRDs from [the Gateway API repo](https://github.com/kubernetes-sigs/gateway-api), run: + +```shell +kubectl kustomize https://github.com/nginxinc/nginx-gateway-fabric/config/crd/gateway-api/standard | kubectl apply -f - +``` + +### Upgrading the CRDs + +Helm does not upgrade the NGINX Gateway Fabric CRDs during a release upgrade. Before you upgrade a release, you +must [pull the chart](#pulling-the-chart) from GitHub and run the following command to upgrade the CRDs: + +```shell +kubectl apply -f crds/ +``` + +The following warning is expected and can be ignored: + +```text +Warning: kubectl apply should be used on resource created by either kubectl create --save-config or kubectl apply. +``` + +### Upgrading the Chart from the OCI Registry + +To upgrade the release `ngf`, run: + +```shell +helm upgrade ngf oci://ghcr.io/nginxinc/charts/nginx-gateway-fabric -n nginx-gateway +``` + +This will upgrade to the latest stable release. To upgrade to the latest version from the `main` branch, specify +the `--version 0.0.0-edge` flag when upgrading. + +### Upgrading the Chart from the Sources + +Pull the chart sources as described in [Pulling the Chart](#pulling-the-chart), if not already present. Then, to upgrade +the release `ngf`, run: + +```shell +helm upgrade ngf . -n nginx-gateway +``` + +### Configure Delayed Termination for Zero Downtime Upgrades + +To achieve zero downtime upgrades (meaning clients will not see any interruption in traffic while a rolling upgrade is +being performed on NGF), you may need to configure delayed termination on the NGF Pod, depending on your environment. + +> [!NOTE] +> +> When proxying Websocket or any long-lived connections, NGINX will not terminate until that connection is closed +> by either the client or the backend. This means that unless all those connections are closed by clients/backends +> before or during an upgrade, NGINX will not terminate, which means Kubernetes will kill NGINX. As a result, the +> clients will see the connections abruptly closed and thus experience downtime. + +1. Add `lifecycle` to both the nginx and the nginx-gateway container definition. To do so, update your `values.yaml` + file to include the following (update the `sleep` values to what is required in your environment): + + ```yaml + nginxGateway: + <...> + lifecycle: + preStop: + exec: + command: + - /usr/bin/gateway + - sleep + - --duration=40s # This flag is optional, the default is 30s + + nginx: + <...> + lifecycle: + preStop: + exec: + command: + - /bin/sleep + - "40" + ``` + +2. Ensure the `terminationGracePeriodSeconds` matches or exceeds the `sleep` value from the `preStopHook` (the default + is 30). This is to ensure Kubernetes does not terminate the Pod before the `preStopHook` is complete. To do so, + update your `values.yaml` file to include the following (update the value to what is required in your environment): + + ```yaml + terminationGracePeriodSeconds: 50 + ``` + +> [!NOTE] +> +> More information on container lifecycle hooks can be found +> [here](https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks) and a detailed +> description of Pod termination behavior can be found in +> [Termination of Pods](https://kubernetes.io/docs/concepts/workloads/Pods/Pod-lifecycle/#Pod-termination). + +## Uninstalling the Chart + +To uninstall/delete the release `ngf`: + +```shell +helm uninstall ngf -n nginx-gateway +kubectl delete ns nginx-gateway +kubectl delete -f https://raw.githubusercontent.com/nginxinc/nginx-gateway-fabric/main/deploy/crds.yaml +``` + +These commands remove all the Kubernetes components associated with the release and deletes the release. + +### Uninstalling the Gateway Resources + +> **Warning: This command will delete all the corresponding custom resources in your cluster across all namespaces! +> Please ensure there are no custom resources that you want to keep and there are no other Gateway API implementations +> running in the cluster!** + +To delete the Gateway API CRDs from [the Gateway API repo](https://github.com/kubernetes-sigs/gateway-api), run: + +```shell +kubectl kustomize https://github.com/nginxinc/nginx-gateway-fabric/config/crd/gateway-api/standard | kubectl delete -f - +``` + +## Configuration + +The following table lists the configurable parameters of the NGINX Gateway Fabric chart and their default values. + +{{ template "chart.valuesTable" . }} + +---------------------------------------------- +Autogenerated from chart metadata using [helm-docs](https://github.com/norwoodj/helm-docs) diff --git a/charts/nginx-gateway-fabric/_templates.gotmpl b/charts/nginx-gateway-fabric/_templates.gotmpl new file mode 100644 index 0000000000..9b8101dfcf --- /dev/null +++ b/charts/nginx-gateway-fabric/_templates.gotmpl @@ -0,0 +1,30 @@ +{{ define "chart.valuesTable" }} +{{ if .Sections.Sections }} +{{ range .Sections.Sections }} + +### {{ .SectionName }} + +| Key | Description | Type | Default | +|-----|-------------|------|---------| + {{- range .SectionItems }} +| `{{ .Key }}` | {{ if .Description }}{{ .Description }}{{ else }}{{ .AutoDescription }}{{ end }} | {{ .Type }} | {{ if .Default }}{{ .Default }}{{ else }}{{ .AutoDefault }}{{ end }} | + {{- end }} +{{- end }} +{{ if .Sections.DefaultSection.SectionItems}} + +### {{ .Sections.DefaultSection.SectionName }} + +| Key | Description | Type | Default | +|-----|-------------|------|---------| + {{- range .Sections.DefaultSection.SectionItems }} +| `{{ .Key }}` | {{ if .Description }}{{ .Description }}{{ else }}{{ .AutoDescription }}{{ end }} | {{ .Type }} | {{ if .Default }}{{ .Default }}{{ else }}{{ .AutoDefault }}{{ end }} | + {{- end }} +{{ end }} +{{ else }} +| Key | Description | Type | Default | +|-----|-------------|------|---------| + {{- range .Values }} +| `{{ .Key }}` | {{ if .Description }}{{ .Description }}{{ else }}{{ .AutoDescription }}{{ end }} | {{ .Type }} | {{ if .Default }}{{ .Default }}{{ else }}{{ .AutoDefault }}{{ end }} | + {{- end }} +{{ end }} +{{ end }} diff --git a/charts/nginx-gateway-fabric/values.yaml b/charts/nginx-gateway-fabric/values.yaml index 10e0cdd04a..e0a4854bb8 100644 --- a/charts/nginx-gateway-fabric/values.yaml +++ b/charts/nginx-gateway-fabric/values.yaml @@ -1,84 +1,88 @@ nginxGateway: - ## The kind of the NGINX Gateway Fabric installation - currently, only deployment is supported. + # -- The kind of the NGINX Gateway Fabric installation - currently, only deployment is supported. kind: deployment - ## gatewayClassName is the name of the GatewayClass that will be created as part of this release. Every NGINX Gateway - ## Fabric must have a unique corresponding GatewayClass resource. NGINX Gateway Fabric only processes resources that - ## belong to its class - i.e. have the "gatewayClassName" field resource equal to the class. + + # -- The name of the GatewayClass that will be created as part of this release. Every NGINX Gateway + # Fabric must have a unique corresponding GatewayClass resource. NGINX Gateway Fabric only processes resources that + # belong to its class - i.e. have the "gatewayClassName" field resource equal to the class. gatewayClassName: nginx - ## Set of custom annotations for GatewayClass objects, e.g: - ## gatewayClassAnnotations: - ## someKey: someValue + + # -- Set of custom annotations for GatewayClass objects. gatewayClassAnnotations: {} - ## The name of the Gateway controller. The controller name must be of the form: DOMAIN/PATH. The controller's domain - ## is gateway.nginx.org. + + # -- The name of the Gateway controller. The controller name must be of the form: DOMAIN/PATH. The controller's domain + # is gateway.nginx.org. gatewayControllerName: gateway.nginx.org/nginx-gateway-controller - ## The dynamic configuration for the control plane that is contained in the NginxGateway resource. + + # The dynamic configuration for the control plane that is contained in the NginxGateway resource. config: logging: - ## Log level. Supported values "info", "debug", "error". + # -- Log level. Supported values "info", "debug", "error". level: info - ## Set of custom annotations for NginxGateway objects, e.g: - ## configAnnotations: - ## someKey: someValue + + # -- Set of custom annotations for NginxGateway objects. configAnnotations: {} - ## The number of replicas of the NGINX Gateway Fabric Deployment. + + # -- The number of replicas of the NGINX Gateway Fabric Deployment. replicaCount: 1 - ## The configuration for leader election. + + # The configuration for leader election. leaderElection: - ## Enable leader election. Leader election is used to avoid multiple replicas of the NGINX Gateway Fabric - ## reporting the status of the Gateway API resources. If not enabled, all replicas of NGINX Gateway Fabric - ## will update the statuses of the Gateway API resources. + # -- Enable leader election. Leader election is used to avoid multiple replicas of the NGINX Gateway Fabric + # reporting the status of the Gateway API resources. If not enabled, all replicas of NGINX Gateway Fabric + # will update the statuses of the Gateway API resources. enable: true - ## The name of the leader election lock. A Lease object with this name will be created in the same Namespace as - ## the controller. Autogenerated if not set or set to "". + # -- The name of the leader election lock. A Lease object with this name will be created in the same Namespace as + # the controller. + # @default -- Autogenerated if not set or set to "". lockName: "" ## Defines the settings for the control plane readiness probe. This probe returns Ready when the controller ## has started and configured NGINX to serve traffic. readinessProbe: - ## Enable the /readyz endpoint on the control plane. + # -- Enable the /readyz endpoint on the control plane. enable: true - ## Port in which the readiness endpoint is exposed. + # -- Port in which the readiness endpoint is exposed. port: 8081 - ## The number of seconds after the Pod has started before the readiness probes are initiated. + # -- The number of seconds after the Pod has started before the readiness probes are initiated. initialDelaySeconds: 3 image: - ## The NGINX Gateway Fabric image to use + # -- The NGINX Gateway Fabric image to use repository: ghcr.io/nginxinc/nginx-gateway-fabric tag: edge pullPolicy: Always securityContext: - ## Some environments may need this set to true in order for the control plane to successfully reload NGINX. + # -- Some environments may need this set to true in order for the control plane to successfully reload NGINX. allowPrivilegeEscalation: false productTelemetry: - ## Enable the collection of product telemetry. + # -- Enable the collection of product telemetry. enable: true - ## The lifecycle of the nginx-gateway container. + # -- The lifecycle of the nginx-gateway container. lifecycle: {} - ## extraVolumeMounts are the additional volume mounts for the nginx-gateway container. + # -- extraVolumeMounts are the additional volume mounts for the nginx-gateway container. extraVolumeMounts: [] gwAPIExperimentalFeatures: - ## Enable the experimental features of Gateway API which are supported by NGINX Gateway Fabric. Requires the Gateway - ## APIs installed from the experimental channel. + # -- Enable the experimental features of Gateway API which are supported by NGINX Gateway Fabric. Requires the Gateway + # APIs installed from the experimental channel. enable: false nginx: - ## The NGINX image to use image: + # -- The NGINX image to use. repository: ghcr.io/nginxinc/nginx-gateway-fabric/nginx tag: edge pullPolicy: Always - ## Is NGINX Plus image being used + # -- Is NGINX Plus image being used plus: false - ## The configuration for the data plane that is contained in the NginxProxy resource. + # -- The configuration for the data plane that is contained in the NginxProxy resource. config: {} # disableHTTP2: false @@ -91,61 +95,61 @@ nginx: # serviceName: "" # spanAttributes: [] - ## Configuration for NGINX Plus usage reporting. + # Configuration for NGINX Plus usage reporting. usage: - ## The namespace/name of the Secret containing the credentials for NGINX Plus usage reporting. + # -- The namespace/name of the Secret containing the credentials for NGINX Plus usage reporting. secretName: "" - ## The base server URL of the NGINX Plus usage reporting server. + # -- The base server URL of the NGINX Plus usage reporting server. serverURL: "" - ## The display name of the Kubernetes cluster in the NGINX Plus usage reporting server. + # -- The display name of the Kubernetes cluster in the NGINX Plus usage reporting server. clusterName: "" - ## Disable client verification of the NGINX Plus usage reporting server certificate. + # -- Disable client verification of the NGINX Plus usage reporting server certificate. insecureSkipVerify: false - ## The lifecycle of the nginx container. + # -- The lifecycle of the nginx container. lifecycle: {} - ## extraVolumeMounts are the additional volume mounts for the nginx container. + # -- extraVolumeMounts are the additional volume mounts for the nginx container. extraVolumeMounts: [] -## The termination grace period of the NGINX Gateway Fabric pod. +# -- The termination grace period of the NGINX Gateway Fabric pod. terminationGracePeriodSeconds: 30 -## Tolerations for the NGINX Gateway Fabric pod. +# -- Tolerations for the NGINX Gateway Fabric pod. tolerations: [] -## The nodeSelector of the NGINX Gateway Fabric pod. +# -- The nodeSelector of the NGINX Gateway Fabric pod. nodeSelector: {} -## The affinity of the NGINX Gateway Fabric pod. +# -- The affinity of the NGINX Gateway Fabric pod. affinity: {} serviceAccount: annotations: {} - ## The name of the service account of the NGINX Gateway Fabric pods. Used for RBAC. - ## Autogenerated if not set or set to "". - # name: nginx-gateway + # -- The name of the service account of the NGINX Gateway Fabric pods. Used for RBAC. + # @default -- Autogenerated if not set or set to "" + name: "" - ## The name of the secret containing docker registry credentials. - ## Secret must exist in the same namespace as the helm release. + # -- The name of the secret containing docker registry credentials. + # Secret must exist in the same namespace as the helm release. imagePullSecret: "" - ## A list of secret names containing docker registry credentials. - ## Secrets must exist in the same namespace as the helm release. + # -- A list of secret names containing docker registry credentials. + # Secrets must exist in the same namespace as the helm release. imagePullSecrets: [] service: - ## Creates a service to expose the NGINX Gateway Fabric pods. + # -- Creates a service to expose the NGINX Gateway Fabric pods. create: true - ## The type of service to create for the NGINX Gateway Fabric. + # -- The type of service to create for the NGINX Gateway Fabric. type: LoadBalancer - ## The externalTrafficPolicy of the service. The value Local preserves the client source IP. + # -- The externalTrafficPolicy of the service. The value Local preserves the client source IP. externalTrafficPolicy: Local - ## The annotations of the NGINX Gateway Fabric service. + # -- The annotations of the NGINX Gateway Fabric service. annotations: {} - ## A list of ports to expose through the NGINX Gateway Fabric service. Update it to match the listener ports from - ## your Gateway resource. Follows the conventional Kubernetes yaml syntax for service ports. + # -- A list of ports to expose through the NGINX Gateway Fabric service. Update it to match the listener ports from + # your Gateway resource. Follows the conventional Kubernetes yaml syntax for service ports. ports: - port: 80 targetPort: 80 @@ -157,14 +161,14 @@ service: name: https metrics: - ## Enable exposing metrics in the Prometheus format. + # -- Enable exposing metrics in the Prometheus format. enable: true - ## Set the port where the Prometheus metrics are exposed. Format: [1024 - 65535] + # -- Set the port where the Prometheus metrics are exposed. Format: [1024 - 65535] port: 9113 - ## Enable serving metrics via https. By default metrics are served via http. - ## Please note that this endpoint will be secured with a self-signed certificate. + # -- Enable serving metrics via https. By default metrics are served via http. + # Please note that this endpoint will be secured with a self-signed certificate. secure: false -## extraVolumes for the NGINX Gateway Fabric pod. Use in conjunction with -## nginxGateway.extraVolumeMounts and nginx.extraVolumeMounts to mount additional volumes to the containers. +# -- extraVolumes for the NGINX Gateway Fabric pod. Use in conjunction with +# nginxGateway.extraVolumeMounts and nginx.extraVolumeMounts to mount additional volumes to the containers. extraVolumes: [] From 8cdb6b6d38c54ec1f39e6d92951593f2024ad975 Mon Sep 17 00:00:00 2001 From: Saylor Berman Date: Thu, 6 Jun 2024 10:54:30 -0600 Subject: [PATCH 08/14] Add 1.3.0 zero-downtime-scaling test results (#2096) --- .../results/1.3.0/1.3.0.md | 474 ++++++++++++++++++ .../1.3.0/10-node/abrupt-down-http.png | Bin 0 -> 6347 bytes .../1.3.0/10-node/abrupt-down-https.png | Bin 0 -> 6430 bytes .../results/1.3.0/10-node/abrupt-up-http.png | Bin 0 -> 6150 bytes .../results/1.3.0/10-node/abrupt-up-https.png | Bin 0 -> 6195 bytes .../1.3.0/10-node/gradual-down-http.png | Bin 0 -> 6352 bytes .../1.3.0/10-node/gradual-down-https.png | Bin 0 -> 6355 bytes .../results/1.3.0/10-node/gradual-up-http.png | Bin 0 -> 6241 bytes .../1.3.0/10-node/gradual-up-https.png | Bin 0 -> 6254 bytes .../1.3.0/25-node/abrupt-down-http.png | Bin 0 -> 6109 bytes .../1.3.0/25-node/abrupt-down-https.png | Bin 0 -> 6226 bytes .../results/1.3.0/25-node/abrupt-up-http.png | Bin 0 -> 6038 bytes .../results/1.3.0/25-node/abrupt-up-https.png | Bin 0 -> 6011 bytes .../1.3.0/25-node/gradual-down-http.png | Bin 0 -> 6209 bytes .../1.3.0/25-node/gradual-down-https.png | Bin 0 -> 6238 bytes .../results/1.3.0/25-node/gradual-up-http.png | Bin 0 -> 6387 bytes .../1.3.0/25-node/gradual-up-https.png | Bin 0 -> 6386 bytes 17 files changed, 474 insertions(+) create mode 100644 tests/zero-downtime-scaling/results/1.3.0/1.3.0.md create mode 100644 tests/zero-downtime-scaling/results/1.3.0/10-node/abrupt-down-http.png create mode 100644 tests/zero-downtime-scaling/results/1.3.0/10-node/abrupt-down-https.png create mode 100644 tests/zero-downtime-scaling/results/1.3.0/10-node/abrupt-up-http.png create mode 100644 tests/zero-downtime-scaling/results/1.3.0/10-node/abrupt-up-https.png create mode 100644 tests/zero-downtime-scaling/results/1.3.0/10-node/gradual-down-http.png create mode 100644 tests/zero-downtime-scaling/results/1.3.0/10-node/gradual-down-https.png create mode 100644 tests/zero-downtime-scaling/results/1.3.0/10-node/gradual-up-http.png create mode 100644 tests/zero-downtime-scaling/results/1.3.0/10-node/gradual-up-https.png create mode 100644 tests/zero-downtime-scaling/results/1.3.0/25-node/abrupt-down-http.png create mode 100644 tests/zero-downtime-scaling/results/1.3.0/25-node/abrupt-down-https.png create mode 100644 tests/zero-downtime-scaling/results/1.3.0/25-node/abrupt-up-http.png create mode 100644 tests/zero-downtime-scaling/results/1.3.0/25-node/abrupt-up-https.png create mode 100644 tests/zero-downtime-scaling/results/1.3.0/25-node/gradual-down-http.png create mode 100644 tests/zero-downtime-scaling/results/1.3.0/25-node/gradual-down-https.png create mode 100644 tests/zero-downtime-scaling/results/1.3.0/25-node/gradual-up-http.png create mode 100644 tests/zero-downtime-scaling/results/1.3.0/25-node/gradual-up-https.png diff --git a/tests/zero-downtime-scaling/results/1.3.0/1.3.0.md b/tests/zero-downtime-scaling/results/1.3.0/1.3.0.md new file mode 100644 index 0000000000..613a98abac --- /dev/null +++ b/tests/zero-downtime-scaling/results/1.3.0/1.3.0.md @@ -0,0 +1,474 @@ +# Results + +## Versions + +Kubernetes: + +```text +Client Version: v1.30.1 +Kustomize Version: v5.0.4-0.20230601165947-6ce0bf390ce3 +Server Version: v1.29.4-gke.1043002 +``` + +NGF: + +```text +"version":"edge" +"commit":"01a18c674f4536dc10614a380b09b5852cb60da7" +"date":"2024-06-05T05:05:16Z" +``` + +with NGINX: + +```text +nginx version: nginx/1.27.0 +Built by gcc 13.2.1 20231014 (Alpine 13.2.1_git20231014) +OS: Linux 6.1.75+ +``` + +## Summary + +Overall results look similar if not slightly better than the last release. Fewer errors and 499s. No issues that stood out. + +## 10 Node Cluster Test Results + +### Scale Up Gradually + +HTTP wrk output + +```text +Running 5m test @ http://cafe.example.com/coffee + 2 threads and 2 connections + Thread Stats Avg Stdev Max +/- Stdev + Latency 1.37ms 1.35ms 44.28ms 95.23% + Req/Sec 819.80 149.21 1.15k 72.05% + Latency Distribution + 50% 1.08ms + 75% 1.34ms + 90% 1.87ms + 99% 7.03ms + 478239 requests in 5.00m, 170.57MB read + Socket errors: connect 0, read 15, write 0, timeout 2 +Requests/sec: 1594.08 +Transfer/sec: 582.20KB +``` + +HTTP Graph: + +![gradual-up-http.png](10-node/gradual-up-http.png) + +HTTPS wrk output + +```text +Running 5m test @ https://cafe.example.com/tea + 2 threads and 2 connections + Thread Stats Avg Stdev Max +/- Stdev + Latency 4.67ms 46.75ms 1.03s 99.39% + Req/Sec 775.67 145.97 1.07k 71.80% + Latency Distribution + 50% 1.14ms + 75% 1.42ms + 90% 2.01ms + 99% 11.23ms + 452924 requests in 5.00m, 158.52MB read + Socket errors: connect 0, read 12, write 0, timeout 2 +Requests/sec: 1509.38 +Transfer/sec: 540.95KB +``` + +HTTPS Graph: + +![gradual-up-https.png](10-node/gradual-up-https.png) + +Logs: + +- NGF error logs: none +- NGINX error/warn logs: none +- NGINX access logs: no non-200s + +### Scale Down Gradually + +HTTP wrk output + +```text +Running 20m test @ http://cafe.example.com/coffee + 2 threads and 2 connections + Thread Stats Avg Stdev Max +/- Stdev + Latency 5.87ms 17.66ms 171.38ms 93.47% + Req/Sec 714.83 222.68 1.10k 73.79% + Latency Distribution + 50% 1.16ms + 75% 1.57ms + 90% 4.39ms + 99% 97.87ms + 1528604 requests in 17.99m, 545.21MB read + Socket errors: connect 0, read 13, write 0, timeout 0 +Requests/sec: 1416.05 +Transfer/sec: 517.18KB +``` + +HTTP Graph + +![gradual-down-http.png](10-node/gradual-down-http.png) + + +HTPPS wrk output + +```text +Running 20m test @ https://cafe.example.com/tea + 2 threads and 2 connections + Thread Stats Avg Stdev Max +/- Stdev + Latency 5.64ms 17.05ms 163.03ms 93.78% + Req/Sec 684.32 211.48 1.05k 73.99% + Latency Distribution + 50% 1.21ms + 75% 1.62ms + 90% 4.03ms + 99% 96.45ms + 1466003 requests in 18.02m, 513.09MB read + Socket errors: connect 0, read 11, write 0, timeout 0 +Requests/sec: 1356.14 +Transfer/sec: 486.03KB +``` + +HTTPS Graph + +![gradual-down-https.png](10-node/gradual-down-https.png) + +Logs: + +- NGF error logs: none +- NGINX error/warn logs: none +- NGINX access logs: no non-200s + +### Scale Up Abruptly + +HTTP wrk output + +```text +Running 2m test @ http://cafe.example.com/coffee + 2 threads and 2 connections + Thread Stats Avg Stdev Max +/- Stdev + Latency 2.35ms 3.51ms 95.23ms 95.57% + Req/Sec 538.34 167.36 1.04k 73.13% + Latency Distribution + 50% 1.62ms + 75% 2.29ms + 90% 3.47ms + 99% 16.64ms + 83019 requests in 1.29m, 29.61MB read + Socket errors: connect 0, read 1, write 0, timeout 0 +Requests/sec: 1071.66 +Transfer/sec: 391.40KB +``` + +HTTP Graph + +![abrupt-up-http.png](10-node/abrupt-up-http.png) + +HTTPS wrk output + +```text +Running 2m test @ https://cafe.example.com/tea + 2 threads and 2 connections + Thread Stats Avg Stdev Max +/- Stdev + Latency 2.36ms 3.40ms 94.47ms 95.47% + Req/Sec 526.63 169.05 0.99k 72.82% + Latency Distribution + 50% 1.64ms + 75% 2.34ms + 90% 3.55ms + 99% 15.61ms + 82986 requests in 1.32m, 29.04MB read + Socket errors: connect 0, read 2, write 0, timeout 0 +Requests/sec: 1048.20 +Transfer/sec: 375.67KB +``` + +HTTPS Graph + +![abrupt-up-https.png](10-node/abrupt-up-https.png) + +Logs: + +- NGF error log: none +- NGINX error/warn logs: none +- NGINX access logs: no non-200s + +### Scale Down Abruptly + + +HTTP wrk output + +```text +Running 2m test @ http://cafe.example.com/coffee + 2 threads and 2 connections + Thread Stats Avg Stdev Max +/- Stdev + Latency 1.72ms 2.79ms 66.43ms 96.12% + Req/Sec 737.43 204.19 1.09k 67.93% + Latency Distribution + 50% 1.15ms + 75% 1.56ms + 90% 2.38ms + 99% 12.61ms + 83138 requests in 0.94m, 29.65MB read + Socket errors: connect 0, read 1, write 0, timeout 0 +Requests/sec: 1467.65 +Transfer/sec: 536.03KB +``` + +HTTP graph + +![abrupt-down-http.png](10-node/abrupt-down-http.png) + +HTTPS wrk output + +```text +Running 2m test @ https://cafe.example.com/tea + 2 threads and 2 connections + Thread Stats Avg Stdev Max +/- Stdev + Latency 1.78ms 2.85ms 96.98ms 96.36% + Req/Sec 695.97 189.01 1.03k 65.14% + Latency Distribution + 50% 1.23ms + 75% 1.64ms + 90% 2.47ms + 99% 12.24ms + 80139 requests in 0.96m, 28.05MB read + Socket errors: connect 0, read 2, write 0, timeout 0 +Requests/sec: 1385.48 +Transfer/sec: 496.55KB +``` + +HTTPS graph + +![abrupt-down-http.png](10-node/abrupt-down-http.png) + +Logs + +- NGF error log: none +- NGINX error/warn logs: none +- NGINX access logs: no non-200s + +## 25 Node Cluster Test Results + +### Scale Up Gradually + +HTTP wrk output + +```text +Running 5m test @ http://cafe.example.com/coffee + 2 threads and 2 connections + Thread Stats Avg Stdev Max +/- Stdev + Latency 1.25ms 1.05ms 37.63ms 95.83% + Req/Sec 0.87k 155.89 1.15k 74.39% + Latency Distribution + 50% 1.05ms + 75% 1.24ms + 90% 1.62ms + 99% 5.18ms + 518856 requests in 5.00m, 184.91MB read + Socket errors: connect 0, read 18, write 0, timeout 0 +Requests/sec: 1729.10 +Transfer/sec: 631.01KB +``` + +HTTP Graph: + +![gradual-up-http.png](25-node/gradual-up-http.png) + +HTTPS wrk output + +```text +Running 5m test @ https://cafe.example.com/tea + 2 threads and 2 connections + Thread Stats Avg Stdev Max +/- Stdev + Latency 1.33ms 1.19ms 67.50ms 96.26% + Req/Sec 811.60 142.05 1.07k 76.84% + Latency Distribution + 50% 1.12ms + 75% 1.32ms + 90% 1.70ms + 99% 5.34ms + 484699 requests in 5.00m, 169.36MB read + Socket errors: connect 0, read 8, write 0, timeout 0 +Requests/sec: 1615.20 +Transfer/sec: 577.93KB +``` + +HTTPS Graph: + +![gradual-up-https.png](25-node/gradual-up-https.png) + +Logs: + +- NGF error logs: none +- NGINX error/warn logs: none +- NGINX access logs: no non-200s + +### Scale Down Gradually + +HTTP wrk output + +```text +Running 20m test @ http://cafe.example.com/coffee + 2 threads and 2 connections + Thread Stats Avg Stdev Max +/- Stdev + Latency 2.87ms 33.46ms 1.06s 99.69% + Req/Sec 0.88k 134.20 1.17k 74.31% + Latency Distribution + 50% 1.05ms + 75% 1.23ms + 90% 1.55ms + 99% 5.99ms + 1867249 requests in 18.00m, 665.46MB read + Socket errors: connect 0, read 14, write 0, timeout 2 +Requests/sec: 1728.65 +Transfer/sec: 630.84KB +``` + +HTTP Graph + +![gradual-down-http.png](25-node/gradual-down-http.png) + + +HTPPS wrk output + +```text +Running 20m test @ https://cafe.example.com/tea + 2 threads and 2 connections + Thread Stats Avg Stdev Max +/- Stdev + Latency 3.15ms 35.52ms 1.07s 99.65% + Req/Sec 820.50 121.93 1.07k 74.48% + Latency Distribution + 50% 1.12ms + 75% 1.31ms + 90% 1.65ms + 99% 6.22ms + 1749986 requests in 18.02m, 611.48MB read + Socket errors: connect 0, read 11, write 0, timeout 2 +Requests/sec: 1618.17 +Transfer/sec: 579.00KB +``` + +HTTPS Graph + +![gradual-down-https.png](25-node/gradual-down-https.png) + +Logs: + +- NGF error logs: + 1 error: ```{"error":"leader election lost", "level":"error", "msg":"error received after stop sequence was engaged", "stacktrace":"sigs.k8s.io/controller-runtime/pkg/manager.(*controllerManager).engageStopProcedure.func1 + pkg/mod/sigs.k8s.io/controller-runtime@v0.18.3/pkg/manager/internal.go:499", "ts":"2024-06-05T17:55:20Z"}``` +- NGINX error/warn logs: none +- NGINX access logs: 2 499s when accessing tea over HTTPS + +### Scale Up Abruptly + +HTTP wrk output + +```text +Running 2m test @ http://cafe.example.com/coffee + 2 threads and 2 connections + Thread Stats Avg Stdev Max +/- Stdev + Latency 1.84ms 1.51ms 36.50ms 93.84% + Req/Sec 596.46 156.20 1.03k 74.51% + Latency Distribution + 50% 1.50ms + 75% 1.99ms + 90% 2.76ms + 99% 8.02ms + 36590 requests in 30.82s, 13.04MB read + Socket errors: connect 0, read 1, write 0, timeout 0 +Requests/sec: 1187.24 +Transfer/sec: 433.27KB +``` + +HTTP Graph + +![abrupt-up-http.png](25-node/abrupt-up-http.png) + +HTTPS wrk output + +```text +Running 2m test @ https://cafe.example.com/tea + 2 threads and 2 connections + Thread Stats Avg Stdev Max +/- Stdev + Latency 1.88ms 1.78ms 49.07ms 95.13% + Req/Sec 588.31 158.25 0.99k 70.50% + Latency Distribution + 50% 1.51ms + 75% 2.02ms + 90% 2.76ms + 99% 8.65ms + 37739 requests in 32.22s, 13.19MB read +Requests/sec: 1171.20 +Transfer/sec: 419.06KB +``` + +HTTPS Graph + +![abrupt-up-https.png](25-node/abrupt-up-https.png) + +Logs: + +- NGF error log: none +- NGINX error/warn logs: none +- NGINX access logs: no non-200s + +### Scale Down Abruptly + + +HTTP wrk output + +```text +Running 2m test @ http://cafe.example.com/coffee + 2 threads and 2 connections + Thread Stats Avg Stdev Max +/- Stdev + Latency 1.51ms 1.30ms 55.34ms 94.11% + Req/Sec 722.71 201.09 1.15k 62.09% + Latency Distribution + 50% 1.18ms + 75% 1.62ms + 90% 2.31ms + 99% 6.27ms + 88110 requests in 1.02m, 31.40MB read + Socket errors: connect 0, read 1, write 0, timeout 0 +Requests/sec: 1438.52 +Transfer/sec: 524.97KB +``` + +HTTP graph + +![abrupt-down-http.png](25-node/abrupt-down-http.png) + +HTTPS wrk output + +```text +Running 2m test @ https://cafe.example.com/tea + 2 threads and 2 connections + Thread Stats Avg Stdev Max +/- Stdev + Latency 1.57ms 1.11ms 36.38ms 92.86% + Req/Sec 683.88 178.63 1.05k 64.72% + Latency Distribution + 50% 1.26ms + 75% 1.69ms + 90% 2.38ms + 99% 6.18ms + 88825 requests in 1.09m, 31.04MB read + Socket errors: connect 0, read 1, write 0, timeout 0 +Requests/sec: 1361.17 +Transfer/sec: 487.04KB +``` + +HTTPS graph + +![abrupt-down-http.png](25-node/abrupt-down-http.png) + +Logs + +- NGF error logs: + 1 error: ```{"error":"leader election lost", "level":"error", "msg":"error received after stop sequence was engaged", "stacktrace":"sigs.k8s.io/controller-runtime/pkg/manager.(*controllerManager).engageStopProcedure.func1 + pkg/mod/sigs.k8s.io/controller-runtime@v0.18.3/pkg/manager/internal.go:499", "ts":"2024-06-05T18:05:43Z"}``` +- NGINX error/warn logs: none +- NGINX access logs: no non-200s diff --git a/tests/zero-downtime-scaling/results/1.3.0/10-node/abrupt-down-http.png b/tests/zero-downtime-scaling/results/1.3.0/10-node/abrupt-down-http.png new file mode 100644 index 0000000000000000000000000000000000000000..0f9a2c9fdbfea6f75cdb50865e1bdcce6171b4e1 GIT binary patch literal 6347 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 literal 0 HcmV?d00001 diff --git a/tests/zero-downtime-scaling/results/1.3.0/10-node/abrupt-down-https.png b/tests/zero-downtime-scaling/results/1.3.0/10-node/abrupt-down-https.png new file mode 100644 index 0000000000000000000000000000000000000000..e7108a24359f2cc993834d7e2fb4e91d741d1f4d GIT binary patch literal 6430 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 literal 0 HcmV?d00001 diff --git a/tests/zero-downtime-scaling/results/1.3.0/10-node/abrupt-up-http.png b/tests/zero-downtime-scaling/results/1.3.0/10-node/abrupt-up-http.png new file mode 100644 index 0000000000000000000000000000000000000000..1b9e5b62053cc531eb149fe8e4401c51da2ea7c4 GIT binary patch literal 6150 zcmeHLX;f3$vaXAb+9F^#C;|deu8MMjRun`TqJm=62(64V3MwiRAj||v!~s!caKZtU zMg*BPsDUI9Fd)b%gn*btL?RK2`Nqt=e_! zRI=mYgNiFORsewFAzSMs083B+a&F6)$S9>xvHN5MaQwx|20;)RB_}6m@m32!KxzR2 zp|BPWO--=(%m7l00s^|0fc)f3xCVeG075|UNcWSiTV<^1Pw!-W8X6kL#>V#c_NPvr z!sGGx?%k`XsHm;2ZEbDka=9`U5mbSos!Bl127%yPOYlVqi}=wt$~rXz}0{uP57(@1KQA!0?r0t>%xbP(69-10eG>+&&Ap0^vpwqz6M<2wcZP zN*G*?fGbgu6b+YR;UW$aBYNGUj$gTphhCxYDz z`1vK+lHgz^*pOjA74}sFng&+2VDTFE)Whxu*wqN8O|Y{Wj9X!Q8~oG(M(@C&3-r5T zD--m3VN)M$`~bRa*uVi)KWGnt)@RTh0u3 f37GSj`8OFYu!PR*iwu1Sn2|!dF-! zg5_dZIt%i1utWlK(#2S_FjagZi{S4=Y~8~ElgNT#Xd^~RWv_1G@=D`Y4F~42AY62Ivm`MoJgmz0#@`S9b#z(w=DM0B zjl6JnzZDT>{;vIbL&>?T75jhJi8LS&lw0VZ;MC`zCjZvP8QvKgV;O1Zo{cT&^7BMx zo^>d6u|HSwx*0pFK{=Pg*>13kXU&i+OrlYW^okLX;fO& zGjkK(>K5%heSTTs<;!BLN=g~o2i5Y#xxX?p+T+;=E7jRPj-u6Mrlx)G>G=oKq`Qa1 z2S=aem#`AHeDx<2Ys?p=vhSr#W$G*YyQFb3=h>V(tO{>q3od;kY3lvxnY3To2I<@` zzlGTvZipSMS)vOAH<9T*G1T()?Lx5UkqQ0gHBy zTovU4cT<<$WeZzZF?V#h5Oiu8|4|O~Vye}$n8!WIA#hsVa(e!!ACqQeosi}cE07N(A>ThOK7*>rB(tfieG@d-jE5f#nupB+`T!rBK0 z%ITfzZyw)?Gy5b$#!d@zToQACzZ<5cY^4?a8|5Jdy?_(&|3ma?NAP2_tpm4N(YtPD zJ>Q)Y86U;I8H6Z$$LRg{rE;Z95qm0%F^#`@=p4YsOT@tvaeuM?cmL5j&#`k)ODgrI zqtMbB=JltLA{Tz|&V@cH2n{ToP zN%SlnLX)2M4nM5FnIWg%Jy>{lhEhDA=_TM>yRI%aE*n*8d@Pw}6w*eb^#dY0+Y2xX zc?Nu8S5HfF84}RDvbUsYAO#cgIpkJdmvSaG&DQQQ(&!&@RhWX57O|>iN)R&WcUDp)L zceRcBS$3|@Fx8c%+}ZlJxa>f@umh1yPd%mad-{w$=e=w#YErk7#Hh~pV2=-6X-o8z z_$Vo>NbCOUd6-^0y%PKh`H7JDUTy zoed7y(IDx)P!t=c%DXH6N4jufrP>usCUWw8iYICg9qfss>z5L>4;$jr%eG!U8z+b` zm{&1eRaYIO+~v$Y`4Uae6_QUyM|G{S?{!|JkJ-<4OEGSWB>C-znG=_ol{?6<$8xY!TI?ax{p%uO z9e3oOmERC8wjVDTpmGAt74d<^b50LUCk2*+XJ$M+m<5y6j9^z=b6WL3{@X*5>X$kH z>LLg!D!rO3#HfWwxI1wM-|p9Ck@d(%jI@+5vMOuTVvFg1L$$2wN?gRRkIaZ#Gd^9C7N;mpSiWuAJ@i& z;KoeYZB*Yd7q5>C-r43mCW+?9H>YOdDguUj>RW`#9S3`y+xPr$%-S(0aAP|JPl?}O z{qF878)L~*E`R8^j7;wLdqRiCD~8B{L&No7svH#hrj2g&C|X$(4KU>mK3Xvf73}d( zGAp9{Xw@|JDm-qin>MSTo#W6WkY zNqJ41I(o}8I`+4#WvLRgkqed6-3603QmH1`)x&wFJeG>E0GlZj9 ziT}sVx<<>ahT~0$G1J?)b?H;`GO#hqSbh^m++#ND|M7Zqrax<**W}N_CCz=HN!5Lr z_G9yx9b=CG&XuBp%tg`tuRx_r#dnh}MHq_Iy*nDMq` z3Q0WN#9`q`1M_on-n-(iSqW?M5BAc`JQJpJq6h4xf(%AN#qQ7(X4gx6w5!ZQBkIni z;X>w}Zyr4$bf{VpMp^W^S*UpW7L-9SkAm literal 0 HcmV?d00001 diff --git a/tests/zero-downtime-scaling/results/1.3.0/10-node/abrupt-up-https.png b/tests/zero-downtime-scaling/results/1.3.0/10-node/abrupt-up-https.png new file mode 100644 index 0000000000000000000000000000000000000000..fa62894b317c8ca5ab264165d37fa84a3ed45217 GIT binary patch literal 6195 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 RqD6LqW0tlS1&2Mt{{=R_pa1{> literal 0 HcmV?d00001 diff --git a/tests/zero-downtime-scaling/results/1.3.0/10-node/gradual-down-http.png b/tests/zero-downtime-scaling/results/1.3.0/10-node/gradual-down-http.png new file mode 100644 index 0000000000000000000000000000000000000000..8f7a16115d3749934c4176d59388fa6dca699112 GIT binary patch literal 6352 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 literal 0 HcmV?d00001 diff --git a/tests/zero-downtime-scaling/results/1.3.0/10-node/gradual-down-https.png b/tests/zero-downtime-scaling/results/1.3.0/10-node/gradual-down-https.png new file mode 100644 index 0000000000000000000000000000000000000000..e384df6c47bcefb6a4406ec4619ede996c43e6c4 GIT binary patch literal 6355 zcmeHLX;4$i+J41B7}*^}1xFA^MNklw0mVQB6&+<60RaVB1XT8YhXiE|S5$BiL0NT_ zC`bZ`gf*b7%Bp}YA;gFwBtVcg1PJFQe)pTIujgw9s+87LmV2H0eI?0^m!v4{(HeWv>2#0zNDSJ)iaF9L_j0SFkCq^|< zRWs4{+jruYE&c*10PVPraS%d8pyNFvpMqd4zhbe-aah6zvhGKI9lcdU@+!X}F+V?) zi&a6M0_Pg%9&}T4smYdT8!s)aJYePJv1mcTVx8--&IneBAC2S+iZhbykJQy6f_#v= zc2f3N+KZHw};F<-_IpCBFj*sEO6FC1A?C@aw3~chj>IIxF1WO`V6oFX@oGyjm zUcpHcn3luwN-(Jg;~GHMf>9ly-he>^9Bu^tX3%Q^-FI-H4RqRJe=*)7DyYz48y$ZB3`$=>kpY{TpumESZ1`ycHcW!-6i82l)C@?>!TNa+ z=fXN3h%Uj}6%gSIwT9A@DitXBNB@)dK>*SX!n!6^Ls|)7W5lUrN3Fv%C#jR6kAD;S z!)1Dxv-6EcKEgh|)$rG|4>#}lGlhhjdU=k!{bs6}yRGcx7K`1d{`}?NltHG$Z8nDy zu#`t&hlZoNI$R2Ds5Yj!uG;JRRl9bx*NTGzG(pOZ2(vcb_OS}80 zhwk^v&YO-WiWNq+C8cj0w77JJMl5KivsZiiTKkkuYkv-X8{x?gWJaVf1nzCz@?}BE zyLlJtlEHOJ8v{vd&)4Zq-2DgpB;2YylJ7eq-I_tRINnMS!93?qtbzB1PFkQ^82Nd01)5O%dO?=8 zXSTpDNG^@J>{#R5Ybyjr=&WDq@`;ml(oAmEfYv7KkBmFKFYj&Z@qf{zDO$|5f?T~m zeOrkyY$b1*yV*KfM{k7gr4^CQ5Bs*)HWIU4eYlzyOgxIrllQXQbh0VST=cX}H*K~1 zy^*8=2bE+w5#7C5fVX4lsR=UJ*{2dRok%`%y=VMmuf*#Z1E)3KFIT{I`WN}G=6`Kbx&%|kZoL6>5ip{@Vw`e>It;Tl3CKGlL6izw4=|f#=I8&R{xEL zmq_`)WYaDxWZ-@mH&8LIZkA4v72Dcmbi=-PCPU=LT4fclTNEh!@B>mjE>MdyYUCw za?a1t*AkHm3oo(1JJLEYZ0=~*Og8GAl=j@IcJpFTTXTKiI8w`v9GPqLS=CP&vW&hJ z8Z}?Bo6CQ2BuFjy+_lGJy3Nr?qAx_te`GX0s)&|$6V$B0ltj3I$D}It9jw)6Fl`!d{pU3H-X&0`C)!J-N83{1B0~t>=c_9TU(7D z%y%MbN<1MB(tAjhrv0m7V|l0yk4hJ{Uky+2ChdEcBP(fITFKKxmL%r$F^b4l_E3fI zUL=c?|1ssnJpI&wB7?-VoSGPjRrYru3iHv;+FB-hHe`Ivkw^1&*cF1(%5xntxkt-3 zu6cQx64Q3t)WmV4gqvMoW2LtB-Nd^*MK@~y*j~enZ+SAUJz?Su481+ldK%m zUT&w#dt%x?ekfmO>K?MXAj!@`Q6|zhwVdS>6q}6jEVpTv?#ZC}bQy^;^>=<2kA??c z@(n+^53e4~#Jg+PTK5jeY#curOkHfqS03$dcOOYnt3}}=oh-P^^R~s6mHBMm8Gk~7 zhuyGPMfK#}+bqYV$R)1YtkIbVnkY@BoMS=`sv^m>TnvqFz*@2=md&KaJwCZcxJ>1R zd)D{ncOJfr;QM0uz7zaMJEGD1cR{-2T6)2~OMSQVcyzT7Ua=l=l6`vR=sD7osX|Me z=;PWh8O>zYgL72#49XU_EBW~ka-y=v1L{Rp%askUOPa-~E3{a?s_!zh-5t{_Wilcn zH`M9)M2o7N*XwVuG8_0H$FBYKrDqN*uFG!^oV2x&U^whe&cER6MDpB}&>!m`R~llJ z^~+6B9qZzu=%~Bd%N-+*tJ9r+i2d^7C5b25<{S9CFDFOnhOc{1`y{rhrFz|9foMsV zcJ;dVPV~z;u2Rf#QJtEbA&Qk9w#9R4i?2m>O1mj4f@4p0A%X2%N#P!y(*xn}@7jofEcC^}yM)BaWM_`mq173&`bN5yiq^zgrW z77G*-8fGc2#(!U+d{7#vX3IOfr~`h~Aw6R&E}l%@ zOQRGcR(w*_X4h(>W^BHJ^hoR4l@4(OeBkn)$*gy-@ikWVH~RHb8RE-%C7bEv&$sGX zm`0SND?NDx-pmo2RS3o7<%EIvRU;a)Dyp+yu5xELk0b8Ly^=6ZUaIC>hsB47W0Pbq z(X6vIjh+gk-6{%GPuw1A?ymi&_3jKg#8-yahz}SLWg)kbBS%huM-k(M z+N+FPbw|vUX*JUnX5YT(M4iq%M60a0)pfA@C1sYi8oO+oZic5+?Fg2^jWwI3WAdX+ zju_UN?wH7YH;FF|6GrBmxgTmEKi_+z|4?e9xD0+K_+Cg{aQ$3Qu-&E>Mr%OTHew&? z`ce)+0xb;{tfDmy;f&2cOS**HWOmO%o!{-Tl{cqQ03>=ox`E~ z!z^&Uz5Y3dje`bnu121(bR@=1SAQCoZDm}Xwu&)q7+D*w|3;8yS(rIveu40OsEljw zUR)zUD!0u{5KCrL%Tmot3RNP%EV77JuhF`^;|xiGczLL{q}t$E?W)E5B|dI?43zH( zvP+!IvWj?BXqUo zsm*KhO5vIcG$LavU>h%(0zojj1%c~m7;9E27vcA}&aPt|LvET~l0z+rEpE%E+z{5605;1#Cymd%N{n-#_imw2m!9 zhblLHQ{HQV@`^JxGOFuo(&I<{oD}@nTEE|zUI~k^!k{P}yQ>%2J1a8y59xo%vE6eP zhWlwhYAgFL8z+c~EoR9H6dcgp@qCEWk4kO)*#KX%RXEdO(Wq2YzSU3v_p<4U!KzH$ X?H(P;r6{)GW)@BzH$O%&cE0vcihTYJqj=%1)y|l;e5Fy@5SXkaseDZc-#&_5V<5HBSUd11t24( zfB>IgY6DeOu={)uQi=kyO(_}K;z5oDupt9NMo7rFEJH*2RGaR4`Mg!DR&Cq1?a-k^ zzP`RB66w*SM{nM|DJ?Cnsi_$l7?8UdGc`@%C*-wq#+=8x5rofi`9Z;I$J_ z4ny8i$UO!*&hX+SWS@epGmz;5Pu(B`1L+>{*b`E{AlU~Vo`WPmNW1{|FT%Y5NWejS zAjDmUJ6GU#FxQuweqa6s$ggMFs5o2)|c?c@>y_fo(NlS_@n1z@#3G z8e!8nFl>U2EwG^t*0;mD@358)s4md!0o`8E>4#MVuyPPq48!sf_+=E9@nER{G{!-F z0#rq?SPTm#uwWXLXJGy;D9IFDvocqID`)Vcz`UUkQH6~RzIohxSEL&66r*RxdbrpO(d>HcnI|#M7P8i9q?)@J;+4mvkOdNIL=$s1Ij z@K89?v*yf8QPFotxf6%%xEn2qIn@T#orkVtmrn)YmWZ0IbnFIDe$ake)Il^uuAYQ)TGXC`%%WD*Ce`tnc8yyMC6IJ5qwXsPZp`NmtPp*RO6U<`+GUzvrh?Vki`ZDB#Ai9(BwH zZ+L%JXx7f-hdHH5&3+>oW}Jw8I&|^tbm&xw(D_u6P7G(#DyW0f&>4Y9akDed)IBzN zKiM_3qzc7jeLY#&K}ud{+7WfGc`BCi4{23HU!nDZ6AND?W^9~EKE}|C_=fNM{EeeS zqJ_2#282p&3Nytv*8}CC>!PVtc5AcH{GRnG6iq-PjkHiEmMi@WCX@e?+4(!Epb@vC zD!^X9Lq6i`x|>TC*nGr6eT>U}^tATiYq=I@1an4Oe=Dfkbq&T%Je{8GW4S%1CJ6)4 z9e4Q*M7Fc*1K&_ld#VWIJ6QV<)&6QJwWTlmGDq1A7|vXGrIT=jfOaOWugNj_t7kY_Y%jBr)|zrv}WC#!(ZKgsd4ivpY!mL6z8;7E~>^CR;fuZh}Qg zom;eCX5ACeIp1rye(VJQuN{%`EHUXqa~F0fhpUfI=A=B^hY?z-dbf6UD>cw& zHmQ1Zlp1tqJ}H|%KHtQ9`(AH%^z)qL>F?a5@jAv!%ZS3Cz5PbwYn8NfLRM0TM=~kY zvwp6qNGT&$lqD^Hy9%r7?QSf*)kNPO{Y80gp};aSNc{G&af zHDnYn_^mmx%_L#iEjRuNH(bjB*DD`U@2DRouVb#t>qT}@QF_#nF8R!&+iR5-pQA^A zbbsXGKS_e=#EodPNh4ckU#moo_^K#;QRh~X#a&`u{a|QyQn&6u74}Dlik^I+_XWJz z5@U;~H9Cwj=cMb|(Tn?(#sx_sI)-Y*Yx@+{<^L9*vQ0CEInlJdw)$r0ZQpTvI$`H? zsKfDbx>RaThxlg|4$->UyO$TW#Bnyrzk&X&@B$`9g7yDQm(89Jax)bO%Y2-Q_4V0_ z2WNvuuMz5+%#*OU3a~~azAM+M;ZtHhxl<$VV8k(>b_630EnEj=kdVH_IQgoyyU`%r zywI<6cwGFvf4#6X&M3KvGKpVNQjd?SP8-Xj-a&scHnHlFwayo&;fOr^`t+igSSG=L z)N?LuR@gfIia{;;DTYHdE%xiJjf!`gz3SgXw1(22rsa^d?DY zJEtk^Xg7JpYx+<=AzjTled<|YZ>5*&U_eT3yJ0F`fsJ-I zsiZz$t1AB%O@`B6Vb#O$p@`?scK%5;oOUgyp2kkM2I%Qn;5OScZM~A_pZ`pETA<}b zx17o{pzFHqz@gLD)~qL;?Uc#kNJm0TCO@bW&E;^PKYFEUB9D!hU&*m*`%}5G6Wiu5 zH)Ks2kHqdgVrd#;iF;A42raOe8-*c!pym4r9hbCiPIyX?c*Syfw6j!q9rw^Df(2TK zEO*fLjajcJ}ET#w9j(1kAv9{xqNqEU7wt<2{a$`WhqaeY#T-fHPY2VLLkE=r~H)w%sQ zOhgfZ4HdGv?SBm|lB7H3&shpSTPKDSbTz{7iv0b;KnY zwRY`Yw;WE`sIAgj1psQtY>%DTIdAi9 ziK=sR!#P9)e?U!1+9I$%k`Kz_|dNo`K_YIQ0Tf7J)+v;9i1# z8Q4|8FO^_R2AgWIt^un$I8qN-Dp)jtSreEv!{Ikz+zOaBIM@#RJHe0!`?>(#4SRcG z_j}mY4?F3weGs;NgssD{g#iXE&||~qPoO&nI^(dB0~@%oeiGJA!4K20MgZ!wp!Nk+ zMX+iPR!U&`Jg7)v*#aoZmtxHfqgJ7a;O_%%&jtgiH!mIE-QTUQ3$R}E*ip;V5s#)B zyt{eMO4b)Pj! zuAB~cXX04z9U1EG8lq4BeaWenB9sXYs?{MqZhmj^{8c z=$x`calq<^B#tR*qE7$Oj_{Z-ZX|XZ%ttvUd<2*d>mE3 z>F4JRrL%$}lm&~dn$Ng8j7pmbimO=onyqIT9{PY}!I=~V3dptBc#-WFWFwjF0a|T@ zxX_!Yy$D)aJQ^g^5zQ!_O|rEv!#=fY6RkbUut$W_Lv3{j_gKuMB`2uzp0O)= zHAW#alOK6G<7?>}KN@AnA1AqJwf#}g5{M0l<{Fc<+9qBd6R)ovcug|zm zvWK}W-d6WG+-mtPPmBGcsF*RknOnIQzfE0AB%mEMf5H|iTldiGxI8uoc`w#LFr}9N zE#dIkU47*Jovd>~k_0-!AXmnp`~G%bNn{uOHJU}<_lQ-CUA$+u>HRMbnlZE}iXMfs zAgM=VPF(UA(jSf`(&)bAT7g+4zbk*NkocD>IkTjxhG~3&F324sq=>~b7V@bpyLY|P zm2Eq3Qzp#ZH7xYpCc_p#PEKq0za+foPWV-jHklRk{_slpcP}0E*CeUG>BEoFqXAAh znHdY6HZ7qd393g|3g+=&2OXT~x%=G>A zA@H$QThQxJ8w?9sd?dJdYh(%Yar#&X`o)+odx-0qHhq zw}Y!Bn^!rx@?Y-K(rV*jf6a%=A2h93IqbIlR{iFO{|SQICFHVz$>-eVM>M$%%5Zz| zK~!omLn+TTKr(*j15LyUBwV^@L47xO7HQ%vW=ECYN1xl!mY+q=;CAJ1#??w`E#0Rx zb>9u8)b6y9OSy=fC6!u-{rH@E^}Lp?d*$oG0D8)W1xdF(>1qZy@k04;y5j}zrg9~O zt)xv-3ysnXQ_U|7=6HL~OG2DN5BZ)B-{Ea{FPp#>?cT(f=oa6R6&F2?e_exp&M%Yr z%LM+e+e6LJPiZaoibms#M*fm0=3$-5E9Kb4j+*MLs~yKKdQq0Yy87bR?H2MTZn|;S zI}Q~Io}My!)M{mGl5Nx9MKb7dN4ZGnq~3(?1rClHC|$3Pk#(qg6%w4(MlA}s9&s*}I;p&u^_){AsSvdx6M zi> z$v&U!s~t^NGeSapof!KLEXi5c(q8$6b83pU2RePe`HGv4)wt5yp>RFR8vMDP9GX&L z&A7PZ%(Oy=L8Vpk3*wuXI@yC^x#e>x!iaR_YZnd)=8ls0rr{6UiZoIUgjZ%(=HX^i zRK47mP5WPeVY9l#QnZ#L(eyJGXtjw@A1;4B%zD$C^i=`2qOaAUR>hEc#wirTnC2Kr zmA_35-=@g_C*KEzZSA-ed0Th3v3S1~m2N{(&fX|p*GlmDERnXQkF2wb{WQ?ETJA>5 z>khC=m~U3B71fg#we!z_UY@IgoHYhd0W*xWzm6en}=5DKl;iY$cwbO)=x1K&<5^C%I5n% z*LX2G@g0u?EzE0nKU6$lCZssA9@TDZuc>^NdEw5!;j4N&QGDsognoUUq4)B_5_vB<<3TjQa&>DpC?*%Qt(@e~~%CWa6 z7^J-!WI-Yqe=UNWK+#sXa$tsFjCbaOUCh48jcsL?QYpwO3@sX&DyQ66vjo!X7zlqKyb=CmG6|7UKKN||odRVF5? z4C`j{=Hr8;%{oK=#m%>Ir5|fMsz=wk>xV~tYW1|6IFB;HsOEbxhf22znLY%ztGIH9 z>7w$`^s^~VKMV0dU4XcH%$;f*keWJOwH{q>E8w#xj7?|f8e4Y|Osl+@i(e2DuY*&+ z*~Kux)nu`$_D8bn*hupR`syX}cQDN=HW5 zA;J}tjiqQREeao`e8@P=%x+h7t|UHrJ6}?8%o{-VonHdRO_9jjF)K;3N%%1a=ClDvuNz$&C6IA8Ed6l%-)S~pFDi3CX0)U&o>*9@o zmJPJpg_6+gn)ThXQkFcLHFsl(;ZmvS6eDh{`(Il@tnt`4-Yp}y$19fpBfv516Gw}W Hc*Ok|A1co% literal 0 HcmV?d00001 diff --git a/tests/zero-downtime-scaling/results/1.3.0/25-node/abrupt-down-http.png b/tests/zero-downtime-scaling/results/1.3.0/25-node/abrupt-down-http.png new file mode 100644 index 0000000000000000000000000000000000000000..4f008271b5f18d91d91efdb885b353021e3541c3 GIT binary patch literal 6109 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 b@|D)!+%k(hEojjlC7e8AfBg9|@5KKC*Gd+t literal 0 HcmV?d00001 diff --git a/tests/zero-downtime-scaling/results/1.3.0/25-node/abrupt-down-https.png b/tests/zero-downtime-scaling/results/1.3.0/25-node/abrupt-down-https.png new file mode 100644 index 0000000000000000000000000000000000000000..26f4e8d5f1d46e1c5b3c6d545a90461eb3555d6e GIT binary patch literal 6226 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 ZnDG}lcCD=XU0xW4{r1j#Dt7y&{udy4K%)Qv literal 0 HcmV?d00001 diff --git a/tests/zero-downtime-scaling/results/1.3.0/25-node/abrupt-up-http.png b/tests/zero-downtime-scaling/results/1.3.0/25-node/abrupt-up-http.png new file mode 100644 index 0000000000000000000000000000000000000000..e780452f45b82c5b3d995379393b5ca47bb4bf4b GIT binary patch literal 6038 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 G<-Y)Q)b#WK literal 0 HcmV?d00001 diff --git a/tests/zero-downtime-scaling/results/1.3.0/25-node/gradual-down-http.png b/tests/zero-downtime-scaling/results/1.3.0/25-node/gradual-down-http.png new file mode 100644 index 0000000000000000000000000000000000000000..bf1d47913c99ab9bc1bc14c9ba36011167216532 GIT binary patch literal 6209 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 literal 0 HcmV?d00001 diff --git a/tests/zero-downtime-scaling/results/1.3.0/25-node/gradual-up-http.png b/tests/zero-downtime-scaling/results/1.3.0/25-node/gradual-up-http.png new file mode 100644 index 0000000000000000000000000000000000000000..ecd6baa17837a042277ab7e53a7fd0f35f787445 GIT binary patch literal 6387 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 literal 0 HcmV?d00001 diff --git a/tests/zero-downtime-scaling/results/1.3.0/25-node/gradual-up-https.png b/tests/zero-downtime-scaling/results/1.3.0/25-node/gradual-up-https.png new file mode 100644 index 0000000000000000000000000000000000000000..a268a9747f2aa0536bb749857f77e6c3f63bf05f GIT binary patch literal 6386 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 z Date: Thu, 6 Jun 2024 17:20:09 +0000 Subject: [PATCH 09/14] Bump github.com/nginxinc/telemetry-exporter from 0.0.0-20240307135433-a5ecce59bddf to 0.1.0 (#2109) * Bump github.com/nginxinc/telemetry-exporter Bumps [github.com/nginxinc/telemetry-exporter](https://github.com/nginxinc/telemetry-exporter) from 0.0.0-20240307135433-a5ecce59bddf to 0.1.0. - [Release notes](https://github.com/nginxinc/telemetry-exporter/releases) - [Changelog](https://github.com/nginxinc/telemetry-exporter/blob/main/release-process.md) - [Commits](https://github.com/nginxinc/telemetry-exporter/commits/v0.1.0) --- updated-dependencies: - dependency-name: github.com/nginxinc/telemetry-exporter dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * Update tests deps --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Luca Comellini --- go.mod | 14 +++++++------- go.sum | 28 ++++++++++++++-------------- tests/go.mod | 12 ++++++------ tests/go.sum | 24 ++++++++++++------------ 4 files changed, 39 insertions(+), 39 deletions(-) diff --git a/go.mod b/go.mod index 7c685cfcfc..177f8de0b7 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/maxbrunsfeld/counterfeiter/v6 v6.8.1 github.com/nginxinc/nginx-plus-go-client v1.2.0 github.com/nginxinc/nginx-prometheus-exporter v1.2.0 - github.com/nginxinc/telemetry-exporter v0.0.0-20240307135433-a5ecce59bddf + github.com/nginxinc/telemetry-exporter v0.1.0 github.com/onsi/ginkgo/v2 v2.19.0 github.com/onsi/gomega v1.33.1 github.com/prometheus/client_golang v1.19.1 @@ -74,15 +74,15 @@ require ( go.opentelemetry.io/proto/otlp v1.2.0 // indirect go.uber.org/multierr v1.11.0 // indirect golang.org/x/exp v0.0.0-20240416160154-fe59bbe5cc7f // indirect - golang.org/x/mod v0.17.0 // indirect - golang.org/x/net v0.25.0 // indirect + golang.org/x/mod v0.18.0 // indirect + golang.org/x/net v0.26.0 // indirect golang.org/x/oauth2 v0.20.0 // indirect golang.org/x/sync v0.7.0 // indirect - golang.org/x/sys v0.20.0 // indirect - golang.org/x/term v0.20.0 // indirect - golang.org/x/text v0.15.0 // indirect + golang.org/x/sys v0.21.0 // indirect + golang.org/x/term v0.21.0 // indirect + golang.org/x/text v0.16.0 // indirect golang.org/x/time v0.5.0 // indirect - golang.org/x/tools v0.21.0 // indirect + golang.org/x/tools v0.22.0 // indirect gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20240520151616-dc85e6b867a5 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20240515191416-fc5f0ca64291 // indirect diff --git a/go.sum b/go.sum index 46185ed051..4294acdb78 100644 --- a/go.sum +++ b/go.sum @@ -93,8 +93,8 @@ github.com/nginxinc/nginx-plus-go-client v1.2.0 h1:NVfRsHbMJ7lOhkqMG52uvODiDBhQZ github.com/nginxinc/nginx-plus-go-client v1.2.0/go.mod h1:n8OFLzrJulJ2fur28Cwa1Qp5DZNS2VicLV+Adt30LQ4= github.com/nginxinc/nginx-prometheus-exporter v1.2.0 h1:jmu63tEm3hcupIpaIH72NEdwuNgGaQ/9q0IrnNqaPto= github.com/nginxinc/nginx-prometheus-exporter v1.2.0/go.mod h1:y8KANg4+7e/9HxT3vZDetjETLR5YhU0zv2WhZquo7C0= -github.com/nginxinc/telemetry-exporter v0.0.0-20240307135433-a5ecce59bddf h1:PM0o/J1QyRpNCn8C9SI17b5ePuAnLdI1D5B/TV2hneY= -github.com/nginxinc/telemetry-exporter v0.0.0-20240307135433-a5ecce59bddf/go.mod h1:rZ+Ohzwv9LJMzxRDPS/dEwXOUPlNrzjoGkICaG9fv0k= +github.com/nginxinc/telemetry-exporter v0.1.0 h1:wF71jYx4PQpHv5ML0Ba4qN/o37ZNLfiHENXMZsVO7EQ= +github.com/nginxinc/telemetry-exporter v0.1.0/go.mod h1:Hcb/Fz6TvTZLxF/p9Fa1YDmdScnZ9Azdl8isO4Hd9v4= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= @@ -162,14 +162,14 @@ golang.org/x/exp v0.0.0-20240416160154-fe59bbe5cc7f h1:99ci1mjWVBWwJiEKYY6jWa4d2 golang.org/x/exp v0.0.0-20240416160154-fe59bbe5cc7f/go.mod h1:/lliqkxwWAhPjf5oSOIJup2XcqJaw8RGS6k3TGEc7GI= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA= -golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.18.0 h1:5+9lSbEzPSdWkH32vYPBwEpX8KwDbM52Ud9xBUvNlb0= +golang.org/x/mod v0.18.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.25.0 h1:d/OCCoBEUq33pjydKrGQhw7IlUPI2Oylr+8qLx49kac= -golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= +golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ= +golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE= golang.org/x/oauth2 v0.20.0 h1:4mQdhULixXKP1rwYBW0vAijoXnkTG0BLCDRzfe1idMo= golang.org/x/oauth2 v0.20.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -182,22 +182,22 @@ golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y= -golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/term v0.20.0 h1:VnkxpohqXaOBYJtBmEppKUG6mXpi+4O6purfc2+sMhw= -golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= +golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws= +golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/term v0.21.0 h1:WVXCp+/EBEHOj53Rvu+7KiT/iElMrO8ACK16SMZ3jaA= +golang.org/x/term v0.21.0/go.mod h1:ooXLefLobQVslOqselCNF4SxFAaoS6KujMbsGzSDmX0= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk= -golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= +golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.21.0 h1:qc0xYgIbsSDt9EyWz05J5wfa7LOVW0YTLOXrqdLAWIw= -golang.org/x/tools v0.21.0/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= +golang.org/x/tools v0.22.0 h1:gqSGLZqv+AI9lIQzniJ0nZDRG5GBPsSi+DRNHWNz6yA= +golang.org/x/tools v0.22.0/go.mod h1:aCwcsjqvq7Yqt6TNyX7QMU2enbQ/Gt0bo6krSeEri+c= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/tests/go.mod b/tests/go.mod index de2d94554c..a86ce52028 100644 --- a/tests/go.mod +++ b/tests/go.mod @@ -58,15 +58,15 @@ require ( github.com/spf13/pflag v1.0.5 // indirect github.com/stretchr/testify v1.9.0 // indirect golang.org/x/exp v0.0.0-20240416160154-fe59bbe5cc7f // indirect - golang.org/x/mod v0.17.0 // indirect - golang.org/x/net v0.25.0 // indirect + golang.org/x/mod v0.18.0 // indirect + golang.org/x/net v0.26.0 // indirect golang.org/x/oauth2 v0.20.0 // indirect golang.org/x/sync v0.7.0 // indirect - golang.org/x/sys v0.20.0 // indirect - golang.org/x/term v0.20.0 // indirect - golang.org/x/text v0.15.0 // indirect + golang.org/x/sys v0.21.0 // indirect + golang.org/x/term v0.21.0 // indirect + golang.org/x/text v0.16.0 // indirect golang.org/x/time v0.5.0 // indirect - golang.org/x/tools v0.21.0 // indirect + golang.org/x/tools v0.22.0 // indirect gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20240515191416-fc5f0ca64291 // indirect google.golang.org/grpc v1.64.0 // indirect diff --git a/tests/go.sum b/tests/go.sum index c20eb05948..6c6865e59d 100644 --- a/tests/go.sum +++ b/tests/go.sum @@ -132,14 +132,14 @@ golang.org/x/exp v0.0.0-20240416160154-fe59bbe5cc7f h1:99ci1mjWVBWwJiEKYY6jWa4d2 golang.org/x/exp v0.0.0-20240416160154-fe59bbe5cc7f/go.mod h1:/lliqkxwWAhPjf5oSOIJup2XcqJaw8RGS6k3TGEc7GI= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA= -golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.18.0 h1:5+9lSbEzPSdWkH32vYPBwEpX8KwDbM52Ud9xBUvNlb0= +golang.org/x/mod v0.18.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.25.0 h1:d/OCCoBEUq33pjydKrGQhw7IlUPI2Oylr+8qLx49kac= -golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= +golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ= +golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE= golang.org/x/oauth2 v0.20.0 h1:4mQdhULixXKP1rwYBW0vAijoXnkTG0BLCDRzfe1idMo= golang.org/x/oauth2 v0.20.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -150,14 +150,14 @@ golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y= -golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/term v0.20.0 h1:VnkxpohqXaOBYJtBmEppKUG6mXpi+4O6purfc2+sMhw= -golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= +golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws= +golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/term v0.21.0 h1:WVXCp+/EBEHOj53Rvu+7KiT/iElMrO8ACK16SMZ3jaA= +golang.org/x/term v0.21.0/go.mod h1:ooXLefLobQVslOqselCNF4SxFAaoS6KujMbsGzSDmX0= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk= -golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= +golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -165,8 +165,8 @@ golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGm golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.21.0 h1:qc0xYgIbsSDt9EyWz05J5wfa7LOVW0YTLOXrqdLAWIw= -golang.org/x/tools v0.21.0/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= +golang.org/x/tools v0.22.0 h1:gqSGLZqv+AI9lIQzniJ0nZDRG5GBPsSi+DRNHWNz6yA= +golang.org/x/tools v0.22.0/go.mod h1:aCwcsjqvq7Yqt6TNyX7QMU2enbQ/Gt0bo6krSeEri+c= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= From a5bfdbdf3d6365ed584efe055b4ca40ff27f7acc Mon Sep 17 00:00:00 2001 From: Ciara Stacke <18287516+ciarams87@users.noreply.github.com> Date: Thu, 6 Jun 2024 20:23:57 +0100 Subject: [PATCH 10/14] Add manual Graceful recovery results for 1.3.0 (#2102) --- tests/graceful-recovery/graceful-recovery.md | 109 +++--------------- .../graceful-recovery/results/1.3.0/1.3.0.md | 56 +++++++++ 2 files changed, 74 insertions(+), 91 deletions(-) create mode 100644 tests/graceful-recovery/results/1.3.0/1.3.0.md diff --git a/tests/graceful-recovery/graceful-recovery.md b/tests/graceful-recovery/graceful-recovery.md index 5e17a37b9e..15be7e2dc8 100644 --- a/tests/graceful-recovery/graceful-recovery.md +++ b/tests/graceful-recovery/graceful-recovery.md @@ -9,8 +9,6 @@ This document describes how we test graceful recovery from restarts on NGF. - [Steps](#steps) - [Setup](#setup) - [Run the tests](#run-the-tests) - - [Restart nginx-gateway container](#restart-nginx-gateway-container) - - [Restart NGINX container](#restart-nginx-container) - [Restart Node with draining](#restart-node-with-draining) - [Restart Node without draining](#restart-node-without-draining) @@ -21,139 +19,68 @@ Ensure that NGF can recover gracefully from container failures without any user ## Test Environment -- A Kubernetes cluster with 3 nodes on GKE - - Node: e2-medium (2 vCPU, 4GB memory) - A Kind cluster ## Steps ### Setup -1. Setup GKE Cluster. -2. Clone the repo and change into the nginx-gateway-fabric directory. -3. Check out the latest tag (unless you are installing the edge version from the main branch). -4. Go into `deploy/manifests/nginx-gateway.yaml` and change the following: +1. Deploy a one-Node Kind cluster. Can run `make create-kind-cluster` from main directory. + +2. Go into `deploy/manifests/nginx-gateway.yaml` and change the following: - `runAsNonRoot` from `true` to `false`: this allows us to insert our ephemeral container as root which enables us to restart the nginx-gateway container. - Add the `--product-telemetry-disable` argument to the nginx-gateway container args. -5. Follow the [installation instructions](https://github.com/nginxinc/nginx-gateway-fabric/blob/main/site/content/installation/installing-ngf/manifests.md) -to deploy NGINX Gateway Fabric using manifests and expose it through a LoadBalancer Service. -6. In a separate terminal track NGF logs. +3. Follow [this guide](https://docs.nginx.com/nginx-gateway-fabric/installation/running-on-kind/) to deploy NGINX Gateway Fabric using manifests and expose it through a NodePort Service. + +4. In a separate terminal track NGF logs. ```console kubectl -n nginx-gateway logs -f deploy/nginx-gateway -c nginx-gateway ``` -7. In a separate terminal track NGINX container logs. +5. In a separate terminal track NGINX container logs. ```console kubectl -n nginx-gateway logs -f deploy/nginx-gateway -c nginx ``` -8. In a separate terminal Exec into the NGINX container inside the NGF pod. +6. In a separate terminal Exec into the NGINX container inside the NGF pod. ```console - kubectl exec -it -n nginx-gateway --container nginx -- sh + kubectl exec -it -n nginx-gateway $(kubectl get pods -n nginx-gateway | sed -n '2s/^\([^[:space:]]*\).*$/\1/p') --container nginx -- sh ``` -9. In a different terminal, deploy the +7. In a different terminal, deploy the [https-termination example](https://github.com/nginxinc/nginx-gateway-fabric/tree/main/examples/https-termination). -10. Send traffic through the example application and ensure it is working correctly. +8. Send traffic through the example application and ensure it is working correctly. ### Run the tests -#### Restart nginx-gateway container - -1. Ensure NGF and NGINX container logs are set up and traffic flows through the example application correctly. -2. Insert ephemeral container in NGF Pod. - - ```console - kubectl debug -it -n nginx-gateway --image=busybox:1.28 --target=nginx-gateway - ``` - -3. Kill nginx-gateway process through a SIGKILL signal (Process command should start with `/usr/bin/gateway`). - - ```console - kill -9 - ``` - -4. Check for errors in the NGF and NGINX container logs. -5. When the nginx-gateway container is back up, ensure traffic flows through the example application correctly. -6. Open up the NGF and NGINX container logs and check for errors. -7. Send traffic through the example application and ensure it is working correctly. -8. Check that NGF can still process changes of resources. - 1. Delete the HTTPRoute resources. - - ```console - kubectl delete -f ../../examples/https-termination/cafe-routes.yaml - ``` - - 2. Send traffic through the example application using the updated resources and ensure traffic does not flow. - 3. Apply the HTTPRoute resources. - - ```console - kubectl apply -f ../../examples/https-termination/cafe-routes.yaml - ``` - - 4. Send traffic through the example application using the updated resources and ensure traffic flows correctly. - -#### Restart NGINX container - -1. Ensure NGF and NGINX container logs are set up and traffic flows through the example application correctly. -2. If the terminal inside the NGINX container is no longer running, Exec back into the NGINX container. -3. Inside the NGINX container, kill the nginx-master process through a SIGKILL signal -(Process command should start with `nginx: master process`). - - ```console - kill -9 - ``` - -4. When NGINX container is back up, ensure traffic flows through the example application correctly. -5. Open up the NGINX container logs and check for errors. -6. Check that NGF can still process changes of resources. - 1. Delete the HTTPRoute resources. - - ```console - kubectl delete -f ../../examples/https-termination/cafe-routes.yaml - ``` - - 2. Send traffic through the example application using the updated resources and ensure traffic does not flow. - 3. Apply the HTTPRoute resources. - - ```console - kubectl apply -f ../../examples/https-termination/cafe-routes.yaml - ``` - - 4. Send traffic through the example application using the updated resources and ensure traffic flows correctly. - #### Restart Node with draining -1. Switch over to a one-Node Kind cluster. Can run `make create-kind-cluster` from main directory. -2. Run steps 4-11 of the [Setup](#setup) section above using -[this guide](https://docs.nginx.com/nginx-gateway-fabric/installation/running-on-kind/) for running on Kind. -3. Ensure NGF and NGINX container logs are set up and traffic flows through the example application correctly. -4. Drain the Node of its resources. +1. Drain the Node of its resources. ```console kubectl drain kind-control-plane --ignore-daemonsets --delete-local-data ``` -5. Delete the Node. +2. Delete the Node. ```console kubectl delete node kind-control-plane ``` -6. Restart the Docker container. +3. Restart the Docker container. ```console docker restart kind-control-plane ``` -7. Check the logs of the old and new NGF and NGINX containers for errors. -8. Send traffic through the example application and ensure it is working correctly. -9. Check that NGF can still process changes of resources. +4. Check the logs of the old and new NGF and NGINX containers for errors. +5. Send traffic through the example application and ensure it is working correctly. +6. Check that NGF can still process changes of resources. 1. Delete the HTTPRoute resources. ```console @@ -171,4 +98,4 @@ to deploy NGINX Gateway Fabric using manifests and expose it through a LoadBalan #### Restart Node without draining -1. Repeat the above test but remove steps 4-5 which include draining and deleting the Node. +1. Repeat the above test but remove steps 1-2 which include draining and deleting the Node. diff --git a/tests/graceful-recovery/results/1.3.0/1.3.0.md b/tests/graceful-recovery/results/1.3.0/1.3.0.md new file mode 100644 index 0000000000..19b1556d68 --- /dev/null +++ b/tests/graceful-recovery/results/1.3.0/1.3.0.md @@ -0,0 +1,56 @@ +# Results for v1.3.0 + + +- [Results for v1.3.0](#results-for-v130) + - [Summary](#summary) + - [Versions](#versions) + - [Tests](#tests) + - [Restart Node with draining](#restart-node-with-draining) + - [Restart Node without draining](#restart-node-without-draining) + - [Future Improvements](#future-improvements) + + + +## Summary + +- No new issues since 1.1. +- Known issue https://github.com/nginxinc/nginx-gateway-fabric/issues/1108 still exists. + +## Versions + +NGF version: + + +```text +"version":"edge" +"commit":"c5f8dbe112ca1be261f73b9f5b4925cda3d5860a" +"date":"2024-06-06T04:07:01Z" +``` + +with NGINX: + +```text +nginx/1.27.0 +built by gcc 13.2.1 20231014 (Alpine 13.2.1_git20231014) +OS: Linux 6.6.26-linuxkit +``` + +Kubernetes: + +```text +v1.30.0 +``` + +## Tests + +### Restart Node with draining + +No errors. + +### Restart Node without draining + +Same issue as 1.1 where NGF is unable to recover: https://github.com/nginxinc/nginx-gateway-fabric/issues/1108 + +## Future Improvements + +- None From d46162d466237363297d1f9404c923c28e522e20 Mon Sep 17 00:00:00 2001 From: nginx-bot <68849795+nginx-bot@users.noreply.github.com> Date: Thu, 6 Jun 2024 13:41:00 -0700 Subject: [PATCH 11/14] NFR Test Results for NGF version 1.3.0 (#2107) --- tests/results/dp-perf/1.3.0/1.3.0.md | 84 ++++++++ tests/results/ngf-upgrade/1.3.0/1.3.0.md | 49 +++++ tests/results/ngf-upgrade/1.3.0/http.png | Bin 0 -> 4286 bytes tests/results/ngf-upgrade/1.3.0/https.png | Bin 0 -> 4286 bytes tests/results/scale/1.3.0/1.3.0.md | 202 ++++++++++++++++++ .../scale/1.3.0/TestScale_HTTPRoutes/cpu.png | Bin 0 -> 8111 bytes .../1.3.0/TestScale_HTTPRoutes/memory.png | Bin 0 -> 6872 bytes .../scale/1.3.0/TestScale_HTTPRoutes/ttr.png | Bin 0 -> 6573 bytes .../1.3.0/TestScale_HTTPSListeners/cpu.png | Bin 0 -> 6927 bytes .../1.3.0/TestScale_HTTPSListeners/memory.png | Bin 0 -> 5992 bytes .../1.3.0/TestScale_HTTPSListeners/ttr.png | Bin 0 -> 8992 bytes .../scale/1.3.0/TestScale_Listeners/cpu.png | Bin 0 -> 6712 bytes .../1.3.0/TestScale_Listeners/memory.png | Bin 0 -> 6204 bytes .../scale/1.3.0/TestScale_Listeners/ttr.png | Bin 0 -> 9556 bytes .../1.3.0/TestScale_UpstreamServers/cpu.png | Bin 0 -> 6447 bytes .../TestScale_UpstreamServers/memory.png | Bin 0 -> 5306 bytes 16 files changed, 335 insertions(+) create mode 100755 tests/results/dp-perf/1.3.0/1.3.0.md create mode 100755 tests/results/ngf-upgrade/1.3.0/1.3.0.md create mode 100644 tests/results/ngf-upgrade/1.3.0/http.png create mode 100644 tests/results/ngf-upgrade/1.3.0/https.png create mode 100755 tests/results/scale/1.3.0/1.3.0.md create mode 100644 tests/results/scale/1.3.0/TestScale_HTTPRoutes/cpu.png create mode 100644 tests/results/scale/1.3.0/TestScale_HTTPRoutes/memory.png create mode 100644 tests/results/scale/1.3.0/TestScale_HTTPRoutes/ttr.png create mode 100644 tests/results/scale/1.3.0/TestScale_HTTPSListeners/cpu.png create mode 100644 tests/results/scale/1.3.0/TestScale_HTTPSListeners/memory.png create mode 100644 tests/results/scale/1.3.0/TestScale_HTTPSListeners/ttr.png create mode 100644 tests/results/scale/1.3.0/TestScale_Listeners/cpu.png create mode 100644 tests/results/scale/1.3.0/TestScale_Listeners/memory.png create mode 100644 tests/results/scale/1.3.0/TestScale_Listeners/ttr.png create mode 100644 tests/results/scale/1.3.0/TestScale_UpstreamServers/cpu.png create mode 100644 tests/results/scale/1.3.0/TestScale_UpstreamServers/memory.png diff --git a/tests/results/dp-perf/1.3.0/1.3.0.md b/tests/results/dp-perf/1.3.0/1.3.0.md new file mode 100755 index 0000000000..239b1a754a --- /dev/null +++ b/tests/results/dp-perf/1.3.0/1.3.0.md @@ -0,0 +1,84 @@ +# Results + +## Test environment + +NGINX Plus: false + +GKE Cluster: + +- Node count: 12 +- k8s version: v1.28.9-gke.1000000 +- vCPUs per node: 16 +- RAM per node: 65855088Ki +- Max pods per node: 110 +- Zone: us-east1-b +- Instance Type: n2d-standard-16 + +## Summary + +- Performance seems to have improved. + +## Test1: Running latte path based routing + +```text +Requests [total, rate, throughput] 30000, 1000.03, 1000.00 +Duration [total, attack, wait] 30s, 29.999s, 934.498µs +Latencies [min, mean, 50, 90, 95, 99, max] 594.289µs, 940.484µs, 894.291µs, 1.076ms, 1.155ms, 1.475ms, 26.622ms +Bytes In [total, mean] 4740000, 158.00 +Bytes Out [total, mean] 0, 0.00 +Success [ratio] 100.00% +Status Codes [code:count] 200:30000 +Error Set: +``` + +## Test2: Running coffee header based routing + +```text +Requests [total, rate, throughput] 30000, 1000.00, 999.97 +Duration [total, attack, wait] 30.001s, 30s, 885.05µs +Latencies [min, mean, 50, 90, 95, 99, max] 630.729µs, 925.423µs, 909.768µs, 1.061ms, 1.117ms, 1.264ms, 10.285ms +Bytes In [total, mean] 4770000, 159.00 +Bytes Out [total, mean] 0, 0.00 +Success [ratio] 100.00% +Status Codes [code:count] 200:30000 +Error Set: +``` + +## Test3: Running coffee query based routing + +```text +Requests [total, rate, throughput] 30000, 1000.04, 1000.01 +Duration [total, attack, wait] 30s, 29.999s, 867.406µs +Latencies [min, mean, 50, 90, 95, 99, max] 649.447µs, 939.602µs, 913.399µs, 1.068ms, 1.137ms, 1.32ms, 36.366ms +Bytes In [total, mean] 5010000, 167.00 +Bytes Out [total, mean] 0, 0.00 +Success [ratio] 100.00% +Status Codes [code:count] 200:30000 +Error Set: +``` + +## Test4: Running tea GET method based routing + +```text +Requests [total, rate, throughput] 30000, 1000.02, 1000.00 +Duration [total, attack, wait] 30s, 29.999s, 798.43µs +Latencies [min, mean, 50, 90, 95, 99, max] 639.884µs, 941.213µs, 920.839µs, 1.067ms, 1.117ms, 1.266ms, 16.095ms +Bytes In [total, mean] 4680000, 156.00 +Bytes Out [total, mean] 0, 0.00 +Success [ratio] 100.00% +Status Codes [code:count] 200:30000 +Error Set: +``` + +## Test5: Running tea POST method based routing + +```text +Requests [total, rate, throughput] 30000, 1000.00, 999.97 +Duration [total, attack, wait] 30.001s, 30s, 1.006ms +Latencies [min, mean, 50, 90, 95, 99, max] 638.741µs, 951.815µs, 936.228µs, 1.085ms, 1.138ms, 1.261ms, 9.666ms +Bytes In [total, mean] 4680000, 156.00 +Bytes Out [total, mean] 0, 0.00 +Success [ratio] 100.00% +Status Codes [code:count] 200:30000 +Error Set: +``` diff --git a/tests/results/ngf-upgrade/1.3.0/1.3.0.md b/tests/results/ngf-upgrade/1.3.0/1.3.0.md new file mode 100755 index 0000000000..4654b4afce --- /dev/null +++ b/tests/results/ngf-upgrade/1.3.0/1.3.0.md @@ -0,0 +1,49 @@ +# Results + +## Test environment + +NGINX Plus: false + +GKE Cluster: + +- Node count: 12 +- k8s version: v1.28.9-gke.1000000 +- vCPUs per node: 16 +- RAM per node: 65855088Ki +- Max pods per node: 110 +- Zone: us-east1-b +- Instance Type: n2d-standard-16 + +## Summary + +- Similar results as last time. + +## Test: Send http /coffee traffic + +```text +Requests [total, rate, throughput] 6000, 100.02, 100.01 +Duration [total, attack, wait] 59.992s, 59.99s, 1.099ms +Latencies [min, mean, 50, 90, 95, 99, max] 795.938µs, 1.153ms, 1.119ms, 1.308ms, 1.386ms, 1.658ms, 13.45ms +Bytes In [total, mean] 954000, 159.00 +Bytes Out [total, mean] 0, 0.00 +Success [ratio] 100.00% +Status Codes [code:count] 200:6000 +Error Set: +``` + +![http.png](http.png) + +## Test: Send https /tea traffic + +```text +Requests [total, rate, throughput] 6000, 100.02, 100.00 +Duration [total, attack, wait] 59.999s, 59.991s, 7.907ms +Latencies [min, mean, 50, 90, 95, 99, max] 836.052µs, 1.21ms, 1.16ms, 1.38ms, 1.481ms, 1.842ms, 13.741ms +Bytes In [total, mean] 912000, 152.00 +Bytes Out [total, mean] 0, 0.00 +Success [ratio] 100.00% +Status Codes [code:count] 200:6000 +Error Set: +``` + +![https.png](https.png) diff --git a/tests/results/ngf-upgrade/1.3.0/http.png b/tests/results/ngf-upgrade/1.3.0/http.png new file mode 100644 index 0000000000000000000000000000000000000000..c738f8fd6b21beb445e7797e1721d84d95f755c2 GIT binary patch literal 4286 zcmds5X;4$i7QU`Hg2Yh_D3IXHJRKE?B7&HN#07;?L=6UkU>;Hz_0`%35y{nKnP0=2FQIEXWpxt-!oNHZ@T*4?t7~GeBamS^iucw zv7?7pt=zB@0Dx6C)(4IQz!C!hSbTED63CMOG1x$V^P=QhGjjSmq?_2SF(>7G%{GN~K^o0HFcr zp*Q)5q#ulvoWFf1tzRDqQ2~IKg!d!B0!0vb-wtY}faGH`3I((Rl$2ocok-bm^2>6c zimU2!d0!^Q0DJ;SW2LtM4lk2OKZbYmK~b~-ik21y4^;}~Y%S$1NLk>I2Q#617R(F; zYimJB4_Mn$o-PArnXHyNu&$-HC>q3Pf(A7;H3ETvKp-HINE{BAk&(e>v(q-5cm`?y zF3|c^2momQy6`Nzy-iaW0AMCI2lhG=)5dt}!MUdwU$uY13ADs&B22(7&+%HOGW7#% zQ%X;CTEsgm`1DftjCG|F()ou%{N$L{*@$Z8n1$Lq3%l(uiJmuD#Tcf?teLAnYSlAe z#-xjnV&IJ>y)DAQAH(ivgxT;g7wmQ9RJ~Lz!@Fc{FYT2iQv7|D;gPEIE0(5TTJcz- zGG;uw^ihTD62%Qy^KwZ|p@)WEUI?vGblecTwP}<(He6tZnS7qSMmk{rd~Eo07rIL% zmV9aJsvm1D71*KEL=SVAFex*qpxY#3`3u6?YBR1!^zto9xrQ{JCXPI0+%#-PpWtU( zuq9$X{75=7kv7h|pfDoqnPMJcVOW}u<~x=ALvg{!kd-2@ca?jZ-;;2D;Q0@&ILiu# zXRwhuwa;+7Ce`+}!eHK9L?XaibsB69hF&%ZXJ<|6-ob%L>yQYlY4q$k;=_1n30Y;a zE}^GqoS82ny$x3OR~g|}eF~!nt?>OoPV5Z$bwI8vuF>l>rzR`9tOF&_^}{ z^?S=tC7_j?X{_F%H=*tvW18qss5%MbLEYYx}%Like_-hH>{KXW6FxXH#ej1NkT2 z`RVnKYxH>0tNTvOqbWgbSIcF({Ko_}BV1hHauf4erdMkUucdqsy}p1}Jg~+(O4Ws_ z*@qOwMPrtkX1KA#(f;Cd{Ghh^D7rge5@N8kl$`oyZn_OZ8fs%9~%TwAR~6@j@ST8 z-;S+Ln5TAFx!#^{pEwp4bmlh`kE++S-=$mlRd(`u%UE4EGeIGHqJJhmW9R$SN0(sc zYOVJXq`vMjnJiY~7+qaZiNJV8&Uo3a_%v5@j(CxTC3a2AIO(!ABXc!FTyl0OmiS>> zHuOc>FS#6%LK@|Vo60}+f5)kh;#S2qNrukxS!DQ@BuS(!Sv-K9xnT7tb^mR{V+%+7 zbDz3dVCSk)qx}v>t5ucr=!$1{iw6pO*>QQpZEDBOMeL7*rU=Z1NTOO*c%aMk{RVzP z7#zbiCGO%8Sb)1iv!FFd166#}s<%Tpy)a2G&?My*T!9vyZ4k-qg~iO|v|*XNKq+ik*>6%Qita)=XO%^5U*~^wdb*U1oy$#1nlCCN517u9p-XDSIp)XpF(q z&nXN)bU<*nFr2iBdKoDV8@I_FspDiPAVqiAZTyRp?{5pjw*~vpM@NSTMm$TZ+&WvI zYn)n@Rd^H@;33lVUpUf2!%vzEUnEZsf6n97Gq^9}Xgq>n&>lVLY_$zZL-3A(IO1A? zwsqmC$5SQq7wP!KC6jqOvdvkE%My#wR)bKEJ|ao{3!dmK(6R1etL5ZvObQOZEXPr0 zo;4_X_N8U70;c?^jy&~eb8AM(iwDN$6oP@GVY?mN-o~KMKeBDKSB!fOSqgODOiTv( z&)su2sAi0R_sKMjPChonA!t?*$KyMmAwPc8;=H+FvPFS@N5IUQH^$xcqo189A$c8g&mrqTmgP^25*S z2H2pcYGx`=b>@qd<0zj|?4pYxC$){$t7rCZT-rMCl=A4(ySorbD{9-mzv{UBUy{X^ zYn&I^#E3k|U$nr{_?U5z!Urnt=w+(WEvg>%wb#gxGjxSo;aj_q{>0Da@8#-8CkXdO zRvn#KN2mHJ>-5ZF#ZLT63O#OVd%nj1Ku05OudzDtv>nd@4&0r0VVq?iiGwqU8!l2 zl|@2#UHCQ{bb)q3`I>C?r_G|f#~Ot8AxZfiX3U|`{b`b*{b@JHzMfAcsVcX$ik$p) zJK-sdU{`Ge3JAWzQ&S#ES=q4p=Uut(Ud6Mso3>q1cR`f7=ZkZgP>1DSob3PY+9d zun34TcxZ#OwKfamU4J^ofd+Ma>pdC=*bnZ&qjp1#d(cQJ#Mo}-V{gq2R%G}lr;KQ) z0A0BOz3O*&&D6f+RLteD{Kk5-(X6*C#joxh8dLwtjq9*jd>dBYIQdkcI(o`*tfA~R z$`0*&ZF0@$#*kAy4Op*PuF-4f99V*Dfd6S7bbuDr3iXkAoLM8}+mk1IR3bHFptTvWbmOnCFHdDrc% zkLP+`@~hE#@!u%w9%?Z*!+B4(^^_rChm&q7R=LES+33ohe7eeq_dq!qZv^XQaliiS z(#r~Ny?szr^ahqU%9xf)@Xe=*XS@6fhB4I*Hk->Z-n-q1`qAdT!6Ee?3LgQA6`hz; z3s`D#%z7Byw@jy@dG&Z>R!t<1cZQ1IKH5^cS%`1ZNo=3JU)3Kx!WVu){8orL;F7zZ VN22ad;DZ+|HdaRu6zn@2`yV5W9`yhK literal 0 HcmV?d00001 diff --git a/tests/results/ngf-upgrade/1.3.0/https.png b/tests/results/ngf-upgrade/1.3.0/https.png new file mode 100644 index 0000000000000000000000000000000000000000..c738f8fd6b21beb445e7797e1721d84d95f755c2 GIT binary patch literal 4286 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 VN22ad;DZ+|HdaRu6zn@2`yV5W9`yhK literal 0 HcmV?d00001 diff --git a/tests/results/scale/1.3.0/1.3.0.md b/tests/results/scale/1.3.0/1.3.0.md new file mode 100755 index 0000000000..a13e18888d --- /dev/null +++ b/tests/results/scale/1.3.0/1.3.0.md @@ -0,0 +1,202 @@ +# Results + +## Test environment + +NGINX Plus: false + +GKE Cluster: + +- Node count: 12 +- k8s version: v1.28.9-gke.1000000 +- vCPUs per node: 16 +- RAM per node: 65855088Ki +- Max pods per node: 110 +- Zone: us-east1-b +- Instance Type: n2d-standard-16 + +## Summary + +- New look since we are now auto-generating these results +- Batch processing time has reduced +- Reload time is similar (slightly better in some cases) +- Metrics (CPU, memory, TTR) all seem to be better, though this could be because of the automation instead of being a manual process. + +## Test TestScale_Listeners + +### Reloads + +- Total: 126 +- Total Errors: 0 +- Average Time: 140ms +- Reload distribution: + - 500ms: 126 + - 1000ms: 126 + - 5000ms: 126 + - 10000ms: 126 + - 30000ms: 126 + - +Infms: 126 + +### Event Batch Processing + +- Total: 385 +- Average Time: 124ms +- Event Batch Processing distribution: + - 500ms: 350 + - 1000ms: 383 + - 5000ms: 385 + - 10000ms: 385 + - 30000ms: 385 + - +Infms: 385 + +### Errors + +- NGF errors: 0 +- NGF container restarts: 0 +- NGINX errors: 0 +- NGINX container restarts: 0 + +### Graphs and Logs + +See [output directory](./TestScale_Listeners) for more details. +The logs are attached only if there are errors. + +## Test TestScale_HTTPSListeners + +### Reloads + +- Total: 128 +- Total Errors: 0 +- Average Time: 165ms +- Reload distribution: + - 500ms: 128 + - 1000ms: 128 + - 5000ms: 128 + - 10000ms: 128 + - 30000ms: 128 + - +Infms: 128 + +### Event Batch Processing + +- Total: 451 +- Average Time: 115ms +- Event Batch Processing distribution: + - 500ms: 411 + - 1000ms: 450 + - 5000ms: 451 + - 10000ms: 451 + - 30000ms: 451 + - +Infms: 451 + +### Errors + +- NGF errors: 0 +- NGF container restarts: 0 +- NGINX errors: 0 +- NGINX container restarts: 0 + +### Graphs and Logs + +See [output directory](./TestScale_HTTPSListeners) for more details. +The logs are attached only if there are errors. + +## Test TestScale_HTTPRoutes + +### Reloads + +- Total: 1001 +- Total Errors: 0 +- Average Time: 363ms +- Reload distribution: + - 500ms: 756 + - 1000ms: 1001 + - 5000ms: 1001 + - 10000ms: 1001 + - 30000ms: 1001 + - +Infms: 1001 + +### Event Batch Processing + +- Total: 1008 +- Average Time: 408ms +- Event Batch Processing distribution: + - 500ms: 665 + - 1000ms: 1008 + - 5000ms: 1008 + - 10000ms: 1008 + - 30000ms: 1008 + - +Infms: 1008 + +### Errors + +- NGF errors: 0 +- NGF container restarts: 0 +- NGINX errors: 0 +- NGINX container restarts: 0 + +### Graphs and Logs + +See [output directory](./TestScale_HTTPRoutes) for more details. +The logs are attached only if there are errors. + +## Test TestScale_UpstreamServers + +### Reloads + +- Total: 117 +- Total Errors: 0 +- Average Time: 125ms +- Reload distribution: + - 500ms: 117 + - 1000ms: 117 + - 5000ms: 117 + - 10000ms: 117 + - 30000ms: 117 + - +Infms: 117 + +### Event Batch Processing + +- Total: 119 +- Average Time: 194ms +- Event Batch Processing distribution: + - 500ms: 119 + - 1000ms: 119 + - 5000ms: 119 + - 10000ms: 119 + - 30000ms: 119 + - +Infms: 119 + +### Errors + +- NGF errors: 0 +- NGF container restarts: 0 +- NGINX errors: 0 +- NGINX container restarts: 0 + +### Graphs and Logs + +See [output directory](./TestScale_UpstreamServers) for more details. +The logs are attached only if there are errors. + +## Test TestScale_HTTPMatches + +```text +Requests [total, rate, throughput] 29999, 1000.01, 999.04 +Duration [total, attack, wait] 30s, 29.999s, 933.413µs +Latencies [min, mean, 50, 90, 95, 99, max] 543.448µs, 920.709µs, 856.122µs, 988.132µs, 1.045ms, 1.255ms, 35.219ms +Bytes In [total, mean] 4799756, 160.00 +Bytes Out [total, mean] 0, 0.00 +Success [ratio] 99.91% +Status Codes [code:count] 200:29971 502:28 +Error Set: +502 Bad Gateway +``` +```text +Requests [total, rate, throughput] 29999, 1000.03, 1000.00 +Duration [total, attack, wait] 29.999s, 29.998s, 932.511µs +Latencies [min, mean, 50, 90, 95, 99, max] 693.08µs, 957.533µs, 941.256µs, 1.085ms, 1.133ms, 1.262ms, 3.726ms +Bytes In [total, mean] 4799840, 160.00 +Bytes Out [total, mean] 0, 0.00 +Success [ratio] 100.00% +Status Codes [code:count] 200:29999 +Error Set: +``` diff --git a/tests/results/scale/1.3.0/TestScale_HTTPRoutes/cpu.png b/tests/results/scale/1.3.0/TestScale_HTTPRoutes/cpu.png new file mode 100644 index 0000000000000000000000000000000000000000..b80d220740a3e3e6fcc9d647bb109ced1398c200 GIT binary patch literal 8111 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 S)CFZJ*E*Vd8s%ya!u|)BASJ;7 literal 0 HcmV?d00001 diff --git a/tests/results/scale/1.3.0/TestScale_HTTPRoutes/memory.png b/tests/results/scale/1.3.0/TestScale_HTTPRoutes/memory.png new file mode 100644 index 0000000000000000000000000000000000000000..738350e52adb88e00981901b3aead453289d52b3 GIT binary patch literal 6872 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 literal 0 HcmV?d00001 diff --git a/tests/results/scale/1.3.0/TestScale_HTTPSListeners/cpu.png b/tests/results/scale/1.3.0/TestScale_HTTPSListeners/cpu.png new file mode 100644 index 0000000000000000000000000000000000000000..b9583e7282fc919ef95dfcfe914402e1a974ba9c GIT binary patch literal 6927 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 e#J8PEGTKDULlbVqi>EQ$1RKz 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 literal 0 HcmV?d00001 diff --git a/tests/results/scale/1.3.0/TestScale_HTTPSListeners/ttr.png b/tests/results/scale/1.3.0/TestScale_HTTPSListeners/ttr.png new file mode 100644 index 0000000000000000000000000000000000000000..8ea0b8abb1680035822062b05f0de25bcd5c0ec8 GIT binary patch literal 8992 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 literal 0 HcmV?d00001 diff --git a/tests/results/scale/1.3.0/TestScale_Listeners/memory.png b/tests/results/scale/1.3.0/TestScale_Listeners/memory.png new file mode 100644 index 0000000000000000000000000000000000000000..305f5a20cb688c8e2b13ea79cfae16d0dbd67935 GIT binary patch literal 6204 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 D3s_Fx literal 0 HcmV?d00001 diff --git a/tests/results/scale/1.3.0/TestScale_UpstreamServers/cpu.png b/tests/results/scale/1.3.0/TestScale_UpstreamServers/cpu.png new file mode 100644 index 0000000000000000000000000000000000000000..e27e78f31fa3dd7bfd8152e3a5f4c796f6c5eaba GIT binary patch literal 6447 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 Q*OuM3Fta{cX5t?GU#xGl(f|Me literal 0 HcmV?d00001 diff --git a/tests/results/scale/1.3.0/TestScale_UpstreamServers/memory.png b/tests/results/scale/1.3.0/TestScale_UpstreamServers/memory.png new file mode 100644 index 0000000000000000000000000000000000000000..0dca37dabd3529a48167bd6efbb08adf38594284 GIT binary patch literal 5306 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 literal 0 HcmV?d00001 From 9d07512bc1d0378c0f0fd0bc6c22e6f8dbd09f58 Mon Sep 17 00:00:00 2001 From: nginx-bot <68849795+nginx-bot@users.noreply.github.com> Date: Thu, 6 Jun 2024 13:56:54 -0700 Subject: [PATCH 12/14] NFR Test Results for NGF version 1.3.0 (Plus) (#2110) --- tests/results/dp-perf/1.3.0/1.3.0-plus.md | 84 +++++++ tests/results/ngf-upgrade/1.3.0/1.3.0-plus.md | 49 +++++ tests/results/ngf-upgrade/1.3.0/http-plus.png | Bin 0 -> 4332 bytes .../results/ngf-upgrade/1.3.0/https-plus.png | Bin 0 -> 4332 bytes tests/results/scale/1.3.0/1.3.0-plus.md | 206 ++++++++++++++++++ .../1.3.0/TestScale_HTTPRoutes/cpu-plus.png | Bin 0 -> 8086 bytes .../TestScale_HTTPRoutes/memory-plus.png | Bin 0 -> 6791 bytes .../1.3.0/TestScale_HTTPRoutes/ttr-plus.png | Bin 0 -> 6882 bytes .../TestScale_HTTPSListeners/cpu-plus.png | Bin 0 -> 7255 bytes .../TestScale_HTTPSListeners/memory-plus.png | Bin 0 -> 6168 bytes .../TestScale_HTTPSListeners/ttr-plus.png | Bin 0 -> 9245 bytes .../1.3.0/TestScale_Listeners/cpu-plus.png | Bin 0 -> 6854 bytes .../1.3.0/TestScale_Listeners/memory-plus.png | Bin 0 -> 5983 bytes .../1.3.0/TestScale_Listeners/ttr-plus.png | Bin 0 -> 8887 bytes .../TestScale_UpstreamServers/cpu-plus.png | Bin 0 -> 6570 bytes .../TestScale_UpstreamServers/memory-plus.png | Bin 0 -> 5470 bytes 16 files changed, 339 insertions(+) create mode 100755 tests/results/dp-perf/1.3.0/1.3.0-plus.md create mode 100755 tests/results/ngf-upgrade/1.3.0/1.3.0-plus.md create mode 100644 tests/results/ngf-upgrade/1.3.0/http-plus.png create mode 100644 tests/results/ngf-upgrade/1.3.0/https-plus.png create mode 100755 tests/results/scale/1.3.0/1.3.0-plus.md create mode 100644 tests/results/scale/1.3.0/TestScale_HTTPRoutes/cpu-plus.png create mode 100644 tests/results/scale/1.3.0/TestScale_HTTPRoutes/memory-plus.png create mode 100644 tests/results/scale/1.3.0/TestScale_HTTPRoutes/ttr-plus.png create mode 100644 tests/results/scale/1.3.0/TestScale_HTTPSListeners/cpu-plus.png create mode 100644 tests/results/scale/1.3.0/TestScale_HTTPSListeners/memory-plus.png create mode 100644 tests/results/scale/1.3.0/TestScale_HTTPSListeners/ttr-plus.png create mode 100644 tests/results/scale/1.3.0/TestScale_Listeners/cpu-plus.png create mode 100644 tests/results/scale/1.3.0/TestScale_Listeners/memory-plus.png create mode 100644 tests/results/scale/1.3.0/TestScale_Listeners/ttr-plus.png create mode 100644 tests/results/scale/1.3.0/TestScale_UpstreamServers/cpu-plus.png create mode 100644 tests/results/scale/1.3.0/TestScale_UpstreamServers/memory-plus.png diff --git a/tests/results/dp-perf/1.3.0/1.3.0-plus.md b/tests/results/dp-perf/1.3.0/1.3.0-plus.md new file mode 100755 index 0000000000..f9d749f94a --- /dev/null +++ b/tests/results/dp-perf/1.3.0/1.3.0-plus.md @@ -0,0 +1,84 @@ +# Results + +## Test environment + +NGINX Plus: true + +GKE Cluster: + +- Node count: 12 +- k8s version: v1.28.9-gke.1000000 +- vCPUs per node: 16 +- RAM per node: 65855088Ki +- Max pods per node: 110 +- Zone: us-east1-b +- Instance Type: n2d-standard-16 + +## Summary + +Similar results to last time. + +## Test1: Running latte path based routing + +```text +Requests [total, rate, throughput] 30000, 1000.04, 1000.01 +Duration [total, attack, wait] 30s, 29.999s, 998.021µs +Latencies [min, mean, 50, 90, 95, 99, max] 658.142µs, 996.64µs, 951.429µs, 1.093ms, 1.145ms, 1.386ms, 26.648ms +Bytes In [total, mean] 4770000, 159.00 +Bytes Out [total, mean] 0, 0.00 +Success [ratio] 100.00% +Status Codes [code:count] 200:30000 +Error Set: +``` + +## Test2: Running coffee header based routing + +```text +Requests [total, rate, throughput] 30000, 1000.04, 1000.01 +Duration [total, attack, wait] 30s, 29.999s, 870.391µs +Latencies [min, mean, 50, 90, 95, 99, max] 700.225µs, 1.01ms, 981.048µs, 1.134ms, 1.186ms, 1.329ms, 21.685ms +Bytes In [total, mean] 4800000, 160.00 +Bytes Out [total, mean] 0, 0.00 +Success [ratio] 100.00% +Status Codes [code:count] 200:30000 +Error Set: +``` + +## Test3: Running coffee query based routing + +```text +Requests [total, rate, throughput] 30000, 1000.06, 1000.03 +Duration [total, attack, wait] 29.999s, 29.998s, 964.352µs +Latencies [min, mean, 50, 90, 95, 99, max] 712.998µs, 984.528µs, 966.316µs, 1.114ms, 1.172ms, 1.319ms, 11.864ms +Bytes In [total, mean] 5040000, 168.00 +Bytes Out [total, mean] 0, 0.00 +Success [ratio] 100.00% +Status Codes [code:count] 200:30000 +Error Set: +``` + +## Test4: Running tea GET method based routing + +```text +Requests [total, rate, throughput] 30000, 1000.04, 1000.01 +Duration [total, attack, wait] 30s, 29.999s, 853.087µs +Latencies [min, mean, 50, 90, 95, 99, max] 702.09µs, 1.007ms, 976.392µs, 1.13ms, 1.188ms, 1.361ms, 27.968ms +Bytes In [total, mean] 4710000, 157.00 +Bytes Out [total, mean] 0, 0.00 +Success [ratio] 100.00% +Status Codes [code:count] 200:30000 +Error Set: +``` + +## Test5: Running tea POST method based routing + +```text +Requests [total, rate, throughput] 30000, 1000.04, 1000.00 +Duration [total, attack, wait] 30s, 29.999s, 1.149ms +Latencies [min, mean, 50, 90, 95, 99, max] 715.853µs, 989.369µs, 974.707µs, 1.127ms, 1.184ms, 1.355ms, 3.77ms +Bytes In [total, mean] 4710000, 157.00 +Bytes Out [total, mean] 0, 0.00 +Success [ratio] 100.00% +Status Codes [code:count] 200:30000 +Error Set: +``` diff --git a/tests/results/ngf-upgrade/1.3.0/1.3.0-plus.md b/tests/results/ngf-upgrade/1.3.0/1.3.0-plus.md new file mode 100755 index 0000000000..ce71aebf45 --- /dev/null +++ b/tests/results/ngf-upgrade/1.3.0/1.3.0-plus.md @@ -0,0 +1,49 @@ +# Results + +## Test environment + +NGINX Plus: true + +GKE Cluster: + +- Node count: 12 +- k8s version: v1.28.9-gke.1000000 +- vCPUs per node: 16 +- RAM per node: 65855088Ki +- Max pods per node: 110 +- Zone: us-east1-b +- Instance Type: n2d-standard-16 + +## Summary + +Similar results to last time. + +## Test: Send https /tea traffic + +```text +Requests [total, rate, throughput] 6000, 100.02, 100.01 +Duration [total, attack, wait] 59.991s, 59.99s, 1.392ms +Latencies [min, mean, 50, 90, 95, 99, max] 666.477µs, 1.359ms, 1.276ms, 1.74ms, 1.894ms, 2.331ms, 50.572ms +Bytes In [total, mean] 924000, 154.00 +Bytes Out [total, mean] 0, 0.00 +Success [ratio] 100.00% +Status Codes [code:count] 200:6000 +Error Set: +``` + +![https-plus.png](https-plus.png) + +## Test: Send http /coffee traffic + +```text +Requests [total, rate, throughput] 6000, 100.02, 100.01 +Duration [total, attack, wait] 59.991s, 59.99s, 1.589ms +Latencies [min, mean, 50, 90, 95, 99, max] 886.813µs, 1.521ms, 1.464ms, 1.864ms, 2.029ms, 2.426ms, 13.752ms +Bytes In [total, mean] 966000, 161.00 +Bytes Out [total, mean] 0, 0.00 +Success [ratio] 100.00% +Status Codes [code:count] 200:6000 +Error Set: +``` + +![http-plus.png](http-plus.png) diff --git a/tests/results/ngf-upgrade/1.3.0/http-plus.png b/tests/results/ngf-upgrade/1.3.0/http-plus.png new file mode 100644 index 0000000000000000000000000000000000000000..95432e96fca657ce52e6aa0084c15ccf4e16983d GIT binary patch literal 4332 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 literal 0 HcmV?d00001 diff --git a/tests/results/scale/1.3.0/TestScale_HTTPRoutes/memory-plus.png b/tests/results/scale/1.3.0/TestScale_HTTPRoutes/memory-plus.png new file mode 100644 index 0000000000000000000000000000000000000000..cd424f3594eb7bf489436472a7abbc818da1b5bf GIT binary patch literal 6791 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 JCpBB#e*xPdG*18k literal 0 HcmV?d00001 diff --git a/tests/results/scale/1.3.0/TestScale_HTTPRoutes/ttr-plus.png b/tests/results/scale/1.3.0/TestScale_HTTPRoutes/ttr-plus.png new file mode 100644 index 0000000000000000000000000000000000000000..336e43c45a8158059d1e0288d5d51e24bf75ab84 GIT binary patch literal 6882 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 KMr8&rk^cilS5Ywl literal 0 HcmV?d00001 diff --git a/tests/results/scale/1.3.0/TestScale_HTTPSListeners/memory-plus.png b/tests/results/scale/1.3.0/TestScale_HTTPSListeners/memory-plus.png new file mode 100644 index 0000000000000000000000000000000000000000..24fce2a4d879b0fcd9417ff15ddfdc9d0c6157ac GIT binary patch literal 6168 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 literal 0 HcmV?d00001 diff --git a/tests/results/scale/1.3.0/TestScale_HTTPSListeners/ttr-plus.png b/tests/results/scale/1.3.0/TestScale_HTTPSListeners/ttr-plus.png new file mode 100644 index 0000000000000000000000000000000000000000..7077b462ae0bd91f0c7cd92a5adbc0875ac5024a GIT binary patch literal 9245 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 literal 0 HcmV?d00001 diff --git a/tests/results/scale/1.3.0/TestScale_Listeners/memory-plus.png b/tests/results/scale/1.3.0/TestScale_Listeners/memory-plus.png new file mode 100644 index 0000000000000000000000000000000000000000..23db3c1f0c2629754d45c006da923c1f62d5e037 GIT binary patch literal 5983 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 literal 0 HcmV?d00001 diff --git a/tests/results/scale/1.3.0/TestScale_Listeners/ttr-plus.png b/tests/results/scale/1.3.0/TestScale_Listeners/ttr-plus.png new file mode 100644 index 0000000000000000000000000000000000000000..33b161a849d1928536baf62c4066db1d735322be GIT binary patch literal 8887 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 literal 0 HcmV?d00001 diff --git a/tests/results/scale/1.3.0/TestScale_UpstreamServers/memory-plus.png b/tests/results/scale/1.3.0/TestScale_UpstreamServers/memory-plus.png new file mode 100644 index 0000000000000000000000000000000000000000..6a626777bd42a22082e0e6402f60dc3863ee86b5 GIT binary patch literal 5470 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 literal 0 HcmV?d00001 From 7e00ed3bf918d21c6af29b83a80a45ac5a2b4503 Mon Sep 17 00:00:00 2001 From: Ciara Stacke <18287516+ciarams87@users.noreply.github.com> Date: Fri, 7 Jun 2024 10:47:28 +0100 Subject: [PATCH 13/14] Add GRPCRoute to list of core Gateway APIs in architecture doc (#2103) Add GRPCRoute to list of core Gateeway APIs --- site/content/overview/gateway-architecture.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/content/overview/gateway-architecture.md b/site/content/overview/gateway-architecture.md index 8f9ffed086..8c1af15c27 100644 --- a/site/content/overview/gateway-architecture.md +++ b/site/content/overview/gateway-architecture.md @@ -15,7 +15,7 @@ The reader needs to be familiar with core Kubernetes concepts, such as pods, dep ## NGINX Gateway Fabric Overview -NGINX Gateway Fabric is an open source project that provides an implementation of the [Gateway API](https://gateway-api.sigs.k8s.io/) using [NGINX](https://nginx.org/) as the data plane. The goal of this project is to implement the core Gateway APIs -- _Gateway_, _GatewayClass_, _HTTPRoute_, _TCPRoute_, _TLSRoute_, and _UDPRoute_ -- to configure an HTTP or TCP/UDP load balancer, reverse proxy, or API gateway for applications running on Kubernetes. NGINX Gateway Fabric supports a subset of the Gateway API. +NGINX Gateway Fabric is an open source project that provides an implementation of the [Gateway API](https://gateway-api.sigs.k8s.io/) using [NGINX](https://nginx.org/) as the data plane. The goal of this project is to implement the core Gateway APIs -- _Gateway_, _GatewayClass_, _HTTPRoute_, _GRPCRoute_, _TCPRoute_, _TLSRoute_, and _UDPRoute_ -- to configure an HTTP or TCP/UDP load balancer, reverse proxy, or API gateway for applications running on Kubernetes. NGINX Gateway Fabric supports a subset of the Gateway API. For a list of supported Gateway API resources and features, see the [Gateway API Compatibility]({{< relref "/overview/gateway-api-compatibility.md" >}}) documentation. From 7c9bf23ed89861c9ce7b725f2c1686f4c24ef2f9 Mon Sep 17 00:00:00 2001 From: Ciara Stacke <18287516+ciarams87@users.noreply.github.com> Date: Fri, 7 Jun 2024 11:25:38 +0100 Subject: [PATCH 14/14] Add specific instruction for upgrading NGF from OSS to Plus (#2104) * Add specific instruction for upgrading OSS to Plus * Update site/content/installation/installing-ngf/manifests.md Co-authored-by: Alan Dooley --------- Co-authored-by: Alan Dooley --- site/content/installation/installing-ngf/helm.md | 16 +++++++++++++++- .../installation/installing-ngf/manifests.md | 16 +++++++++++++++- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/site/content/installation/installing-ngf/helm.md b/site/content/installation/installing-ngf/helm.md index 49f19084a5..4123826b17 100644 --- a/site/content/installation/installing-ngf/helm.md +++ b/site/content/installation/installing-ngf/helm.md @@ -37,7 +37,7 @@ helm install ngf oci://ghcr.io/nginxinc/charts/nginx-gateway-fabric --create-nam ##### For NGINX Plus -{{< note >}}Replace `private-registry.nginx.com` with the proper registry for your NGINX Plus image, and if applicable, replace `nginx-plus-registry-secret` with your Secret name containing the registry credentials.{{< /note >}} +{{< note >}}If applicable, replace the F5 Container registry `private-registry.nginx.com` with your internal registry for your NGINX Plus image, and replace `nginx-plus-registry-secret` with your Secret name containing the registry credentials.{{< /note >}} {{< important >}}Ensure that you [Enable Usage Reporting]({{< relref "installation/usage-reporting.md" >}}) when installing.{{< /important >}} @@ -183,6 +183,20 @@ To upgrade the CRDs, take the following steps: If needed, replace `ngf` with your chosen release name. +## How to upgrade from NGINX OSS to NGINX Plus + +- To upgrade from NGINX OSS to NGINX Plus, update the Helm command to include the necessary values for Plus: + + {{< note >}}If applicable, replace the F5 Container registry `private-registry.nginx.com` with your internal registry for your NGINX Plus image, and replace `nginx-plus-registry-secret` with your Secret name containing the registry credentials.{{< /note >}} + + {{< important >}}Ensure that you [Enable Usage Reporting]({{< relref "installation/usage-reporting.md" >}}) when installing.{{< /important >}} + + ```shell + helm upgrade ngf oci://ghcr.io/nginxinc/charts/nginx-gateway-fabric --set nginx.image.repository=private-registry.nginx.com/nginx-gateway-fabric/nginx-plus --set nginx.plus=true --set serviceAccount.imagePullSecret=nginx-plus-registry-secret -n nginx-gateway + ``` + + If needed, replace `ngf` with your chosen release name. + ## Delay pod termination for zero downtime upgrades {#configure-delayed-pod-termination-for-zero-downtime-upgrades} {{< include "installation/delay-pod-termination/delay-pod-termination-overview.md" >}} diff --git a/site/content/installation/installing-ngf/manifests.md b/site/content/installation/installing-ngf/manifests.md index 07a6c4cb03..81977fc382 100644 --- a/site/content/installation/installing-ngf/manifests.md +++ b/site/content/installation/installing-ngf/manifests.md @@ -167,12 +167,26 @@ To upgrade NGINX Gateway Fabric and get the latest features and improvements, ta 1. **Upgrade NGINX Gateway Fabric deployment:** - - To upgrade the deployment, run: + - To upgrade your OSS deployment, run: ```shell kubectl apply -f https://github.com/nginxinc/nginx-gateway-fabric/releases/download/v1.2.0/nginx-gateway.yaml ``` + - To upgrade your Plus deployment: + + Download the [deployment YAML](https://github.com/nginxinc/nginx-gateway-fabric/releases/download/v1.2.0/nginx-plus-gateway.yaml). + + Update the `nginx-plus-gateway.yaml` file to include your chosen NGINX Plus image from the F5 Container registry or your custom image. + + ```shell + kubectl apply -f nginx-plus-gateway.yaml + ``` + + - To upgrade the deployment from NGINX OSS to NGINX Plus, follow the above instructions for upgrading your Plus deployment. + + {{< important >}}Ensure that you [Enable Usage Reporting]({{< relref "installation/usage-reporting.md" >}}) before applying.{{< /important >}} + ## Delay pod termination for zero downtime upgrades {#configure-delayed-pod-termination-for-zero-downtime-upgrades} {{< include "installation/delay-pod-termination/delay-pod-termination-overview.md" >}}