From 692f8aab277d8fba35d9ec48c544e128f86469c2 Mon Sep 17 00:00:00 2001 From: huyinhou Date: Mon, 19 Dec 2022 12:07:10 +0800 Subject: [PATCH] fix kubelet crash, concurrent map iteration and map write When kubelet starts a Pod that requires device resources, if the device plug-in updates the device at the same time, it may cause kubelet to crash. Signed-off-by: huyinhou --- pkg/kubelet/cm/devicemanager/topology_hints.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pkg/kubelet/cm/devicemanager/topology_hints.go b/pkg/kubelet/cm/devicemanager/topology_hints.go index 8e9521d8d12..d45f45c1143 100644 --- a/pkg/kubelet/cm/devicemanager/topology_hints.go +++ b/pkg/kubelet/cm/devicemanager/topology_hints.go @@ -147,11 +147,15 @@ func (m *ManagerImpl) deviceHasTopologyAlignment(resource string) bool { } func (m *ManagerImpl) getAvailableDevices(resource string) sets.String { + m.mutex.Lock() + defer m.mutex.Unlock() // Strip all devices in use from the list of healthy ones. return m.healthyDevices[resource].Difference(m.allocatedDevices[resource]) } func (m *ManagerImpl) generateDeviceTopologyHints(resource string, available sets.String, reusable sets.String, request int) []topologymanager.TopologyHint { + m.mutex.Lock() + defer m.mutex.Unlock() // Initialize minAffinitySize to include all NUMA Nodes minAffinitySize := len(m.numaNodes)