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
4e772738
Commit
4e772738
authored
Jul 31, 2015
by
gmarek
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Emit event when NodeController is evicting Pods.
parent
6129d3d4
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
20 additions
and
6 deletions
+20
-6
nodecontroller.go
pkg/cloudprovider/nodecontroller/nodecontroller.go
+20
-6
No files found.
pkg/cloudprovider/nodecontroller/nodecontroller.go
View file @
4e772738
...
@@ -167,13 +167,13 @@ func (nc *NodeController) reconcileNodeCIDRs(nodes *api.NodeList) {
...
@@ -167,13 +167,13 @@ func (nc *NodeController) reconcileNodeCIDRs(nodes *api.NodeList) {
if
node
.
Spec
.
PodCIDR
==
""
{
if
node
.
Spec
.
PodCIDR
==
""
{
podCIDR
,
found
:=
availableCIDRs
.
PopAny
()
podCIDR
,
found
:=
availableCIDRs
.
PopAny
()
if
!
found
{
if
!
found
{
nc
.
recordNode
Event
(
&
node
,
"No available CIDR"
)
nc
.
recordNode
StatusChange
(
&
node
,
"No available CIDR"
)
continue
continue
}
}
glog
.
V
(
4
)
.
Infof
(
"Assigning node %s CIDR %s"
,
node
.
Name
,
podCIDR
)
glog
.
V
(
4
)
.
Infof
(
"Assigning node %s CIDR %s"
,
node
.
Name
,
podCIDR
)
node
.
Spec
.
PodCIDR
=
podCIDR
node
.
Spec
.
PodCIDR
=
podCIDR
if
_
,
err
:=
nc
.
kubeClient
.
Nodes
()
.
Update
(
&
node
);
err
!=
nil
{
if
_
,
err
:=
nc
.
kubeClient
.
Nodes
()
.
Update
(
&
node
);
err
!=
nil
{
nc
.
recordNode
Event
(
&
node
,
"CIDR assignment failed"
)
nc
.
recordNode
StatusChange
(
&
node
,
"CIDR assignment failed"
)
}
}
}
}
}
}
...
@@ -193,17 +193,28 @@ func (nc *NodeController) Run(period time.Duration) {
...
@@ -193,17 +193,28 @@ func (nc *NodeController) Run(period time.Duration) {
},
nodeEvictionPeriod
)
},
nodeEvictionPeriod
)
}
}
func
(
nc
*
NodeController
)
recordNode
Event
(
node
*
api
.
Node
,
event
string
)
{
func
(
nc
*
NodeController
)
recordNode
StatusChange
(
node
*
api
.
Node
,
new_status
string
)
{
ref
:=
&
api
.
ObjectReference
{
ref
:=
&
api
.
ObjectReference
{
Kind
:
"Node"
,
Kind
:
"Node"
,
Name
:
node
.
Name
,
Name
:
node
.
Name
,
UID
:
types
.
UID
(
node
.
Name
),
UID
:
types
.
UID
(
node
.
Name
),
Namespace
:
""
,
Namespace
:
""
,
}
}
glog
.
V
(
2
)
.
Infof
(
"Recording
%s event message for node %s"
,
event
,
node
.
Name
)
glog
.
V
(
2
)
.
Infof
(
"Recording
status change %s event message for node %s"
,
new_status
,
node
.
Name
)
// TODO: This requires a transaction, either both node status is updated
// TODO: This requires a transaction, either both node status is updated
// and event is recorded or neither should happen, see issue #6055.
// and event is recorded or neither should happen, see issue #6055.
nc
.
recorder
.
Eventf
(
ref
,
event
,
"Node %s status is now: %s"
,
node
.
Name
,
event
)
nc
.
recorder
.
Eventf
(
ref
,
new_status
,
"Node %s status is now: %s"
,
node
.
Name
,
new_status
)
}
func
(
nc
*
NodeController
)
recordNodeEvent
(
nodeName
string
,
event
string
)
{
ref
:=
&
api
.
ObjectReference
{
Kind
:
"Node"
,
Name
:
nodeName
,
UID
:
types
.
UID
(
nodeName
),
Namespace
:
""
,
}
glog
.
V
(
2
)
.
Infof
(
"Recording %s event message for node %s"
,
event
,
nodeName
)
nc
.
recorder
.
Eventf
(
ref
,
event
,
"Node %s event: %s"
,
nodeName
,
event
)
}
}
// For a given node checks its conditions and tries to update it. Returns grace period to which given node
// For a given node checks its conditions and tries to update it. Returns grace period to which given node
...
@@ -398,7 +409,7 @@ func (nc *NodeController) monitorNodeStatus() error {
...
@@ -398,7 +409,7 @@ func (nc *NodeController) monitorNodeStatus() error {
// Report node event.
// Report node event.
if
readyCondition
.
Status
!=
api
.
ConditionTrue
&&
lastReadyCondition
.
Status
==
api
.
ConditionTrue
{
if
readyCondition
.
Status
!=
api
.
ConditionTrue
&&
lastReadyCondition
.
Status
==
api
.
ConditionTrue
{
nc
.
recordNode
Event
(
node
,
"NodeNotReady"
)
nc
.
recordNode
StatusChange
(
node
,
"NodeNotReady"
)
}
}
// Check with the cloud provider to see if the node still exists. If it
// Check with the cloud provider to see if the node still exists. If it
...
@@ -411,6 +422,7 @@ func (nc *NodeController) monitorNodeStatus() error {
...
@@ -411,6 +422,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
))
if
err
:=
nc
.
kubeClient
.
Nodes
()
.
Delete
(
node
.
Name
);
err
!=
nil
{
if
err
:=
nc
.
kubeClient
.
Nodes
()
.
Delete
(
node
.
Name
);
err
!=
nil
{
glog
.
Errorf
(
"Unable to delete node %s: %v"
,
node
.
Name
,
err
)
glog
.
Errorf
(
"Unable to delete node %s: %v"
,
node
.
Name
,
err
)
continue
continue
...
@@ -433,12 +445,14 @@ func (nc *NodeController) deletePods(nodeID string) error {
...
@@ -433,12 +445,14 @@ 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
))
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
{
continue
continue
}
}
glog
.
V
(
2
)
.
Infof
(
"Delete pod %v"
,
pod
.
Name
)
glog
.
V
(
2
)
.
Infof
(
"Delete pod %v"
,
pod
.
Name
)
nc
.
recorder
.
Eventf
(
&
pod
,
"NodeControllerEviction"
,
"Deleting Pod %s from Node %s"
,
pod
.
Name
,
nodeID
)
if
err
:=
nc
.
kubeClient
.
Pods
(
pod
.
Namespace
)
.
Delete
(
pod
.
Name
,
nil
);
err
!=
nil
{
if
err
:=
nc
.
kubeClient
.
Pods
(
pod
.
Namespace
)
.
Delete
(
pod
.
Name
,
nil
);
err
!=
nil
{
glog
.
Errorf
(
"Error deleting pod %v: %v"
,
pod
.
Name
,
err
)
glog
.
Errorf
(
"Error deleting pod %v: %v"
,
pod
.
Name
,
err
)
}
}
...
...
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