diff --git a/artifacts/deploy/policy.karmada.io_clusterpropagationpolicies.yaml b/artifacts/deploy/policy.karmada.io_clusterpropagationpolicies.yaml index 022b083d8..ccf7d128d 100644 --- a/artifacts/deploy/policy.karmada.io_clusterpropagationpolicies.yaml +++ b/artifacts/deploy/policy.karmada.io_clusterpropagationpolicies.yaml @@ -214,261 +214,165 @@ spec: that have replicas in spec (e.g. deployments, statefulsets) to member clusters. 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' + replicaDivisionPreference: + description: ReplicaDivisionPreference determines how the + replicas is divided when ReplicaSchedulingType is "Divided". + Valid options are Aggregated and Weighted. "Aggregated" + divides replicas into clusters as few as possible, while + respecting clusters' resource availabilities during the + division. "Weighted" divides replicas by weight according + to WeightPreference. 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' + replicaSchedulingType: + description: ReplicaSchedulingType determines how the replicas + is scheduled when karmada propagating a resource. Valid + options are Duplicated and Divided. "Duplicated" duplicates + the same replicas to each candidate member cluster from + resource. "Divided" divides replicas into parts according + to number of valid candidate member clusters, and exact + replicas for each cluster are determined by ReplicaDivisionPreference. type: string - metadata: - type: object - spec: - description: Spec represents the desired behavior of ReplicaSchedulingPolicy. + weightPreference: + description: WeightPreference describes weight for each cluster + or for each group of cluster If ReplicaDivisionPreference + is set to "Weighted", and WeightPreference is not set, scheduler + will weight all clusters the same. properties: - preferences: - description: Preferences describes weight for each cluster - or for each group of cluster. - properties: - staticWeightList: - description: StaticWeightList defines the static cluster - weight. - items: - description: StaticClusterWeight defines the static - cluster weight. - properties: - targetCluster: - description: TargetCluster describes the filter - to select clusters. - properties: - clusterNames: - description: ClusterNames is the list of - clusters to be selected. - items: - type: string - type: array - exclude: - description: ExcludedClusters is the list - of clusters to be ignored. - items: - type: string - type: array - fieldSelector: - description: FieldSelector is a filter to - select member clusters by fields. If non-nil - and non-empty, only the clusters match - this filter will be selected. - properties: - matchExpressions: - description: A list of field selector - requirements. - items: - description: A node selector requirement - is a selector that contains values, - a key, and an operator that relates - the key and values. - properties: - key: - description: The label key that - the selector applies to. - type: string - operator: - description: Represents a key's - relationship to a set of values. - Valid operators are In, NotIn, - Exists, DoesNotExist. Gt, and - Lt. - type: string - values: - description: An array of string - values. If the operator is In - or NotIn, the values array must - be non-empty. If the operator - is Exists or DoesNotExist, the - values array must be empty. - If the operator is Gt or Lt, - the values array must have a - single element, which will be - interpreted as an integer. This - array is replaced during a strategic - merge patch. - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - type: object - labelSelector: - description: LabelSelector is a filter to - select member clusters by labels. If non-nil - and non-empty, only the clusters match - this filter will be selected. - properties: - matchExpressions: - description: matchExpressions is a list - of label selector requirements. The - requirements are ANDed. - items: - description: A label selector requirement - is a selector that contains values, - a key, and an operator that relates - the key and values. - properties: - key: - description: key is the label - key that the selector applies - to. - type: string - operator: - description: operator represents - a key's relationship to a set - of values. Valid operators are - In, NotIn, Exists and DoesNotExist. - type: string - values: - description: values is an array - of string values. If the operator - is In or NotIn, the values array - must be non-empty. If the operator - is Exists or DoesNotExist, the - values array must be empty. - This array is replaced during - a strategic merge patch. - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - description: matchLabels is a map of - {key,value} pairs. A single {key,value} - in the matchLabels map is equivalent - to an element of matchExpressions, - whose key field is "key", the operator - is "In", and the values array contains - only "value". The requirements are - ANDed. - type: object - type: object - type: object - weight: - description: Weight expressing the preference - to the cluster(s) specified by 'TargetCluster'. - format: int64 - type: integer - required: - - targetCluster - - weight - type: object - type: array - required: - - staticWeightList - type: object - resourceSelectors: - description: ResourceSelectors used to select resources. + staticWeightList: + description: StaticWeightList defines the static cluster + weight. items: - description: ResourceSelector the resources will be - selected. + description: StaticClusterWeight defines the static + cluster weight. properties: - apiVersion: - description: APIVersion represents the API version - of the target resources. - type: string - kind: - description: Kind represents the Kind of the target - resources. - type: string - labelSelector: - description: A label query over a set of resources. - If name is not empty, labelSelector will be ignored. + targetCluster: + description: TargetCluster describes the filter + to select clusters. properties: - matchExpressions: - description: matchExpressions is a list of label - selector requirements. The requirements are - ANDed. + clusterNames: + description: ClusterNames is the list of clusters + to be selected. items: - description: A label selector requirement - is a selector that contains values, a key, - and an operator that relates the key and - values. - properties: - key: - description: key is the label key that - the selector applies to. - type: string - operator: - description: operator represents a key's - relationship to a set of values. Valid - operators are In, NotIn, Exists and - DoesNotExist. - type: string - values: - description: values is an array of string - values. If the operator is In or NotIn, - the values array must be non-empty. - If the operator is Exists or DoesNotExist, - the values array must be empty. This - array is replaced during a strategic - merge patch. - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: type: string - description: matchLabels is a map of {key,value} - pairs. A single {key,value} in the matchLabels - map is equivalent to an element of matchExpressions, - whose key field is "key", the operator is - "In", and the values array contains only "value". - The requirements are ANDed. + type: array + exclude: + description: ExcludedClusters is the list of + clusters to be ignored. + items: + type: string + type: array + fieldSelector: + description: FieldSelector is a filter to select + member clusters by fields. If non-nil and + non-empty, only the clusters match this filter + will be selected. + properties: + matchExpressions: + description: A list of field selector requirements. + items: + description: A node selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: The label key that the + selector applies to. + type: string + operator: + description: Represents a key's relationship + to a set of values. Valid operators + are In, NotIn, Exists, DoesNotExist. + Gt, and Lt. + type: string + values: + description: An array of string values. + If the operator is In or NotIn, + the values array must be non-empty. + If the operator is Exists or DoesNotExist, + the values array must be empty. + If the operator is Gt or Lt, the + values array must have a single + element, which will be interpreted + as an integer. This array is replaced + during a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + labelSelector: + description: LabelSelector is a filter to select + member clusters by labels. If non-nil and + non-empty, only the clusters match this filter + will be selected. + properties: + matchExpressions: + description: matchExpressions is a list + of label selector requirements. The requirements + are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label key + that the selector applies to. + type: string + operator: + description: operator represents a + key's relationship to a set of values. + Valid operators are In, NotIn, Exists + and DoesNotExist. + type: string + values: + description: values is an array of + string values. If the operator is + In or NotIn, the values array must + be non-empty. If the operator is + Exists or DoesNotExist, the values + array must be empty. This array + is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are ANDed. + type: object type: object type: object - name: - description: Name of the target resource. Default - is empty, which means selecting all resources. - type: string - namespace: - description: Namespace of the target resource. Default - is empty, which means inherit from the parent - object scope. - type: string + weight: + description: Weight expressing the preference to + the cluster(s) specified by 'TargetCluster'. + format: int64 + type: integer required: - - apiVersion - - kind + - targetCluster + - weight type: object type: array - totalReplicas: - description: TotalReplicas represents the total number - of replicas across member clusters. The replicas(spec.replicas) - specified for deployment template will be discarded. - format: int32 - type: integer required: - - preferences - - resourceSelectors - - totalReplicas + - staticWeightList type: object - required: - - spec type: object spreadConstraints: description: SpreadConstraints represents a list of the scheduling diff --git a/artifacts/deploy/policy.karmada.io_propagationpolicies.yaml b/artifacts/deploy/policy.karmada.io_propagationpolicies.yaml index ac08cf9e3..3c9c396c3 100644 --- a/artifacts/deploy/policy.karmada.io_propagationpolicies.yaml +++ b/artifacts/deploy/policy.karmada.io_propagationpolicies.yaml @@ -210,261 +210,165 @@ spec: that have replicas in spec (e.g. deployments, statefulsets) to member clusters. 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' + replicaDivisionPreference: + description: ReplicaDivisionPreference determines how the + replicas is divided when ReplicaSchedulingType is "Divided". + Valid options are Aggregated and Weighted. "Aggregated" + divides replicas into clusters as few as possible, while + respecting clusters' resource availabilities during the + division. "Weighted" divides replicas by weight according + to WeightPreference. 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' + replicaSchedulingType: + description: ReplicaSchedulingType determines how the replicas + is scheduled when karmada propagating a resource. Valid + options are Duplicated and Divided. "Duplicated" duplicates + the same replicas to each candidate member cluster from + resource. "Divided" divides replicas into parts according + to number of valid candidate member clusters, and exact + replicas for each cluster are determined by ReplicaDivisionPreference. type: string - metadata: - type: object - spec: - description: Spec represents the desired behavior of ReplicaSchedulingPolicy. + weightPreference: + description: WeightPreference describes weight for each cluster + or for each group of cluster If ReplicaDivisionPreference + is set to "Weighted", and WeightPreference is not set, scheduler + will weight all clusters the same. properties: - preferences: - description: Preferences describes weight for each cluster - or for each group of cluster. - properties: - staticWeightList: - description: StaticWeightList defines the static cluster - weight. - items: - description: StaticClusterWeight defines the static - cluster weight. - properties: - targetCluster: - description: TargetCluster describes the filter - to select clusters. - properties: - clusterNames: - description: ClusterNames is the list of - clusters to be selected. - items: - type: string - type: array - exclude: - description: ExcludedClusters is the list - of clusters to be ignored. - items: - type: string - type: array - fieldSelector: - description: FieldSelector is a filter to - select member clusters by fields. If non-nil - and non-empty, only the clusters match - this filter will be selected. - properties: - matchExpressions: - description: A list of field selector - requirements. - items: - description: A node selector requirement - is a selector that contains values, - a key, and an operator that relates - the key and values. - properties: - key: - description: The label key that - the selector applies to. - type: string - operator: - description: Represents a key's - relationship to a set of values. - Valid operators are In, NotIn, - Exists, DoesNotExist. Gt, and - Lt. - type: string - values: - description: An array of string - values. If the operator is In - or NotIn, the values array must - be non-empty. If the operator - is Exists or DoesNotExist, the - values array must be empty. - If the operator is Gt or Lt, - the values array must have a - single element, which will be - interpreted as an integer. This - array is replaced during a strategic - merge patch. - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - type: object - labelSelector: - description: LabelSelector is a filter to - select member clusters by labels. If non-nil - and non-empty, only the clusters match - this filter will be selected. - properties: - matchExpressions: - description: matchExpressions is a list - of label selector requirements. The - requirements are ANDed. - items: - description: A label selector requirement - is a selector that contains values, - a key, and an operator that relates - the key and values. - properties: - key: - description: key is the label - key that the selector applies - to. - type: string - operator: - description: operator represents - a key's relationship to a set - of values. Valid operators are - In, NotIn, Exists and DoesNotExist. - type: string - values: - description: values is an array - of string values. If the operator - is In or NotIn, the values array - must be non-empty. If the operator - is Exists or DoesNotExist, the - values array must be empty. - This array is replaced during - a strategic merge patch. - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - description: matchLabels is a map of - {key,value} pairs. A single {key,value} - in the matchLabels map is equivalent - to an element of matchExpressions, - whose key field is "key", the operator - is "In", and the values array contains - only "value". The requirements are - ANDed. - type: object - type: object - type: object - weight: - description: Weight expressing the preference - to the cluster(s) specified by 'TargetCluster'. - format: int64 - type: integer - required: - - targetCluster - - weight - type: object - type: array - required: - - staticWeightList - type: object - resourceSelectors: - description: ResourceSelectors used to select resources. + staticWeightList: + description: StaticWeightList defines the static cluster + weight. items: - description: ResourceSelector the resources will be - selected. + description: StaticClusterWeight defines the static + cluster weight. properties: - apiVersion: - description: APIVersion represents the API version - of the target resources. - type: string - kind: - description: Kind represents the Kind of the target - resources. - type: string - labelSelector: - description: A label query over a set of resources. - If name is not empty, labelSelector will be ignored. + targetCluster: + description: TargetCluster describes the filter + to select clusters. properties: - matchExpressions: - description: matchExpressions is a list of label - selector requirements. The requirements are - ANDed. + clusterNames: + description: ClusterNames is the list of clusters + to be selected. items: - description: A label selector requirement - is a selector that contains values, a key, - and an operator that relates the key and - values. - properties: - key: - description: key is the label key that - the selector applies to. - type: string - operator: - description: operator represents a key's - relationship to a set of values. Valid - operators are In, NotIn, Exists and - DoesNotExist. - type: string - values: - description: values is an array of string - values. If the operator is In or NotIn, - the values array must be non-empty. - If the operator is Exists or DoesNotExist, - the values array must be empty. This - array is replaced during a strategic - merge patch. - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: type: string - description: matchLabels is a map of {key,value} - pairs. A single {key,value} in the matchLabels - map is equivalent to an element of matchExpressions, - whose key field is "key", the operator is - "In", and the values array contains only "value". - The requirements are ANDed. + type: array + exclude: + description: ExcludedClusters is the list of + clusters to be ignored. + items: + type: string + type: array + fieldSelector: + description: FieldSelector is a filter to select + member clusters by fields. If non-nil and + non-empty, only the clusters match this filter + will be selected. + properties: + matchExpressions: + description: A list of field selector requirements. + items: + description: A node selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: The label key that the + selector applies to. + type: string + operator: + description: Represents a key's relationship + to a set of values. Valid operators + are In, NotIn, Exists, DoesNotExist. + Gt, and Lt. + type: string + values: + description: An array of string values. + If the operator is In or NotIn, + the values array must be non-empty. + If the operator is Exists or DoesNotExist, + the values array must be empty. + If the operator is Gt or Lt, the + values array must have a single + element, which will be interpreted + as an integer. This array is replaced + during a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + labelSelector: + description: LabelSelector is a filter to select + member clusters by labels. If non-nil and + non-empty, only the clusters match this filter + will be selected. + properties: + matchExpressions: + description: matchExpressions is a list + of label selector requirements. The requirements + are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label key + that the selector applies to. + type: string + operator: + description: operator represents a + key's relationship to a set of values. + Valid operators are In, NotIn, Exists + and DoesNotExist. + type: string + values: + description: values is an array of + string values. If the operator is + In or NotIn, the values array must + be non-empty. If the operator is + Exists or DoesNotExist, the values + array must be empty. This array + is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are ANDed. + type: object type: object type: object - name: - description: Name of the target resource. Default - is empty, which means selecting all resources. - type: string - namespace: - description: Namespace of the target resource. Default - is empty, which means inherit from the parent - object scope. - type: string + weight: + description: Weight expressing the preference to + the cluster(s) specified by 'TargetCluster'. + format: int64 + type: integer required: - - apiVersion - - kind + - targetCluster + - weight type: object type: array - totalReplicas: - description: TotalReplicas represents the total number - of replicas across member clusters. The replicas(spec.replicas) - specified for deployment template will be discarded. - format: int32 - type: integer required: - - preferences - - resourceSelectors - - totalReplicas + - staticWeightList type: object - required: - - spec type: object spreadConstraints: description: SpreadConstraints represents a list of the scheduling diff --git a/pkg/apis/policy/v1alpha1/propagation_types.go b/pkg/apis/policy/v1alpha1/propagation_types.go index d7db95d43..a71f3e5d6 100644 --- a/pkg/apis/policy/v1alpha1/propagation_types.go +++ b/pkg/apis/policy/v1alpha1/propagation_types.go @@ -104,7 +104,7 @@ type Placement struct { // ReplicaScheduling represents the scheduling policy on dealing with the number of replicas // when propagating resources that have replicas in spec (e.g. deployments, statefulsets) to member clusters. // +optional - ReplicaScheduling *ReplicaSchedulingPolicy `json:"replicaScheduling,omitempty"` + ReplicaScheduling *ReplicaSchedulingStrategy `json:"replicaScheduling,omitempty"` } // SpreadFieldValue is the type to define valid values for SpreadConstraint.SpreadByField diff --git a/pkg/apis/policy/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/policy/v1alpha1/zz_generated.deepcopy.go index 01fdb5d1a..e3c6f8734 100644 --- a/pkg/apis/policy/v1alpha1/zz_generated.deepcopy.go +++ b/pkg/apis/policy/v1alpha1/zz_generated.deepcopy.go @@ -390,7 +390,7 @@ func (in *Placement) DeepCopyInto(out *Placement) { } if in.ReplicaScheduling != nil { in, out := &in.ReplicaScheduling, &out.ReplicaScheduling - *out = new(ReplicaSchedulingPolicy) + *out = new(ReplicaSchedulingStrategy) (*in).DeepCopyInto(*out) } return