Merge pull request #90771 from alculquicondor/api-comment

Clarify usage of MaxSkew and WhenUnsatisfiable
This commit is contained in:
Kubernetes Prow Robot 2020-05-09 07:24:18 -07:00 committed by GitHub
commit c1fe194e06
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 37 additions and 22 deletions

View File

@ -10178,7 +10178,7 @@
"description": "LabelSelector is used to find matching pods. Pods that match this label selector are counted to determine the number of pods in their corresponding topology domain." "description": "LabelSelector is used to find matching pods. Pods that match this label selector are counted to determine the number of pods in their corresponding topology domain."
}, },
"maxSkew": { "maxSkew": {
"description": "MaxSkew describes the degree to which pods may be unevenly distributed. It's the maximum permitted difference between the number of matching pods in any two topology domains of a given topology type. For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same labelSelector spread as 1/1/0: | zone1 | zone2 | zone3 | | P | P | | - if MaxSkew is 1, incoming pod can only be scheduled to zone3 to become 1/1/1; scheduling it onto zone1(zone2) would make the ActualSkew(2-0) on zone1(zone2) violate MaxSkew(1). - if MaxSkew is 2, incoming pod can be scheduled onto any zone. It's a required field. Default value is 1 and 0 is not allowed.", "description": "MaxSkew describes the degree to which pods may be unevenly distributed. When `whenUnsatisfiable=DoNotSchedule`, it is the maximum permitted difference between the number of matching pods in the target topology and the global minimum. For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same labelSelector spread as 1/1/0: | zone1 | zone2 | zone3 | | P | P | | - if MaxSkew is 1, incoming pod can only be scheduled to zone3 to become 1/1/1; scheduling it onto zone1(zone2) would make the ActualSkew(2-0) on zone1(zone2) violate MaxSkew(1). - if MaxSkew is 2, incoming pod can be scheduled onto any zone. When `whenUnsatisfiable=ScheduleAnyway`, it is used to give higher precedence to topologies that satisfy it. It's a required field. Default value is 1 and 0 is not allowed.",
"format": "int32", "format": "int32",
"type": "integer" "type": "integer"
}, },
@ -10187,7 +10187,7 @@
"type": "string" "type": "string"
}, },
"whenUnsatisfiable": { "whenUnsatisfiable": {
"description": "WhenUnsatisfiable indicates how to deal with a pod if it doesn't satisfy the spread constraint. - DoNotSchedule (default) tells the scheduler not to schedule it - ScheduleAnyway tells the scheduler to still schedule it It's considered as \"Unsatisfiable\" if and only if placing incoming pod on any topology violates \"MaxSkew\". For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same labelSelector spread as 3/1/1: | zone1 | zone2 | zone3 | | P P P | P | P | If WhenUnsatisfiable is set to DoNotSchedule, incoming pod can only be scheduled to zone2(zone3) to become 3/2/1(3/1/2) as ActualSkew(2-1) on zone2(zone3) satisfies MaxSkew(1). In other words, the cluster can still be imbalanced, but scheduler won't make it *more* imbalanced. It's a required field.", "description": "WhenUnsatisfiable indicates how to deal with a pod if it doesn't satisfy the spread constraint. - DoNotSchedule (default) tells the scheduler not to schedule it. - ScheduleAnyway tells the scheduler to schedule the pod in any location,\n but giving higher precedence to topologies that would help reduce the\n skew.\nA constraint is considered \"Unsatisfiable\" for an incoming pod if and only if every possible node assigment for that pod would violate \"MaxSkew\" on some topology. For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same labelSelector spread as 3/1/1: | zone1 | zone2 | zone3 | | P P P | P | P | If WhenUnsatisfiable is set to DoNotSchedule, incoming pod can only be scheduled to zone2(zone3) to become 3/2/1(3/1/2) as ActualSkew(2-1) on zone2(zone3) satisfies MaxSkew(1). In other words, the cluster can still be imbalanced, but scheduler won't make it *more* imbalanced. It's a required field.",
"type": "string" "type": "string"
} }
}, },

View File

