Repository navigation
Conversation
Server pods now get one environment variable per listener, FLUSS_ADVERTISED_LISTENER_<NAME>, holding that listener's advertised address as <host>:<port>. Tools such as the Fluss Agent can read these values instead of rebuilding the addresses outside the chart. Before this change, the startup command built bind.listeners and advertised.listeners as shell variables and wrote them into server.yaml. Only CLIENT was advertised. Fluss advertises a listener that is missing from advertised.listeners at its bind address, so INTERNAL was advertised as <pod IP>:<internal port>. The chart now: - adds the env entries after POD_NAME, POD_NAMESPACE and POD_IP and references them with $(VAR), so Kubernetes expands the values when it starts the container - publishes INTERNAL as $(POD_IP):<port>, the address Fluss already registers, and every other listener as the pod's headless-service DNS name - builds advertised.listeners from the new env vars, so the published and the registered addresses cannot differ - generates the env vars, bind.listeners and advertised.listeners by looping over .Values.listeners, so additional listeners need no template changes Fluss behaves the same as before: the registered listeners are the same as with the previous chart. Tested with new helm-unittest cases (listeners_env_test.yaml) and on a kind cluster with apache/fluss:1.0.0-rc3. On every pod, the env values matched the listeners the server registered in ZooKeeper.
morazow
marked this pull request as ready for review
October 26, 2026 15:38
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Generative AI disclosure: Yes. Claude Code (Claude Opus 5.5) was used.
Purpose
Linked issue: close #4894
Server pods publish each listener's advertised address as an environment variable,
FLUSS_ADVERTISED_LISTENER_<NAME>. Tooling running next to the cluster can read the addresses from the pod instead of rebuilding them from the chart's naming rules.Brief change log
_helpers.tpl: add three helpers that loop over.Values.listeners:fluss.listeners.advertisedEnvemits oneFLUSS_ADVERTISED_LISTENER_<NAME>=<host>:<port>entry per listener.INTERNALuses$(POD_IP), which is the address Fluss already registers for it, since a listener missing fromadvertised.listenersis advertised at its bind address. The other listeners use the pod's headless-service DNS name.fluss.listeners.bindbuildsbind.listeners.fluss.listeners.advertisedbuildsadvertised.listenersfrom the new env vars, so the published and the registered addresses cannot differ.sts-coordinator.yaml,sts-tablet.yaml: add the env entries afterPOD_NAME,POD_NAMESPACEandPOD_IP(Kubernetes only expands$(VAR)references to entries defined earlier). The startup command uses the helpers instead of the inline listener strings.deploying-with-helm.md: document the variables.The registered listeners do not change. With the default values, rendered
server.yamllines become:Note:
kubectl describeandkubectl get -o yamlshow the$(VAR)form. The kubelet expands the references only when it starts the container.Tests
helm/tests/listeners_env_test.yaml(9 cases): env values for both server types, custom ports, an additional listener, and the generatedbind.listeners/advertised.listenersstrings. All 157 chart tests pass andhelm lintis clean.apache/fluss:1.0.0-rc3, 1 coordinator and 3 tablet servers: on every pod, the expanded env values matched the listeners the server registered in ZooKeeper.API and Format
No.
Documentation
Yes, a paragraph in
website/docs/install-deploy/deploying-with-helm.md(Network Configuration).🤖 Generated with Claude Code