From 38071aec84c7e383c3a96d360fbb5b34cd406253 Mon Sep 17 00:00:00 2001 From: Abu Kashem Date: Wed, 19 Nov 2025 19:31:51 -0500 Subject: [PATCH 1/2] move ProfileCustomizations to a new GA gate - Add a new gate HyperShiftOnlyDynamicResourceAllocation - make it GA - move the field ProfileCustomizations to the new gate - deprecate the ProfileCustomizations field DRA is GA and is enabled by default, the scheduler enables the DRA plugin if the upstream feature gate is enabled, so the field ProfileCustomizations is defunct. This will remove the coupling between the DynamicResourceAllocation gate and the scheduler config to pave the way for removal of the DynamicResourceAllocation gate --- .../HyperShiftOnlyDynamicResourceAllocation.yaml | 16 ++++++++++++++++ config/v1/types_scheduling.go | 3 +++ features/features.go | 8 ++++++++ 3 files changed, 27 insertions(+) create mode 100644 config/v1/tests/schedulers.config.openshift.io/HyperShiftOnlyDynamicResourceAllocation.yaml diff --git a/config/v1/tests/schedulers.config.openshift.io/HyperShiftOnlyDynamicResourceAllocation.yaml b/config/v1/tests/schedulers.config.openshift.io/HyperShiftOnlyDynamicResourceAllocation.yaml new file mode 100644 index 00000000000..d25bfd99bec --- /dev/null +++ b/config/v1/tests/schedulers.config.openshift.io/HyperShiftOnlyDynamicResourceAllocation.yaml @@ -0,0 +1,16 @@ +apiVersion: apiextensions.k8s.io/v1 # Hack because controller-gen complains if we don't have this +name: "Scheduler" +crdName: schedulers.config.openshift.io +featureGates: +- HyperShiftOnlyDynamicResourceAllocation +tests: + onCreate: + - name: Should be able to create a minimal Scheduler + initial: | + apiVersion: config.openshift.io/v1 + kind: Scheduler + spec: {} # No spec is required for a Scheduler + expected: | + apiVersion: config.openshift.io/v1 + kind: Scheduler + spec: {} diff --git a/config/v1/types_scheduling.go b/config/v1/types_scheduling.go index c90d5633f68..028bbd495d9 100644 --- a/config/v1/types_scheduling.go +++ b/config/v1/types_scheduling.go @@ -48,7 +48,10 @@ type SchedulerSpec struct { // +optional Profile SchedulerProfile `json:"profile,omitempty"` // profileCustomizations contains configuration for modifying the default behavior of existing scheduler profiles. + // Deprecated: no longer needed, since DRA is GA starting with 4.21, and + // is enabled by' default in the cluster, this field will be removed in 4.24. // +openshift:enable:FeatureGate=DynamicResourceAllocation + // +openshift:enable:FeatureGate=HyperShiftOnlyDynamicResourceAllocation // +optional ProfileCustomizations ProfileCustomizations `json:"profileCustomizations"` // defaultNodeSelector helps set the cluster-wide default node selector to diff --git a/features/features.go b/features/features.go index 4dbc7fa02fc..a8873114ed1 100644 --- a/features/features.go +++ b/features/features.go @@ -939,4 +939,12 @@ var ( enhancementPR("https://github.com/openshift/enhancements/pull/1752"). enableIn(configv1.DevPreviewNoUpgrade). mustRegister() + + FeatureGateHyperShiftOnlyDynamicResourceAllocation = newFeatureGate("HyperShiftOnlyDynamicResourceAllocation"). + reportProblemsToJiraComponent("hypershift"). + contactPerson("csrwng"). + productScope(ocpSpecific). + enhancementPR("https://github.com/kubernetes/enhancements/issues/4381"). + enableForClusterProfile(Hypershift, configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade, configv1.Default). + mustRegister() ) From d0a162aa04d37e4ac8c6fff98409fbbae622af46 Mon Sep 17 00:00:00 2001 From: Abu Kashem Date: Wed, 19 Nov 2025 19:38:09 -0500 Subject: [PATCH 2/2] run make update --- ...operator_01_schedulers-Hypershift.crd.yaml | 143 +++++++++++++++++ ...rs-SelfManagedHA-CustomNoUpgrade.crd.yaml} | 7 +- ...schedulers-SelfManagedHA-Default.crd.yaml} | 1 - ...SelfManagedHA-DevPreviewNoUpgrade.crd.yaml | 7 +- ...elfManagedHA-TechPreviewNoUpgrade.crd.yaml | 7 +- ..._generated.featuregated-crd-manifests.yaml | 1 + .../DynamicResourceAllocation.yaml | 6 +- ...perShiftOnlyDynamicResourceAllocation.yaml | 145 ++++++++++++++++++ .../v1/zz_generated.swagger_doc_generated.go | 2 +- features.md | 1 + .../generated_openapi/zz_generated.openapi.go | 2 +- ...operator_01_schedulers-Hypershift.crd.yaml | 143 +++++++++++++++++ ...rs-SelfManagedHA-CustomNoUpgrade.crd.yaml} | 7 +- ...schedulers-SelfManagedHA-Default.crd.yaml} | 1 - ...SelfManagedHA-DevPreviewNoUpgrade.crd.yaml | 7 +- ...elfManagedHA-TechPreviewNoUpgrade.crd.yaml | 7 +- .../featureGate-Hypershift-Default.yaml | 3 + ...reGate-Hypershift-DevPreviewNoUpgrade.yaml | 3 + ...eGate-Hypershift-TechPreviewNoUpgrade.yaml | 3 + .../featureGate-SelfManagedHA-Default.yaml | 3 + ...ate-SelfManagedHA-DevPreviewNoUpgrade.yaml | 3 + ...te-SelfManagedHA-TechPreviewNoUpgrade.yaml | 3 + 22 files changed, 481 insertions(+), 24 deletions(-) create mode 100644 config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_schedulers-Hypershift.crd.yaml rename config/v1/zz_generated.crd-manifests/{0000_10_config-operator_01_schedulers-CustomNoUpgrade.crd.yaml => 0000_10_config-operator_01_schedulers-SelfManagedHA-CustomNoUpgrade.crd.yaml} (95%) rename config/v1/zz_generated.crd-manifests/{0000_10_config-operator_01_schedulers-Default.crd.yaml => 0000_10_config-operator_01_schedulers-SelfManagedHA-Default.crd.yaml} (99%) rename payload-manifests/crds/0000_10_config-operator_01_schedulers-DevPreviewNoUpgrade.crd.yaml => config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_schedulers-SelfManagedHA-DevPreviewNoUpgrade.crd.yaml (95%) rename payload-manifests/crds/0000_10_config-operator_01_schedulers-TechPreviewNoUpgrade.crd.yaml => config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_schedulers-SelfManagedHA-TechPreviewNoUpgrade.crd.yaml (95%) create mode 100644 config/v1/zz_generated.featuregated-crd-manifests/schedulers.config.openshift.io/HyperShiftOnlyDynamicResourceAllocation.yaml create mode 100644 payload-manifests/crds/0000_10_config-operator_01_schedulers-Hypershift.crd.yaml rename payload-manifests/crds/{0000_10_config-operator_01_schedulers-CustomNoUpgrade.crd.yaml => 0000_10_config-operator_01_schedulers-SelfManagedHA-CustomNoUpgrade.crd.yaml} (95%) rename payload-manifests/crds/{0000_10_config-operator_01_schedulers-Default.crd.yaml => 0000_10_config-operator_01_schedulers-SelfManagedHA-Default.crd.yaml} (99%) rename config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_schedulers-DevPreviewNoUpgrade.crd.yaml => payload-manifests/crds/0000_10_config-operator_01_schedulers-SelfManagedHA-DevPreviewNoUpgrade.crd.yaml (95%) rename config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_schedulers-TechPreviewNoUpgrade.crd.yaml => payload-manifests/crds/0000_10_config-operator_01_schedulers-SelfManagedHA-TechPreviewNoUpgrade.crd.yaml (95%) diff --git a/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_schedulers-Hypershift.crd.yaml b/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_schedulers-Hypershift.crd.yaml new file mode 100644 index 00000000000..98be1b9a031 --- /dev/null +++ b/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_schedulers-Hypershift.crd.yaml @@ -0,0 +1,143 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + api-approved.openshift.io: https://github.com/openshift/api/pull/470 + api.openshift.io/merged-by-featuregates: "true" + include.release.openshift.io/ibm-cloud-managed: "true" + release.openshift.io/bootstrap-required: "true" + name: schedulers.config.openshift.io +spec: + group: config.openshift.io + names: + kind: Scheduler + listKind: SchedulerList + plural: schedulers + singular: scheduler + scope: Cluster + versions: + - name: v1 + schema: + openAPIV3Schema: + description: |- + Scheduler holds cluster-wide config information to run the Kubernetes Scheduler + and influence its placement decisions. The canonical name for this config is `cluster`. + + Compatibility level 1: Stable within a major release for a minimum of 12 months or 3 minor releases (whichever is longer). + properties: + apiVersion: + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources + type: string + kind: + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + type: string + metadata: + type: object + spec: + description: spec holds user settable values for configuration + properties: + defaultNodeSelector: + description: |- + defaultNodeSelector helps set the cluster-wide default node selector to + restrict pod placement to specific nodes. This is applied to the pods + created in all namespaces and creates an intersection with any existing + nodeSelectors already set on a pod, additionally constraining that pod's selector. + For example, + defaultNodeSelector: "type=user-node,region=east" would set nodeSelector + field in pod spec to "type=user-node,region=east" to all pods created + in all namespaces. Namespaces having project-wide node selectors won't be + impacted even if this field is set. This adds an annotation section to + the namespace. + For example, if a new namespace is created with + node-selector='type=user-node,region=east', + the annotation openshift.io/node-selector: type=user-node,region=east + gets added to the project. When the openshift.io/node-selector annotation + is set on the project the value is used in preference to the value we are setting + for defaultNodeSelector field. + For instance, + openshift.io/node-selector: "type=user-node,region=west" means + that the default of "type=user-node,region=east" set in defaultNodeSelector + would not be applied. + type: string + mastersSchedulable: + description: |- + mastersSchedulable allows masters nodes to be schedulable. When this flag is + turned on, all the master nodes in the cluster will be made schedulable, + so that workload pods can run on them. The default value for this field is false, + meaning none of the master nodes are schedulable. + Important Note: Once the workload pods start running on the master nodes, + extreme care must be taken to ensure that cluster-critical control plane components + are not impacted. + Please turn on this field after doing due diligence. + type: boolean + policy: + description: |- + DEPRECATED: the scheduler Policy API has been deprecated and will be removed in a future release. + policy is a reference to a ConfigMap containing scheduler policy which has + user specified predicates and priorities. If this ConfigMap is not available + scheduler will default to use DefaultAlgorithmProvider. + The namespace for this configmap is openshift-config. + properties: + name: + description: name is the metadata.name of the referenced config + map + type: string + required: + - name + type: object + profile: + description: |- + profile sets which scheduling profile should be set in order to configure scheduling + decisions for new pods. + + Valid values are "LowNodeUtilization", "HighNodeUtilization", "NoScoring" + Defaults to "LowNodeUtilization" + enum: + - "" + - LowNodeUtilization + - HighNodeUtilization + - NoScoring + type: string + profileCustomizations: + description: |- + profileCustomizations contains configuration for modifying the default behavior of existing scheduler profiles. + Deprecated: no longer needed, since DRA is GA starting with 4.21, and + is enabled by' default in the cluster, this field will be removed in 4.24. + properties: + dynamicResourceAllocation: + description: |- + dynamicResourceAllocation allows to enable or disable dynamic resource allocation within the scheduler. + Dynamic resource allocation is an API for requesting and sharing resources between pods and containers inside a pod. + Third-party resource drivers are responsible for tracking and allocating resources. + Different kinds of resources support arbitrary parameters for defining requirements and initialization. + Valid values are Enabled, Disabled and omitted. + When omitted, this means no opinion and the platform is left to choose a reasonable default, + which is subject to change over time. + The current default is Disabled. + enum: + - "" + - Enabled + - Disabled + type: string + type: object + type: object + status: + description: status holds observed values from the cluster. They may not + be overridden. + type: object + required: + - spec + type: object + served: true + storage: true + subresources: + status: {} diff --git a/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_schedulers-CustomNoUpgrade.crd.yaml b/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_schedulers-SelfManagedHA-CustomNoUpgrade.crd.yaml similarity index 95% rename from config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_schedulers-CustomNoUpgrade.crd.yaml rename to config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_schedulers-SelfManagedHA-CustomNoUpgrade.crd.yaml index d058dd7dccc..1f70a2b096e 100644 --- a/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_schedulers-CustomNoUpgrade.crd.yaml +++ b/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_schedulers-SelfManagedHA-CustomNoUpgrade.crd.yaml @@ -4,7 +4,6 @@ metadata: annotations: api-approved.openshift.io: https://github.com/openshift/api/pull/470 api.openshift.io/merged-by-featuregates: "true" - include.release.openshift.io/ibm-cloud-managed: "true" include.release.openshift.io/self-managed-high-availability: "true" release.openshift.io/bootstrap-required: "true" release.openshift.io/feature-set: CustomNoUpgrade @@ -110,8 +109,10 @@ spec: - NoScoring type: string profileCustomizations: - description: profileCustomizations contains configuration for modifying - the default behavior of existing scheduler profiles. + description: |- + profileCustomizations contains configuration for modifying the default behavior of existing scheduler profiles. + Deprecated: no longer needed, since DRA is GA starting with 4.21, and + is enabled by' default in the cluster, this field will be removed in 4.24. properties: dynamicResourceAllocation: description: |- diff --git a/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_schedulers-Default.crd.yaml b/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_schedulers-SelfManagedHA-Default.crd.yaml similarity index 99% rename from config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_schedulers-Default.crd.yaml rename to config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_schedulers-SelfManagedHA-Default.crd.yaml index 37abbe9a533..5110cb86e70 100644 --- a/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_schedulers-Default.crd.yaml +++ b/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_schedulers-SelfManagedHA-Default.crd.yaml @@ -4,7 +4,6 @@ metadata: annotations: api-approved.openshift.io: https://github.com/openshift/api/pull/470 api.openshift.io/merged-by-featuregates: "true" - include.release.openshift.io/ibm-cloud-managed: "true" include.release.openshift.io/self-managed-high-availability: "true" release.openshift.io/bootstrap-required: "true" release.openshift.io/feature-set: Default diff --git a/payload-manifests/crds/0000_10_config-operator_01_schedulers-DevPreviewNoUpgrade.crd.yaml b/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_schedulers-SelfManagedHA-DevPreviewNoUpgrade.crd.yaml similarity index 95% rename from payload-manifests/crds/0000_10_config-operator_01_schedulers-DevPreviewNoUpgrade.crd.yaml rename to config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_schedulers-SelfManagedHA-DevPreviewNoUpgrade.crd.yaml index a62eb09733f..e57a58f012c 100644 --- a/payload-manifests/crds/0000_10_config-operator_01_schedulers-DevPreviewNoUpgrade.crd.yaml +++ b/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_schedulers-SelfManagedHA-DevPreviewNoUpgrade.crd.yaml @@ -4,7 +4,6 @@ metadata: annotations: api-approved.openshift.io: https://github.com/openshift/api/pull/470 api.openshift.io/merged-by-featuregates: "true" - include.release.openshift.io/ibm-cloud-managed: "true" include.release.openshift.io/self-managed-high-availability: "true" release.openshift.io/bootstrap-required: "true" release.openshift.io/feature-set: DevPreviewNoUpgrade @@ -110,8 +109,10 @@ spec: - NoScoring type: string profileCustomizations: - description: profileCustomizations contains configuration for modifying - the default behavior of existing scheduler profiles. + description: |- + profileCustomizations contains configuration for modifying the default behavior of existing scheduler profiles. + Deprecated: no longer needed, since DRA is GA starting with 4.21, and + is enabled by' default in the cluster, this field will be removed in 4.24. properties: dynamicResourceAllocation: description: |- diff --git a/payload-manifests/crds/0000_10_config-operator_01_schedulers-TechPreviewNoUpgrade.crd.yaml b/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_schedulers-SelfManagedHA-TechPreviewNoUpgrade.crd.yaml similarity index 95% rename from payload-manifests/crds/0000_10_config-operator_01_schedulers-TechPreviewNoUpgrade.crd.yaml rename to config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_schedulers-SelfManagedHA-TechPreviewNoUpgrade.crd.yaml index 24fbbb3021f..534bf58f107 100644 --- a/payload-manifests/crds/0000_10_config-operator_01_schedulers-TechPreviewNoUpgrade.crd.yaml +++ b/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_schedulers-SelfManagedHA-TechPreviewNoUpgrade.crd.yaml @@ -4,7 +4,6 @@ metadata: annotations: api-approved.openshift.io: https://github.com/openshift/api/pull/470 api.openshift.io/merged-by-featuregates: "true" - include.release.openshift.io/ibm-cloud-managed: "true" include.release.openshift.io/self-managed-high-availability: "true" release.openshift.io/bootstrap-required: "true" release.openshift.io/feature-set: TechPreviewNoUpgrade @@ -110,8 +109,10 @@ spec: - NoScoring type: string profileCustomizations: - description: profileCustomizations contains configuration for modifying - the default behavior of existing scheduler profiles. + description: |- + profileCustomizations contains configuration for modifying the default behavior of existing scheduler profiles. + Deprecated: no longer needed, since DRA is GA starting with 4.21, and + is enabled by' default in the cluster, this field will be removed in 4.24. properties: dynamicResourceAllocation: description: |- diff --git a/config/v1/zz_generated.featuregated-crd-manifests.yaml b/config/v1/zz_generated.featuregated-crd-manifests.yaml index a1d37f65d00..693f1b5df30 100644 --- a/config/v1/zz_generated.featuregated-crd-manifests.yaml +++ b/config/v1/zz_generated.featuregated-crd-manifests.yaml @@ -576,6 +576,7 @@ schedulers.config.openshift.io: Category: "" FeatureGates: - DynamicResourceAllocation + - HyperShiftOnlyDynamicResourceAllocation FilenameOperatorName: config-operator FilenameOperatorOrdering: "01" FilenameRunLevel: "0000_10" diff --git a/config/v1/zz_generated.featuregated-crd-manifests/schedulers.config.openshift.io/DynamicResourceAllocation.yaml b/config/v1/zz_generated.featuregated-crd-manifests/schedulers.config.openshift.io/DynamicResourceAllocation.yaml index 405806d2e96..969cb96b661 100644 --- a/config/v1/zz_generated.featuregated-crd-manifests/schedulers.config.openshift.io/DynamicResourceAllocation.yaml +++ b/config/v1/zz_generated.featuregated-crd-manifests/schedulers.config.openshift.io/DynamicResourceAllocation.yaml @@ -110,8 +110,10 @@ spec: - NoScoring type: string profileCustomizations: - description: profileCustomizations contains configuration for modifying - the default behavior of existing scheduler profiles. + description: |- + profileCustomizations contains configuration for modifying the default behavior of existing scheduler profiles. + Deprecated: no longer needed, since DRA is GA starting with 4.21, and + is enabled by' default in the cluster, this field will be removed in 4.24. properties: dynamicResourceAllocation: description: |- diff --git a/config/v1/zz_generated.featuregated-crd-manifests/schedulers.config.openshift.io/HyperShiftOnlyDynamicResourceAllocation.yaml b/config/v1/zz_generated.featuregated-crd-manifests/schedulers.config.openshift.io/HyperShiftOnlyDynamicResourceAllocation.yaml new file mode 100644 index 00000000000..5b396f185c9 --- /dev/null +++ b/config/v1/zz_generated.featuregated-crd-manifests/schedulers.config.openshift.io/HyperShiftOnlyDynamicResourceAllocation.yaml @@ -0,0 +1,145 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + api-approved.openshift.io: https://github.com/openshift/api/pull/470 + api.openshift.io/filename-cvo-runlevel: "0000_10" + api.openshift.io/filename-operator: config-operator + api.openshift.io/filename-ordering: "01" + feature-gate.release.openshift.io/HyperShiftOnlyDynamicResourceAllocation: "true" + release.openshift.io/bootstrap-required: "true" + name: schedulers.config.openshift.io +spec: + group: config.openshift.io + names: + kind: Scheduler + listKind: SchedulerList + plural: schedulers + singular: scheduler + scope: Cluster + versions: + - name: v1 + schema: + openAPIV3Schema: + description: |- + Scheduler holds cluster-wide config information to run the Kubernetes Scheduler + and influence its placement decisions. The canonical name for this config is `cluster`. + + Compatibility level 1: Stable within a major release for a minimum of 12 months or 3 minor releases (whichever is longer). + properties: + apiVersion: + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources + type: string + kind: + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + type: string + metadata: + type: object + spec: + description: spec holds user settable values for configuration + properties: + defaultNodeSelector: + description: |- + defaultNodeSelector helps set the cluster-wide default node selector to + restrict pod placement to specific nodes. This is applied to the pods + created in all namespaces and creates an intersection with any existing + nodeSelectors already set on a pod, additionally constraining that pod's selector. + For example, + defaultNodeSelector: "type=user-node,region=east" would set nodeSelector + field in pod spec to "type=user-node,region=east" to all pods created + in all namespaces. Namespaces having project-wide node selectors won't be + impacted even if this field is set. This adds an annotation section to + the namespace. + For example, if a new namespace is created with + node-selector='type=user-node,region=east', + the annotation openshift.io/node-selector: type=user-node,region=east + gets added to the project. When the openshift.io/node-selector annotation + is set on the project the value is used in preference to the value we are setting + for defaultNodeSelector field. + For instance, + openshift.io/node-selector: "type=user-node,region=west" means + that the default of "type=user-node,region=east" set in defaultNodeSelector + would not be applied. + type: string + mastersSchedulable: + description: |- + mastersSchedulable allows masters nodes to be schedulable. When this flag is + turned on, all the master nodes in the cluster will be made schedulable, + so that workload pods can run on them. The default value for this field is false, + meaning none of the master nodes are schedulable. + Important Note: Once the workload pods start running on the master nodes, + extreme care must be taken to ensure that cluster-critical control plane components + are not impacted. + Please turn on this field after doing due diligence. + type: boolean + policy: + description: |- + DEPRECATED: the scheduler Policy API has been deprecated and will be removed in a future release. + policy is a reference to a ConfigMap containing scheduler policy which has + user specified predicates and priorities. If this ConfigMap is not available + scheduler will default to use DefaultAlgorithmProvider. + The namespace for this configmap is openshift-config. + properties: + name: + description: name is the metadata.name of the referenced config + map + type: string + required: + - name + type: object + profile: + description: |- + profile sets which scheduling profile should be set in order to configure scheduling + decisions for new pods. + + Valid values are "LowNodeUtilization", "HighNodeUtilization", "NoScoring" + Defaults to "LowNodeUtilization" + enum: + - "" + - LowNodeUtilization + - HighNodeUtilization + - NoScoring + type: string + profileCustomizations: + description: |- + profileCustomizations contains configuration for modifying the default behavior of existing scheduler profiles. + Deprecated: no longer needed, since DRA is GA starting with 4.21, and + is enabled by' default in the cluster, this field will be removed in 4.24. + properties: + dynamicResourceAllocation: + description: |- + dynamicResourceAllocation allows to enable or disable dynamic resource allocation within the scheduler. + Dynamic resource allocation is an API for requesting and sharing resources between pods and containers inside a pod. + Third-party resource drivers are responsible for tracking and allocating resources. + Different kinds of resources support arbitrary parameters for defining requirements and initialization. + Valid values are Enabled, Disabled and omitted. + When omitted, this means no opinion and the platform is left to choose a reasonable default, + which is subject to change over time. + The current default is Disabled. + enum: + - "" + - Enabled + - Disabled + type: string + type: object + type: object + status: + description: status holds observed values from the cluster. They may not + be overridden. + type: object + required: + - spec + type: object + served: true + storage: true + subresources: + status: {} diff --git a/config/v1/zz_generated.swagger_doc_generated.go b/config/v1/zz_generated.swagger_doc_generated.go index b9d0799fbdf..2e8e05fef77 100644 --- a/config/v1/zz_generated.swagger_doc_generated.go +++ b/config/v1/zz_generated.swagger_doc_generated.go @@ -2901,7 +2901,7 @@ func (SchedulerList) SwaggerDoc() map[string]string { var map_SchedulerSpec = map[string]string{ "policy": "DEPRECATED: the scheduler Policy API has been deprecated and will be removed in a future release. policy is a reference to a ConfigMap containing scheduler policy which has user specified predicates and priorities. If this ConfigMap is not available scheduler will default to use DefaultAlgorithmProvider. The namespace for this configmap is openshift-config.", "profile": "profile sets which scheduling profile should be set in order to configure scheduling decisions for new pods.\n\nValid values are \"LowNodeUtilization\", \"HighNodeUtilization\", \"NoScoring\" Defaults to \"LowNodeUtilization\"", - "profileCustomizations": "profileCustomizations contains configuration for modifying the default behavior of existing scheduler profiles.", + "profileCustomizations": "profileCustomizations contains configuration for modifying the default behavior of existing scheduler profiles. Deprecated: no longer needed, since DRA is GA starting with 4.21, and is enabled by' default in the cluster, this field will be removed in 4.24.", "defaultNodeSelector": "defaultNodeSelector helps set the cluster-wide default node selector to restrict pod placement to specific nodes. This is applied to the pods created in all namespaces and creates an intersection with any existing nodeSelectors already set on a pod, additionally constraining that pod's selector. For example, defaultNodeSelector: \"type=user-node,region=east\" would set nodeSelector field in pod spec to \"type=user-node,region=east\" to all pods created in all namespaces. Namespaces having project-wide node selectors won't be impacted even if this field is set. This adds an annotation section to the namespace. For example, if a new namespace is created with node-selector='type=user-node,region=east', the annotation openshift.io/node-selector: type=user-node,region=east gets added to the project. When the openshift.io/node-selector annotation is set on the project the value is used in preference to the value we are setting for defaultNodeSelector field. For instance, openshift.io/node-selector: \"type=user-node,region=west\" means that the default of \"type=user-node,region=east\" set in defaultNodeSelector would not be applied.", "mastersSchedulable": "mastersSchedulable allows masters nodes to be schedulable. When this flag is turned on, all the master nodes in the cluster will be made schedulable, so that workload pods can run on them. The default value for this field is false, meaning none of the master nodes are schedulable. Important Note: Once the workload pods start running on the master nodes, extreme care must be taken to ensure that cluster-critical control plane components are not impacted. Please turn on this field after doing due diligence.", } diff --git a/features.md b/features.md index e74ac0734bf..42ce35cc6b0 100644 --- a/features.md +++ b/features.md @@ -15,6 +15,7 @@ | NewOLMPreflightPermissionChecks| | | | Enabled | | Enabled | | NoRegistryClusterInstall| | | | Enabled | | Enabled | | ProvisioningRequestAvailable| | | Enabled | Enabled | | | +| HyperShiftOnlyDynamicResourceAllocation| Enabled | | Enabled | | Enabled | | | NewOLM| | Enabled | | Enabled | | Enabled | | NewOLMWebhookProviderOpenshiftServiceCA| | Enabled | | Enabled | | Enabled | | AWSClusterHostedDNS| | | Enabled | Enabled | Enabled | Enabled | diff --git a/openapi/generated_openapi/zz_generated.openapi.go b/openapi/generated_openapi/zz_generated.openapi.go index 37eebca97fb..c96e0838210 100644 --- a/openapi/generated_openapi/zz_generated.openapi.go +++ b/openapi/generated_openapi/zz_generated.openapi.go @@ -19977,7 +19977,7 @@ func schema_openshift_api_config_v1_SchedulerSpec(ref common.ReferenceCallback) }, "profileCustomizations": { SchemaProps: spec.SchemaProps{ - Description: "profileCustomizations contains configuration for modifying the default behavior of existing scheduler profiles.", + Description: "profileCustomizations contains configuration for modifying the default behavior of existing scheduler profiles. Deprecated: no longer needed, since DRA is GA starting with 4.21, and is enabled by' default in the cluster, this field will be removed in 4.24.", Default: map[string]interface{}{}, Ref: ref("github.com/openshift/api/config/v1.ProfileCustomizations"), }, diff --git a/payload-manifests/crds/0000_10_config-operator_01_schedulers-Hypershift.crd.yaml b/payload-manifests/crds/0000_10_config-operator_01_schedulers-Hypershift.crd.yaml new file mode 100644 index 00000000000..98be1b9a031 --- /dev/null +++ b/payload-manifests/crds/0000_10_config-operator_01_schedulers-Hypershift.crd.yaml @@ -0,0 +1,143 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + api-approved.openshift.io: https://github.com/openshift/api/pull/470 + api.openshift.io/merged-by-featuregates: "true" + include.release.openshift.io/ibm-cloud-managed: "true" + release.openshift.io/bootstrap-required: "true" + name: schedulers.config.openshift.io +spec: + group: config.openshift.io + names: + kind: Scheduler + listKind: SchedulerList + plural: schedulers + singular: scheduler + scope: Cluster + versions: + - name: v1 + schema: + openAPIV3Schema: + description: |- + Scheduler holds cluster-wide config information to run the Kubernetes Scheduler + and influence its placement decisions. The canonical name for this config is `cluster`. + + Compatibility level 1: Stable within a major release for a minimum of 12 months or 3 minor releases (whichever is longer). + properties: + apiVersion: + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources + type: string + kind: + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + type: string + metadata: + type: object + spec: + description: spec holds user settable values for configuration + properties: + defaultNodeSelector: + description: |- + defaultNodeSelector helps set the cluster-wide default node selector to + restrict pod placement to specific nodes. This is applied to the pods + created in all namespaces and creates an intersection with any existing + nodeSelectors already set on a pod, additionally constraining that pod's selector. + For example, + defaultNodeSelector: "type=user-node,region=east" would set nodeSelector + field in pod spec to "type=user-node,region=east" to all pods created + in all namespaces. Namespaces having project-wide node selectors won't be + impacted even if this field is set. This adds an annotation section to + the namespace. + For example, if a new namespace is created with + node-selector='type=user-node,region=east', + the annotation openshift.io/node-selector: type=user-node,region=east + gets added to the project. When the openshift.io/node-selector annotation + is set on the project the value is used in preference to the value we are setting + for defaultNodeSelector field. + For instance, + openshift.io/node-selector: "type=user-node,region=west" means + that the default of "type=user-node,region=east" set in defaultNodeSelector + would not be applied. + type: string + mastersSchedulable: + description: |- + mastersSchedulable allows masters nodes to be schedulable. When this flag is + turned on, all the master nodes in the cluster will be made schedulable, + so that workload pods can run on them. The default value for this field is false, + meaning none of the master nodes are schedulable. + Important Note: Once the workload pods start running on the master nodes, + extreme care must be taken to ensure that cluster-critical control plane components + are not impacted. + Please turn on this field after doing due diligence. + type: boolean + policy: + description: |- + DEPRECATED: the scheduler Policy API has been deprecated and will be removed in a future release. + policy is a reference to a ConfigMap containing scheduler policy which has + user specified predicates and priorities. If this ConfigMap is not available + scheduler will default to use DefaultAlgorithmProvider. + The namespace for this configmap is openshift-config. + properties: + name: + description: name is the metadata.name of the referenced config + map + type: string + required: + - name + type: object + profile: + description: |- + profile sets which scheduling profile should be set in order to configure scheduling + decisions for new pods. + + Valid values are "LowNodeUtilization", "HighNodeUtilization", "NoScoring" + Defaults to "LowNodeUtilization" + enum: + - "" + - LowNodeUtilization + - HighNodeUtilization + - NoScoring + type: string + profileCustomizations: + description: |- + profileCustomizations contains configuration for modifying the default behavior of existing scheduler profiles. + Deprecated: no longer needed, since DRA is GA starting with 4.21, and + is enabled by' default in the cluster, this field will be removed in 4.24. + properties: + dynamicResourceAllocation: + description: |- + dynamicResourceAllocation allows to enable or disable dynamic resource allocation within the scheduler. + Dynamic resource allocation is an API for requesting and sharing resources between pods and containers inside a pod. + Third-party resource drivers are responsible for tracking and allocating resources. + Different kinds of resources support arbitrary parameters for defining requirements and initialization. + Valid values are Enabled, Disabled and omitted. + When omitted, this means no opinion and the platform is left to choose a reasonable default, + which is subject to change over time. + The current default is Disabled. + enum: + - "" + - Enabled + - Disabled + type: string + type: object + type: object + status: + description: status holds observed values from the cluster. They may not + be overridden. + type: object + required: + - spec + type: object + served: true + storage: true + subresources: + status: {} diff --git a/payload-manifests/crds/0000_10_config-operator_01_schedulers-CustomNoUpgrade.crd.yaml b/payload-manifests/crds/0000_10_config-operator_01_schedulers-SelfManagedHA-CustomNoUpgrade.crd.yaml similarity index 95% rename from payload-manifests/crds/0000_10_config-operator_01_schedulers-CustomNoUpgrade.crd.yaml rename to payload-manifests/crds/0000_10_config-operator_01_schedulers-SelfManagedHA-CustomNoUpgrade.crd.yaml index d058dd7dccc..1f70a2b096e 100644 --- a/payload-manifests/crds/0000_10_config-operator_01_schedulers-CustomNoUpgrade.crd.yaml +++ b/payload-manifests/crds/0000_10_config-operator_01_schedulers-SelfManagedHA-CustomNoUpgrade.crd.yaml @@ -4,7 +4,6 @@ metadata: annotations: api-approved.openshift.io: https://github.com/openshift/api/pull/470 api.openshift.io/merged-by-featuregates: "true" - include.release.openshift.io/ibm-cloud-managed: "true" include.release.openshift.io/self-managed-high-availability: "true" release.openshift.io/bootstrap-required: "true" release.openshift.io/feature-set: CustomNoUpgrade @@ -110,8 +109,10 @@ spec: - NoScoring type: string profileCustomizations: - description: profileCustomizations contains configuration for modifying - the default behavior of existing scheduler profiles. + description: |- + profileCustomizations contains configuration for modifying the default behavior of existing scheduler profiles. + Deprecated: no longer needed, since DRA is GA starting with 4.21, and + is enabled by' default in the cluster, this field will be removed in 4.24. properties: dynamicResourceAllocation: description: |- diff --git a/payload-manifests/crds/0000_10_config-operator_01_schedulers-Default.crd.yaml b/payload-manifests/crds/0000_10_config-operator_01_schedulers-SelfManagedHA-Default.crd.yaml similarity index 99% rename from payload-manifests/crds/0000_10_config-operator_01_schedulers-Default.crd.yaml rename to payload-manifests/crds/0000_10_config-operator_01_schedulers-SelfManagedHA-Default.crd.yaml index 37abbe9a533..5110cb86e70 100644 --- a/payload-manifests/crds/0000_10_config-operator_01_schedulers-Default.crd.yaml +++ b/payload-manifests/crds/0000_10_config-operator_01_schedulers-SelfManagedHA-Default.crd.yaml @@ -4,7 +4,6 @@ metadata: annotations: api-approved.openshift.io: https://github.com/openshift/api/pull/470 api.openshift.io/merged-by-featuregates: "true" - include.release.openshift.io/ibm-cloud-managed: "true" include.release.openshift.io/self-managed-high-availability: "true" release.openshift.io/bootstrap-required: "true" release.openshift.io/feature-set: Default diff --git a/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_schedulers-DevPreviewNoUpgrade.crd.yaml b/payload-manifests/crds/0000_10_config-operator_01_schedulers-SelfManagedHA-DevPreviewNoUpgrade.crd.yaml similarity index 95% rename from config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_schedulers-DevPreviewNoUpgrade.crd.yaml rename to payload-manifests/crds/0000_10_config-operator_01_schedulers-SelfManagedHA-DevPreviewNoUpgrade.crd.yaml index a62eb09733f..e57a58f012c 100644 --- a/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_schedulers-DevPreviewNoUpgrade.crd.yaml +++ b/payload-manifests/crds/0000_10_config-operator_01_schedulers-SelfManagedHA-DevPreviewNoUpgrade.crd.yaml @@ -4,7 +4,6 @@ metadata: annotations: api-approved.openshift.io: https://github.com/openshift/api/pull/470 api.openshift.io/merged-by-featuregates: "true" - include.release.openshift.io/ibm-cloud-managed: "true" include.release.openshift.io/self-managed-high-availability: "true" release.openshift.io/bootstrap-required: "true" release.openshift.io/feature-set: DevPreviewNoUpgrade @@ -110,8 +109,10 @@ spec: - NoScoring type: string profileCustomizations: - description: profileCustomizations contains configuration for modifying - the default behavior of existing scheduler profiles. + description: |- + profileCustomizations contains configuration for modifying the default behavior of existing scheduler profiles. + Deprecated: no longer needed, since DRA is GA starting with 4.21, and + is enabled by' default in the cluster, this field will be removed in 4.24. properties: dynamicResourceAllocation: description: |- diff --git a/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_schedulers-TechPreviewNoUpgrade.crd.yaml b/payload-manifests/crds/0000_10_config-operator_01_schedulers-SelfManagedHA-TechPreviewNoUpgrade.crd.yaml similarity index 95% rename from config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_schedulers-TechPreviewNoUpgrade.crd.yaml rename to payload-manifests/crds/0000_10_config-operator_01_schedulers-SelfManagedHA-TechPreviewNoUpgrade.crd.yaml index 24fbbb3021f..534bf58f107 100644 --- a/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_schedulers-TechPreviewNoUpgrade.crd.yaml +++ b/payload-manifests/crds/0000_10_config-operator_01_schedulers-SelfManagedHA-TechPreviewNoUpgrade.crd.yaml @@ -4,7 +4,6 @@ metadata: annotations: api-approved.openshift.io: https://github.com/openshift/api/pull/470 api.openshift.io/merged-by-featuregates: "true" - include.release.openshift.io/ibm-cloud-managed: "true" include.release.openshift.io/self-managed-high-availability: "true" release.openshift.io/bootstrap-required: "true" release.openshift.io/feature-set: TechPreviewNoUpgrade @@ -110,8 +109,10 @@ spec: - NoScoring type: string profileCustomizations: - description: profileCustomizations contains configuration for modifying - the default behavior of existing scheduler profiles. + description: |- + profileCustomizations contains configuration for modifying the default behavior of existing scheduler profiles. + Deprecated: no longer needed, since DRA is GA starting with 4.21, and + is enabled by' default in the cluster, this field will be removed in 4.24. properties: dynamicResourceAllocation: description: |- diff --git a/payload-manifests/featuregates/featureGate-Hypershift-Default.yaml b/payload-manifests/featuregates/featureGate-Hypershift-Default.yaml index c283779381d..5fdb6fd0155 100644 --- a/payload-manifests/featuregates/featureGate-Hypershift-Default.yaml +++ b/payload-manifests/featuregates/featureGate-Hypershift-Default.yaml @@ -275,6 +275,9 @@ { "name": "HighlyAvailableArbiter" }, + { + "name": "HyperShiftOnlyDynamicResourceAllocation" + }, { "name": "ImageVolume" }, diff --git a/payload-manifests/featuregates/featureGate-Hypershift-DevPreviewNoUpgrade.yaml b/payload-manifests/featuregates/featureGate-Hypershift-DevPreviewNoUpgrade.yaml index 0c239822665..7b17736bcce 100644 --- a/payload-manifests/featuregates/featureGate-Hypershift-DevPreviewNoUpgrade.yaml +++ b/payload-manifests/featuregates/featureGate-Hypershift-DevPreviewNoUpgrade.yaml @@ -193,6 +193,9 @@ { "name": "HighlyAvailableArbiter" }, + { + "name": "HyperShiftOnlyDynamicResourceAllocation" + }, { "name": "ImageModeStatusReporting" }, diff --git a/payload-manifests/featuregates/featureGate-Hypershift-TechPreviewNoUpgrade.yaml b/payload-manifests/featuregates/featureGate-Hypershift-TechPreviewNoUpgrade.yaml index f74b13b4f52..82103435201 100644 --- a/payload-manifests/featuregates/featureGate-Hypershift-TechPreviewNoUpgrade.yaml +++ b/payload-manifests/featuregates/featureGate-Hypershift-TechPreviewNoUpgrade.yaml @@ -199,6 +199,9 @@ { "name": "HighlyAvailableArbiter" }, + { + "name": "HyperShiftOnlyDynamicResourceAllocation" + }, { "name": "ImageModeStatusReporting" }, diff --git a/payload-manifests/featuregates/featureGate-SelfManagedHA-Default.yaml b/payload-manifests/featuregates/featureGate-SelfManagedHA-Default.yaml index f1a756c7961..b619bdb03bb 100644 --- a/payload-manifests/featuregates/featureGate-SelfManagedHA-Default.yaml +++ b/payload-manifests/featuregates/featureGate-SelfManagedHA-Default.yaml @@ -120,6 +120,9 @@ { "name": "GCPDualStackInstall" }, + { + "name": "HyperShiftOnlyDynamicResourceAllocation" + }, { "name": "ImageModeStatusReporting" }, diff --git a/payload-manifests/featuregates/featureGate-SelfManagedHA-DevPreviewNoUpgrade.yaml b/payload-manifests/featuregates/featureGate-SelfManagedHA-DevPreviewNoUpgrade.yaml index 2bdafb6cf95..3f275aa6941 100644 --- a/payload-manifests/featuregates/featureGate-SelfManagedHA-DevPreviewNoUpgrade.yaml +++ b/payload-manifests/featuregates/featureGate-SelfManagedHA-DevPreviewNoUpgrade.yaml @@ -20,6 +20,9 @@ { "name": "EventedPLEG" }, + { + "name": "HyperShiftOnlyDynamicResourceAllocation" + }, { "name": "MachineAPIOperatorDisableMachineHealthCheckController" }, diff --git a/payload-manifests/featuregates/featureGate-SelfManagedHA-TechPreviewNoUpgrade.yaml b/payload-manifests/featuregates/featureGate-SelfManagedHA-TechPreviewNoUpgrade.yaml index 1a1378733f4..69a60f0a91c 100644 --- a/payload-manifests/featuregates/featureGate-SelfManagedHA-TechPreviewNoUpgrade.yaml +++ b/payload-manifests/featuregates/featureGate-SelfManagedHA-TechPreviewNoUpgrade.yaml @@ -29,6 +29,9 @@ { "name": "ExternalSnapshotMetadata" }, + { + "name": "HyperShiftOnlyDynamicResourceAllocation" + }, { "name": "IngressControllerDynamicConfigurationManager" },