kubernetes/kubernetes · error

DRAOptionalNodeOperations feature gate is disabled on kubele

Error message

DRAOptionalNodeOperations feature gate is disabled on kubelet

What it means

Returned by computeDriverStates() (claiminfo.go:130-132) when an allocated ResourceClaim advertises SkipNodeOperations for a driver but the DRAOptionalNodeOperations feature gate is disabled on the kubelet. The kubelet refuses to prepare the claim because it cannot honor the skip directive without the gate.

Source

Thrown at pkg/kubelet/cm/dra/claiminfo.go:131

		if driverOpCounts != nil {
			allCount := driverOpCounts[resourceapi.SkipNodeOperationAll]
			if allCount == total {
				skippedOps = []resourceapi.SkipNodeOperation{resourceapi.SkipNodeOperationAll}
			} else {
				for op, count := range driverOpCounts {
					if op == resourceapi.SkipNodeOperationAll {
						continue
					}
					if count+allCount == total {
						skippedOps = append(skippedOps, op)
					}
				}
				slices.Sort(skippedOps)
			}
		}

		if len(skippedOps) > 0 && !utilfeature.DefaultFeatureGate.Enabled(features.DRAOptionalNodeOperations) {
			return nil, errors.New("DRAOptionalNodeOperations feature gate is disabled on kubelet")
		}

		driverStates[driver] = state.DriverState{
			SkipNodeOperations: skippedOps,
		}
	}

	return driverStates, nil
}

// newClaimInfoFromClaim creates a new claim info from a checkpointed claim info state object.
func newClaimInfoFromState(state *state.ClaimInfoState) *ClaimInfo {
	info := &ClaimInfo{
		ClaimInfoState: *state.DeepCopy(),
		prepared:       false,
	}
	return info
}

View on GitHub (pinned to b882c60b40)

Solutions

  1. Enable the feature gate on kubelet: --feature-gates=DRAOptionalNodeOperations=true (confirm the gate's maturity for your version).
  2. Update the DRA driver / ResourceClass to not request SkipNodeOperations if the node cannot honor them.
  3. Upgrade kubelets to a version where the gate is enabled by default.
Defensive patterns

Strategy: validation

Validate before calling

hasSkip := false
for _, r := range claim.Status.Allocation.Devices.Results {
    if len(r.SkipNodeOperations) > 0 {
        hasSkip = true
        break
    }
}
if hasSkip && !utilfeature.DefaultFeatureGate.Enabled(features.DRAOptionalNodeOperations) {
    return errors.New("claim uses SkipNodeOperations but DRAOptionalNodeOperations is disabled")
}

Prevention

When it happens

Trigger: A ResourceClaim's allocation result lists SkipNodeOperations (e.g. SkipNodeOperationAll or individual ops) for a driver, and utilfeature.DefaultFeatureGate.Enabled(features.DRAOptionalNodeOperations) returns false on the running kubelet.

Common situations: DRA driver advertises skip-node-operation support but the cluster/kubelet predates the feature or runs with the gate explicitly off. Mixed-version cluster where control plane supports the field but the node kubelet does not.

Related errors


AI-assisted analysis of kubernetes/kubernetes@b882c60b40 (2026-08-07). Data as JSON: /api/errors/85e09a3c3af39ebb. Report an issue: GitHub.