Skip to content

recipes: design grounded qualification for the OKE gpuStack profile #2363

Description

@yuanchen8911

The problem

OKE is the only family whose gpuStack varies two dimensions independently:

Advertiser Driver
oci-default OKE add-on node image
operator-plugin GPU Operator node image
operator-managed GPU Operator GPU Operator

GKE's coupled modes can be separated by one grounded fact, and AKS's single varying axis by one provider projection. #2355 uses two ClusterPolicy readings — but both read back fields rendered by the selected value; neither observes external advertiser or driver ownership. So each value satisfies its own readiness constraints by construction, and a wrong external mode passes pre-flight.

Gating question

Can AICR derive a durable, externally grounded image-supplied vs operator-supplied driver classification for every supported OKE GPU pool, fail closed when pools disagree, and reproduce that classification at generation and again at validation?

OCI exposes NodePool.nodeSourceDetails.imageId, but OKE custom images can carry arbitrary modifications, so an OCID alone does not establish driver ownership. Resolving this likely needs an allowlist of known image OCIDs, an image tag or naming contract, provisioning metadata, or an explicit supported-image contract.

Second assumption, not yet resolved

The advertiser axis is not settled either. The oci.oraclecloud.com/disable-gpu-device-plugin=true label covers the node-label disablement route, but DGXC disables the plugin by removing the add-on, which leaves no node marker. Either NKX-9804 makes the label the canonical contract even under add-on removal, or AICR needs a normalized projection combining cluster add-on state with per-pool labels — an add-on-state projection alone does not cover per-pool label opt-outs while the add-on remains installed. The choice below is not decided by the driver signal alone.

