apache / apache/fluss

[helm] `render-jaas-config` init container has no resources, so SASL-enabled pods can never reach Guaranteed QoS

Open
#3,979 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Java
Stars
2.1k
Forks
625
Avg merge
3d 14h
Merged PRs (30d)
97

Description

### Search before asking

- [x] I searched in the [issues](https://github.com/apache/fluss/issues) and found nothing similar.

### Description

### Problem

The Helm chart's JAAS init container has no `resources` block.

It is defined in `helm/templates/_jaas.tpl` (`fluss.security.jaas.initContainer`, the `render-jaas-config` container) and rendered into both StatefulSets (`sts-coordinator.yaml`, `sts-tablet.yaml`) whenever `fluss.security.jaas.required` evaluates true, i.e. on every SASL-enabled install.

Kubernetes computes the pod Quality of Service (QoS) class over init containers as well as regular containers. A container with no requests and limits makes the whole pod `Burstable`, even when every main container sets `requests == limits`.

So a SASL enabled Fluss cluster cannot reach `Guaranteed` QoS, whatever the user puts in `values.yaml` `resources`. The `Guaranteed` matters for benchmark and production placement: it puts the server pods last in the eviction order under node pressure.

There is no workaround through values: `coordinator.initContainers` / `tablet.initContainers` only append extra containers, they cannot modify the chart-injected one.

### Proposal

Give the container `requests == limits`.

Two options:

1. A fixed small default (for example `100m` CPU / `128Mi` memory). The container only runs `envsubst` plus two file copies, so a small constant is safe. Downside: it contradicts the chart's stated policy of not defaulting`resources`.

2. A values knob, for example `security.jaasInitContainer.resources`, empty by default, applied to the container when set. This matches the existing `resources: {}` philosophy and is fully backwards compatible.

Either way the pod's effective request does not grow for scheduling: init containers run before the main containers, and the scheduler uses `max(any init container, sum of main containers)`, so any value at or below the main container's size changes nothing except the QoS class.

### Willingness to contribute

- [x] I'm willing to submit a PR!

Contributor guide

No contributing guide indexed for this repository

Research direction

Start in helm/templates/_jaas.tpl at fluss.security.jaas.initContainer and inspect how the render-jaas-config container is rendered into sts-coordinator.yaml and sts-tablet.yaml when JAAS is required. Review the chart's existing resources values and rendering checks, then verify a SASL-enabled render gives the init container the intended resource behavior without changing ordinary installs.

Written by the indexing model from the issue text.

Assessment

Tech stack
helm, kubernetes
Domain
devops, infrastructure
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
68/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.