Problem
charts/nebari-llm-serving/values.yaml (defaults.epp.image) and operator/internal/config/config.go (LLM_DEFAULT_EPP_IMAGE fallback) both default to ghcr.io/llm-d/llm-d-inference-scheduler:v0.8.0. That package is gone: llm-d renamed https://github.com/llm-d/llm-d-inference-scheduler to https://github.com/llm-d/llm-d-router, the EPP image to ghcr.io/llm-d/llm-d-router-endpoint-picker (see EPP_IMAGE_NAME in its Makefile), and removed the old GHCR package. Anonymous pulls return 403 DENIED. Every fresh install and every EPP pod reschedule now fails with ImagePullBackOff.
There is no v0.8.0 tag under the new name. Public tags are v0.9.0, v0.10.0 and their rcs.
Observed in production on 2026-08-21; one customer EPP pod has been in ImagePullBackOff since, and the surviving pod cannot be rescheduled. Worked around in https://github.com/Concepts-NREC/Nebari-GitOps/pull/86 by setting defaults.epp.image.
Compatibility check done against v0.9.0
The operator's rendered config (eppDefaultConfig in operator/internal/controller/reconcilers/inferencepool.go) and container args were checked against llm-d-router v0.9.0:
max-score-picker and single-profile-handler are registered under the same names (cmd/epp/runner/runner.go).
- All flags the operator passes exist; gRPC health is still served on
--grpc-health-port.
- Built against Gateway API Inference Extension v1.5.0;
--pool-group supports only inference.networking.k8s.io/v1, which is what the operator creates.
x-gateway-destination-endpoint is unchanged. EPP metrics were renamed to llm_d_epp_*; check any dashboards we ship.
- The config
apiVersion the operator renders, inference.networking.x-k8s.io/v1alpha1, is accepted but logs DEPRECATION ... replacement llm-d.ai/v1alpha1/EndpointPickerConfig (pkg/epp/config/loader/configloader.go). v0.10.0 still accepts it; do not count on later releases doing so.
Note v0.9.0 forked the whole EPP runtime into llm-d-router (v0.8.0 was a thin wrapper over the upstream GIE runner). The surface we use is unchanged, but it is a real upgrade, not a patch.
Fix
- Change both defaults to
ghcr.io/llm-d/llm-d-router-endpoint-picker:v0.9.0.
- Change
eppDefaultConfig apiVersion to llm-d.ai/v1alpha1.
- Update the comment on
defaults.epp.image (it still says "llm-d-inference-scheduler" and "same llm-d v0.7.0 release").
- Add a CI job that does an anonymous manifest HEAD against every image default in
values.yaml so a renamed upstream package fails a build instead of a customer pull.
Problem
charts/nebari-llm-serving/values.yaml(defaults.epp.image) andoperator/internal/config/config.go(LLM_DEFAULT_EPP_IMAGEfallback) both default toghcr.io/llm-d/llm-d-inference-scheduler:v0.8.0. That package is gone: llm-d renamed https://github.com/llm-d/llm-d-inference-scheduler to https://github.com/llm-d/llm-d-router, the EPP image toghcr.io/llm-d/llm-d-router-endpoint-picker(seeEPP_IMAGE_NAMEin its Makefile), and removed the old GHCR package. Anonymous pulls return 403DENIED. Every fresh install and every EPP pod reschedule now fails with ImagePullBackOff.There is no
v0.8.0tag under the new name. Public tags arev0.9.0,v0.10.0and their rcs.Observed in production on 2026-08-21; one customer EPP pod has been in ImagePullBackOff since, and the surviving pod cannot be rescheduled. Worked around in https://github.com/Concepts-NREC/Nebari-GitOps/pull/86 by setting
defaults.epp.image.Compatibility check done against v0.9.0
The operator's rendered config (
eppDefaultConfiginoperator/internal/controller/reconcilers/inferencepool.go) and container args were checked against llm-d-routerv0.9.0:max-score-pickerandsingle-profile-handlerare registered under the same names (cmd/epp/runner/runner.go).--grpc-health-port.--pool-groupsupports onlyinference.networking.k8s.io/v1, which is what the operator creates.x-gateway-destination-endpointis unchanged. EPP metrics were renamed tollm_d_epp_*; check any dashboards we ship.apiVersionthe operator renders,inference.networking.x-k8s.io/v1alpha1, is accepted but logsDEPRECATION ... replacement llm-d.ai/v1alpha1/EndpointPickerConfig(pkg/epp/config/loader/configloader.go). v0.10.0 still accepts it; do not count on later releases doing so.Note v0.9.0 forked the whole EPP runtime into llm-d-router (v0.8.0 was a thin wrapper over the upstream GIE runner). The surface we use is unchanged, but it is a real upgrade, not a patch.
Fix
ghcr.io/llm-d/llm-d-router-endpoint-picker:v0.9.0.eppDefaultConfigapiVersiontollm-d.ai/v1alpha1.defaults.epp.image(it still says "llm-d-inference-scheduler" and "same llm-d v0.7.0 release").values.yamlso a renamed upstream package fails a build instead of a customer pull.