Options

  • A — Two grounded facts. Advertiser from the label (or an add-on projection); driver from an OCI pool projection, mirroring the AKS --aks-gpu-pools pattern. All three values qualify on ordinary durable profile constraints — evaluated at generation when a snapshot is supplied and re-evaluated at validation. No readinessConstraints, no new phase. Needs both assumptions resolved.
  • B — Two-value profile. Ship oci-default and operator-plugin, both restricted to driver-bearing images and requiring GPU.hardware.driver-loaded=true; distinguish them by the advertiser fact. Defer operator-managed. Needs one distinguishing fact, but still needs that common driver-present invariant.
  • C — ClusterPolicy readback (current feat(recipes): gpuStack profile for the OKE family #2355). Rejected: self-satisfying. The readings do distinguish the bundle-rendered values from each other — which is all ADR-015 currently requires — but they do not qualify the external pool mode. This is precisely the gap the proposed ADR amendment below would close.
  • D — Generation-only constraints. Would make driver-loaded usable on fresh pools, but mis-selects when regenerating from an already-deployed cluster. Not viable as the primary mechanism.
  • E — Defer the profile. ADR-015's own position when no value has a distinguisher.

What is needed to decide

Representative evidence for every intended class — not another PR revision:

  • Oracle GPU image pool
  • Driver-bearing custom image pool, if supported
  • Driverless custom image pool
  • Label-based plugin disablement
  • Add-on removal
  • Mixed-pool aggregation behavior

Completion criteria

This issue is done when it:

  1. selects A, B, or E;
  2. defines behavior for mixed and unavailable pool data (fail closed, and what the diagnostic says);
  3. identifies how the data is acquired at both phases — generation and validation;
  4. records the supported custom-image contract, i.e. what makes an image classifiable.

Candidate ADR-015 amendment

To land separately, in its own PR, once this resolves:

Each independently varying axis must be grounded in observed state external to the profile's rendered desired configuration, and the combined observations must uniquely identify every declared value. Reading back desired fields rendered by the selected value provides drift detection, not profile qualification.

Related

#2355, #2356, #2347, #2359, NKX-9804, and ADR-015 (docs/design/015-recipe-configuration-profiles.md)

Activity

  1. atif1996 commented on Aug 31, 2026

    @atif1996
    Contributor

    Decision

    Settled with @yuanchen8911 (Slack, 2026-08-31) and implemented in #2355 (681a5362):

    Selected: Option A, narrowed to two values. oci-managed (Oracle GPU image driver + the NvidiaGpuPlugin add-on advertising) and operator-managed (driverless image, add-on removed, operator owns driver/toolkit/plugin). The hybrid image-driver + operator-plugin value is withdrawn — NKX confirmed no consumer — which collapses both ownership axes onto one distinguishing signal and dissolves this issue's two-axis problem the same way #2360 dissolved GKE's.

    Canonical signal: the add-on's control-plane state, observed — not declared: aicr snapshot|validate --oke-addons <oci ce cluster list-addons --all --output json dump> projects NvidiaGpuPlugin into K8s.oke-addons.nvidia-gpu-plugin (installed when present+ACTIVE, absent when removed), mirroring the AKS --aks-gpu-pools projection (#1967) end to end.

    Answers to the completion criteria:

    1. Option: A (two grounded facts degenerate to one under the two-value model); durable profile constraints only — no readinessConstraints, no ClusterPolicy readback (Option C stays rejected), no GPU.hardware.driver-loaded.
    2. Mixed/unavailable: fail closed. Any non-ACTIVE lifecycle state projects a marker no constraint accepts (addon-<state>, named in the resolution error); a snapshot captured without the flag fails as reading-unavailable with recapture guidance; a malformed dump fails the snapshot before any cluster work.
    3. Both phases: the same --oke-addons flag on aicr snapshot (generation) and aicr validate (pre-flight re-capture; ignored with a warning when --snapshot supplies a pre-captured artifact, which must already carry the reading).
    4. Label route / add-on interplay: per-node oci.oraclecloud.com/disable-gpu-device-plugin disablement is out of contract — it leaves the add-on installed, which reads as oci-managed. Fleets using it (NVCF today) migrate to add-on removal, the shape terraform-oci-okecluster already produces (NvidiaGpuPlugin = { remove = true }, verified live: the add-on is absent from list-addons on a DGXC cluster and present on NVCF's).

    Deferred follow-up (the one remaining item from this issue's gating question): a supported-image consistency check (driver-bearing vs driverless image classification) as a secondary signal — not required for qualification under the two-value model, tracked here.

    Leaving this open only for that follow-up; the qualification design itself is resolved.

  2. yuanchen8911 commented on Aug 31, 2026

    @yuanchen8911
    ContributorAuthor

    Owner confirmation

    I agree with the narrowed two-mode v1 model:

    Profile NVIDIA GPU driver/toolkit owner Device-plugin owner
    oci-managed OKE node image OKE NvidiaGpuPlugin add-on
    operator-managed GPU Operator GPU Operator

    The operator-plugin hybrid remains unsupported. The current NKX/DGXC configuration maps to operator-managed; its preinstalled MOFED driver belongs to the network stack and does not change GPU-stack ownership.

    For device-plugin qualification, the OKE control-plane add-on state is preferable to making oci.oraclecloud.com/disable-gpu-device-plugin=true canonical:

    • Node label: simpler and Kubernetes-visible, but it declares intent rather than proving that the OKE add-on was removed.
    • Add-on projection: observes the actual control-plane state, but requires OCI API access or an exported oci ce cluster list-addons JSON input.

    Because the supported operator-managed contract requires cluster-wide removal of NvidiaGpuPlugin, the add-on projection is the stronger fail-closed qualifier. Per-pool label-based disablement remains outside the v1 contract.

    This resolves device-plugin ownership qualification. The supported-image consistency check for NVIDIA GPU driver ownership remains the follow-up.

  3. mchmarny commented on Sep 8, 2026

    @mchmarny
    Member

    Triaged: confirmed at P2 / Backlog. Scope remains valid but is not ready for immediate execution; current placement is intentional.

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

    area/recipestheme/recipesRecipe expansion, overlays, mixins, and component registry

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions