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
9503c64f
Commit
9503c64f
authored
Oct 16, 2018
by
Jordan Liggitt
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Simplify taint manager workqueue keys
parent
151830e4
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
138 additions
and
81 deletions
+138
-81
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
+84
-73
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 @
9503c64f
...
@@ -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 @
9503c64f
...
@@ -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 @
9503c64f
This diff is collapsed.
Click to expand it.
pkg/controller/nodelifecycle/scheduler/taint_manager_test.go
View file @
9503c64f
...
@@ -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