diff --git a/pkg/features/kube_features.go b/pkg/features/kube_features.go index ff761f44c77..15a762d0545 100644 --- a/pkg/features/kube_features.go +++ b/pkg/features/kube_features.go @@ -140,6 +140,7 @@ const ( // owner: @lmdaly // alpha: v1.16 + // beta: v1.18 // // Enable resource managers to make NUMA aligned decisions TopologyManager featuregate.Feature = "TopologyManager" @@ -598,7 +599,7 @@ var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureS AttachVolumeLimit: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.19 CPUManager: {Default: true, PreRelease: featuregate.Beta}, CPUCFSQuotaPeriod: {Default: false, PreRelease: featuregate.Alpha}, - TopologyManager: {Default: false, PreRelease: featuregate.Alpha}, + TopologyManager: {Default: true, PreRelease: featuregate.Beta}, ServiceNodeExclusion: {Default: false, PreRelease: featuregate.Alpha}, NodeDisruptionExclusion: {Default: false, PreRelease: featuregate.Alpha}, CSIDriverRegistry: {Default: true, PreRelease: featuregate.Beta}, diff --git a/pkg/kubelet/apis/config/validation/validation_test.go b/pkg/kubelet/apis/config/validation/validation_test.go index 501afa233d5..00ed0aaf268 100644 --- a/pkg/kubelet/apis/config/validation/validation_test.go +++ b/pkg/kubelet/apis/config/validation/validation_test.go @@ -53,7 +53,6 @@ func TestValidateKubeletConfiguration(t *testing.T) { HairpinMode: kubeletconfig.PromiscuousBridge, NodeLeaseDurationSeconds: 1, CPUCFSQuotaPeriod: metav1.Duration{Duration: 100 * time.Millisecond}, - TopologyManagerPolicy: "none", } if allErrors := ValidateKubeletConfiguration(successCase1); allErrors != nil { t.Errorf("expect no errors, got %v", allErrors) @@ -86,7 +85,6 @@ func TestValidateKubeletConfiguration(t *testing.T) { HairpinMode: kubeletconfig.PromiscuousBridge, NodeLeaseDurationSeconds: 1, CPUCFSQuotaPeriod: metav1.Duration{Duration: 100 * time.Millisecond}, - TopologyManagerPolicy: "none", ReservedSystemCPUs: "0-3", } if allErrors := ValidateKubeletConfiguration(successCase2); allErrors != nil { @@ -118,9 +116,8 @@ func TestValidateKubeletConfiguration(t *testing.T) { HairpinMode: "foo", NodeLeaseDurationSeconds: -1, CPUCFSQuotaPeriod: metav1.Duration{Duration: 0}, - TopologyManagerPolicy: "", } - const numErrsErrorCase1 = 26 + const numErrsErrorCase1 = 25 if allErrors := ValidateKubeletConfiguration(errorCase1); len(allErrors.(utilerrors.Aggregate).Errors()) != numErrsErrorCase1 { t.Errorf("expect %d errors, got %v", numErrsErrorCase1, len(allErrors.(utilerrors.Aggregate).Errors())) } @@ -152,7 +149,6 @@ func TestValidateKubeletConfiguration(t *testing.T) { HairpinMode: kubeletconfig.PromiscuousBridge, NodeLeaseDurationSeconds: 1, CPUCFSQuotaPeriod: metav1.Duration{Duration: 100 * time.Millisecond}, - TopologyManagerPolicy: "none", ReservedSystemCPUs: "0-3", } const numErrsErrorCase2 = 1 diff --git a/pkg/kubelet/cm/topologymanager/topology_manager.go b/pkg/kubelet/cm/topologymanager/topology_manager.go index 926260bf837..d025177ccd8 100644 --- a/pkg/kubelet/cm/topologymanager/topology_manager.go +++ b/pkg/kubelet/cm/topologymanager/topology_manager.go @@ -18,6 +18,7 @@ package topologymanager import ( "fmt" + "sync" "k8s.io/api/core/v1" "k8s.io/klog" @@ -54,6 +55,7 @@ type Manager interface { } type manager struct { + mutex sync.Mutex //The list of components registered with the Manager hintProviders []HintProvider //Mapping of a Pods mapping of Containers and their TopologyHints @@ -203,13 +205,18 @@ func (m *manager) AddHintProvider(h HintProvider) { } func (m *manager) AddContainer(pod *v1.Pod, containerID string) error { + m.mutex.Lock() + defer m.mutex.Unlock() + m.podMap[containerID] = string(pod.UID) return nil } func (m *manager) RemoveContainer(containerID string) error { - klog.Infof("[topologymanager] RemoveContainer - Container ID: %v", containerID) + m.mutex.Lock() + defer m.mutex.Unlock() + klog.Infof("[topologymanager] RemoveContainer - Container ID: %v", containerID) podUIDString := m.podMap[containerID] delete(m.podMap, containerID) if _, exists := m.podTopologyHints[podUIDString]; exists {