Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
K
k3s
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Jacklull
k3s
Commits
8f87e71e
Unverified
Commit
8f87e71e
authored
Dec 13, 2018
by
Wei Huang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
cleanup logic related with OutOfDisk
- cleanup OOD logic in scheduling and node controller - update comments and testcases
parent
f4487a06
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
15 additions
and
174 deletions
+15
-174
node_lifecycle_controller.go
pkg/controller/nodelifecycle/node_lifecycle_controller.go
+1
-6
node_lifecycle_controller_test.go
...ontroller/nodelifecycle/node_lifecycle_controller_test.go
+7
-119
kube_features.go
pkg/features/kube_features.go
+1
-1
error.go
pkg/scheduler/algorithm/predicates/error.go
+0
-2
predicates.go
pkg/scheduler/algorithm/predicates/predicates.go
+1
-4
predicates_test.go
pkg/scheduler/algorithm/predicates/predicates_test.go
+3
-33
well_known_labels.go
pkg/scheduler/api/well_known_labels.go
+0
-5
generic_scheduler.go
pkg/scheduler/core/generic_scheduler.go
+0
-1
generic_scheduler_test.go
pkg/scheduler/core/generic_scheduler_test.go
+2
-3
No files found.
pkg/controller/nodelifecycle/node_lifecycle_controller.go
View file @
8f87e71e
...
@@ -95,9 +95,6 @@ var (
...
@@ -95,9 +95,6 @@ var (
v1
.
NodeMemoryPressure
:
{
v1
.
NodeMemoryPressure
:
{
v1
.
ConditionTrue
:
schedulerapi
.
TaintNodeMemoryPressure
,
v1
.
ConditionTrue
:
schedulerapi
.
TaintNodeMemoryPressure
,
},
},
v1
.
NodeOutOfDisk
:
{
v1
.
ConditionTrue
:
schedulerapi
.
TaintNodeOutOfDisk
,
},
v1
.
NodeDiskPressure
:
{
v1
.
NodeDiskPressure
:
{
v1
.
ConditionTrue
:
schedulerapi
.
TaintNodeDiskPressure
,
v1
.
ConditionTrue
:
schedulerapi
.
TaintNodeDiskPressure
,
},
},
...
@@ -114,7 +111,6 @@ var (
...
@@ -114,7 +111,6 @@ var (
schedulerapi
.
TaintNodeUnreachable
:
v1
.
NodeReady
,
schedulerapi
.
TaintNodeUnreachable
:
v1
.
NodeReady
,
schedulerapi
.
TaintNodeNetworkUnavailable
:
v1
.
NodeNetworkUnavailable
,
schedulerapi
.
TaintNodeNetworkUnavailable
:
v1
.
NodeNetworkUnavailable
,
schedulerapi
.
TaintNodeMemoryPressure
:
v1
.
NodeMemoryPressure
,
schedulerapi
.
TaintNodeMemoryPressure
:
v1
.
NodeMemoryPressure
,
schedulerapi
.
TaintNodeOutOfDisk
:
v1
.
NodeOutOfDisk
,
schedulerapi
.
TaintNodeDiskPressure
:
v1
.
NodeDiskPressure
,
schedulerapi
.
TaintNodeDiskPressure
:
v1
.
NodeDiskPressure
,
schedulerapi
.
TaintNodePIDPressure
:
v1
.
NodePIDPressure
,
schedulerapi
.
TaintNodePIDPressure
:
v1
.
NodePIDPressure
,
}
}
...
@@ -229,7 +225,7 @@ type Controller struct {
...
@@ -229,7 +225,7 @@ type Controller struct {
useTaintBasedEvictions
bool
useTaintBasedEvictions
bool
// if set to true, NodeController will taint Nodes based on its condition for 'NetworkUnavailable',
// if set to true, NodeController will taint Nodes based on its condition for 'NetworkUnavailable',
// 'MemoryPressure', '
OutOfDisk
' and 'DiskPressure'.
// 'MemoryPressure', '
PIDPressure
' and 'DiskPressure'.
taintNodeByCondition
bool
taintNodeByCondition
bool
nodeUpdateQueue
workqueue
.
Interface
nodeUpdateQueue
workqueue
.
Interface
...
@@ -921,7 +917,6 @@ func (nc *Controller) tryUpdateNodeHealth(node *v1.Node) (time.Duration, v1.Node
...
@@ -921,7 +917,6 @@ func (nc *Controller) tryUpdateNodeHealth(node *v1.Node) (time.Duration, v1.Node
// remaining node conditions should also be set to Unknown
// remaining node conditions should also be set to Unknown
remainingNodeConditionTypes
:=
[]
v1
.
NodeConditionType
{
remainingNodeConditionTypes
:=
[]
v1
.
NodeConditionType
{
v1
.
NodeOutOfDisk
,
v1
.
NodeMemoryPressure
,
v1
.
NodeMemoryPressure
,
v1
.
NodeDiskPressure
,
v1
.
NodeDiskPressure
,
v1
.
NodePIDPressure
,
v1
.
NodePIDPressure
,
...
...
pkg/controller/nodelifecycle/node_lifecycle_controller_test.go
View file @
8f87e71e
This diff is collapsed.
Click to expand it.
pkg/features/kube_features.go
View file @
8f87e71e
...
@@ -128,7 +128,7 @@ const (
...
@@ -128,7 +128,7 @@ const (
// beta: v1.12
// beta: v1.12
//
//
// Taint nodes based on their condition status for 'NetworkUnavailable',
// Taint nodes based on their condition status for 'NetworkUnavailable',
// 'MemoryPressure', '
OutOfDisk
' and 'DiskPressure'.
// 'MemoryPressure', '
PIDPressure
' and 'DiskPressure'.
TaintNodesByCondition
utilfeature
.
Feature
=
"TaintNodesByCondition"
TaintNodesByCondition
utilfeature
.
Feature
=
"TaintNodesByCondition"
// owner: @jsafrane
// owner: @jsafrane
...
...
pkg/scheduler/algorithm/predicates/error.go
View file @
8f87e71e
...
@@ -63,8 +63,6 @@ var (
...
@@ -63,8 +63,6 @@ var (
ErrNodeUnderDiskPressure
=
newPredicateFailureError
(
"NodeUnderDiskPressure"
,
"node(s) had disk pressure"
)
ErrNodeUnderDiskPressure
=
newPredicateFailureError
(
"NodeUnderDiskPressure"
,
"node(s) had disk pressure"
)
// ErrNodeUnderPIDPressure is used for NodeUnderPIDPressure predicate error.
// ErrNodeUnderPIDPressure is used for NodeUnderPIDPressure predicate error.
ErrNodeUnderPIDPressure
=
newPredicateFailureError
(
"NodeUnderPIDPressure"
,
"node(s) had pid pressure"
)
ErrNodeUnderPIDPressure
=
newPredicateFailureError
(
"NodeUnderPIDPressure"
,
"node(s) had pid pressure"
)
// ErrNodeOutOfDisk is used for NodeOutOfDisk predicate error.
ErrNodeOutOfDisk
=
newPredicateFailureError
(
"NodeOutOfDisk"
,
"node(s) were out of disk space"
)
// ErrNodeNotReady is used for NodeNotReady predicate error.
// ErrNodeNotReady is used for NodeNotReady predicate error.
ErrNodeNotReady
=
newPredicateFailureError
(
"NodeNotReady"
,
"node(s) were not ready"
)
ErrNodeNotReady
=
newPredicateFailureError
(
"NodeNotReady"
,
"node(s) were not ready"
)
// ErrNodeNetworkUnavailable is used for NodeNetworkUnavailable predicate error.
// ErrNodeNetworkUnavailable is used for NodeNetworkUnavailable predicate error.
...
...
pkg/scheduler/algorithm/predicates/predicates.go
View file @
8f87e71e
...
@@ -1563,7 +1563,7 @@ func CheckNodePIDPressurePredicate(pod *v1.Pod, meta algorithm.PredicateMetadata
...
@@ -1563,7 +1563,7 @@ func CheckNodePIDPressurePredicate(pod *v1.Pod, meta algorithm.PredicateMetadata
return
true
,
nil
,
nil
return
true
,
nil
,
nil
}
}
// CheckNodeConditionPredicate checks if a pod can be scheduled on a node reporting
out of disk,
// CheckNodeConditionPredicate checks if a pod can be scheduled on a node reporting
// network unavailable and not ready condition. Only node conditions are accounted in this predicate.
// network unavailable and not ready condition. Only node conditions are accounted in this predicate.
func
CheckNodeConditionPredicate
(
pod
*
v1
.
Pod
,
meta
algorithm
.
PredicateMetadata
,
nodeInfo
*
schedulernodeinfo
.
NodeInfo
)
(
bool
,
[]
algorithm
.
PredicateFailureReason
,
error
)
{
func
CheckNodeConditionPredicate
(
pod
*
v1
.
Pod
,
meta
algorithm
.
PredicateMetadata
,
nodeInfo
*
schedulernodeinfo
.
NodeInfo
)
(
bool
,
[]
algorithm
.
PredicateFailureReason
,
error
)
{
reasons
:=
[]
algorithm
.
PredicateFailureReason
{}
reasons
:=
[]
algorithm
.
PredicateFailureReason
{}
...
@@ -1576,12 +1576,9 @@ func CheckNodeConditionPredicate(pod *v1.Pod, meta algorithm.PredicateMetadata,
...
@@ -1576,12 +1576,9 @@ func CheckNodeConditionPredicate(pod *v1.Pod, meta algorithm.PredicateMetadata,
for
_
,
cond
:=
range
node
.
Status
.
Conditions
{
for
_
,
cond
:=
range
node
.
Status
.
Conditions
{
// We consider the node for scheduling only when its:
// We consider the node for scheduling only when its:
// - NodeReady condition status is ConditionTrue,
// - NodeReady condition status is ConditionTrue,
// - NodeOutOfDisk condition status is ConditionFalse,
// - NodeNetworkUnavailable condition status is ConditionFalse.
// - NodeNetworkUnavailable condition status is ConditionFalse.
if
cond
.
Type
==
v1
.
NodeReady
&&
cond
.
Status
!=
v1
.
ConditionTrue
{
if
cond
.
Type
==
v1
.
NodeReady
&&
cond
.
Status
!=
v1
.
ConditionTrue
{
reasons
=
append
(
reasons
,
ErrNodeNotReady
)
reasons
=
append
(
reasons
,
ErrNodeNotReady
)
}
else
if
cond
.
Type
==
v1
.
NodeOutOfDisk
&&
cond
.
Status
!=
v1
.
ConditionFalse
{
reasons
=
append
(
reasons
,
ErrNodeOutOfDisk
)
}
else
if
cond
.
Type
==
v1
.
NodeNetworkUnavailable
&&
cond
.
Status
!=
v1
.
ConditionFalse
{
}
else
if
cond
.
Type
==
v1
.
NodeNetworkUnavailable
&&
cond
.
Status
!=
v1
.
ConditionFalse
{
reasons
=
append
(
reasons
,
ErrNodeNetworkUnavailable
)
reasons
=
append
(
reasons
,
ErrNodeNetworkUnavailable
)
}
}
...
...
pkg/scheduler/algorithm/predicates/predicates_test.go
View file @
8f87e71e
...
@@ -4521,47 +4521,17 @@ func TestNodeConditionPredicate(t *testing.T) {
...
@@ -4521,47 +4521,17 @@ func TestNodeConditionPredicate(t *testing.T) {
schedulable
:
false
,
schedulable
:
false
,
},
},
{
{
name
:
"node3 ignored - node out of disk"
,
name
:
"node3 ignored - node unschedulable"
,
node
:
&
v1
.
Node
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
"node3"
},
Status
:
v1
.
NodeStatus
{
Conditions
:
[]
v1
.
NodeCondition
{{
Type
:
v1
.
NodeOutOfDisk
,
Status
:
v1
.
ConditionTrue
}}}},
schedulable
:
false
,
},
{
name
:
"node4 considered"
,
node
:
&
v1
.
Node
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
"node4"
},
Status
:
v1
.
NodeStatus
{
Conditions
:
[]
v1
.
NodeCondition
{{
Type
:
v1
.
NodeOutOfDisk
,
Status
:
v1
.
ConditionFalse
}}}},
schedulable
:
true
,
},
{
name
:
"node5 ignored - node out of disk"
,
node
:
&
v1
.
Node
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
"node5"
},
Status
:
v1
.
NodeStatus
{
Conditions
:
[]
v1
.
NodeCondition
{{
Type
:
v1
.
NodeReady
,
Status
:
v1
.
ConditionTrue
},
{
Type
:
v1
.
NodeOutOfDisk
,
Status
:
v1
.
ConditionTrue
}}}},
schedulable
:
false
,
},
{
name
:
"node6 considered"
,
node
:
&
v1
.
Node
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
"node6"
},
Status
:
v1
.
NodeStatus
{
Conditions
:
[]
v1
.
NodeCondition
{{
Type
:
v1
.
NodeReady
,
Status
:
v1
.
ConditionTrue
},
{
Type
:
v1
.
NodeOutOfDisk
,
Status
:
v1
.
ConditionFalse
}}}},
schedulable
:
true
,
},
{
name
:
"node7 ignored - node out of disk, node not Ready"
,
node
:
&
v1
.
Node
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
"node7"
},
Status
:
v1
.
NodeStatus
{
Conditions
:
[]
v1
.
NodeCondition
{{
Type
:
v1
.
NodeReady
,
Status
:
v1
.
ConditionFalse
},
{
Type
:
v1
.
NodeOutOfDisk
,
Status
:
v1
.
ConditionTrue
}}}},
schedulable
:
false
,
},
{
name
:
"node8 ignored - node not Ready"
,
node
:
&
v1
.
Node
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
"node8"
},
Status
:
v1
.
NodeStatus
{
Conditions
:
[]
v1
.
NodeCondition
{{
Type
:
v1
.
NodeReady
,
Status
:
v1
.
ConditionFalse
},
{
Type
:
v1
.
NodeOutOfDisk
,
Status
:
v1
.
ConditionFalse
}}}},
schedulable
:
false
,
},
{
name
:
"node9 ignored - node unschedulable"
,
node
:
&
v1
.
Node
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
"node9"
},
Spec
:
v1
.
NodeSpec
{
Unschedulable
:
true
}},
node
:
&
v1
.
Node
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
"node9"
},
Spec
:
v1
.
NodeSpec
{
Unschedulable
:
true
}},
schedulable
:
false
,
schedulable
:
false
,
},
},
{
{
name
:
"node
10
considered"
,
name
:
"node
4
considered"
,
node
:
&
v1
.
Node
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
"node10"
},
Spec
:
v1
.
NodeSpec
{
Unschedulable
:
false
}},
node
:
&
v1
.
Node
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
"node10"
},
Spec
:
v1
.
NodeSpec
{
Unschedulable
:
false
}},
schedulable
:
true
,
schedulable
:
true
,
},
},
{
{
name
:
"node
11
considered"
,
name
:
"node
5
considered"
,
node
:
&
v1
.
Node
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
"node11"
}},
node
:
&
v1
.
Node
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
"node11"
}},
schedulable
:
true
,
schedulable
:
true
,
},
},
...
...
pkg/scheduler/api/well_known_labels.go
View file @
8f87e71e
...
@@ -45,11 +45,6 @@ const (
...
@@ -45,11 +45,6 @@ const (
// and removed when node becomes scheduable.
// and removed when node becomes scheduable.
TaintNodeUnschedulable
=
"node.kubernetes.io/unschedulable"
TaintNodeUnschedulable
=
"node.kubernetes.io/unschedulable"
// TaintNodeOutOfDisk will be added when node becomes out of disk
// and feature-gate for TaintNodesByCondition flag is enabled,
// and removed when node has enough disk.
TaintNodeOutOfDisk
=
"node.kubernetes.io/out-of-disk"
// TaintNodeMemoryPressure will be added when node has memory pressure
// TaintNodeMemoryPressure will be added when node has memory pressure
// and feature-gate for TaintNodesByCondition flag is enabled,
// and feature-gate for TaintNodesByCondition flag is enabled,
// and removed when node has enough memory.
// and removed when node has enough memory.
...
...
pkg/scheduler/core/generic_scheduler.go
View file @
8f87e71e
...
@@ -1061,7 +1061,6 @@ func nodesWherePreemptionMightHelp(nodes []*v1.Node, failedPredicatesMap FailedP
...
@@ -1061,7 +1061,6 @@ func nodesWherePreemptionMightHelp(nodes []*v1.Node, failedPredicatesMap FailedP
predicates
.
ErrNodeUnderDiskPressure
,
predicates
.
ErrNodeUnderDiskPressure
,
predicates
.
ErrNodeUnderPIDPressure
,
predicates
.
ErrNodeUnderPIDPressure
,
predicates
.
ErrNodeUnderMemoryPressure
,
predicates
.
ErrNodeUnderMemoryPressure
,
predicates
.
ErrNodeOutOfDisk
,
predicates
.
ErrNodeUnschedulable
,
predicates
.
ErrNodeUnschedulable
,
predicates
.
ErrNodeUnknownCondition
,
predicates
.
ErrNodeUnknownCondition
,
predicates
.
ErrVolumeZoneConflict
,
predicates
.
ErrVolumeZoneConflict
,
...
...
pkg/scheduler/core/generic_scheduler_test.go
View file @
8f87e71e
...
@@ -1212,7 +1212,7 @@ func TestNodesWherePreemptionMightHelp(t *testing.T) {
...
@@ -1212,7 +1212,7 @@ func TestNodesWherePreemptionMightHelp(t *testing.T) {
{
{
name
:
"Mix of failed predicates works fine"
,
name
:
"Mix of failed predicates works fine"
,
failedPredMap
:
FailedPredicateMap
{
failedPredMap
:
FailedPredicateMap
{
"machine1"
:
[]
algorithm
.
PredicateFailureReason
{
algorithmpredicates
.
ErrNodeSelectorNotMatch
,
algorithmpredicates
.
ErrNode
OutOfDisk
,
algorithmpredicates
.
NewInsufficientResourceError
(
v1
.
ResourceMemory
,
1000
,
500
,
300
)},
"machine1"
:
[]
algorithm
.
PredicateFailureReason
{
algorithmpredicates
.
ErrNodeSelectorNotMatch
,
algorithmpredicates
.
ErrNode
UnderDiskPressure
,
algorithmpredicates
.
NewInsufficientResourceError
(
v1
.
ResourceMemory
,
1000
,
500
,
300
)},
"machine2"
:
[]
algorithm
.
PredicateFailureReason
{
algorithmpredicates
.
ErrPodNotMatchHostName
,
algorithmpredicates
.
ErrDiskConflict
},
"machine2"
:
[]
algorithm
.
PredicateFailureReason
{
algorithmpredicates
.
ErrPodNotMatchHostName
,
algorithmpredicates
.
ErrDiskConflict
},
"machine3"
:
[]
algorithm
.
PredicateFailureReason
{
algorithmpredicates
.
NewInsufficientResourceError
(
v1
.
ResourceMemory
,
1000
,
600
,
400
)},
"machine3"
:
[]
algorithm
.
PredicateFailureReason
{
algorithmpredicates
.
NewInsufficientResourceError
(
v1
.
ResourceMemory
,
1000
,
600
,
400
)},
"machine4"
:
[]
algorithm
.
PredicateFailureReason
{},
"machine4"
:
[]
algorithm
.
PredicateFailureReason
{},
...
@@ -1225,9 +1225,8 @@ func TestNodesWherePreemptionMightHelp(t *testing.T) {
...
@@ -1225,9 +1225,8 @@ func TestNodesWherePreemptionMightHelp(t *testing.T) {
"machine1"
:
[]
algorithm
.
PredicateFailureReason
{
algorithmpredicates
.
ErrNodeUnderDiskPressure
},
"machine1"
:
[]
algorithm
.
PredicateFailureReason
{
algorithmpredicates
.
ErrNodeUnderDiskPressure
},
"machine2"
:
[]
algorithm
.
PredicateFailureReason
{
algorithmpredicates
.
ErrNodeUnderPIDPressure
},
"machine2"
:
[]
algorithm
.
PredicateFailureReason
{
algorithmpredicates
.
ErrNodeUnderPIDPressure
},
"machine3"
:
[]
algorithm
.
PredicateFailureReason
{
algorithmpredicates
.
ErrNodeUnderMemoryPressure
},
"machine3"
:
[]
algorithm
.
PredicateFailureReason
{
algorithmpredicates
.
ErrNodeUnderMemoryPressure
},
"machine4"
:
[]
algorithm
.
PredicateFailureReason
{
algorithmpredicates
.
ErrNodeOutOfDisk
},
},
},
expected
:
map
[
string
]
bool
{},
expected
:
map
[
string
]
bool
{
"machine4"
:
true
},
},
},
{
{
name
:
"Node condition errors and ErrNodeUnknownCondition should be considered unresolvable"
,
name
:
"Node condition errors and ErrNodeUnknownCondition should be considered unresolvable"
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment