@@ -46,6 +46,7 @@ import (
46
46
"k8s.io/kubernetes/pkg/kubelet/events"
47
47
"k8s.io/kubernetes/pkg/kubelet/managed"
48
48
"k8s.io/kubernetes/pkg/kubelet/nodestatus"
49
+ "k8s.io/kubernetes/pkg/kubelet/sharedcpus"
49
50
taintutil "k8s.io/kubernetes/pkg/util/taints"
50
51
volutil "k8s.io/kubernetes/pkg/volume/util"
51
52
)
@@ -136,6 +137,7 @@ func (kl *Kubelet) tryRegisterWithAPIServer(node *v1.Node) bool {
136
137
if managed .IsEnabled () {
137
138
requiresUpdate = kl .addManagementNodeCapacity (node , existingNode ) || requiresUpdate
138
139
}
140
+ requiresUpdate = kl .reconcileSharedCPUsNodeCapacity (node , existingNode ) || requiresUpdate
139
141
if requiresUpdate {
140
142
if _ , _ , err := nodeutil .PatchNodeStatus (kl .kubeClient .CoreV1 (), types .NodeName (kl .nodeName ), originalNode , existingNode ); err != nil {
141
143
klog .ErrorS (err , "Unable to reconcile node with API server,error updating node" , "node" , klog .KObj (node ))
@@ -165,6 +167,25 @@ func (kl *Kubelet) addManagementNodeCapacity(initialNode, existingNode *v1.Node)
165
167
return true
166
168
}
167
169
170
+ func (kl * Kubelet ) reconcileSharedCPUsNodeCapacity (initialNode , existingNode * v1.Node ) bool {
171
+ updateDefaultResources (initialNode , existingNode )
172
+ sharedCPUsResourceName := sharedcpus .GetResourceName ()
173
+ // delete resources in case they exist and feature has been disabled
174
+ if ! sharedcpus .IsEnabled () {
175
+ if _ , ok := existingNode .Status .Capacity [sharedCPUsResourceName ]; ok {
176
+ delete (existingNode .Status .Capacity , sharedCPUsResourceName )
177
+ return true
178
+ }
179
+ return false
180
+ }
181
+ q := resource .NewQuantity (sharedcpus .GetConfig ().ContainersLimit , resource .DecimalSI )
182
+ if existingCapacity , ok := existingNode .Status .Capacity [sharedCPUsResourceName ]; ok && existingCapacity .Equal (* q ) {
183
+ return false
184
+ }
185
+ existingNode .Status .Capacity [sharedCPUsResourceName ] = * q
186
+ return true
187
+ }
188
+
168
189
// reconcileHugePageResource will update huge page capacity for each page size and remove huge page sizes no longer supported
169
190
func (kl * Kubelet ) reconcileHugePageResource (initialNode , existingNode * v1.Node ) bool {
170
191
requiresUpdate := updateDefaultResources (initialNode , existingNode )
@@ -459,6 +480,7 @@ func (kl *Kubelet) initialNode(ctx context.Context) (*v1.Node, error) {
459
480
if managed .IsEnabled () {
460
481
kl .addManagementNodeCapacity (node , node )
461
482
}
483
+ kl .reconcileSharedCPUsNodeCapacity (node , node )
462
484
463
485
kl .setNodeStatus (ctx , node )
464
486
0 commit comments