@ -5176,8 +5176,8 @@ const (
// TopologySpreadConstraint specifies how to spread matching pods among the given topology. // TopologySpreadConstraint specifies how to spread matching pods among the given topology.
type TopologySpreadConstraint struct { type TopologySpreadConstraint struct {
// MaxSkew describes the degree to which pods may be unevenly distributed. // MaxSkew describes the degree to which pods may be unevenly distributed.
// It's the maximum permitted difference between the number of matching pods in // When `whenUnsatisfiable=DoNotSchedule`, it is the maximum permitted difference
// any two topology domains of a given topology type. // between the number of matching pods in the target topology and the global minimum.
// For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same // For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same
// labelSelector spread as 1/1/0: // labelSelector spread as 1/1/0:
// +-------+-------+-------+ // +-------+-------+-------+
@ -5189,6 +5189,8 @@ type TopologySpreadConstraint struct {
// scheduling it onto zone1(zone2) would make the ActualSkew(2-0) on zone1(zone2) // scheduling it onto zone1(zone2) would make the ActualSkew(2-0) on zone1(zone2)
// violate MaxSkew(1). // violate MaxSkew(1).
// - if MaxSkew is 2, incoming pod can be scheduled onto any zone. // - if MaxSkew is 2, incoming pod can be scheduled onto any zone.
// When `whenUnsatisfiable=ScheduleAnyway`, it is used to give higher precedence
// to topologies that satisfy it.
// It's a required field. Default value is 1 and 0 is not allowed. // It's a required field. Default value is 1 and 0 is not allowed.
MaxSkew int32 MaxSkew int32
// TopologyKey is the key of node labels. Nodes that have a label with this key // TopologyKey is the key of node labels. Nodes that have a label with this key
@ -5199,10 +5201,13 @@ type TopologySpreadConstraint struct {
TopologyKey string TopologyKey string
// WhenUnsatisfiable indicates how to deal with a pod if it doesn't satisfy // WhenUnsatisfiable indicates how to deal with a pod if it doesn't satisfy
// the spread constraint. // the spread constraint.
// - DoNotSchedule (default) tells the scheduler not to schedule it // - DoNotSchedule (default) tells the scheduler not to schedule it.
// - ScheduleAnyway tells the scheduler to still schedule it // - ScheduleAnyway tells the scheduler to schedule the pod in any location,
// It's considered as "Unsatisfiable" if and only if placing incoming pod on any // but giving higher precedence to topologies that would help reduce the
// topology violates "MaxSkew". // skew.
// A constraint is considered "Unsatisfiable" for an incoming pod
// if and only if every possible node assigment for that pod would violate
// "MaxSkew" on some topology.
// For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same // For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same
// labelSelector spread as 3/1/1: // labelSelector spread as 3/1/1:
// +-------+-------+-------+ // +-------+-------+-------+

View File

@ -5004,8 +5004,8 @@ message TopologySelectorTerm {
// TopologySpreadConstraint specifies how to spread matching pods among the given topology. // TopologySpreadConstraint specifies how to spread matching pods among the given topology.
message TopologySpreadConstraint { message TopologySpreadConstraint {
// MaxSkew describes the degree to which pods may be unevenly distributed. // MaxSkew describes the degree to which pods may be unevenly distributed.
// It's the maximum permitted difference between the number of matching pods in // When `whenUnsatisfiable=DoNotSchedule`, it is the maximum permitted difference
// any two topology domains of a given topology type. // between the number of matching pods in the target topology and the global minimum.
// For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same // For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same
// labelSelector spread as 1/1/0: // labelSelector spread as 1/1/0:
// +-------+-------+-------+ // +-------+-------+-------+
@ -5017,6 +5017,8 @@ message TopologySpreadConstraint {
// scheduling it onto zone1(zone2) would make the ActualSkew(2-0) on zone1(zone2) // scheduling it onto zone1(zone2) would make the ActualSkew(2-0) on zone1(zone2)
// violate MaxSkew(1). // violate MaxSkew(1).
// - if MaxSkew is 2, incoming pod can be scheduled onto any zone. // - if MaxSkew is 2, incoming pod can be scheduled onto any zone.
// When `whenUnsatisfiable=ScheduleAnyway`, it is used to give higher precedence
// to topologies that satisfy it.
// It's a required field. Default value is 1 and 0 is not allowed. // It's a required field. Default value is 1 and 0 is not allowed.
optional int32 maxSkew = 1; optional int32 maxSkew = 1;
@ -5029,10 +5031,13 @@ message TopologySpreadConstraint {
// WhenUnsatisfiable indicates how to deal with a pod if it doesn't satisfy // WhenUnsatisfiable indicates how to deal with a pod if it doesn't satisfy
// the spread constraint. // the spread constraint.
// - DoNotSchedule (default) tells the scheduler not to schedule it // - DoNotSchedule (default) tells the scheduler not to schedule it.
// - ScheduleAnyway tells the scheduler to still schedule it // - ScheduleAnyway tells the scheduler to schedule the pod in any location,
// It's considered as "Unsatisfiable" if and only if placing incoming pod on any // but giving higher precedence to topologies that would help reduce the
// topology violates "MaxSkew". // skew.
// A constraint is considered "Unsatisfiable" for an incoming pod
// if and only if every possible node assigment for that pod would violate
// "MaxSkew" on some topology.
// For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same // For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same
// labelSelector spread as 3/1/1: // labelSelector spread as 3/1/1:
// +-------+-------+-------+ // +-------+-------+-------+

View File

@ -3072,8 +3072,8 @@ const (
// TopologySpreadConstraint specifies how to spread matching pods among the given topology. // TopologySpreadConstraint specifies how to spread matching pods among the given topology.
type TopologySpreadConstraint struct { type TopologySpreadConstraint struct {
// MaxSkew describes the degree to which pods may be unevenly distributed. // MaxSkew describes the degree to which pods may be unevenly distributed.
// It's the maximum permitted difference between the number of matching pods in // When `whenUnsatisfiable=DoNotSchedule`, it is the maximum permitted difference
// any two topology domains of a given topology type. // between the number of matching pods in the target topology and the global minimum.
// For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same // For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same
// labelSelector spread as 1/1/0: // labelSelector spread as 1/1/0:
// +-------+-------+-------+ // +-------+-------+-------+
@ -3085,6 +3085,8 @@ type TopologySpreadConstraint struct {
// scheduling it onto zone1(zone2) would make the ActualSkew(2-0) on zone1(zone2) // scheduling it onto zone1(zone2) would make the ActualSkew(2-0) on zone1(zone2)
// violate MaxSkew(1). // violate MaxSkew(1).
// - if MaxSkew is 2, incoming pod can be scheduled onto any zone. // - if MaxSkew is 2, incoming pod can be scheduled onto any zone.
// When `whenUnsatisfiable=ScheduleAnyway`, it is used to give higher precedence
// to topologies that satisfy it.
// It's a required field. Default value is 1 and 0 is not allowed. // It's a required field. Default value is 1 and 0 is not allowed.
MaxSkew int32 `json:"maxSkew" protobuf:"varint,1,opt,name=maxSkew"` MaxSkew int32 `json:"maxSkew" protobuf:"varint,1,opt,name=maxSkew"`
// TopologyKey is the key of node labels. Nodes that have a label with this key // TopologyKey is the key of node labels. Nodes that have a label with this key
@ -3095,10 +3097,13 @@ type TopologySpreadConstraint struct {
TopologyKey string `json:"topologyKey" protobuf:"bytes,2,opt,name=topologyKey"` TopologyKey string `json:"topologyKey" protobuf:"bytes,2,opt,name=topologyKey"`
// WhenUnsatisfiable indicates how to deal with a pod if it doesn't satisfy // WhenUnsatisfiable indicates how to deal with a pod if it doesn't satisfy
// the spread constraint. // the spread constraint.
// - DoNotSchedule (default) tells the scheduler not to schedule it // - DoNotSchedule (default) tells the scheduler not to schedule it.
// - ScheduleAnyway tells the scheduler to still schedule it // - ScheduleAnyway tells the scheduler to schedule the pod in any location,
// It's considered as "Unsatisfiable" if and only if placing incoming pod on any // but giving higher precedence to topologies that would help reduce the
// topology violates "MaxSkew". // skew.
// A constraint is considered "Unsatisfiable" for an incoming pod
// if and only if every possible node assigment for that pod would violate
// "MaxSkew" on some topology.
// For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same // For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same
// labelSelector spread as 3/1/1: // labelSelector spread as 3/1/1:
// +-------+-------+-------+ // +-------+-------+-------+

View File

@ -2325,9 +2325,9 @@ func (TopologySelectorTerm) SwaggerDoc() map[string]string {
var map_TopologySpreadConstraint = map[string]string{ var map_TopologySpreadConstraint = map[string]string{
"": "TopologySpreadConstraint specifies how to spread matching pods among the given topology.", "": "TopologySpreadConstraint specifies how to spread matching pods among the given topology.",
"maxSkew": "MaxSkew describes the degree to which pods may be unevenly distributed. It's the maximum permitted difference between the number of matching pods in any two topology domains of a given topology type. For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same labelSelector spread as 1/1/0: ", "maxSkew": "MaxSkew describes the degree to which pods may be unevenly distributed. When `whenUnsatisfiable=DoNotSchedule`, it is the maximum permitted difference between the number of matching pods in the target topology and the global minimum. For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same labelSelector spread as 1/1/0: ",
"topologyKey": "TopologyKey is the key of node labels. Nodes that have a label with this key and identical values are considered to be in the same topology. We consider each <key, value> as a \"bucket\", and try to put balanced number of pods into each bucket. It's a required field.", "topologyKey": "TopologyKey is the key of node labels. Nodes that have a label with this key and identical values are considered to be in the same topology. We consider each <key, value> as a \"bucket\", and try to put balanced number of pods into each bucket. It's a required field.",
"whenUnsatisfiable": "WhenUnsatisfiable indicates how to deal with a pod if it doesn't satisfy the spread constraint. - DoNotSchedule (default) tells the scheduler not to schedule it - ScheduleAnyway tells the scheduler to still schedule it It's considered as \"Unsatisfiable\" if and only if placing incoming pod on any topology violates \"MaxSkew\". For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same labelSelector spread as 3/1/1: ", "whenUnsatisfiable": "WhenUnsatisfiable indicates how to deal with a pod if it doesn't satisfy the spread constraint. - DoNotSchedule (default) tells the scheduler not to schedule it. - ScheduleAnyway tells the scheduler to schedule the pod in any location,\n but giving higher precedence to topologies that would help reduce the\n skew.\nA constraint is considered \"Unsatisfiable\" for an incoming pod if and only if every possible node assigment for that pod would violate \"MaxSkew\" on some topology. For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same labelSelector spread as 3/1/1: ",
"labelSelector": "LabelSelector is used to find matching pods. Pods that match this label selector are counted to determine the number of pods in their corresponding topology domain.", "labelSelector": "LabelSelector is used to find matching pods. Pods that match this label selector are counted to determine the number of pods in their corresponding topology domain.",
} }