{"record":{"id":"85e09a3c3af39ebb","repo":"kubernetes/kubernetes","slug":"draoptionalnodeoperations-feature-gate-is-disabled","errorCode":null,"errorMessage":"DRAOptionalNodeOperations feature gate is disabled on kubelet","messagePattern":"DRAOptionalNodeOperations feature gate is disabled on kubelet","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/kubelet/cm/dra/claiminfo.go","lineNumber":131,"sourceCode":"\t\tif driverOpCounts != nil {\n\t\t\tallCount := driverOpCounts[resourceapi.SkipNodeOperationAll]\n\t\t\tif allCount == total {\n\t\t\t\tskippedOps = []resourceapi.SkipNodeOperation{resourceapi.SkipNodeOperationAll}\n\t\t\t} else {\n\t\t\t\tfor op, count := range driverOpCounts {\n\t\t\t\t\tif op == resourceapi.SkipNodeOperationAll {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tif count+allCount == total {\n\t\t\t\t\t\tskippedOps = append(skippedOps, op)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tslices.Sort(skippedOps)\n\t\t\t}\n\t\t}\n\n\t\tif len(skippedOps) > 0 && !utilfeature.DefaultFeatureGate.Enabled(features.DRAOptionalNodeOperations) {\n\t\t\treturn nil, errors.New(\"DRAOptionalNodeOperations feature gate is disabled on kubelet\")\n\t\t}\n\n\t\tdriverStates[driver] = state.DriverState{\n\t\t\tSkipNodeOperations: skippedOps,\n\t\t}\n\t}\n\n\treturn driverStates, nil\n}\n\n// newClaimInfoFromClaim creates a new claim info from a checkpointed claim info state object.\nfunc newClaimInfoFromState(state *state.ClaimInfoState) *ClaimInfo {\n\tinfo := &ClaimInfo{\n\t\tClaimInfoState: *state.DeepCopy(),\n\t\tprepared:       false,\n\t}\n\treturn info\n}","sourceCodeStart":113,"sourceCodeEnd":149,"githubUrl":"https://github.com/kubernetes/kubernetes/blob/b882c60b4023bdf09264c2d5d30a2cadebc240fb/pkg/kubelet/cm/dra/claiminfo.go#L113-L149","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","solutions":["Enable the feature gate on kubelet: --feature-gates=DRAOptionalNodeOperations=true (confirm the gate's maturity for your version).","Update the DRA driver / ResourceClass to not request SkipNodeOperations if the node cannot honor them.","Upgrade kubelets to a version where the gate is enabled by default."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"hasSkip := false\nfor _, r := range claim.Status.Allocation.Devices.Results {\n    if len(r.SkipNodeOperations) > 0 {\n        hasSkip = true\n        break\n    }\n}\nif hasSkip && !utilfeature.DefaultFeatureGate.Enabled(features.DRAOptionalNodeOperations) {\n    return errors.New(\"claim uses SkipNodeOperations but DRAOptionalNodeOperations is disabled\")\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Enable DRAOptionalNodeOperations on kubelet if any driver uses skip-node-operations.","Keep kubelet version aligned with control-plane DRA capabilities.","Document which drivers require the feature gate."],"tags":["kubernetes","kubelet","dra","feature-gate","resource-claim","go"],"analyzedSha":"b882c60b4023bdf09264c2d5d30a2cadebc240fb","analyzedAt":"2026-08-07T04:07:48.144Z","schemaVersion":2},"datasetVersion":"2026-08-07T07:17:06.508Z"}