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
beba1ebb
Commit
beba1ebb
authored
Dec 01, 2016
by
Random-Liu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Use PatchStatus to update node status in kubelet.
parent
7fe882c4
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
68 additions
and
8 deletions
+68
-8
node_status_updater.go
.../volume/attachdetach/statusupdater/node_status_updater.go
+1
-0
BUILD
pkg/kubelet/BUILD
+2
-0
kubelet_node_status.go
pkg/kubelet/kubelet_node_status.go
+34
-8
kubelet_node_status_test.go
pkg/kubelet/kubelet_node_status_test.go
+0
-0
BUILD
pkg/util/node/BUILD
+1
-0
node.go
pkg/util/node/node.go
+30
-0
No files found.
pkg/controller/volume/attachdetach/statusupdater/node_status_updater.go
View file @
beba1ebb
...
...
@@ -91,6 +91,7 @@ func (nsu *nodeStatusUpdater) UpdateNodeStatuses() error {
clonedNode
)
}
// TODO: Change to pkg/util/node.UpdateNodeStatus.
oldData
,
err
:=
json
.
Marshal
(
node
)
if
err
!=
nil
{
return
fmt
.
Errorf
(
...
...
pkg/kubelet/BUILD
View file @
beba1ebb
...
...
@@ -51,6 +51,7 @@ go_library(
"//pkg/client/clientset_generated/release_1_5:go_default_library",
"//pkg/client/record:go_default_library",
"//pkg/cloudprovider:go_default_library",
"//pkg/conversion:go_default_library",
"//pkg/fieldpath:go_default_library",
"//pkg/fields:go_default_library",
"//pkg/kubelet/api:go_default_library",
...
...
@@ -192,6 +193,7 @@ go_test(
"//pkg/util/rand:go_default_library",
"//pkg/util/runtime:go_default_library",
"//pkg/util/sets:go_default_library",
"//pkg/util/strategicpatch:go_default_library",
"//pkg/util/testing:go_default_library",
"//pkg/util/uuid:go_default_library",
"//pkg/util/wait:go_default_library",
...
...
pkg/kubelet/kubelet_node_status.go
View file @
beba1ebb
...
...
@@ -31,11 +31,14 @@ import (
"k8s.io/kubernetes/pkg/api/v1"
metav1
"k8s.io/kubernetes/pkg/apis/meta/v1"
"k8s.io/kubernetes/pkg/cloudprovider"
"k8s.io/kubernetes/pkg/conversion"
"k8s.io/kubernetes/pkg/fields"
"k8s.io/kubernetes/pkg/kubelet/cadvisor"
"k8s.io/kubernetes/pkg/kubelet/events"
"k8s.io/kubernetes/pkg/kubelet/util/sliceutils"
"k8s.io/kubernetes/pkg/types"
utilnet
"k8s.io/kubernetes/pkg/util/net"
nodeutil
"k8s.io/kubernetes/pkg/util/node"
"k8s.io/kubernetes/pkg/version"
"k8s.io/kubernetes/pkg/volume/util/volumehelper"
)
...
...
@@ -109,6 +112,18 @@ func (kl *Kubelet) tryRegisterWithApiServer(node *v1.Node) bool {
return
false
}
clonedNode
,
err
:=
conversion
.
NewCloner
()
.
DeepCopy
(
existingNode
)
if
err
!=
nil
{
glog
.
Errorf
(
"Unable to clone %q node object %#v: %v"
,
kl
.
nodeName
,
existingNode
,
err
)
return
false
}
originalNode
,
ok
:=
clonedNode
.
(
*
v1
.
Node
)
if
!
ok
||
originalNode
==
nil
{
glog
.
Errorf
(
"Unable to cast %q node object %#v to v1.Node"
,
kl
.
nodeName
,
clonedNode
)
return
false
}
if
existingNode
.
Spec
.
ExternalID
==
node
.
Spec
.
ExternalID
{
glog
.
Infof
(
"Node %s was previously registered"
,
kl
.
nodeName
)
...
...
@@ -117,7 +132,8 @@ func (kl *Kubelet) tryRegisterWithApiServer(node *v1.Node) bool {
// annotation.
requiresUpdate
:=
kl
.
reconcileCMADAnnotationWithExistingNode
(
node
,
existingNode
)
if
requiresUpdate
{
if
_
,
err
:=
kl
.
kubeClient
.
Core
()
.
Nodes
()
.
UpdateStatus
(
existingNode
);
err
!=
nil
{
if
_
,
err
:=
nodeutil
.
PatchNodeStatus
(
kl
.
kubeClient
,
types
.
NodeName
(
kl
.
nodeName
),
originalNode
,
existingNode
);
err
!=
nil
{
glog
.
Errorf
(
"Unable to reconcile node %q with API server: error updating node: %v"
,
kl
.
nodeName
,
err
)
return
false
}
...
...
@@ -336,20 +352,30 @@ func (kl *Kubelet) tryUpdateNodeStatus(tryNumber int) error {
}
node
:=
&
nodes
.
Items
[
0
]
clonedNode
,
err
:=
conversion
.
NewCloner
()
.
DeepCopy
(
node
)
if
err
!=
nil
{
return
fmt
.
Errorf
(
"error clone node %q: %v"
,
kl
.
nodeName
,
err
)
}
originalNode
,
ok
:=
clonedNode
.
(
*
v1
.
Node
)
if
!
ok
||
originalNode
==
nil
{
return
fmt
.
Errorf
(
"failed to cast %q node object %#v to v1.Node"
,
kl
.
nodeName
,
clonedNode
)
}
kl
.
updatePodCIDR
(
node
.
Spec
.
PodCIDR
)
if
err
:=
kl
.
setNodeStatus
(
node
);
err
!=
nil
{
return
err
}
// Update the current status on the API server
updatedNode
,
err
:=
kl
.
kubeClient
.
Core
()
.
Nodes
()
.
UpdateStatus
(
node
)
// Patch the current status on the API server
updatedNode
,
err
:=
nodeutil
.
PatchNodeStatus
(
kl
.
kubeClient
,
types
.
NodeName
(
kl
.
nodeName
),
originalNode
,
node
)
if
err
!=
nil
{
return
err
}
// If update finishes sucessfully, mark the volumeInUse as reportedInUse to indicate
// those volumes are already updated in the node's status
if
err
==
nil
{
kl
.
volumeManager
.
MarkVolumesAsReportedInUse
(
updatedNode
.
Status
.
VolumesInUse
)
}
return
err
kl
.
volumeManager
.
MarkVolumesAsReportedInUse
(
updatedNode
.
Status
.
VolumesInUse
)
return
nil
}
// recordNodeStatusEvent records an event of the given type with the given
...
...
pkg/kubelet/kubelet_node_status_test.go
View file @
beba1ebb
This diff is collapsed.
Click to expand it.
pkg/util/node/BUILD
View file @
beba1ebb
...
...
@@ -20,6 +20,7 @@ go_library(
"//pkg/apis/meta/v1:go_default_library",
"//pkg/client/clientset_generated/release_1_5:go_default_library",
"//pkg/types:go_default_library",
"//pkg/util/strategicpatch:go_default_library",
"//vendor:github.com/golang/glog",
],
)
...
...
pkg/util/node/node.go
View file @
beba1ebb
...
...
@@ -30,6 +30,7 @@ import (
metav1
"k8s.io/kubernetes/pkg/apis/meta/v1"
clientset
"k8s.io/kubernetes/pkg/client/clientset_generated/release_1_5"
"k8s.io/kubernetes/pkg/types"
"k8s.io/kubernetes/pkg/util/strategicpatch"
)
const
(
...
...
@@ -153,3 +154,32 @@ func SetNodeCondition(c clientset.Interface, node types.NodeName, condition v1.N
_
,
err
=
c
.
Core
()
.
Nodes
()
.
PatchStatus
(
string
(
node
),
patch
)
return
err
}
// PatchNodeStatus patches node status.
func
PatchNodeStatus
(
c
clientset
.
Interface
,
nodeName
types
.
NodeName
,
oldNode
*
v1
.
Node
,
newNode
*
v1
.
Node
)
(
*
v1
.
Node
,
error
)
{
oldData
,
err
:=
json
.
Marshal
(
oldNode
)
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"failed to marshal old node %#v for node %q: %v"
,
oldNode
,
nodeName
,
err
)
}
// Reset spec to make sure only patch for Status or ObjectMeta is generated.
// Note that we don't reset ObjectMeta here, because:
// 1. This aligns with Nodes().UpdateStatus().
// 2. Some component does use this to update node annotations.
newNode
.
Spec
=
oldNode
.
Spec
newData
,
err
:=
json
.
Marshal
(
newNode
)
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"failed to marshal new node %#v for node %q: %v"
,
newNode
,
nodeName
,
err
)
}
patchBytes
,
err
:=
strategicpatch
.
CreateTwoWayMergePatch
(
oldData
,
newData
,
v1
.
Node
{})
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"failed to create patch for node %q: %v"
,
nodeName
,
err
)
}
updatedNode
,
err
:=
c
.
Core
()
.
Nodes
()
.
Patch
(
string
(
nodeName
),
api
.
StrategicMergePatchType
,
patchBytes
,
"status"
)
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"failed to patch status %q for node %q: %v"
,
patchBytes
,
nodeName
,
err
)
}
return
updatedNode
,
nil
}
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