Merge pull request #497 from qianjun1993/bug-fix

Update ReplicaScheduling type
This commit is contained in:
karmada-bot 2021-07-06 11:02:23 +08:00 committed by GitHub
commit ea47422461
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 290 additions and 482 deletions

View File

@ -214,261 +214,165 @@ spec:
that have replicas in spec (e.g. deployments, statefulsets) that have replicas in spec (e.g. deployments, statefulsets)
to member clusters. to member clusters.
properties: properties:
apiVersion: replicaDivisionPreference:
description: 'APIVersion defines the versioned schema of this description: ReplicaDivisionPreference determines how the
representation of an object. Servers should convert recognized replicas is divided when ReplicaSchedulingType is "Divided".
schemas to the latest internal value, and may reject unrecognized Valid options are Aggregated and Weighted. "Aggregated"
values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' 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 type: string
kind: replicaSchedulingType:
description: 'Kind is a string value representing the REST description: ReplicaSchedulingType determines how the replicas
resource this object represents. Servers may infer this is scheduled when karmada propagating a resource. Valid
from the endpoint the client submits requests to. Cannot options are Duplicated and Divided. "Duplicated" duplicates
be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' 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 type: string
metadata: weightPreference:
type: object description: WeightPreference describes weight for each cluster
spec: or for each group of cluster If ReplicaDivisionPreference
description: Spec represents the desired behavior of ReplicaSchedulingPolicy. is set to "Weighted", and WeightPreference is not set, scheduler
will weight all clusters the same.
properties: properties:
preferences: staticWeightList:
description: Preferences describes weight for each cluster description: StaticWeightList defines the static cluster
or for each group of cluster. weight.
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.
items: items:
description: ResourceSelector the resources will be description: StaticClusterWeight defines the static
selected. cluster weight.
properties: properties:
apiVersion: targetCluster:
description: APIVersion represents the API version description: TargetCluster describes the filter
of the target resources. to select clusters.
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.
properties: properties:
matchExpressions: clusterNames:
description: matchExpressions is a list of label description: ClusterNames is the list of clusters
selector requirements. The requirements are to be selected.
ANDed.
items: 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 type: string
description: matchLabels is a map of {key,value} type: array
pairs. A single {key,value} in the matchLabels exclude:
map is equivalent to an element of matchExpressions, description: ExcludedClusters is the list of
whose key field is "key", the operator is clusters to be ignored.
"In", and the values array contains only "value". items:
The requirements are ANDed. 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
type: object type: object
name: weight:
description: Name of the target resource. Default description: Weight expressing the preference to
is empty, which means selecting all resources. the cluster(s) specified by 'TargetCluster'.
type: string format: int64
namespace: type: integer
description: Namespace of the target resource. Default
is empty, which means inherit from the parent
object scope.
type: string
required: required:
- apiVersion - targetCluster
- kind - weight
type: object type: object
type: array 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: required:
- preferences - staticWeightList
- resourceSelectors
- totalReplicas
type: object type: object
required:
- spec
type: object type: object
spreadConstraints: spreadConstraints:
description: SpreadConstraints represents a list of the scheduling description: SpreadConstraints represents a list of the scheduling

View File

@ -210,261 +210,165 @@ spec:
that have replicas in spec (e.g. deployments, statefulsets) that have replicas in spec (e.g. deployments, statefulsets)
to member clusters. to member clusters.
properties: properties:
apiVersion: replicaDivisionPreference:
description: 'APIVersion defines the versioned schema of this description: ReplicaDivisionPreference determines how the
representation of an object. Servers should convert recognized replicas is divided when ReplicaSchedulingType is "Divided".
schemas to the latest internal value, and may reject unrecognized Valid options are Aggregated and Weighted. "Aggregated"
values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' 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 type: string
kind: replicaSchedulingType:
description: 'Kind is a string value representing the REST description: ReplicaSchedulingType determines how the replicas
resource this object represents. Servers may infer this is scheduled when karmada propagating a resource. Valid
from the endpoint the client submits requests to. Cannot options are Duplicated and Divided. "Duplicated" duplicates
be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' 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 type: string
metadata: weightPreference:
type: object description: WeightPreference describes weight for each cluster
spec: or for each group of cluster If ReplicaDivisionPreference
description: Spec represents the desired behavior of ReplicaSchedulingPolicy. is set to "Weighted", and WeightPreference is not set, scheduler
will weight all clusters the same.
properties: properties:
preferences: staticWeightList:
description: Preferences describes weight for each cluster description: StaticWeightList defines the static cluster
or for each group of cluster. weight.
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.
items: items:
description: ResourceSelector the resources will be description: StaticClusterWeight defines the static
selected. cluster weight.
properties: properties:
apiVersion: targetCluster:
description: APIVersion represents the API version description: TargetCluster describes the filter
of the target resources. to select clusters.
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.
properties: properties:
matchExpressions: clusterNames:
description: matchExpressions is a list of label description: ClusterNames is the list of clusters
selector requirements. The requirements are to be selected.
ANDed.
items: 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 type: string
description: matchLabels is a map of {key,value} type: array
pairs. A single {key,value} in the matchLabels exclude:
map is equivalent to an element of matchExpressions, description: ExcludedClusters is the list of
whose key field is "key", the operator is clusters to be ignored.
"In", and the values array contains only "value". items:
The requirements are ANDed. 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
type: object type: object
name: weight:
description: Name of the target resource. Default description: Weight expressing the preference to
is empty, which means selecting all resources. the cluster(s) specified by 'TargetCluster'.
type: string format: int64
namespace: type: integer
description: Namespace of the target resource. Default
is empty, which means inherit from the parent
object scope.
type: string
required: required:
- apiVersion - targetCluster
- kind - weight
type: object type: object
type: array 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: required:
- preferences - staticWeightList
- resourceSelectors
- totalReplicas
type: object type: object
required:
- spec
type: object type: object
spreadConstraints: spreadConstraints:
description: SpreadConstraints represents a list of the scheduling description: SpreadConstraints represents a list of the scheduling

View File

@ -104,7 +104,7 @@ type Placement struct {
// ReplicaScheduling represents the scheduling policy on dealing with the number of replicas // 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. // when propagating resources that have replicas in spec (e.g. deployments, statefulsets) to member clusters.
// +optional // +optional
ReplicaScheduling *ReplicaSchedulingPolicy `json:"replicaScheduling,omitempty"` ReplicaScheduling *ReplicaSchedulingStrategy `json:"replicaScheduling,omitempty"`
} }
// SpreadFieldValue is the type to define valid values for SpreadConstraint.SpreadByField // SpreadFieldValue is the type to define valid values for SpreadConstraint.SpreadByField

View File

@ -390,7 +390,7 @@ func (in *Placement) DeepCopyInto(out *Placement) {
} }
if in.ReplicaScheduling != nil { if in.ReplicaScheduling != nil {
in, out := &in.ReplicaScheduling, &out.ReplicaScheduling in, out := &in.ReplicaScheduling, &out.ReplicaScheduling
*out = new(ReplicaSchedulingPolicy) *out = new(ReplicaSchedulingStrategy)
(*in).DeepCopyInto(*out) (*in).DeepCopyInto(*out)
} }
return return