From 27e13b4fb0ce7615f3e8bf05a06e3464b78e09c9 Mon Sep 17 00:00:00 2001 From: Jarvis Date: Tue, 25 Aug 2026 06:21:00 +0000 Subject: [PATCH 1/3] chore: upgrade api7 and gateway to v3.10.6 Version bumps for the 3.10.6 release: appVersion and the image tags on both charts, and each chart's own per-line version counter. Also exposes apisix.streamPlugins on the gateway chart. 3.10.6 adds four L4 Prometheus metrics, two of which are backed by a shared memory zone that apisix init only renders into nginx.conf when prometheus is in stream_plugins. That list is not in the chart and config-default.yaml ships it commented out, so the metrics could not be turned on from the chart at all - enableCustomizedConfig replaces the whole config.yaml and discards every templated value, which is not a usable path for adding one list. The value is empty by default and renders nothing when unset, so an existing release keeps the image default unchanged. Nothing else needed syncing: the Control Plane helm/ directory is unchanged between v3.10.5 and v3.10.6, and the only new gateway config key, nginx_config.stream.metrics_zone_size, is left to the image default of 1m, which the upstream comment records as covering any realistic number of stream listening addresses. --- charts/api7/Chart.yaml | 4 ++-- charts/api7/README.md | 12 +++++++----- charts/api7/values.yaml | 8 ++++---- charts/gateway/Chart.yaml | 4 ++-- charts/gateway/README.md | 3 ++- charts/gateway/templates/configmap.yaml | 5 +++++ charts/gateway/values.yaml | 10 +++++++++- 7 files changed, 31 insertions(+), 15 deletions(-) diff --git a/charts/api7/Chart.yaml b/charts/api7/Chart.yaml index 42bfab1..49e70f3 100644 --- a/charts/api7/Chart.yaml +++ b/charts/api7/Chart.yaml @@ -17,13 +17,13 @@ type: application # Versions are expected to follow Semantic Versioning (https://semver.org/) # major.minor mirrors the API7 EE release line (3.10.x), patch is this chart's # own counter on that line and is decoupled from the app patch (see appVersion). -version: 3.10.5 +version: 3.10.6 # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -appVersion: "3.10.5" +appVersion: "3.10.6" maintainers: - name: API7 diff --git a/charts/api7/README.md b/charts/api7/README.md index b1391d9..9de4114 100644 --- a/charts/api7/README.md +++ b/charts/api7/README.md @@ -1,6 +1,6 @@ # api7ee3 -![Version: 3.10.5](https://img.shields.io/badge/Version-3.10.5-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 3.10.5](https://img.shields.io/badge/AppVersion-3.10.5-informational?style=flat-square) +![Version: 3.10.6](https://img.shields.io/badge/Version-3.10.6-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 3.10.6](https://img.shields.io/badge/AppVersion-3.10.6-informational?style=flat-square) A Helm chart for Kubernetes @@ -29,7 +29,7 @@ A Helm chart for Kubernetes | dashboard.extraVolumes | list | `[]` | | | dashboard.image.pullPolicy | string | `"Always"` | | | dashboard.image.repository | string | `"api7/api7-ee-3-integrated"` | | -| dashboard.image.tag | string | `"v3.10.5"` | | +| dashboard.image.tag | string | `"v3.10.6"` | | | dashboard.keyCertSecret | string | `""` | | | dashboard.livenessProbe.failureThreshold | int | `30` | | | dashboard.livenessProbe.initialDelaySeconds | int | `180` | | @@ -123,7 +123,7 @@ A Helm chart for Kubernetes | developer_portal.extraVolumes | list | `[]` | | | developer_portal.image.pullPolicy | string | `"Always"` | | | developer_portal.image.repository | string | `"api7/api7-ee-developer-portal"` | | -| developer_portal.image.tag | string | `"v3.10.5"` | | +| developer_portal.image.tag | string | `"v3.10.6"` | | | developer_portal.keyCertSecret | string | `""` | | | developer_portal.livenessProbe.failureThreshold | int | `10` | | | developer_portal.livenessProbe.initialDelaySeconds | int | `60` | | @@ -173,7 +173,7 @@ A Helm chart for Kubernetes | dp_manager.extraVolumes | list | `[]` | | | dp_manager.image.pullPolicy | string | `"Always"` | | | dp_manager.image.repository | string | `"api7/api7-ee-dp-manager"` | | -| dp_manager.image.tag | string | `"v3.10.5"` | | +| dp_manager.image.tag | string | `"v3.10.6"` | | | dp_manager.livenessProbe.failureThreshold | int | `10` | | | dp_manager.livenessProbe.initialDelaySeconds | int | `60` | | | dp_manager.livenessProbe.periodSeconds | int | `3` | | @@ -241,7 +241,7 @@ A Helm chart for Kubernetes | file_server.extraEnvVars | list | `[]` | | | file_server.image.pullPolicy | string | `"Always"` | | | file_server.image.repository | string | `"api7/api7-ee-file-server"` | | -| file_server.image.tag | string | `"v3.10.5"` | | +| file_server.image.tag | string | `"v3.10.6"` | | | file_server.livenessProbe.failureThreshold | int | `10` | | | file_server.livenessProbe.initialDelaySeconds | int | `60` | | | file_server.livenessProbe.periodSeconds | int | `3` | | @@ -303,3 +303,5 @@ A Helm chart for Kubernetes | tolerations | list | `[]` | | | topologySpreadConstraints | list | `[]` | Topology Spread Constraints for pod assignment https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/ The value is evaluated as a template | +---------------------------------------------- +Autogenerated from chart metadata using [helm-docs v1.14.2](https://github.com/norwoodj/helm-docs/releases/v1.14.2) diff --git a/charts/api7/values.yaml b/charts/api7/values.yaml index e79a1ab..7b56455 100644 --- a/charts/api7/values.yaml +++ b/charts/api7/values.yaml @@ -18,7 +18,7 @@ dashboard: repository: api7/api7-ee-3-integrated pullPolicy: Always # Overrides the image tag whose default is the chart appVersion. - tag: "v3.10.5" + tag: "v3.10.6" # Resources of the deployment. # It has a higher priority than the common resources configuration: # when this field is configured, it is used first in the deployment, @@ -55,7 +55,7 @@ dp_manager: repository: api7/api7-ee-dp-manager pullPolicy: Always # Overrides the image tag whose default is the chart appVersion. - tag: "v3.10.5" + tag: "v3.10.6" # Resources of the deployment. # It has a higher priority than the common resources configuration: # when this field is configured, it is used first in the deployment, @@ -92,7 +92,7 @@ file_server: image: repository: api7/api7-ee-file-server pullPolicy: Always - tag: "v3.10.5" + tag: "v3.10.6" extraEnvVars: [] livenessProbe: @@ -112,7 +112,7 @@ developer_portal: repository: api7/api7-ee-developer-portal pullPolicy: Always # Overrides the image tag whose default is the chart appVersion. - tag: "v3.10.5" + tag: "v3.10.6" extraEnvVars: [] extraVolumes: [] diff --git a/charts/gateway/Chart.yaml b/charts/gateway/Chart.yaml index aaf4e2b..ce7c07a 100644 --- a/charts/gateway/Chart.yaml +++ b/charts/gateway/Chart.yaml @@ -16,12 +16,12 @@ type: application # Versions are expected to follow Semantic Versioning (https://semver.org/) # major.minor mirrors the API7 EE release line (3.10.x), patch is this chart's # own counter on that line and is decoupled from the app patch (see appVersion). -version: 3.10.12 +version: 3.10.13 # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. -appVersion: "3.10.5" +appVersion: "3.10.6" maintainers: - name: API7 diff --git a/charts/gateway/README.md b/charts/gateway/README.md index 5e6ae95..56fc4d5 100644 --- a/charts/gateway/README.md +++ b/charts/gateway/README.md @@ -158,7 +158,7 @@ apisix: | apisix.httpRouter | string | `"radixtree_host_uri"` | Defines how apisix handles routing: - radixtree_uri: match route by uri(base on radixtree) - radixtree_host_uri: match route by host + uri(base on radixtree) - radixtree_uri_with_parameter: match route by uri with parameters | | apisix.image.pullPolicy | string | `"Always"` | API7 Gateway image pull policy | | apisix.image.repository | string | `"api7/api7-ee-3-gateway"` | API7 Gateway image repository | -| apisix.image.tag | string | `"3.10.5"` | API7 Gateway image tag Overrides the image tag whose default is the chart appVersion. | +| apisix.image.tag | string | `"3.10.6"` | API7 Gateway image tag Overrides the image tag whose default is the chart appVersion. | | apisix.kind | string | `"Deployment"` | Use a `DaemonSet` or `Deployment` | | apisix.lru | object | `{"secret":{"count":512,"neg_count":512,"neg_ttl":60,"ttl":300}}` | fine tune the parameters of LRU cache for some features like secret | | apisix.lru.secret.count | int | `512` | Maximum number of cached secret values | @@ -194,6 +194,7 @@ apisix: | apisix.setIDFromPodUID | bool | `false` | Use Pod metadata.uid as the APISIX id. | | apisix.showUpstreamStatusInResponseHeader | bool | `false` | When true, the upstream status is always written to the `X-APISIX-Upstream-Status` response header; when false, it is written only for 5xx responses | | apisix.stream.luaSharedDict | object | `{"config-stream":"5m","etcd-cluster-health-check-stream":"10m","lrucache-lock-stream":"10m","nacos-stream":"64m","plugin-limit-conn-stream":"10m","tars-stream":"1m","worker-events-stream":"10m"}` | Shared dict settings for the stream (L4 proxy) subsystem | +| apisix.streamPlugins | list | `[]` | Stream (L4) plugin list, rendered as `stream_plugins` in `config.yaml`. Leave it empty to keep the gateway image's own default, which does not enable `prometheus`. Set it to enable the L4 Prometheus metrics: the `apisix_stream_active_connections` and `apisix_stream_bandwidth` metrics need the shared memory zone that `apisix init` only renders when `prometheus` is in this list. | | apisix.terminationGracePeriodSeconds | int | `180` | Seconds the whole termination sequence may take, from the pod being marked for deletion to SIGKILL. It covers the `preStop` sleep and the graceful shutdown that follows, during which nginx finishes in-flight requests before exiting (bounded by `nginx.workerShutdownTimeout`, 240s by default). At the Kubernetes default of 30s the `preStop` sleep alone consumes the entire budget, so in-flight requests are cut off during a rolling update or a scale-down. | | apisix.timezone | string | `""` | timezone is the timezone where apisix uses. For example: "UTC" or "Asia/Shanghai" This value will be set on apisix container's environment variable TZ. You may need to set the timezone to be consistent with your local time zone, otherwise the apisix's logs may used to retrieve event maybe in wrong timezone. | | apisix.tolerations | list | `[]` | List of node taints to tolerate | diff --git a/charts/gateway/templates/configmap.yaml b/charts/gateway/templates/configmap.yaml index 132d94d..813dd4d 100644 --- a/charts/gateway/templates/configmap.yaml +++ b/charts/gateway/templates/configmap.yaml @@ -172,6 +172,11 @@ data: tracing: {{ .Values.apisix.tracing }} + {{- with .Values.apisix.streamPlugins }} + stream_plugins: + {{- toYaml . | nindent 6 }} + {{- end }} + nginx_config: # config for render the template to genarate nginx.conf error_log: "{{ .Values.logs.errorLog }}" error_log_level: "{{ .Values.logs.errorLogLevel }}" # warn,error diff --git a/charts/gateway/values.yaml b/charts/gateway/values.yaml index 31c56f5..05a4809 100644 --- a/charts/gateway/values.yaml +++ b/charts/gateway/values.yaml @@ -192,6 +192,14 @@ apisix: # - radixtree_uri_with_parameter: match route by uri with parameters httpRouter: radixtree_host_uri + # -- Stream (L4) plugin list, rendered as `stream_plugins` in `config.yaml`. + # Leave it empty to keep the gateway image's own default, which does not + # enable `prometheus`. Set it to enable the L4 Prometheus metrics: the + # `apisix_stream_active_connections` and `apisix_stream_bandwidth` metrics + # need the shared memory zone that `apisix init` only renders when + # `prometheus` is in this list. + streamPlugins: [] + # -- Enable full customized config.yaml enableCustomizedConfig: false # -- If apisix.enableCustomizedConfig is true, full customized config.yaml. @@ -205,7 +213,7 @@ apisix: pullPolicy: Always # -- API7 Gateway image tag # Overrides the image tag whose default is the chart appVersion. - tag: 3.10.5 + tag: 3.10.6 # -- Use a `DaemonSet` or `Deployment` kind: Deployment From e975d7f14895dda83bb0f43b7ba8fca47bccb608 Mon Sep 17 00:00:00 2001 From: Jarvis Date: Tue, 25 Aug 2026 06:40:05 +0000 Subject: [PATCH 2/3] chore: drop the helm-docs footer the repo does not carry The local pre-commit hook runs helm-docs v1.14.2, which appends an Autogenerated footer to charts without a README.md.gotmpl. CI runs a version that does not, and every committed README is in that form, so the footer made the helm-docs check fail on charts/api7/README.md. --- charts/api7/README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/charts/api7/README.md b/charts/api7/README.md index 9de4114..8832b17 100644 --- a/charts/api7/README.md +++ b/charts/api7/README.md @@ -303,5 +303,3 @@ A Helm chart for Kubernetes | tolerations | list | `[]` | | | topologySpreadConstraints | list | `[]` | Topology Spread Constraints for pod assignment https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/ The value is evaluated as a template | ----------------------------------------------- -Autogenerated from chart metadata using [helm-docs v1.14.2](https://github.com/norwoodj/helm-docs/releases/v1.14.2) From 3058baa8463ffb624ef184a50fdeefd2f506a373 Mon Sep 17 00:00:00 2001 From: Jarvis Date: Tue, 25 Aug 2026 06:43:05 +0000 Subject: [PATCH 3/3] chore: drop the streamPlugins value AGENTS.md is explicit that the gateway chart must not expose the enabled plugins / stream_plugins list, because the Control Plane owns it through the etcd /plugins key. Adding it here was the wrong layer, so the PR goes back to a pure version bump. The gap that motivated it is real but belongs to the gateway: the apisix_stream_metrics_zone directive is gated on yaml_conf.stream_plugins in apisix/cli/ops.lua, which apisix init reads from config.yaml before etcd is consulted, so the Control Plane's own plugin list can never enable it. A Kubernetes deployment therefore cannot export apisix_stream_active_connections or apisix_stream_bandwidth. Fixing that means changing what the directive is gated on, not what the chart renders. --- charts/gateway/README.md | 1 - charts/gateway/templates/configmap.yaml | 5 ----- charts/gateway/values.yaml | 8 -------- 3 files changed, 14 deletions(-) diff --git a/charts/gateway/README.md b/charts/gateway/README.md index 56fc4d5..05b7853 100644 --- a/charts/gateway/README.md +++ b/charts/gateway/README.md @@ -194,7 +194,6 @@ apisix: | apisix.setIDFromPodUID | bool | `false` | Use Pod metadata.uid as the APISIX id. | | apisix.showUpstreamStatusInResponseHeader | bool | `false` | When true, the upstream status is always written to the `X-APISIX-Upstream-Status` response header; when false, it is written only for 5xx responses | | apisix.stream.luaSharedDict | object | `{"config-stream":"5m","etcd-cluster-health-check-stream":"10m","lrucache-lock-stream":"10m","nacos-stream":"64m","plugin-limit-conn-stream":"10m","tars-stream":"1m","worker-events-stream":"10m"}` | Shared dict settings for the stream (L4 proxy) subsystem | -| apisix.streamPlugins | list | `[]` | Stream (L4) plugin list, rendered as `stream_plugins` in `config.yaml`. Leave it empty to keep the gateway image's own default, which does not enable `prometheus`. Set it to enable the L4 Prometheus metrics: the `apisix_stream_active_connections` and `apisix_stream_bandwidth` metrics need the shared memory zone that `apisix init` only renders when `prometheus` is in this list. | | apisix.terminationGracePeriodSeconds | int | `180` | Seconds the whole termination sequence may take, from the pod being marked for deletion to SIGKILL. It covers the `preStop` sleep and the graceful shutdown that follows, during which nginx finishes in-flight requests before exiting (bounded by `nginx.workerShutdownTimeout`, 240s by default). At the Kubernetes default of 30s the `preStop` sleep alone consumes the entire budget, so in-flight requests are cut off during a rolling update or a scale-down. | | apisix.timezone | string | `""` | timezone is the timezone where apisix uses. For example: "UTC" or "Asia/Shanghai" This value will be set on apisix container's environment variable TZ. You may need to set the timezone to be consistent with your local time zone, otherwise the apisix's logs may used to retrieve event maybe in wrong timezone. | | apisix.tolerations | list | `[]` | List of node taints to tolerate | diff --git a/charts/gateway/templates/configmap.yaml b/charts/gateway/templates/configmap.yaml index 813dd4d..132d94d 100644 --- a/charts/gateway/templates/configmap.yaml +++ b/charts/gateway/templates/configmap.yaml @@ -172,11 +172,6 @@ data: tracing: {{ .Values.apisix.tracing }} - {{- with .Values.apisix.streamPlugins }} - stream_plugins: - {{- toYaml . | nindent 6 }} - {{- end }} - nginx_config: # config for render the template to genarate nginx.conf error_log: "{{ .Values.logs.errorLog }}" error_log_level: "{{ .Values.logs.errorLogLevel }}" # warn,error diff --git a/charts/gateway/values.yaml b/charts/gateway/values.yaml index 05a4809..7c8bd26 100644 --- a/charts/gateway/values.yaml +++ b/charts/gateway/values.yaml @@ -192,14 +192,6 @@ apisix: # - radixtree_uri_with_parameter: match route by uri with parameters httpRouter: radixtree_host_uri - # -- Stream (L4) plugin list, rendered as `stream_plugins` in `config.yaml`. - # Leave it empty to keep the gateway image's own default, which does not - # enable `prometheus`. Set it to enable the L4 Prometheus metrics: the - # `apisix_stream_active_connections` and `apisix_stream_bandwidth` metrics - # need the shared memory zone that `apisix init` only renders when - # `prometheus` is in this list. - streamPlugins: [] - # -- Enable full customized config.yaml enableCustomizedConfig: false # -- If apisix.enableCustomizedConfig is true, full customized config.yaml.