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
65d132a3
Commit
65d132a3
authored
Apr 16, 2015
by
Wojciech Tyczynski
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #6708 from roberthbailey/node-controller
Restrict functions and structs that aren't used outside of the nodecontroller to have package private scope
parents
1c47f2d7
f633ac0a
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
49 additions
and
51 deletions
+49
-51
nodecontroller.go
pkg/cloudprovider/nodecontroller/nodecontroller.go
+37
-38
nodecontroller_test.go
pkg/cloudprovider/nodecontroller/nodecontroller_test.go
+11
-11
plugins.go
pkg/cloudprovider/plugins.go
+1
-2
No files found.
pkg/cloudprovider/nodecontroller/nodecontroller.go
View file @
65d132a3
...
@@ -41,12 +41,10 @@ var (
...
@@ -41,12 +41,10 @@ var (
ErrCloudInstance
=
errors
.
New
(
"cloud provider doesn't support instances."
)
ErrCloudInstance
=
errors
.
New
(
"cloud provider doesn't support instances."
)
)
)
const
(
// nodeStatusUpdateRetry controls the number of retries of writing NodeStatus update.
// Constant controlling number of retries of writing NodeStatus update.
const
nodeStatusUpdateRetry
=
5
nodeStatusUpdateRetry
=
5
)
type
N
odeStatusData
struct
{
type
n
odeStatusData
struct
{
probeTimestamp
util
.
Time
probeTimestamp
util
.
Time
readyTransitionTimestamp
util
.
Time
readyTransitionTimestamp
util
.
Time
status
api
.
NodeStatus
status
api
.
NodeStatus
...
@@ -62,10 +60,10 @@ type NodeController struct {
...
@@ -62,10 +60,10 @@ type NodeController struct {
registerRetryCount
int
registerRetryCount
int
podEvictionTimeout
time
.
Duration
podEvictionTimeout
time
.
Duration
deletingPodsRateLimiter
util
.
RateLimiter
deletingPodsRateLimiter
util
.
RateLimiter
// per Node map storing last observed Status tog
het
er with a local time when it was observed.
// per Node map storing last observed Status tog
eth
er with a local time when it was observed.
// This timestamp is to be used instead of LastProbeTime stored in Condition. We do this
// This timestamp is to be used instead of LastProbeTime stored in Condition. We do this
// to aviod the problem with time skew across the cluster.
// to aviod the problem with time skew across the cluster.
nodeStatusMap
map
[
string
]
N
odeStatusData
nodeStatusMap
map
[
string
]
n
odeStatusData
// Value used if sync_nodes_status=False. NodeController will not proactively
// Value used if sync_nodes_status=False. NodeController will not proactively
// sync node status in this case, but will monitor node status updated from kubelet. If
// sync node status in this case, but will monitor node status updated from kubelet. If
// it doesn't receive update for this amount of time, it will start posting "NodeReady==
// it doesn't receive update for this amount of time, it will start posting "NodeReady==
...
@@ -128,7 +126,7 @@ func NewNodeController(
...
@@ -128,7 +126,7 @@ func NewNodeController(
registerRetryCount
:
registerRetryCount
,
registerRetryCount
:
registerRetryCount
,
podEvictionTimeout
:
podEvictionTimeout
,
podEvictionTimeout
:
podEvictionTimeout
,
deletingPodsRateLimiter
:
deletingPodsRateLimiter
,
deletingPodsRateLimiter
:
deletingPodsRateLimiter
,
nodeStatusMap
:
make
(
map
[
string
]
N
odeStatusData
),
nodeStatusMap
:
make
(
map
[
string
]
n
odeStatusData
),
nodeMonitorGracePeriod
:
nodeMonitorGracePeriod
,
nodeMonitorGracePeriod
:
nodeMonitorGracePeriod
,
nodeMonitorPeriod
:
nodeMonitorPeriod
,
nodeMonitorPeriod
:
nodeMonitorPeriod
,
nodeStartupGracePeriod
:
nodeStartupGracePeriod
,
nodeStartupGracePeriod
:
nodeStartupGracePeriod
,
...
@@ -140,12 +138,12 @@ func NewNodeController(
...
@@ -140,12 +138,12 @@ func NewNodeController(
// Run creates initial node list and start syncing instances from cloudprovider, if any.
// Run creates initial node list and start syncing instances from cloudprovider, if any.
// It also starts syncing or monitoring cluster node status.
// It also starts syncing or monitoring cluster node status.
// 1.
R
egisterNodes() is called only once to register all initial nodes (from cloudprovider
// 1.
r
egisterNodes() is called only once to register all initial nodes (from cloudprovider
// or from command line flag). To make cluster bootstrap faster, node controller populates
// or from command line flag). To make cluster bootstrap faster, node controller populates
// node addresses.
// node addresses.
// 2.
S
yncCloudNodes() is called periodically (if enabled) to sync instances from cloudprovider.
// 2.
s
yncCloudNodes() is called periodically (if enabled) to sync instances from cloudprovider.
// Node created here will only have specs.
// Node created here will only have specs.
// 3.
M
onitorNodeStatus() is called periodically to incorporate the results of node status
// 3.
m
onitorNodeStatus() is called periodically to incorporate the results of node status
// pushed from kubelet to master.
// pushed from kubelet to master.
func
(
nc
*
NodeController
)
Run
(
period
time
.
Duration
,
syncNodeList
bool
)
{
func
(
nc
*
NodeController
)
Run
(
period
time
.
Duration
,
syncNodeList
bool
)
{
// Register intial set of nodes with their status set.
// Register intial set of nodes with their status set.
...
@@ -153,28 +151,29 @@ func (nc *NodeController) Run(period time.Duration, syncNodeList bool) {
...
@@ -153,28 +151,29 @@ func (nc *NodeController) Run(period time.Duration, syncNodeList bool) {
var
err
error
var
err
error
if
nc
.
isRunningCloudProvider
()
{
if
nc
.
isRunningCloudProvider
()
{
if
syncNodeList
{
if
syncNodeList
{
if
nodes
,
err
=
nc
.
G
etCloudNodesWithSpec
();
err
!=
nil
{
if
nodes
,
err
=
nc
.
g
etCloudNodesWithSpec
();
err
!=
nil
{
glog
.
Errorf
(
"Error loading initial node from cloudprovider: %v"
,
err
)
glog
.
Errorf
(
"Error loading initial node from cloudprovider: %v"
,
err
)
}
}
}
else
{
}
else
{
nodes
=
&
api
.
NodeList
{}
nodes
=
&
api
.
NodeList
{}
}
}
}
else
{
}
else
{
if
nodes
,
err
=
nc
.
G
etStaticNodesWithSpec
();
err
!=
nil
{
if
nodes
,
err
=
nc
.
g
etStaticNodesWithSpec
();
err
!=
nil
{
glog
.
Errorf
(
"Error loading initial static nodes: %v"
,
err
)
glog
.
Errorf
(
"Error loading initial static nodes: %v"
,
err
)
}
}
}
}
if
nodes
,
err
=
nc
.
PopulateAddresses
(
nodes
);
err
!=
nil
{
if
nodes
,
err
=
nc
.
populateAddresses
(
nodes
);
err
!=
nil
{
glog
.
Errorf
(
"Error getting nodes ips: %v"
,
err
)
glog
.
Errorf
(
"Error getting nodes ips: %v"
,
err
)
}
}
if
err
=
nc
.
R
egisterNodes
(
nodes
,
nc
.
registerRetryCount
,
period
);
err
!=
nil
{
if
err
:=
nc
.
r
egisterNodes
(
nodes
,
nc
.
registerRetryCount
,
period
);
err
!=
nil
{
glog
.
Errorf
(
"Error registering node list %+v: %v"
,
nodes
,
err
)
glog
.
Errorf
(
"Error registering node list %+v: %v"
,
nodes
,
err
)
}
}
// Start syncing node list from cloudprovider.
// Start syncing node list from cloudprovider.
if
syncNodeList
&&
nc
.
isRunningCloudProvider
()
{
if
syncNodeList
&&
nc
.
isRunningCloudProvider
()
{
go
util
.
Forever
(
func
()
{
go
util
.
Forever
(
func
()
{
if
err
:=
nc
.
S
yncCloudNodes
();
err
!=
nil
{
if
err
:=
nc
.
s
yncCloudNodes
();
err
!=
nil
{
glog
.
Errorf
(
"Error syncing cloud: %v"
,
err
)
glog
.
Errorf
(
"Error syncing cloud: %v"
,
err
)
}
}
},
period
)
},
period
)
...
@@ -182,14 +181,14 @@ func (nc *NodeController) Run(period time.Duration, syncNodeList bool) {
...
@@ -182,14 +181,14 @@ func (nc *NodeController) Run(period time.Duration, syncNodeList bool) {
// Start monitoring node status.
// Start monitoring node status.
go
util
.
Forever
(
func
()
{
go
util
.
Forever
(
func
()
{
if
err
=
nc
.
M
onitorNodeStatus
();
err
!=
nil
{
if
err
:=
nc
.
m
onitorNodeStatus
();
err
!=
nil
{
glog
.
Errorf
(
"Error monitoring node status: %v"
,
err
)
glog
.
Errorf
(
"Error monitoring node status: %v"
,
err
)
}
}
},
nc
.
nodeMonitorPeriod
)
},
nc
.
nodeMonitorPeriod
)
}
}
//
R
egisterNodes registers the given list of nodes, it keeps retrying for `retryCount` times.
//
r
egisterNodes registers the given list of nodes, it keeps retrying for `retryCount` times.
func
(
nc
*
NodeController
)
R
egisterNodes
(
nodes
*
api
.
NodeList
,
retryCount
int
,
retryInterval
time
.
Duration
)
error
{
func
(
nc
*
NodeController
)
r
egisterNodes
(
nodes
*
api
.
NodeList
,
retryCount
int
,
retryInterval
time
.
Duration
)
error
{
if
len
(
nodes
.
Items
)
==
0
{
if
len
(
nodes
.
Items
)
==
0
{
return
nil
return
nil
}
}
...
@@ -278,9 +277,9 @@ func (nc *NodeController) reconcileExternalServices(nodes *api.NodeList) (should
...
@@ -278,9 +277,9 @@ func (nc *NodeController) reconcileExternalServices(nodes *api.NodeList) (should
return
shouldRetry
return
shouldRetry
}
}
//
S
yncCloudNodes synchronizes the list of instances from cloudprovider to master server.
//
s
yncCloudNodes synchronizes the list of instances from cloudprovider to master server.
func
(
nc
*
NodeController
)
S
yncCloudNodes
()
error
{
func
(
nc
*
NodeController
)
s
yncCloudNodes
()
error
{
matches
,
err
:=
nc
.
G
etCloudNodesWithSpec
()
matches
,
err
:=
nc
.
g
etCloudNodesWithSpec
()
if
err
!=
nil
{
if
err
!=
nil
{
return
err
return
err
}
}
...
@@ -302,7 +301,7 @@ func (nc *NodeController) SyncCloudNodes() error {
...
@@ -302,7 +301,7 @@ func (nc *NodeController) SyncCloudNodes() error {
glog
.
V
(
3
)
.
Infof
(
"Querying addresses for new node: %s"
,
node
.
Name
)
glog
.
V
(
3
)
.
Infof
(
"Querying addresses for new node: %s"
,
node
.
Name
)
nodeList
:=
&
api
.
NodeList
{}
nodeList
:=
&
api
.
NodeList
{}
nodeList
.
Items
=
[]
api
.
Node
{
node
}
nodeList
.
Items
=
[]
api
.
Node
{
node
}
_
,
err
=
nc
.
P
opulateAddresses
(
nodeList
)
_
,
err
=
nc
.
p
opulateAddresses
(
nodeList
)
if
err
!=
nil
{
if
err
!=
nil
{
glog
.
Errorf
(
"Error fetching addresses for new node %s: %v"
,
node
.
Name
,
err
)
glog
.
Errorf
(
"Error fetching addresses for new node %s: %v"
,
node
.
Name
,
err
)
continue
continue
...
@@ -341,8 +340,8 @@ func (nc *NodeController) SyncCloudNodes() error {
...
@@ -341,8 +340,8 @@ func (nc *NodeController) SyncCloudNodes() error {
return
nil
return
nil
}
}
//
P
opulateAddresses queries Address for given list of nodes.
//
p
opulateAddresses queries Address for given list of nodes.
func
(
nc
*
NodeController
)
P
opulateAddresses
(
nodes
*
api
.
NodeList
)
(
*
api
.
NodeList
,
error
)
{
func
(
nc
*
NodeController
)
p
opulateAddresses
(
nodes
*
api
.
NodeList
)
(
*
api
.
NodeList
,
error
)
{
if
nc
.
isRunningCloudProvider
()
{
if
nc
.
isRunningCloudProvider
()
{
instances
,
ok
:=
nc
.
cloud
.
Instances
()
instances
,
ok
:=
nc
.
cloud
.
Instances
()
if
!
ok
{
if
!
ok
{
...
@@ -411,7 +410,7 @@ func (nc *NodeController) tryUpdateNodeStatus(node *api.Node) (time.Duration, ap
...
@@ -411,7 +410,7 @@ func (nc *NodeController) tryUpdateNodeStatus(node *api.Node) (time.Duration, ap
LastTransitionTime
:
node
.
CreationTimestamp
,
LastTransitionTime
:
node
.
CreationTimestamp
,
}
}
gracePeriod
=
nc
.
nodeStartupGracePeriod
gracePeriod
=
nc
.
nodeStartupGracePeriod
nc
.
nodeStatusMap
[
node
.
Name
]
=
N
odeStatusData
{
nc
.
nodeStatusMap
[
node
.
Name
]
=
n
odeStatusData
{
status
:
node
.
Status
,
status
:
node
.
Status
,
probeTimestamp
:
node
.
CreationTimestamp
,
probeTimestamp
:
node
.
CreationTimestamp
,
readyTransitionTimestamp
:
node
.
CreationTimestamp
,
readyTransitionTimestamp
:
node
.
CreationTimestamp
,
...
@@ -441,7 +440,7 @@ func (nc *NodeController) tryUpdateNodeStatus(node *api.Node) (time.Duration, ap
...
@@ -441,7 +440,7 @@ func (nc *NodeController) tryUpdateNodeStatus(node *api.Node) (time.Duration, ap
observedCondition
:=
nc
.
getCondition
(
&
node
.
Status
,
api
.
NodeReady
)
observedCondition
:=
nc
.
getCondition
(
&
node
.
Status
,
api
.
NodeReady
)
if
!
found
{
if
!
found
{
glog
.
Warningf
(
"Missing timestamp for Node %s. Assuming now as a timestamp."
,
node
.
Name
)
glog
.
Warningf
(
"Missing timestamp for Node %s. Assuming now as a timestamp."
,
node
.
Name
)
savedNodeStatus
=
N
odeStatusData
{
savedNodeStatus
=
n
odeStatusData
{
status
:
node
.
Status
,
status
:
node
.
Status
,
probeTimestamp
:
nc
.
now
(),
probeTimestamp
:
nc
.
now
(),
readyTransitionTimestamp
:
nc
.
now
(),
readyTransitionTimestamp
:
nc
.
now
(),
...
@@ -449,7 +448,7 @@ func (nc *NodeController) tryUpdateNodeStatus(node *api.Node) (time.Duration, ap
...
@@ -449,7 +448,7 @@ func (nc *NodeController) tryUpdateNodeStatus(node *api.Node) (time.Duration, ap
nc
.
nodeStatusMap
[
node
.
Name
]
=
savedNodeStatus
nc
.
nodeStatusMap
[
node
.
Name
]
=
savedNodeStatus
}
else
if
savedCondition
==
nil
&&
observedCondition
!=
nil
{
}
else
if
savedCondition
==
nil
&&
observedCondition
!=
nil
{
glog
.
V
(
1
)
.
Infof
(
"Creating timestamp entry for newly observed Node %s"
,
node
.
Name
)
glog
.
V
(
1
)
.
Infof
(
"Creating timestamp entry for newly observed Node %s"
,
node
.
Name
)
savedNodeStatus
=
N
odeStatusData
{
savedNodeStatus
=
n
odeStatusData
{
status
:
node
.
Status
,
status
:
node
.
Status
,
probeTimestamp
:
nc
.
now
(),
probeTimestamp
:
nc
.
now
(),
readyTransitionTimestamp
:
nc
.
now
(),
readyTransitionTimestamp
:
nc
.
now
(),
...
@@ -458,7 +457,7 @@ func (nc *NodeController) tryUpdateNodeStatus(node *api.Node) (time.Duration, ap
...
@@ -458,7 +457,7 @@ func (nc *NodeController) tryUpdateNodeStatus(node *api.Node) (time.Duration, ap
}
else
if
savedCondition
!=
nil
&&
observedCondition
==
nil
{
}
else
if
savedCondition
!=
nil
&&
observedCondition
==
nil
{
glog
.
Errorf
(
"ReadyCondition was removed from Status of Node %s"
,
node
.
Name
)
glog
.
Errorf
(
"ReadyCondition was removed from Status of Node %s"
,
node
.
Name
)
// TODO: figure out what to do in this case. For now we do the same thing as above.
// TODO: figure out what to do in this case. For now we do the same thing as above.
savedNodeStatus
=
N
odeStatusData
{
savedNodeStatus
=
n
odeStatusData
{
status
:
node
.
Status
,
status
:
node
.
Status
,
probeTimestamp
:
nc
.
now
(),
probeTimestamp
:
nc
.
now
(),
readyTransitionTimestamp
:
nc
.
now
(),
readyTransitionTimestamp
:
nc
.
now
(),
...
@@ -476,7 +475,7 @@ func (nc *NodeController) tryUpdateNodeStatus(node *api.Node) (time.Duration, ap
...
@@ -476,7 +475,7 @@ func (nc *NodeController) tryUpdateNodeStatus(node *api.Node) (time.Duration, ap
transitionTime
=
savedNodeStatus
.
readyTransitionTimestamp
transitionTime
=
savedNodeStatus
.
readyTransitionTimestamp
}
}
glog
.
V
(
3
)
.
Infof
(
"Nodes ReadyCondition updated. Updating timestamp: %+v
\n
vs %+v."
,
savedNodeStatus
.
status
,
node
.
Status
)
glog
.
V
(
3
)
.
Infof
(
"Nodes ReadyCondition updated. Updating timestamp: %+v
\n
vs %+v."
,
savedNodeStatus
.
status
,
node
.
Status
)
savedNodeStatus
=
N
odeStatusData
{
savedNodeStatus
=
n
odeStatusData
{
status
:
node
.
Status
,
status
:
node
.
Status
,
probeTimestamp
:
nc
.
now
(),
probeTimestamp
:
nc
.
now
(),
readyTransitionTimestamp
:
transitionTime
,
readyTransitionTimestamp
:
transitionTime
,
...
@@ -512,7 +511,7 @@ func (nc *NodeController) tryUpdateNodeStatus(node *api.Node) (time.Duration, ap
...
@@ -512,7 +511,7 @@ func (nc *NodeController) tryUpdateNodeStatus(node *api.Node) (time.Duration, ap
glog
.
Errorf
(
"Error updating node %s: %v"
,
node
.
Name
,
err
)
glog
.
Errorf
(
"Error updating node %s: %v"
,
node
.
Name
,
err
)
return
gracePeriod
,
lastReadyCondition
,
readyCondition
,
err
return
gracePeriod
,
lastReadyCondition
,
readyCondition
,
err
}
else
{
}
else
{
nc
.
nodeStatusMap
[
node
.
Name
]
=
N
odeStatusData
{
nc
.
nodeStatusMap
[
node
.
Name
]
=
n
odeStatusData
{
status
:
node
.
Status
,
status
:
node
.
Status
,
probeTimestamp
:
nc
.
nodeStatusMap
[
node
.
Name
]
.
probeTimestamp
,
probeTimestamp
:
nc
.
nodeStatusMap
[
node
.
Name
]
.
probeTimestamp
,
readyTransitionTimestamp
:
nc
.
now
(),
readyTransitionTimestamp
:
nc
.
now
(),
...
@@ -525,10 +524,10 @@ func (nc *NodeController) tryUpdateNodeStatus(node *api.Node) (time.Duration, ap
...
@@ -525,10 +524,10 @@ func (nc *NodeController) tryUpdateNodeStatus(node *api.Node) (time.Duration, ap
return
gracePeriod
,
lastReadyCondition
,
readyCondition
,
err
return
gracePeriod
,
lastReadyCondition
,
readyCondition
,
err
}
}
//
M
onitorNodeStatus verifies node status are constantly updated by kubelet, and if not,
//
m
onitorNodeStatus verifies node status are constantly updated by kubelet, and if not,
// post "NodeReady==ConditionUnknown". It also evicts all pods if node is not ready or
// post "NodeReady==ConditionUnknown". It also evicts all pods if node is not ready or
// not reachable for a long period of time.
// not reachable for a long period of time.
func
(
nc
*
NodeController
)
M
onitorNodeStatus
()
error
{
func
(
nc
*
NodeController
)
m
onitorNodeStatus
()
error
{
nodes
,
err
:=
nc
.
kubeClient
.
Nodes
()
.
List
(
labels
.
Everything
(),
fields
.
Everything
())
nodes
,
err
:=
nc
.
kubeClient
.
Nodes
()
.
List
(
labels
.
Everything
(),
fields
.
Everything
())
if
err
!=
nil
{
if
err
!=
nil
{
return
err
return
err
...
@@ -592,10 +591,10 @@ func (nc *NodeController) MonitorNodeStatus() error {
...
@@ -592,10 +591,10 @@ func (nc *NodeController) MonitorNodeStatus() error {
return
nil
return
nil
}
}
//
G
etStaticNodesWithSpec constructs and returns api.NodeList for static nodes. If error
//
g
etStaticNodesWithSpec constructs and returns api.NodeList for static nodes. If error
// occurs, an empty NodeList will be returned with a non-nil error info. The method only
// occurs, an empty NodeList will be returned with a non-nil error info. The method only
// constructs spec fields for nodes.
// constructs spec fields for nodes.
func
(
nc
*
NodeController
)
G
etStaticNodesWithSpec
()
(
*
api
.
NodeList
,
error
)
{
func
(
nc
*
NodeController
)
g
etStaticNodesWithSpec
()
(
*
api
.
NodeList
,
error
)
{
result
:=
&
api
.
NodeList
{}
result
:=
&
api
.
NodeList
{}
for
_
,
nodeID
:=
range
nc
.
nodes
{
for
_
,
nodeID
:=
range
nc
.
nodes
{
node
:=
api
.
Node
{
node
:=
api
.
Node
{
...
@@ -612,10 +611,10 @@ func (nc *NodeController) GetStaticNodesWithSpec() (*api.NodeList, error) {
...
@@ -612,10 +611,10 @@ func (nc *NodeController) GetStaticNodesWithSpec() (*api.NodeList, error) {
return
result
,
nil
return
result
,
nil
}
}
//
G
etCloudNodesWithSpec constructs and returns api.NodeList from cloudprovider. If error
//
g
etCloudNodesWithSpec constructs and returns api.NodeList from cloudprovider. If error
// occurs, an empty NodeList will be returned with a non-nil error info. The method only
// occurs, an empty NodeList will be returned with a non-nil error info. The method only
// constructs spec fields for nodes.
// constructs spec fields for nodes.
func
(
nc
*
NodeController
)
G
etCloudNodesWithSpec
()
(
*
api
.
NodeList
,
error
)
{
func
(
nc
*
NodeController
)
g
etCloudNodesWithSpec
()
(
*
api
.
NodeList
,
error
)
{
result
:=
&
api
.
NodeList
{}
result
:=
&
api
.
NodeList
{}
instances
,
ok
:=
nc
.
cloud
.
Instances
()
instances
,
ok
:=
nc
.
cloud
.
Instances
()
if
!
ok
{
if
!
ok
{
...
@@ -640,7 +639,7 @@ func (nc *NodeController) GetCloudNodesWithSpec() (*api.NodeList, error) {
...
@@ -640,7 +639,7 @@ func (nc *NodeController) GetCloudNodesWithSpec() (*api.NodeList, error) {
}
}
instanceID
,
err
:=
instances
.
ExternalID
(
node
.
Name
)
instanceID
,
err
:=
instances
.
ExternalID
(
node
.
Name
)
if
err
!=
nil
{
if
err
!=
nil
{
glog
.
Errorf
(
"
e
rror getting instance id for %s: %v"
,
node
.
Name
,
err
)
glog
.
Errorf
(
"
E
rror getting instance id for %s: %v"
,
node
.
Name
,
err
)
}
else
{
}
else
{
node
.
Spec
.
ExternalID
=
instanceID
node
.
Spec
.
ExternalID
=
instanceID
}
}
...
...
pkg/cloudprovider/nodecontroller/nodecontroller_test.go
View file @
65d132a3
...
@@ -239,7 +239,7 @@ func TestRegisterNodes(t *testing.T) {
...
@@ -239,7 +239,7 @@ func TestRegisterNodes(t *testing.T) {
}
}
nodeController
:=
NewNodeController
(
nil
,
""
,
item
.
machines
,
&
api
.
NodeResources
{},
item
.
fakeNodeHandler
,
10
,
time
.
Minute
,
nodeController
:=
NewNodeController
(
nil
,
""
,
item
.
machines
,
&
api
.
NodeResources
{},
item
.
fakeNodeHandler
,
10
,
time
.
Minute
,
util
.
NewFakeRateLimiter
(),
testNodeMonitorGracePeriod
,
testNodeStartupGracePeriod
,
testNodeMonitorPeriod
,
""
)
util
.
NewFakeRateLimiter
(),
testNodeMonitorGracePeriod
,
testNodeStartupGracePeriod
,
testNodeMonitorPeriod
,
""
)
err
:=
nodeController
.
R
egisterNodes
(
&
nodes
,
item
.
retryCount
,
time
.
Millisecond
)
err
:=
nodeController
.
r
egisterNodes
(
&
nodes
,
item
.
retryCount
,
time
.
Millisecond
)
if
!
item
.
expectedFail
&&
err
!=
nil
{
if
!
item
.
expectedFail
&&
err
!=
nil
{
t
.
Errorf
(
"unexpected error: %v"
,
err
)
t
.
Errorf
(
"unexpected error: %v"
,
err
)
}
}
...
@@ -325,7 +325,7 @@ func TestCreateGetStaticNodesWithSpec(t *testing.T) {
...
@@ -325,7 +325,7 @@ func TestCreateGetStaticNodesWithSpec(t *testing.T) {
for
_
,
item
:=
range
table
{
for
_
,
item
:=
range
table
{
nodeController
:=
NewNodeController
(
nil
,
""
,
item
.
machines
,
&
resources
,
nil
,
10
,
time
.
Minute
,
nodeController
:=
NewNodeController
(
nil
,
""
,
item
.
machines
,
&
resources
,
nil
,
10
,
time
.
Minute
,
util
.
NewFakeRateLimiter
(),
testNodeMonitorGracePeriod
,
testNodeStartupGracePeriod
,
testNodeMonitorPeriod
,
""
)
util
.
NewFakeRateLimiter
(),
testNodeMonitorGracePeriod
,
testNodeStartupGracePeriod
,
testNodeMonitorPeriod
,
""
)
nodes
,
err
:=
nodeController
.
G
etStaticNodesWithSpec
()
nodes
,
err
:=
nodeController
.
g
etStaticNodesWithSpec
()
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Errorf
(
"unexpected error: %v"
,
err
)
t
.
Errorf
(
"unexpected error: %v"
,
err
)
}
}
...
@@ -387,7 +387,7 @@ func TestCreateGetCloudNodesWithSpec(t *testing.T) {
...
@@ -387,7 +387,7 @@ func TestCreateGetCloudNodesWithSpec(t *testing.T) {
for
_
,
item
:=
range
table
{
for
_
,
item
:=
range
table
{
nodeController
:=
NewNodeController
(
item
.
fakeCloud
,
".*"
,
nil
,
&
api
.
NodeResources
{},
nil
,
10
,
time
.
Minute
,
nodeController
:=
NewNodeController
(
item
.
fakeCloud
,
".*"
,
nil
,
&
api
.
NodeResources
{},
nil
,
10
,
time
.
Minute
,
util
.
NewFakeRateLimiter
(),
testNodeMonitorGracePeriod
,
testNodeStartupGracePeriod
,
testNodeMonitorPeriod
,
""
)
util
.
NewFakeRateLimiter
(),
testNodeMonitorGracePeriod
,
testNodeStartupGracePeriod
,
testNodeMonitorPeriod
,
""
)
nodes
,
err
:=
nodeController
.
G
etCloudNodesWithSpec
()
nodes
,
err
:=
nodeController
.
g
etCloudNodesWithSpec
()
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Errorf
(
"unexpected error: %v"
,
err
)
t
.
Errorf
(
"unexpected error: %v"
,
err
)
}
}
...
@@ -497,7 +497,7 @@ func TestSyncCloudNodes(t *testing.T) {
...
@@ -497,7 +497,7 @@ func TestSyncCloudNodes(t *testing.T) {
}
}
nodeController
:=
NewNodeController
(
item
.
fakeCloud
,
item
.
matchRE
,
nil
,
&
api
.
NodeResources
{},
item
.
fakeNodeHandler
,
10
,
time
.
Minute
,
nodeController
:=
NewNodeController
(
item
.
fakeCloud
,
item
.
matchRE
,
nil
,
&
api
.
NodeResources
{},
item
.
fakeNodeHandler
,
10
,
time
.
Minute
,
util
.
NewFakeRateLimiter
(),
testNodeMonitorGracePeriod
,
testNodeStartupGracePeriod
,
testNodeMonitorPeriod
,
""
)
util
.
NewFakeRateLimiter
(),
testNodeMonitorGracePeriod
,
testNodeStartupGracePeriod
,
testNodeMonitorPeriod
,
""
)
if
err
:=
nodeController
.
S
yncCloudNodes
();
err
!=
nil
{
if
err
:=
nodeController
.
s
yncCloudNodes
();
err
!=
nil
{
t
.
Errorf
(
"unexpected error: %v"
,
err
)
t
.
Errorf
(
"unexpected error: %v"
,
err
)
}
}
if
item
.
fakeNodeHandler
.
RequestCount
!=
item
.
expectedRequestCount
{
if
item
.
fakeNodeHandler
.
RequestCount
!=
item
.
expectedRequestCount
{
...
@@ -581,7 +581,7 @@ func TestSyncCloudNodesEvictPods(t *testing.T) {
...
@@ -581,7 +581,7 @@ func TestSyncCloudNodesEvictPods(t *testing.T) {
}
}
nodeController
:=
NewNodeController
(
item
.
fakeCloud
,
item
.
matchRE
,
nil
,
&
api
.
NodeResources
{},
item
.
fakeNodeHandler
,
10
,
time
.
Minute
,
nodeController
:=
NewNodeController
(
item
.
fakeCloud
,
item
.
matchRE
,
nil
,
&
api
.
NodeResources
{},
item
.
fakeNodeHandler
,
10
,
time
.
Minute
,
util
.
NewFakeRateLimiter
(),
testNodeMonitorGracePeriod
,
testNodeStartupGracePeriod
,
testNodeMonitorPeriod
,
""
)
util
.
NewFakeRateLimiter
(),
testNodeMonitorGracePeriod
,
testNodeStartupGracePeriod
,
testNodeMonitorPeriod
,
""
)
if
err
:=
nodeController
.
S
yncCloudNodes
();
err
!=
nil
{
if
err
:=
nodeController
.
s
yncCloudNodes
();
err
!=
nil
{
t
.
Errorf
(
"unexpected error: %v"
,
err
)
t
.
Errorf
(
"unexpected error: %v"
,
err
)
}
}
if
item
.
fakeNodeHandler
.
RequestCount
!=
item
.
expectedRequestCount
{
if
item
.
fakeNodeHandler
.
RequestCount
!=
item
.
expectedRequestCount
{
...
@@ -650,7 +650,7 @@ func TestSyncCloudNodesReconcilesExternalService(t *testing.T) {
...
@@ -650,7 +650,7 @@ func TestSyncCloudNodesReconcilesExternalService(t *testing.T) {
for
_
,
item
:=
range
table
{
for
_
,
item
:=
range
table
{
nodeController
:=
NewNodeController
(
item
.
fakeCloud
,
item
.
matchRE
,
nil
,
&
api
.
NodeResources
{},
item
.
fakeNodeHandler
,
nodeController
:=
NewNodeController
(
item
.
fakeCloud
,
item
.
matchRE
,
nil
,
&
api
.
NodeResources
{},
item
.
fakeNodeHandler
,
10
,
time
.
Minute
,
util
.
NewFakeRateLimiter
(),
testNodeMonitorGracePeriod
,
testNodeStartupGracePeriod
,
testNodeMonitorPeriod
,
"kubernetes"
)
10
,
time
.
Minute
,
util
.
NewFakeRateLimiter
(),
testNodeMonitorGracePeriod
,
testNodeStartupGracePeriod
,
testNodeMonitorPeriod
,
"kubernetes"
)
if
err
:=
nodeController
.
S
yncCloudNodes
();
err
!=
nil
{
if
err
:=
nodeController
.
s
yncCloudNodes
();
err
!=
nil
{
t
.
Errorf
(
"unexpected error: %v"
,
err
)
t
.
Errorf
(
"unexpected error: %v"
,
err
)
}
}
if
!
reflect
.
DeepEqual
(
item
.
expectedClientActions
,
item
.
fakeNodeHandler
.
Actions
)
{
if
!
reflect
.
DeepEqual
(
item
.
expectedClientActions
,
item
.
fakeNodeHandler
.
Actions
)
{
...
@@ -686,7 +686,7 @@ func TestPopulateNodeAddresses(t *testing.T) {
...
@@ -686,7 +686,7 @@ func TestPopulateNodeAddresses(t *testing.T) {
for
_
,
item
:=
range
table
{
for
_
,
item
:=
range
table
{
nodeController
:=
NewNodeController
(
item
.
fakeCloud
,
".*"
,
nil
,
nil
,
nil
,
10
,
time
.
Minute
,
nodeController
:=
NewNodeController
(
item
.
fakeCloud
,
".*"
,
nil
,
nil
,
nil
,
10
,
time
.
Minute
,
util
.
NewFakeRateLimiter
(),
testNodeMonitorGracePeriod
,
testNodeStartupGracePeriod
,
testNodeMonitorPeriod
,
""
)
util
.
NewFakeRateLimiter
(),
testNodeMonitorGracePeriod
,
testNodeStartupGracePeriod
,
testNodeMonitorPeriod
,
""
)
result
,
err
:=
nodeController
.
P
opulateAddresses
(
item
.
nodes
)
result
,
err
:=
nodeController
.
p
opulateAddresses
(
item
.
nodes
)
// In case of IP querying error, we should continue.
// In case of IP querying error, we should continue.
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Errorf
(
"unexpected error: %v"
,
err
)
t
.
Errorf
(
"unexpected error: %v"
,
err
)
...
@@ -887,14 +887,14 @@ func TestMonitorNodeStatusEvictPods(t *testing.T) {
...
@@ -887,14 +887,14 @@ func TestMonitorNodeStatusEvictPods(t *testing.T) {
evictionTimeout
,
util
.
NewFakeRateLimiter
(),
testNodeMonitorGracePeriod
,
evictionTimeout
,
util
.
NewFakeRateLimiter
(),
testNodeMonitorGracePeriod
,
testNodeStartupGracePeriod
,
testNodeMonitorPeriod
,
""
)
testNodeStartupGracePeriod
,
testNodeMonitorPeriod
,
""
)
nodeController
.
now
=
func
()
util
.
Time
{
return
fakeNow
}
nodeController
.
now
=
func
()
util
.
Time
{
return
fakeNow
}
if
err
:=
nodeController
.
M
onitorNodeStatus
();
err
!=
nil
{
if
err
:=
nodeController
.
m
onitorNodeStatus
();
err
!=
nil
{
t
.
Errorf
(
"unexpected error: %v"
,
err
)
t
.
Errorf
(
"unexpected error: %v"
,
err
)
}
}
if
item
.
timeToPass
>
0
{
if
item
.
timeToPass
>
0
{
nodeController
.
now
=
func
()
util
.
Time
{
return
util
.
Time
{
Time
:
fakeNow
.
Add
(
item
.
timeToPass
)}
}
nodeController
.
now
=
func
()
util
.
Time
{
return
util
.
Time
{
Time
:
fakeNow
.
Add
(
item
.
timeToPass
)}
}
item
.
fakeNodeHandler
.
Existing
[
0
]
.
Status
=
item
.
newNodeStatus
item
.
fakeNodeHandler
.
Existing
[
0
]
.
Status
=
item
.
newNodeStatus
}
}
if
err
:=
nodeController
.
M
onitorNodeStatus
();
err
!=
nil
{
if
err
:=
nodeController
.
m
onitorNodeStatus
();
err
!=
nil
{
t
.
Errorf
(
"unexpected error: %v"
,
err
)
t
.
Errorf
(
"unexpected error: %v"
,
err
)
}
}
podEvicted
:=
false
podEvicted
:=
false
...
@@ -1089,13 +1089,13 @@ func TestMonitorNodeStatusUpdateStatus(t *testing.T) {
...
@@ -1089,13 +1089,13 @@ func TestMonitorNodeStatusUpdateStatus(t *testing.T) {
nodeController
:=
NewNodeController
(
nil
,
""
,
[]
string
{
"node0"
},
nil
,
item
.
fakeNodeHandler
,
10
,
5
*
time
.
Minute
,
util
.
NewFakeRateLimiter
(),
nodeController
:=
NewNodeController
(
nil
,
""
,
[]
string
{
"node0"
},
nil
,
item
.
fakeNodeHandler
,
10
,
5
*
time
.
Minute
,
util
.
NewFakeRateLimiter
(),
testNodeMonitorGracePeriod
,
testNodeStartupGracePeriod
,
testNodeMonitorPeriod
,
""
)
testNodeMonitorGracePeriod
,
testNodeStartupGracePeriod
,
testNodeMonitorPeriod
,
""
)
nodeController
.
now
=
func
()
util
.
Time
{
return
fakeNow
}
nodeController
.
now
=
func
()
util
.
Time
{
return
fakeNow
}
if
err
:=
nodeController
.
M
onitorNodeStatus
();
err
!=
nil
{
if
err
:=
nodeController
.
m
onitorNodeStatus
();
err
!=
nil
{
t
.
Errorf
(
"unexpected error: %v"
,
err
)
t
.
Errorf
(
"unexpected error: %v"
,
err
)
}
}
if
item
.
timeToPass
>
0
{
if
item
.
timeToPass
>
0
{
nodeController
.
now
=
func
()
util
.
Time
{
return
util
.
Time
{
Time
:
fakeNow
.
Add
(
item
.
timeToPass
)}
}
nodeController
.
now
=
func
()
util
.
Time
{
return
util
.
Time
{
Time
:
fakeNow
.
Add
(
item
.
timeToPass
)}
}
item
.
fakeNodeHandler
.
Existing
[
0
]
.
Status
=
item
.
newNodeStatus
item
.
fakeNodeHandler
.
Existing
[
0
]
.
Status
=
item
.
newNodeStatus
if
err
:=
nodeController
.
M
onitorNodeStatus
();
err
!=
nil
{
if
err
:=
nodeController
.
m
onitorNodeStatus
();
err
!=
nil
{
t
.
Errorf
(
"unexpected error: %v"
,
err
)
t
.
Errorf
(
"unexpected error: %v"
,
err
)
}
}
}
}
...
...
pkg/cloudprovider/plugins.go
View file @
65d132a3
...
@@ -39,8 +39,7 @@ var providers = make(map[string]Factory)
...
@@ -39,8 +39,7 @@ var providers = make(map[string]Factory)
func
RegisterCloudProvider
(
name
string
,
cloud
Factory
)
{
func
RegisterCloudProvider
(
name
string
,
cloud
Factory
)
{
providersMutex
.
Lock
()
providersMutex
.
Lock
()
defer
providersMutex
.
Unlock
()
defer
providersMutex
.
Unlock
()
_
,
found
:=
providers
[
name
]
if
_
,
found
:=
providers
[
name
];
found
{
if
found
{
glog
.
Fatalf
(
"Cloud provider %q was registered twice"
,
name
)
glog
.
Fatalf
(
"Cloud provider %q was registered twice"
,
name
)
}
}
glog
.
V
(
1
)
.
Infof
(
"Registered cloud provider %q"
,
name
)
glog
.
V
(
1
)
.
Infof
(
"Registered cloud provider %q"
,
name
)
...
...
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