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
6f4b768c
Unverified
Commit
6f4b768c
authored
Oct 17, 2018
by
k8s-ci-robot
Committed by
GitHub
Oct 17, 2018
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #65350 from liggitt/simplify-taint-manager-key
Simplify taint manager workqueue keys
parents
feb6475a
9503c64f
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
132 additions
and
75 deletions
+132
-75
node_lifecycle_controller.go
pkg/controller/nodelifecycle/node_lifecycle_controller.go
+5
-1
BUILD
pkg/controller/nodelifecycle/scheduler/BUILD
+2
-0
taint_manager.go
pkg/controller/nodelifecycle/scheduler/taint_manager.go
+78
-67
taint_manager_test.go
pkg/controller/nodelifecycle/scheduler/taint_manager_test.go
+47
-7
No files found.
pkg/controller/nodelifecycle/node_lifecycle_controller.go
View file @
6f4b768c
...
@@ -345,7 +345,11 @@ func NewNodeLifecycleController(
...
@@ -345,7 +345,11 @@ func NewNodeLifecycleController(
nc
.
podInformerSynced
=
podInformer
.
Informer
()
.
HasSynced
nc
.
podInformerSynced
=
podInformer
.
Informer
()
.
HasSynced
if
nc
.
runTaintManager
{
if
nc
.
runTaintManager
{
nc
.
taintManager
=
scheduler
.
NewNoExecuteTaintManager
(
kubeClient
)
podLister
:=
podInformer
.
Lister
()
podGetter
:=
func
(
name
,
namespace
string
)
(
*
v1
.
Pod
,
error
)
{
return
podLister
.
Pods
(
namespace
)
.
Get
(
name
)
}
nodeLister
:=
nodeInformer
.
Lister
()
nodeGetter
:=
func
(
name
string
)
(
*
v1
.
Node
,
error
)
{
return
nodeLister
.
Get
(
name
)
}
nc
.
taintManager
=
scheduler
.
NewNoExecuteTaintManager
(
kubeClient
,
podGetter
,
nodeGetter
)
nodeInformer
.
Informer
()
.
AddEventHandler
(
cache
.
ResourceEventHandlerFuncs
{
nodeInformer
.
Informer
()
.
AddEventHandler
(
cache
.
ResourceEventHandlerFuncs
{
AddFunc
:
nodeutil
.
CreateAddNodeHandler
(
func
(
node
*
v1
.
Node
)
error
{
AddFunc
:
nodeutil
.
CreateAddNodeHandler
(
func
(
node
*
v1
.
Node
)
error
{
nc
.
taintManager
.
NodeUpdated
(
nil
,
node
)
nc
.
taintManager
.
NodeUpdated
(
nil
,
node
)
...
...
pkg/controller/nodelifecycle/scheduler/BUILD
View file @
6f4b768c
...
@@ -13,10 +13,12 @@ go_library(
...
@@ -13,10 +13,12 @@ go_library(
"//pkg/apis/core/helper:go_default_library",
"//pkg/apis/core/helper:go_default_library",
"//pkg/apis/core/v1/helper:go_default_library",
"//pkg/apis/core/v1/helper:go_default_library",
"//staging/src/k8s.io/api/core/v1:go_default_library",
"//staging/src/k8s.io/api/core/v1:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/fields:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/fields:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/types:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/types:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/runtime:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library",
"//staging/src/k8s.io/client-go/kubernetes:go_default_library",
"//staging/src/k8s.io/client-go/kubernetes:go_default_library",
"//staging/src/k8s.io/client-go/kubernetes/scheme:go_default_library",
"//staging/src/k8s.io/client-go/kubernetes/scheme:go_default_library",
...
...
pkg/controller/nodelifecycle/scheduler/taint_manager.go
View file @
6f4b768c
This diff is collapsed.
Click to expand it.
pkg/controller/nodelifecycle/scheduler/taint_manager_test.go
View file @
6f4b768c
...
@@ -19,6 +19,7 @@ package scheduler
...
@@ -19,6 +19,7 @@ package scheduler
import
(
import
(
"fmt"
"fmt"
"sort"
"sort"
"sync"
"testing"
"testing"
"time"
"time"
...
@@ -32,6 +33,42 @@ import (
...
@@ -32,6 +33,42 @@ import (
var
timeForControllerToProgress
=
500
*
time
.
Millisecond
var
timeForControllerToProgress
=
500
*
time
.
Millisecond
func
getPodFromClientset
(
clientset
*
fake
.
Clientset
)
GetPodFunc
{
return
func
(
name
,
namespace
string
)
(
*
v1
.
Pod
,
error
)
{
return
clientset
.
CoreV1
()
.
Pods
(
namespace
)
.
Get
(
name
,
metav1
.
GetOptions
{})
}
}
func
getNodeFromClientset
(
clientset
*
fake
.
Clientset
)
GetNodeFunc
{
return
func
(
name
string
)
(
*
v1
.
Node
,
error
)
{
return
clientset
.
CoreV1
()
.
Nodes
()
.
Get
(
name
,
metav1
.
GetOptions
{})
}
}
type
podHolder
struct
{
pod
*
v1
.
Pod
sync
.
Mutex
}
func
(
p
*
podHolder
)
getPod
(
name
,
namespace
string
)
(
*
v1
.
Pod
,
error
)
{
p
.
Lock
()
defer
p
.
Unlock
()
return
p
.
pod
,
nil
}
func
(
p
*
podHolder
)
setPod
(
pod
*
v1
.
Pod
)
{
p
.
Lock
()
defer
p
.
Unlock
()
p
.
pod
=
pod
}
type
nodeHolder
struct
{
node
*
v1
.
Node
}
func
(
n
*
nodeHolder
)
getNode
(
name
string
)
(
*
v1
.
Node
,
error
)
{
return
n
.
node
,
nil
}
func
createNoExecuteTaint
(
index
int
)
v1
.
Taint
{
func
createNoExecuteTaint
(
index
int
)
v1
.
Taint
{
now
:=
metav1
.
Now
()
now
:=
metav1
.
Now
()
return
v1
.
Taint
{
return
v1
.
Taint
{
...
@@ -150,7 +187,7 @@ func TestCreatePod(t *testing.T) {
...
@@ -150,7 +187,7 @@ func TestCreatePod(t *testing.T) {
for
_
,
item
:=
range
testCases
{
for
_
,
item
:=
range
testCases
{
stopCh
:=
make
(
chan
struct
{})
stopCh
:=
make
(
chan
struct
{})
fakeClientset
:=
fake
.
NewSimpleClientset
()
fakeClientset
:=
fake
.
NewSimpleClientset
()
controller
:=
NewNoExecuteTaintManager
(
fakeClientset
)
controller
:=
NewNoExecuteTaintManager
(
fakeClientset
,
(
&
podHolder
{
pod
:
item
.
pod
})
.
getPod
,
getNodeFromClientset
(
fakeClientset
)
)
controller
.
recorder
=
testutil
.
NewFakeRecorder
()
controller
.
recorder
=
testutil
.
NewFakeRecorder
()
go
controller
.
Run
(
stopCh
)
go
controller
.
Run
(
stopCh
)
controller
.
taintedNodes
=
item
.
taintedNodes
controller
.
taintedNodes
=
item
.
taintedNodes
...
@@ -174,7 +211,7 @@ func TestCreatePod(t *testing.T) {
...
@@ -174,7 +211,7 @@ func TestCreatePod(t *testing.T) {
func
TestDeletePod
(
t
*
testing
.
T
)
{
func
TestDeletePod
(
t
*
testing
.
T
)
{
stopCh
:=
make
(
chan
struct
{})
stopCh
:=
make
(
chan
struct
{})
fakeClientset
:=
fake
.
NewSimpleClientset
()
fakeClientset
:=
fake
.
NewSimpleClientset
()
controller
:=
NewNoExecuteTaintManager
(
fakeClientset
)
controller
:=
NewNoExecuteTaintManager
(
fakeClientset
,
getPodFromClientset
(
fakeClientset
),
getNodeFromClientset
(
fakeClientset
)
)
controller
.
recorder
=
testutil
.
NewFakeRecorder
()
controller
.
recorder
=
testutil
.
NewFakeRecorder
()
go
controller
.
Run
(
stopCh
)
go
controller
.
Run
(
stopCh
)
controller
.
taintedNodes
=
map
[
string
][]
v1
.
Taint
{
controller
.
taintedNodes
=
map
[
string
][]
v1
.
Taint
{
...
@@ -237,14 +274,17 @@ func TestUpdatePod(t *testing.T) {
...
@@ -237,14 +274,17 @@ func TestUpdatePod(t *testing.T) {
for
_
,
item
:=
range
testCases
{
for
_
,
item
:=
range
testCases
{
stopCh
:=
make
(
chan
struct
{})
stopCh
:=
make
(
chan
struct
{})
fakeClientset
:=
fake
.
NewSimpleClientset
()
fakeClientset
:=
fake
.
NewSimpleClientset
()
controller
:=
NewNoExecuteTaintManager
(
fakeClientset
)
holder
:=
&
podHolder
{}
controller
:=
NewNoExecuteTaintManager
(
fakeClientset
,
holder
.
getPod
,
getNodeFromClientset
(
fakeClientset
))
controller
.
recorder
=
testutil
.
NewFakeRecorder
()
controller
.
recorder
=
testutil
.
NewFakeRecorder
()
go
controller
.
Run
(
stopCh
)
go
controller
.
Run
(
stopCh
)
controller
.
taintedNodes
=
item
.
taintedNodes
controller
.
taintedNodes
=
item
.
taintedNodes
holder
.
setPod
(
item
.
prevPod
)
controller
.
PodUpdated
(
nil
,
item
.
prevPod
)
controller
.
PodUpdated
(
nil
,
item
.
prevPod
)
fakeClientset
.
ClearActions
()
fakeClientset
.
ClearActions
()
time
.
Sleep
(
timeForControllerToProgress
)
time
.
Sleep
(
timeForControllerToProgress
)
holder
.
setPod
(
item
.
newPod
)
controller
.
PodUpdated
(
item
.
prevPod
,
item
.
newPod
)
controller
.
PodUpdated
(
item
.
prevPod
,
item
.
newPod
)
// wait a bit
// wait a bit
time
.
Sleep
(
timeForControllerToProgress
)
time
.
Sleep
(
timeForControllerToProgress
)
...
@@ -301,7 +341,7 @@ func TestCreateNode(t *testing.T) {
...
@@ -301,7 +341,7 @@ func TestCreateNode(t *testing.T) {
for
_
,
item
:=
range
testCases
{
for
_
,
item
:=
range
testCases
{
stopCh
:=
make
(
chan
struct
{})
stopCh
:=
make
(
chan
struct
{})
fakeClientset
:=
fake
.
NewSimpleClientset
(
&
v1
.
PodList
{
Items
:
item
.
pods
})
fakeClientset
:=
fake
.
NewSimpleClientset
(
&
v1
.
PodList
{
Items
:
item
.
pods
})
controller
:=
NewNoExecuteTaintManager
(
fakeClientset
)
controller
:=
NewNoExecuteTaintManager
(
fakeClientset
,
getPodFromClientset
(
fakeClientset
),
(
&
nodeHolder
{
item
.
node
})
.
getNode
)
controller
.
recorder
=
testutil
.
NewFakeRecorder
()
controller
.
recorder
=
testutil
.
NewFakeRecorder
()
go
controller
.
Run
(
stopCh
)
go
controller
.
Run
(
stopCh
)
controller
.
NodeUpdated
(
nil
,
item
.
node
)
controller
.
NodeUpdated
(
nil
,
item
.
node
)
...
@@ -324,7 +364,7 @@ func TestCreateNode(t *testing.T) {
...
@@ -324,7 +364,7 @@ func TestCreateNode(t *testing.T) {
func
TestDeleteNode
(
t
*
testing
.
T
)
{
func
TestDeleteNode
(
t
*
testing
.
T
)
{
stopCh
:=
make
(
chan
struct
{})
stopCh
:=
make
(
chan
struct
{})
fakeClientset
:=
fake
.
NewSimpleClientset
()
fakeClientset
:=
fake
.
NewSimpleClientset
()
controller
:=
NewNoExecuteTaintManager
(
fakeClientset
)
controller
:=
NewNoExecuteTaintManager
(
fakeClientset
,
getPodFromClientset
(
fakeClientset
),
getNodeFromClientset
(
fakeClientset
)
)
controller
.
recorder
=
testutil
.
NewFakeRecorder
()
controller
.
recorder
=
testutil
.
NewFakeRecorder
()
controller
.
taintedNodes
=
map
[
string
][]
v1
.
Taint
{
controller
.
taintedNodes
=
map
[
string
][]
v1
.
Taint
{
"node1"
:
{
createNoExecuteTaint
(
1
)},
"node1"
:
{
createNoExecuteTaint
(
1
)},
...
@@ -422,7 +462,7 @@ func TestUpdateNode(t *testing.T) {
...
@@ -422,7 +462,7 @@ func TestUpdateNode(t *testing.T) {
for
_
,
item
:=
range
testCases
{
for
_
,
item
:=
range
testCases
{
stopCh
:=
make
(
chan
struct
{})
stopCh
:=
make
(
chan
struct
{})
fakeClientset
:=
fake
.
NewSimpleClientset
(
&
v1
.
PodList
{
Items
:
item
.
pods
})
fakeClientset
:=
fake
.
NewSimpleClientset
(
&
v1
.
PodList
{
Items
:
item
.
pods
})
controller
:=
NewNoExecuteTaintManager
(
fakeClientset
)
controller
:=
NewNoExecuteTaintManager
(
fakeClientset
,
getPodFromClientset
(
fakeClientset
),
(
&
nodeHolder
{
item
.
newNode
})
.
getNode
)
controller
.
recorder
=
testutil
.
NewFakeRecorder
()
controller
.
recorder
=
testutil
.
NewFakeRecorder
()
go
controller
.
Run
(
stopCh
)
go
controller
.
Run
(
stopCh
)
controller
.
NodeUpdated
(
item
.
oldNode
,
item
.
newNode
)
controller
.
NodeUpdated
(
item
.
oldNode
,
item
.
newNode
)
...
@@ -488,7 +528,7 @@ func TestUpdateNodeWithMultiplePods(t *testing.T) {
...
@@ -488,7 +528,7 @@ func TestUpdateNodeWithMultiplePods(t *testing.T) {
stopCh
:=
make
(
chan
struct
{})
stopCh
:=
make
(
chan
struct
{})
fakeClientset
:=
fake
.
NewSimpleClientset
(
&
v1
.
PodList
{
Items
:
item
.
pods
})
fakeClientset
:=
fake
.
NewSimpleClientset
(
&
v1
.
PodList
{
Items
:
item
.
pods
})
sort
.
Sort
(
item
.
expectedDeleteTimes
)
sort
.
Sort
(
item
.
expectedDeleteTimes
)
controller
:=
NewNoExecuteTaintManager
(
fakeClientset
)
controller
:=
NewNoExecuteTaintManager
(
fakeClientset
,
getPodFromClientset
(
fakeClientset
),
(
&
nodeHolder
{
item
.
newNode
})
.
getNode
)
controller
.
recorder
=
testutil
.
NewFakeRecorder
()
controller
.
recorder
=
testutil
.
NewFakeRecorder
()
go
controller
.
Run
(
stopCh
)
go
controller
.
Run
(
stopCh
)
controller
.
NodeUpdated
(
item
.
oldNode
,
item
.
newNode
)
controller
.
NodeUpdated
(
item
.
oldNode
,
item
.
newNode
)
...
...
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