@@ -45,6 +45,7 @@ import (
4545 "k8s.io/kubernetes/pkg/kubelet/events"
4646 "k8s.io/kubernetes/pkg/kubelet/managed"
4747 "k8s.io/kubernetes/pkg/kubelet/nodestatus"
48+ "k8s.io/kubernetes/pkg/kubelet/sharedcpus"
4849 taintutil "k8s.io/kubernetes/pkg/util/taints"
4950 volutil "k8s.io/kubernetes/pkg/volume/util"
5051)
@@ -135,6 +136,7 @@ func (kl *Kubelet) tryRegisterWithAPIServer(node *v1.Node) bool {
135136 if managed .IsEnabled () {
136137 requiresUpdate = kl .addManagementNodeCapacity (node , existingNode ) || requiresUpdate
137138 }
139+ requiresUpdate = kl .reconcileSharedCPUsNodeCapacity (node , existingNode ) || requiresUpdate
138140 if requiresUpdate {
139141 if _ , _ , err := nodeutil .PatchNodeStatus (kl .kubeClient .CoreV1 (), types .NodeName (kl .nodeName ), originalNode , existingNode ); err != nil {
140142 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)
164166 return true
165167}
166168
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+
167188// reconcileHugePageResource will update huge page capacity for each page size and remove huge page sizes no longer supported
168189func (kl * Kubelet ) reconcileHugePageResource (initialNode , existingNode * v1.Node ) bool {
169190 requiresUpdate := updateDefaultResources (initialNode , existingNode )
@@ -397,6 +418,7 @@ func (kl *Kubelet) initialNode(ctx context.Context) (*v1.Node, error) {
397418 if managed .IsEnabled () {
398419 kl .addManagementNodeCapacity (node , node )
399420 }
421+ kl .reconcileSharedCPUsNodeCapacity (node , node )
400422
401423 kl .setNodeStatus (ctx , node )
402424
0 commit comments