Repository navigation
feat(sglang,vllm): run the router's wait-upstreams on debian:12-slim - #102
Conversation
wait-upstreams only does DNS lookups, but it ran on the router image, so an override lacking bash, getent or awk would leave the router stuck in init. Move it to debian:12-slim in sglang 0.9.31 and vllm 0.9.3, independent of pd.router.imageOverride. Add pd.router.waitUpstreamsImage so mirrored and air-gapped sites have a way to change it; an emptied value falls back to debian. Routers roll once on upgrade, and sites without Docker Hub access must mirror the image. Verified: helm lint --strict on both charts, helm unittest (sglang 33/33, vllm 42/42), and new tests fail when the change is reverted. Render changes only the init container's image line in pd-ds; colocate is unchanged. Image tools were checked from its published layers. Not yet run on a cluster. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@zoboth please review. |
|
Merging with an admin override of the required GitHub review, at the PR author's request, for an urgent customer test. The author reports that internal review passed; that review isn't recorded on this PR. CI is green on |
zoboth
left a comment
There was a problem hiding this comment.
I read through the full diff (Chart.yaml bumps, both _helpers.tpl additions, both pd-ds.yaml image-line changes, both values.schema.json/values.yaml additions, and all the new/changed unittest cases).
Non-blocking notes (all already called out in "Known gaps," nothing new found):
wait-upstreamsnow runs as root on sglang'sdebian:12-sliminit container (it ran as uid 65532 on the smg image before). A cluster enforcing a non-root pod security policy would reject the whole pod, and there's nowaitUpstreamsImage-levelsecurityContextto setrunAsUseras a workaround today.- A bad router image typo now surfaces only after
wait-upstreamsfinishes instead of immediately asImagePullBackOff— acceptable tradeoff per the description, just flagging it's a real behavior change for on-call. debian:12-slimis a moving tag; since you already have the digest handy (sha256:99c0b25c…), pinning it would remove that variable if reproducibility across environments becomes a concern.- Air-gapped/mirrored sites (swiss's
Registry.Mirror, modelsphere's image rewrite, the offline bundle) need a manual addition forwaitUpstreamsImage— worth a fast-follow ticket before any Docker-Hub-less site takes this upgrade.
The template/schema/values changes line up with the stated behavior, and the new unit tests (default, override-leaves-init-alone, mirrored override, emptied-falls-back-to-debian) cover the paths the description claims are tested.
Verdict: approve
What type of PR is this?
What this PR does and why
The PD router's
wait-upstreamsinit container ran on the router image, so whateverpd.router.imageOverridenamed also had to be able to run this script. We have seen an image that works properly as the router but cannot runwait-upstreams, which left a working router blocked by a container that only does DNS lookups.This moves
wait-upstreamstodebian:12-slimin both sglang (0.9.31) and vllm (0.9.3). Changing the router image no longer affects it.It also adds
pd.router.waitUpstreamsImage(repository,tag), because a hard-coded image would leave mirrored and air-gapped sites with no workaround. It uses the same helper pattern as the router image, and an emptied value falls back to debian.Rollout impact
debian:12-slimand setpd.router.waitUpstreamsImage, on vllm as well as sglang. swiss'sRegistry.Mirror, modelsphere's image rewrite and the offline bundle don't cover it, the same gap as the router image.Rollback: pin the sglang chart below
0.9.31, or vllm below0.9.3.Known gaps
wait-upstreamsused to pull the router image first, so a typo showed up straight away asInit:ImagePullBackOff. Now the image is only pulled afterwait-upstreamsfinishes, which can take as long as engine placement does.bash -lcboot script and probes, so this doesn't remove that requirement.wait-upstreamsruns as root on sglang. It ran as uid 65532 on the smg image, and debian sets noUSER. A cluster policy requiring non-root would reject it, and the chart has no setting to change this. vllm's router image already ran as root.12-slimis a moving tag. The risk is low for a script this small. Today's digest issha256:99c0b25c…if we'd rather pin it.hack/check-chart-images.shcan't see this image because it renders defaults, where PD is off. The router images have the same blind spot, noted in feat(sglang,vllm): run the sglang PD router on smg; move router state to /tmp #100.Which issue(s) this PR fixes
No issue filed. Follow-up to #100.
How it was tested
Run for this PR, on both charts:
Chart.yamlbumps): in pd-ds, only the init container's image line changes on both charts. Colocate is byte-identical on both, because it has nowait-upstreams.waitUpstreamsImageis rejected on both charts.debian:12-slimamd64 layers, not by running it:bash,getent,awk(mawk),sort,wcandsleepare all present, and the config sets noUSER, so it runs as root.Not tested on a cluster. The container hasn't resolved real cluster DNS yet. Still to do:
wait-upstreamsshould complete and the router reach 1/1.not fully placedand keeps waiting.Checks
values.yamlcomments and schema; neither chart has a README)Release note
🤖 Generated with Claude Code