Merge pull request #452 from qianjun1993/scheduler
Support scheduling according to member cluster resources
This commit is contained in:
commit
b00693914a
|
@ -208,6 +208,268 @@ spec:
|
||||||
type: string
|
type: string
|
||||||
type: object
|
type: object
|
||||||
type: array
|
type: array
|
||||||
|
replicaScheduling:
|
||||||
|
description: 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.
|
||||||
|
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 represents the desired behavior of ReplicaSchedulingPolicy.
|
||||||
|
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.
|
||||||
|
items:
|
||||||
|
description: ResourceSelector the resources will be
|
||||||
|
selected.
|
||||||
|
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.
|
||||||
|
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
|
||||||
|
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
|
||||||
|
required:
|
||||||
|
- apiVersion
|
||||||
|
- kind
|
||||||
|
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
|
||||||
|
type: object
|
||||||
|
required:
|
||||||
|
- spec
|
||||||
|
type: object
|
||||||
spreadConstraints:
|
spreadConstraints:
|
||||||
description: SpreadConstraints represents a list of the scheduling
|
description: SpreadConstraints represents a list of the scheduling
|
||||||
constraints.
|
constraints.
|
||||||
|
|
|
@ -204,6 +204,268 @@ spec:
|
||||||
type: string
|
type: string
|
||||||
type: object
|
type: object
|
||||||
type: array
|
type: array
|
||||||
|
replicaScheduling:
|
||||||
|
description: 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.
|
||||||
|
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 represents the desired behavior of ReplicaSchedulingPolicy.
|
||||||
|
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.
|
||||||
|
items:
|
||||||
|
description: ResourceSelector the resources will be
|
||||||
|
selected.
|
||||||
|
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.
|
||||||
|
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
|
||||||
|
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
|
||||||
|
required:
|
||||||
|
- apiVersion
|
||||||
|
- kind
|
||||||
|
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
|
||||||
|
type: object
|
||||||
|
required:
|
||||||
|
- spec
|
||||||
|
type: object
|
||||||
spreadConstraints:
|
spreadConstraints:
|
||||||
description: SpreadConstraints represents a list of the scheduling
|
description: SpreadConstraints represents a list of the scheduling
|
||||||
constraints.
|
constraints.
|
||||||
|
|
|
@ -49,6 +49,10 @@ spec:
|
||||||
name:
|
name:
|
||||||
description: Name of target cluster.
|
description: Name of target cluster.
|
||||||
type: string
|
type: string
|
||||||
|
replicas:
|
||||||
|
description: Replicas in target cluster
|
||||||
|
format: int32
|
||||||
|
type: integer
|
||||||
required:
|
required:
|
||||||
- name
|
- name
|
||||||
type: object
|
type: object
|
||||||
|
@ -72,6 +76,21 @@ spec:
|
||||||
Namespace is required. If Namespace is not specified, means
|
Namespace is required. If Namespace is not specified, means
|
||||||
the resource is non-namespace scoped.
|
the resource is non-namespace scoped.
|
||||||
type: string
|
type: string
|
||||||
|
replicas:
|
||||||
|
description: Replicas represents the replica number of the referencing
|
||||||
|
resource.
|
||||||
|
format: int32
|
||||||
|
type: integer
|
||||||
|
resourcePerReplicas:
|
||||||
|
additionalProperties:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
description: ReplicaResourceRequirements represents the resources
|
||||||
|
required by each replica.
|
||||||
|
type: object
|
||||||
resourceVersion:
|
resourceVersion:
|
||||||
description: ResourceVersion represents the internal version of
|
description: ResourceVersion represents the internal version of
|
||||||
the referenced object, that can be used by clients to determine
|
the referenced object, that can be used by clients to determine
|
||||||
|
|
|
@ -49,6 +49,10 @@ spec:
|
||||||
name:
|
name:
|
||||||
description: Name of target cluster.
|
description: Name of target cluster.
|
||||||
type: string
|
type: string
|
||||||
|
replicas:
|
||||||
|
description: Replicas in target cluster
|
||||||
|
format: int32
|
||||||
|
type: integer
|
||||||
required:
|
required:
|
||||||
- name
|
- name
|
||||||
type: object
|
type: object
|
||||||
|
@ -72,6 +76,21 @@ spec:
|
||||||
Namespace is required. If Namespace is not specified, means
|
Namespace is required. If Namespace is not specified, means
|
||||||
the resource is non-namespace scoped.
|
the resource is non-namespace scoped.
|
||||||
type: string
|
type: string
|
||||||
|
replicas:
|
||||||
|
description: Replicas represents the replica number of the referencing
|
||||||
|
resource.
|
||||||
|
format: int32
|
||||||
|
type: integer
|
||||||
|
resourcePerReplicas:
|
||||||
|
additionalProperties:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
description: ReplicaResourceRequirements represents the resources
|
||||||
|
required by each replica.
|
||||||
|
type: object
|
||||||
resourceVersion:
|
resourceVersion:
|
||||||
description: ResourceVersion represents the internal version of
|
description: ResourceVersion represents the internal version of
|
||||||
the referenced object, that can be used by clients to determine
|
the referenced object, that can be used by clients to determine
|
||||||
|
|
|
@ -100,6 +100,11 @@ type Placement struct {
|
||||||
// SpreadConstraints represents a list of the scheduling constraints.
|
// SpreadConstraints represents a list of the scheduling constraints.
|
||||||
// +optional
|
// +optional
|
||||||
SpreadConstraints []SpreadConstraint `json:"spreadConstraints,omitempty"`
|
SpreadConstraints []SpreadConstraint `json:"spreadConstraints,omitempty"`
|
||||||
|
|
||||||
|
// 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"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// SpreadFieldValue is the type to define valid values for SpreadConstraint.SpreadByField
|
// SpreadFieldValue is the type to define valid values for SpreadConstraint.SpreadByField
|
||||||
|
@ -163,6 +168,53 @@ type ClusterAffinity struct {
|
||||||
ExcludeClusters []string `json:"exclude,omitempty"`
|
ExcludeClusters []string `json:"exclude,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ReplicaSchedulingType describes scheduling methods for the "replicas" in a resouce.
|
||||||
|
type ReplicaSchedulingType string
|
||||||
|
|
||||||
|
const (
|
||||||
|
// ReplicaSchedulingTypeDuplicated means when propagating a resource,
|
||||||
|
// each candidate member cluster will directly apply the original replicas.
|
||||||
|
ReplicaSchedulingTypeDuplicated ReplicaSchedulingType = "Duplicated"
|
||||||
|
// ReplicaSchedulingTypeDivided means when propagating a resource,
|
||||||
|
// each candidate member cluster will get only a part of original replicas.
|
||||||
|
ReplicaSchedulingTypeDivided ReplicaSchedulingType = "Divided"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ReplicaDivisionPreference describes options of how replicas can be scheduled.
|
||||||
|
type ReplicaDivisionPreference string
|
||||||
|
|
||||||
|
const (
|
||||||
|
// ReplicaDivisionPreferenceAggregated divides replicas into clusters as few as possible,
|
||||||
|
// while respecting clusters' resource availabilities during the division.
|
||||||
|
ReplicaDivisionPreferenceAggregated ReplicaDivisionPreference = "Aggregated"
|
||||||
|
// ReplicaDivisionPreferenceWeighted divides replicas by weight according to WeightPreference.
|
||||||
|
ReplicaDivisionPreferenceWeighted ReplicaDivisionPreference = "Weighted"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ReplicaSchedulingStrategy represents the assignment strategy of replicas.
|
||||||
|
type ReplicaSchedulingStrategy struct {
|
||||||
|
// 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.
|
||||||
|
// +optional
|
||||||
|
ReplicaSchedulingType ReplicaSchedulingType `json:"replicaSchedulingType,omitempty"`
|
||||||
|
|
||||||
|
// 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.
|
||||||
|
// +optional
|
||||||
|
ReplicaDivisionPreference ReplicaDivisionPreference `json:"replicaDivisionPreference,omitempty"`
|
||||||
|
|
||||||
|
// 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.
|
||||||
|
// +optional
|
||||||
|
WeightPreference *ClusterPreferences `json:"weightPreference,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
||||||
|
|
||||||
// PropagationPolicyList contains a list of PropagationPolicy.
|
// PropagationPolicyList contains a list of PropagationPolicy.
|
||||||
|
|
|
@ -388,6 +388,11 @@ func (in *Placement) DeepCopyInto(out *Placement) {
|
||||||
*out = make([]SpreadConstraint, len(*in))
|
*out = make([]SpreadConstraint, len(*in))
|
||||||
copy(*out, *in)
|
copy(*out, *in)
|
||||||
}
|
}
|
||||||
|
if in.ReplicaScheduling != nil {
|
||||||
|
in, out := &in.ReplicaScheduling, &out.ReplicaScheduling
|
||||||
|
*out = new(ReplicaSchedulingPolicy)
|
||||||
|
(*in).DeepCopyInto(*out)
|
||||||
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -591,6 +596,27 @@ func (in *ReplicaSchedulingSpec) DeepCopy() *ReplicaSchedulingSpec {
|
||||||
return out
|
return out
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||||
|
func (in *ReplicaSchedulingStrategy) DeepCopyInto(out *ReplicaSchedulingStrategy) {
|
||||||
|
*out = *in
|
||||||
|
if in.WeightPreference != nil {
|
||||||
|
in, out := &in.WeightPreference, &out.WeightPreference
|
||||||
|
*out = new(ClusterPreferences)
|
||||||
|
(*in).DeepCopyInto(*out)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ReplicaSchedulingStrategy.
|
||||||
|
func (in *ReplicaSchedulingStrategy) DeepCopy() *ReplicaSchedulingStrategy {
|
||||||
|
if in == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
out := new(ReplicaSchedulingStrategy)
|
||||||
|
in.DeepCopyInto(out)
|
||||||
|
return out
|
||||||
|
}
|
||||||
|
|
||||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||||
func (in *ResourceSelector) DeepCopyInto(out *ResourceSelector) {
|
func (in *ResourceSelector) DeepCopyInto(out *ResourceSelector) {
|
||||||
*out = *in
|
*out = *in
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package v1alpha1
|
package v1alpha1
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
corev1 "k8s.io/api/core/v1"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
)
|
)
|
||||||
|
@ -54,12 +55,23 @@ type ObjectReference struct {
|
||||||
// determine when object has changed.
|
// determine when object has changed.
|
||||||
// +optional
|
// +optional
|
||||||
ResourceVersion string `json:"resourceVersion,omitempty"`
|
ResourceVersion string `json:"resourceVersion,omitempty"`
|
||||||
|
|
||||||
|
// ReplicaResourceRequirements represents the resources required by each replica.
|
||||||
|
// +optional
|
||||||
|
ReplicaResourceRequirements corev1.ResourceList `json:"resourcePerReplicas,omitempty"`
|
||||||
|
|
||||||
|
// Replicas represents the replica number of the referencing resource.
|
||||||
|
// +optional
|
||||||
|
Replicas int32 `json:"replicas,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// TargetCluster represents the identifier of a member cluster.
|
// TargetCluster represents the identifier of a member cluster.
|
||||||
type TargetCluster struct {
|
type TargetCluster struct {
|
||||||
// Name of target cluster.
|
// Name of target cluster.
|
||||||
Name string `json:"name"`
|
Name string `json:"name"`
|
||||||
|
// Replicas in target cluster
|
||||||
|
// +optional
|
||||||
|
Replicas int32 `json:"replicas,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// ResourceBindingStatus represents the overall status of the strategy as well as the referenced resources.
|
// ResourceBindingStatus represents the overall status of the strategy as well as the referenced resources.
|
||||||
|
|
|
@ -5,7 +5,8 @@
|
||||||
package v1alpha1
|
package v1alpha1
|
||||||
|
|
||||||
import (
|
import (
|
||||||
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
runtime "k8s.io/apimachinery/pkg/runtime"
|
runtime "k8s.io/apimachinery/pkg/runtime"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -125,6 +126,13 @@ func (in *ManifestStatus) DeepCopy() *ManifestStatus {
|
||||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||||
func (in *ObjectReference) DeepCopyInto(out *ObjectReference) {
|
func (in *ObjectReference) DeepCopyInto(out *ObjectReference) {
|
||||||
*out = *in
|
*out = *in
|
||||||
|
if in.ReplicaResourceRequirements != nil {
|
||||||
|
in, out := &in.ReplicaResourceRequirements, &out.ReplicaResourceRequirements
|
||||||
|
*out = make(v1.ResourceList, len(*in))
|
||||||
|
for key, val := range *in {
|
||||||
|
(*out)[key] = val.DeepCopy()
|
||||||
|
}
|
||||||
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -202,7 +210,7 @@ func (in *ResourceBindingList) DeepCopyObject() runtime.Object {
|
||||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||||
func (in *ResourceBindingSpec) DeepCopyInto(out *ResourceBindingSpec) {
|
func (in *ResourceBindingSpec) DeepCopyInto(out *ResourceBindingSpec) {
|
||||||
*out = *in
|
*out = *in
|
||||||
out.Resource = in.Resource
|
in.Resource.DeepCopyInto(&out.Resource)
|
||||||
if in.Clusters != nil {
|
if in.Clusters != nil {
|
||||||
in, out := &in.Clusters, &out.Clusters
|
in, out := &in.Clusters, &out.Clusters
|
||||||
*out = make([]TargetCluster, len(*in))
|
*out = make([]TargetCluster, len(*in))
|
||||||
|
@ -226,7 +234,7 @@ func (in *ResourceBindingStatus) DeepCopyInto(out *ResourceBindingStatus) {
|
||||||
*out = *in
|
*out = *in
|
||||||
if in.Conditions != nil {
|
if in.Conditions != nil {
|
||||||
in, out := &in.Conditions, &out.Conditions
|
in, out := &in.Conditions, &out.Conditions
|
||||||
*out = make([]v1.Condition, len(*in))
|
*out = make([]metav1.Condition, len(*in))
|
||||||
for i := range *in {
|
for i := range *in {
|
||||||
(*in)[i].DeepCopyInto(&(*out)[i])
|
(*in)[i].DeepCopyInto(&(*out)[i])
|
||||||
}
|
}
|
||||||
|
@ -366,7 +374,7 @@ func (in *WorkStatus) DeepCopyInto(out *WorkStatus) {
|
||||||
*out = *in
|
*out = *in
|
||||||
if in.Conditions != nil {
|
if in.Conditions != nil {
|
||||||
in, out := &in.Conditions, &out.Conditions
|
in, out := &in.Conditions, &out.Conditions
|
||||||
*out = make([]v1.Condition, len(*in))
|
*out = make([]metav1.Condition, len(*in))
|
||||||
for i := range *in {
|
for i := range *in {
|
||||||
(*in)[i].DeepCopyInto(&(*out)[i])
|
(*in)[i].DeepCopyInto(&(*out)[i])
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue