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