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
b50330d8
Commit
b50330d8
authored
Aug 13, 2015
by
Brendan Burns
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #12539 from jiangyaoguo/keep-event-reason-consistent-in-scheduler-controller
Keep event reason consistent in scheduler and controller
parents
a3047a5a
5d3522dc
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
23 additions
and
22 deletions
+23
-22
plugin.go
contrib/mesos/pkg/scheduler/plugin.go
+3
-3
event.go
pkg/client/record/event.go
+4
-3
controller_utils.go
pkg/controller/controller_utils.go
+2
-2
nodecontroller.go
pkg/controller/node/nodecontroller.go
+6
-6
scheduler.go
plugin/pkg/scheduler/scheduler.go
+3
-3
scheduler_test.go
plugin/pkg/scheduler/scheduler_test.go
+5
-5
No files found.
contrib/mesos/pkg/scheduler/plugin.go
View file @
b50330d8
...
@@ -758,7 +758,7 @@ func (s *schedulingPlugin) scheduleOne() {
...
@@ -758,7 +758,7 @@ func (s *schedulingPlugin) scheduleOne() {
dest
,
err
:=
s
.
config
.
Algorithm
.
Schedule
(
pod
,
s
.
config
.
MinionLister
)
// call kubeScheduler.Schedule
dest
,
err
:=
s
.
config
.
Algorithm
.
Schedule
(
pod
,
s
.
config
.
MinionLister
)
// call kubeScheduler.Schedule
if
err
!=
nil
{
if
err
!=
nil
{
log
.
V
(
1
)
.
Infof
(
"Failed to schedule: %v"
,
pod
)
log
.
V
(
1
)
.
Infof
(
"Failed to schedule: %v"
,
pod
)
s
.
config
.
Recorder
.
Eventf
(
pod
,
"
f
ailedScheduling"
,
"Error scheduling: %v"
,
err
)
s
.
config
.
Recorder
.
Eventf
(
pod
,
"
F
ailedScheduling"
,
"Error scheduling: %v"
,
err
)
s
.
config
.
Error
(
pod
,
err
)
s
.
config
.
Error
(
pod
,
err
)
return
return
}
}
...
@@ -771,11 +771,11 @@ func (s *schedulingPlugin) scheduleOne() {
...
@@ -771,11 +771,11 @@ func (s *schedulingPlugin) scheduleOne() {
}
}
if
err
:=
s
.
config
.
Binder
.
Bind
(
b
);
err
!=
nil
{
if
err
:=
s
.
config
.
Binder
.
Bind
(
b
);
err
!=
nil
{
log
.
V
(
1
)
.
Infof
(
"Failed to bind pod: %v"
,
err
)
log
.
V
(
1
)
.
Infof
(
"Failed to bind pod: %v"
,
err
)
s
.
config
.
Recorder
.
Eventf
(
pod
,
"
f
ailedScheduling"
,
"Binding rejected: %v"
,
err
)
s
.
config
.
Recorder
.
Eventf
(
pod
,
"
F
ailedScheduling"
,
"Binding rejected: %v"
,
err
)
s
.
config
.
Error
(
pod
,
err
)
s
.
config
.
Error
(
pod
,
err
)
return
return
}
}
s
.
config
.
Recorder
.
Eventf
(
pod
,
"
s
cheduled"
,
"Successfully assigned %v to %v"
,
pod
.
Name
,
dest
)
s
.
config
.
Recorder
.
Eventf
(
pod
,
"
S
cheduled"
,
"Successfully assigned %v to %v"
,
pod
.
Name
,
dest
)
}
}
// this pod may be out of sync with respect to the API server registry:
// this pod may be out of sync with respect to the API server registry:
...
...
pkg/client/record/event.go
View file @
b50330d8
...
@@ -51,9 +51,10 @@ type EventRecorder interface {
...
@@ -51,9 +51,10 @@ type EventRecorder interface {
// Event constructs an event from the given information and puts it in the queue for sending.
// Event constructs an event from the given information and puts it in the queue for sending.
// 'object' is the object this event is about. Event will make a reference-- or you may also
// 'object' is the object this event is about. Event will make a reference-- or you may also
// pass a reference to the object directly.
// pass a reference to the object directly.
// 'reason' is the reason this event is generated. 'reason' should be short and unique; it will
// 'reason' is the reason this event is generated. 'reason' should be short and unique; it
// be used to automate handling of events, so imagine people writing switch statements to
// should be in UpperCamelCase format (starting with a capital letter). "reason" will be used
// handle them. You want to make that easy.
// to automate handling of events, so imagine people writing switch statements to handle them.
// You want to make that easy.
// 'message' is intended to be human readable.
// 'message' is intended to be human readable.
//
//
// The resulting event will be created in the same namespace as the reference object.
// The resulting event will be created in the same namespace as the reference object.
...
...
pkg/controller/controller_utils.go
View file @
b50330d8
...
@@ -281,11 +281,11 @@ func (r RealPodControl) CreateReplica(namespace string, controller *api.Replicat
...
@@ -281,11 +281,11 @@ func (r RealPodControl) CreateReplica(namespace string, controller *api.Replicat
return
fmt
.
Errorf
(
"unable to create pod replica, no labels"
)
return
fmt
.
Errorf
(
"unable to create pod replica, no labels"
)
}
}
if
newPod
,
err
:=
r
.
KubeClient
.
Pods
(
namespace
)
.
Create
(
pod
);
err
!=
nil
{
if
newPod
,
err
:=
r
.
KubeClient
.
Pods
(
namespace
)
.
Create
(
pod
);
err
!=
nil
{
r
.
Recorder
.
Eventf
(
controller
,
"
f
ailedCreate"
,
"Error creating: %v"
,
err
)
r
.
Recorder
.
Eventf
(
controller
,
"
F
ailedCreate"
,
"Error creating: %v"
,
err
)
return
fmt
.
Errorf
(
"unable to create pod replica: %v"
,
err
)
return
fmt
.
Errorf
(
"unable to create pod replica: %v"
,
err
)
}
else
{
}
else
{
glog
.
V
(
4
)
.
Infof
(
"Controller %v created pod %v"
,
controller
.
Name
,
newPod
.
Name
)
glog
.
V
(
4
)
.
Infof
(
"Controller %v created pod %v"
,
controller
.
Name
,
newPod
.
Name
)
r
.
Recorder
.
Eventf
(
controller
,
"
s
uccessfulCreate"
,
"Created pod: %v"
,
newPod
.
Name
)
r
.
Recorder
.
Eventf
(
controller
,
"
S
uccessfulCreate"
,
"Created pod: %v"
,
newPod
.
Name
)
}
}
return
nil
return
nil
}
}
...
...
pkg/controller/node/nodecontroller.go
View file @
b50330d8
...
@@ -163,7 +163,7 @@ func (nc *NodeController) deletePods(nodeID string) error {
...
@@ -163,7 +163,7 @@ func (nc *NodeController) deletePods(nodeID string) error {
if
err
!=
nil
{
if
err
!=
nil
{
return
err
return
err
}
}
nc
.
recordNodeEvent
(
nodeID
,
fmt
.
Sprintf
(
"Deleting all Pods from Node %v."
,
nodeID
))
nc
.
recordNodeEvent
(
nodeID
,
"DeletingAllPods"
,
fmt
.
Sprintf
(
"Deleting all Pods from Node %v."
,
nodeID
))
for
_
,
pod
:=
range
pods
.
Items
{
for
_
,
pod
:=
range
pods
.
Items
{
// Defensive check, also needed for tests.
// Defensive check, also needed for tests.
if
pod
.
Spec
.
NodeName
!=
nodeID
{
if
pod
.
Spec
.
NodeName
!=
nodeID
{
...
@@ -214,7 +214,7 @@ func (nc *NodeController) monitorNodeStatus() error {
...
@@ -214,7 +214,7 @@ func (nc *NodeController) monitorNodeStatus() error {
for
_
,
node
:=
range
nodes
.
Items
{
for
_
,
node
:=
range
nodes
.
Items
{
if
!
nc
.
knownNodeSet
.
Has
(
node
.
Name
)
{
if
!
nc
.
knownNodeSet
.
Has
(
node
.
Name
)
{
glog
.
V
(
1
)
.
Infof
(
"NodeController observed a new Node: %#v"
,
node
)
glog
.
V
(
1
)
.
Infof
(
"NodeController observed a new Node: %#v"
,
node
)
nc
.
recordNodeEvent
(
node
.
Name
,
fmt
.
Sprintf
(
"Registered Node %v in NodeController"
,
node
.
Name
))
nc
.
recordNodeEvent
(
node
.
Name
,
"RegisteredNode"
,
fmt
.
Sprintf
(
"Registered Node %v in NodeController"
,
node
.
Name
))
nc
.
knownNodeSet
.
Insert
(
node
.
Name
)
nc
.
knownNodeSet
.
Insert
(
node
.
Name
)
}
}
}
}
...
@@ -228,7 +228,7 @@ func (nc *NodeController) monitorNodeStatus() error {
...
@@ -228,7 +228,7 @@ func (nc *NodeController) monitorNodeStatus() error {
deleted
:=
nc
.
knownNodeSet
.
Difference
(
observedSet
)
deleted
:=
nc
.
knownNodeSet
.
Difference
(
observedSet
)
for
node
:=
range
deleted
{
for
node
:=
range
deleted
{
glog
.
V
(
1
)
.
Infof
(
"NodeController observed a Node deletion: %v"
,
node
)
glog
.
V
(
1
)
.
Infof
(
"NodeController observed a Node deletion: %v"
,
node
)
nc
.
recordNodeEvent
(
node
,
fmt
.
Sprintf
(
"Removing Node %v from NodeController"
,
node
))
nc
.
recordNodeEvent
(
node
,
"RemovingNode"
,
fmt
.
Sprintf
(
"Removing Node %v from NodeController"
,
node
))
nc
.
deleteNode
(
node
)
nc
.
deleteNode
(
node
)
nc
.
knownNodeSet
.
Delete
(
node
)
nc
.
knownNodeSet
.
Delete
(
node
)
}
}
...
@@ -302,7 +302,7 @@ func (nc *NodeController) monitorNodeStatus() error {
...
@@ -302,7 +302,7 @@ func (nc *NodeController) monitorNodeStatus() error {
}
}
if
_
,
err
:=
instances
.
ExternalID
(
node
.
Name
);
err
!=
nil
&&
err
==
cloudprovider
.
InstanceNotFound
{
if
_
,
err
:=
instances
.
ExternalID
(
node
.
Name
);
err
!=
nil
&&
err
==
cloudprovider
.
InstanceNotFound
{
glog
.
Infof
(
"Deleting node (no longer present in cloud provider): %s"
,
node
.
Name
)
glog
.
Infof
(
"Deleting node (no longer present in cloud provider): %s"
,
node
.
Name
)
nc
.
recordNodeEvent
(
node
.
Name
,
fmt
.
Sprintf
(
"Deleting Node %v because it's not present according to cloud provider"
,
node
.
Name
))
nc
.
recordNodeEvent
(
node
.
Name
,
"DeleteingNode"
,
fmt
.
Sprintf
(
"Deleting Node %v because it's not present according to cloud provider"
,
node
.
Name
))
if
err
:=
nc
.
deletePods
(
node
.
Name
);
err
!=
nil
{
if
err
:=
nc
.
deletePods
(
node
.
Name
);
err
!=
nil
{
glog
.
Errorf
(
"Unable to delete pods from node %s: %v"
,
node
.
Name
,
err
)
glog
.
Errorf
(
"Unable to delete pods from node %s: %v"
,
node
.
Name
,
err
)
continue
continue
...
@@ -347,7 +347,7 @@ func (nc *NodeController) reconcileNodeCIDRs(nodes *api.NodeList) {
...
@@ -347,7 +347,7 @@ func (nc *NodeController) reconcileNodeCIDRs(nodes *api.NodeList) {
}
}
}
}
func
(
nc
*
NodeController
)
recordNodeEvent
(
nodeName
string
,
event
string
)
{
func
(
nc
*
NodeController
)
recordNodeEvent
(
nodeName
string
,
reason
string
,
event
string
)
{
ref
:=
&
api
.
ObjectReference
{
ref
:=
&
api
.
ObjectReference
{
Kind
:
"Node"
,
Kind
:
"Node"
,
Name
:
nodeName
,
Name
:
nodeName
,
...
@@ -355,7 +355,7 @@ func (nc *NodeController) recordNodeEvent(nodeName string, event string) {
...
@@ -355,7 +355,7 @@ func (nc *NodeController) recordNodeEvent(nodeName string, event string) {
Namespace
:
""
,
Namespace
:
""
,
}
}
glog
.
V
(
2
)
.
Infof
(
"Recording %s event message for node %s"
,
event
,
nodeName
)
glog
.
V
(
2
)
.
Infof
(
"Recording %s event message for node %s"
,
event
,
nodeName
)
nc
.
recorder
.
Eventf
(
ref
,
event
,
"Node %s event: %s"
,
nodeName
,
event
)
nc
.
recorder
.
Eventf
(
ref
,
reason
,
"Node %s event: %s"
,
nodeName
,
event
)
}
}
func
(
nc
*
NodeController
)
recordNodeStatusChange
(
node
*
api
.
Node
,
new_status
string
)
{
func
(
nc
*
NodeController
)
recordNodeStatusChange
(
node
*
api
.
Node
,
new_status
string
)
{
...
...
plugin/pkg/scheduler/scheduler.go
View file @
b50330d8
...
@@ -125,7 +125,7 @@ func (s *Scheduler) scheduleOne() {
...
@@ -125,7 +125,7 @@ func (s *Scheduler) scheduleOne() {
metrics
.
SchedulingAlgorithmLatency
.
Observe
(
metrics
.
SinceInMicroseconds
(
start
))
metrics
.
SchedulingAlgorithmLatency
.
Observe
(
metrics
.
SinceInMicroseconds
(
start
))
if
err
!=
nil
{
if
err
!=
nil
{
glog
.
V
(
1
)
.
Infof
(
"Failed to schedule: %v"
,
pod
)
glog
.
V
(
1
)
.
Infof
(
"Failed to schedule: %v"
,
pod
)
s
.
config
.
Recorder
.
Eventf
(
pod
,
"
f
ailedScheduling"
,
"%v"
,
err
)
s
.
config
.
Recorder
.
Eventf
(
pod
,
"
F
ailedScheduling"
,
"%v"
,
err
)
s
.
config
.
Error
(
pod
,
err
)
s
.
config
.
Error
(
pod
,
err
)
return
return
}
}
...
@@ -145,11 +145,11 @@ func (s *Scheduler) scheduleOne() {
...
@@ -145,11 +145,11 @@ func (s *Scheduler) scheduleOne() {
metrics
.
BindingLatency
.
Observe
(
metrics
.
SinceInMicroseconds
(
bindingStart
))
metrics
.
BindingLatency
.
Observe
(
metrics
.
SinceInMicroseconds
(
bindingStart
))
if
err
!=
nil
{
if
err
!=
nil
{
glog
.
V
(
1
)
.
Infof
(
"Failed to bind pod: %v"
,
err
)
glog
.
V
(
1
)
.
Infof
(
"Failed to bind pod: %v"
,
err
)
s
.
config
.
Recorder
.
Eventf
(
pod
,
"
f
ailedScheduling"
,
"Binding rejected: %v"
,
err
)
s
.
config
.
Recorder
.
Eventf
(
pod
,
"
F
ailedScheduling"
,
"Binding rejected: %v"
,
err
)
s
.
config
.
Error
(
pod
,
err
)
s
.
config
.
Error
(
pod
,
err
)
return
return
}
}
s
.
config
.
Recorder
.
Eventf
(
pod
,
"
s
cheduled"
,
"Successfully assigned %v to %v"
,
pod
.
Name
,
dest
)
s
.
config
.
Recorder
.
Eventf
(
pod
,
"
S
cheduled"
,
"Successfully assigned %v to %v"
,
pod
.
Name
,
dest
)
// tell the model to assume that this binding took effect.
// tell the model to assume that this binding took effect.
assumed
:=
*
pod
assumed
:=
*
pod
assumed
.
Spec
.
NodeName
=
dest
assumed
.
Spec
.
NodeName
=
dest
...
...
plugin/pkg/scheduler/scheduler_test.go
View file @
b50330d8
...
@@ -85,13 +85,13 @@ func TestScheduler(t *testing.T) {
...
@@ -85,13 +85,13 @@ func TestScheduler(t *testing.T) {
algo
:
mockScheduler
{
"machine1"
,
nil
},
algo
:
mockScheduler
{
"machine1"
,
nil
},
expectBind
:
&
api
.
Binding
{
ObjectMeta
:
api
.
ObjectMeta
{
Name
:
"foo"
},
Target
:
api
.
ObjectReference
{
Kind
:
"Node"
,
Name
:
"machine1"
}},
expectBind
:
&
api
.
Binding
{
ObjectMeta
:
api
.
ObjectMeta
{
Name
:
"foo"
},
Target
:
api
.
ObjectReference
{
Kind
:
"Node"
,
Name
:
"machine1"
}},
expectAssumedPod
:
podWithID
(
"foo"
,
"machine1"
),
expectAssumedPod
:
podWithID
(
"foo"
,
"machine1"
),
eventReason
:
"
s
cheduled"
,
eventReason
:
"
S
cheduled"
,
},
{
},
{
sendPod
:
podWithID
(
"foo"
,
""
),
sendPod
:
podWithID
(
"foo"
,
""
),
algo
:
mockScheduler
{
"machine1"
,
errS
},
algo
:
mockScheduler
{
"machine1"
,
errS
},
expectError
:
errS
,
expectError
:
errS
,
expectErrorPod
:
podWithID
(
"foo"
,
""
),
expectErrorPod
:
podWithID
(
"foo"
,
""
),
eventReason
:
"
f
ailedScheduling"
,
eventReason
:
"
F
ailedScheduling"
,
},
{
},
{
sendPod
:
podWithID
(
"foo"
,
""
),
sendPod
:
podWithID
(
"foo"
,
""
),
algo
:
mockScheduler
{
"machine1"
,
nil
},
algo
:
mockScheduler
{
"machine1"
,
nil
},
...
@@ -99,7 +99,7 @@ func TestScheduler(t *testing.T) {
...
@@ -99,7 +99,7 @@ func TestScheduler(t *testing.T) {
injectBindError
:
errB
,
injectBindError
:
errB
,
expectError
:
errB
,
expectError
:
errB
,
expectErrorPod
:
podWithID
(
"foo"
,
""
),
expectErrorPod
:
podWithID
(
"foo"
,
""
),
eventReason
:
"
f
ailedScheduling"
,
eventReason
:
"
F
ailedScheduling"
,
},
},
}
}
...
@@ -218,7 +218,7 @@ func TestSchedulerForgetAssumedPodAfterDelete(t *testing.T) {
...
@@ -218,7 +218,7 @@ func TestSchedulerForgetAssumedPodAfterDelete(t *testing.T) {
s
:=
New
(
c
)
s
:=
New
(
c
)
called
:=
make
(
chan
struct
{})
called
:=
make
(
chan
struct
{})
events
:=
eventBroadcaster
.
StartEventWatcher
(
func
(
e
*
api
.
Event
)
{
events
:=
eventBroadcaster
.
StartEventWatcher
(
func
(
e
*
api
.
Event
)
{
if
e
,
a
:=
"
s
cheduled"
,
e
.
Reason
;
e
!=
a
{
if
e
,
a
:=
"
S
cheduled"
,
e
.
Reason
;
e
!=
a
{
t
.
Errorf
(
"expected %v, got %v"
,
e
,
a
)
t
.
Errorf
(
"expected %v, got %v"
,
e
,
a
)
}
}
close
(
called
)
close
(
called
)
...
@@ -277,7 +277,7 @@ func TestSchedulerForgetAssumedPodAfterDelete(t *testing.T) {
...
@@ -277,7 +277,7 @@ func TestSchedulerForgetAssumedPodAfterDelete(t *testing.T) {
called
=
make
(
chan
struct
{})
called
=
make
(
chan
struct
{})
events
=
eventBroadcaster
.
StartEventWatcher
(
func
(
e
*
api
.
Event
)
{
events
=
eventBroadcaster
.
StartEventWatcher
(
func
(
e
*
api
.
Event
)
{
if
e
,
a
:=
"
s
cheduled"
,
e
.
Reason
;
e
!=
a
{
if
e
,
a
:=
"
S
cheduled"
,
e
.
Reason
;
e
!=
a
{
t
.
Errorf
(
"expected %v, got %v"
,
e
,
a
)
t
.
Errorf
(
"expected %v, got %v"
,
e
,
a
)
}
}
close
(
called
)
close
(
called
)
...
...
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