@@ -46,6 +46,7 @@ import (
4646 "k8s.io/kubernetes/pkg/kubelet/events"
4747 "k8s.io/kubernetes/pkg/kubelet/managed"
4848 "k8s.io/kubernetes/pkg/kubelet/nodestatus"
49+ "k8s.io/kubernetes/pkg/kubelet/sharedcpus"
4950 taintutil "k8s.io/kubernetes/pkg/util/taints"
5051 volutil "k8s.io/kubernetes/pkg/volume/util"
5152)
@@ -136,6 +137,7 @@ func (kl *Kubelet) tryRegisterWithAPIServer(node *v1.Node) bool {
136137 if managed .IsEnabled () {
137138 requiresUpdate = kl .addManagementNodeCapacity (node , existingNode ) || requiresUpdate
138139 }
140+ requiresUpdate = kl .reconcileSharedCPUsNodeCapacity (node , existingNode ) || requiresUpdate
139141 if requiresUpdate {
140142 if _ , _ , err := nodeutil .PatchNodeStatus (kl .kubeClient .CoreV1 (), types .NodeName (kl .nodeName ), originalNode , existingNode ); err != nil {
141143 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)
165167 return true
166168}
167169
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+
168189// reconcileHugePageResource will update huge page capacity for each page size and remove huge page sizes no longer supported
169190func (kl * Kubelet ) reconcileHugePageResource (initialNode , existingNode * v1.Node ) bool {
170191 requiresUpdate := updateDefaultResources (initialNode , existingNode )
@@ -459,6 +480,7 @@ func (kl *Kubelet) initialNode(ctx context.Context) (*v1.Node, error) {
459480 if managed .IsEnabled () {
460481 kl .addManagementNodeCapacity (node , node )
461482 }
483+ kl .reconcileSharedCPUsNodeCapacity (node , node )
462484
463485 kl .setNodeStatus (ctx , node )
464486
0 commit comments