Skip to content

Default EPP image ghcr.io/llm-d/llm-d-inference-scheduler:v0.8.0 no longer exists #174

Description

@tylerpotts

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

  1. Change both defaults to ghcr.io/llm-d/llm-d-router-endpoint-picker:v0.9.0.
  2. Change eppDefaultConfig apiVersion to llm-d.ai/v1alpha1.
  3. Update the comment on defaults.epp.image (it still says "llm-d-inference-scheduler" and "same llm-d v0.7.0 release").
  4. 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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Fields

    Priority

    None yet

    Start date

    None yet

    Target date

    None yet

    Size

    None yet

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions