diff --git a/pkg/features/kube_features.go b/pkg/features/kube_features.go index 69258b83528..276fa8dbef8 100644 --- a/pkg/features/kube_features.go +++ b/pkg/features/kube_features.go @@ -388,7 +388,8 @@ const ( // Enables maxUnavailable for StatefulSet MaxUnavailableStatefulSet featuregate.Feature = "MaxUnavailableStatefulSet" - // owner: @cynepco3hahue(alukiano) @cezaryzukowski @k-wiatrzyk + // owner: @cynepco3hahue(alukiano) @cezaryzukowski @k-wiatrzyk, @Tal-or (only for GA graduation) + // // Allows setting memory affinity for a container based on NUMA topology MemoryManager featuregate.Feature = "MemoryManager" diff --git a/pkg/features/versioned_kube_features.go b/pkg/features/versioned_kube_features.go index 14592bfc12e..7b2ec852ee6 100644 --- a/pkg/features/versioned_kube_features.go +++ b/pkg/features/versioned_kube_features.go @@ -491,6 +491,7 @@ var defaultVersionedKubernetesFeatureGates = map[featuregate.Feature]featuregate MemoryManager: { {Version: version.MustParse("1.21"), Default: false, PreRelease: featuregate.Alpha}, {Version: version.MustParse("1.22"), Default: true, PreRelease: featuregate.Beta}, + {Version: version.MustParse("1.32"), Default: true, PreRelease: featuregate.GA, LockToDefault: true}, }, MemoryQoS: { diff --git a/pkg/kubelet/cm/container_manager_linux.go b/pkg/kubelet/cm/container_manager_linux.go index 406a4f259cc..3d50f69d842 100644 --- a/pkg/kubelet/cm/container_manager_linux.go +++ b/pkg/kubelet/cm/container_manager_linux.go @@ -334,21 +334,19 @@ func NewContainerManager(mountUtil mount.Interface, cadvisorInterface cadvisor.I } cm.topologyManager.AddHintProvider(cm.cpuManager) - if utilfeature.DefaultFeatureGate.Enabled(kubefeatures.MemoryManager) { - cm.memoryManager, err = memorymanager.NewManager( - nodeConfig.ExperimentalMemoryManagerPolicy, - machineInfo, - cm.GetNodeAllocatableReservation(), - nodeConfig.ExperimentalMemoryManagerReservedMemory, - nodeConfig.KubeletRootDir, - cm.topologyManager, - ) - if err != nil { - klog.ErrorS(err, "Failed to initialize memory manager") - return nil, err - } - cm.topologyManager.AddHintProvider(cm.memoryManager) + cm.memoryManager, err = memorymanager.NewManager( + nodeConfig.ExperimentalMemoryManagerPolicy, + machineInfo, + cm.GetNodeAllocatableReservation(), + nodeConfig.ExperimentalMemoryManagerReservedMemory, + nodeConfig.KubeletRootDir, + cm.topologyManager, + ) + if err != nil { + klog.ErrorS(err, "Failed to initialize memory manager") + return nil, err } + cm.topologyManager.AddHintProvider(cm.memoryManager) return cm, nil } @@ -578,16 +576,13 @@ func (cm *containerManagerImpl) Start(ctx context.Context, node *v1.Node, // Initialize CPU manager err := cm.cpuManager.Start(cpumanager.ActivePodsFunc(activePods), sourcesReady, podStatusProvider, runtimeService, containerMap) if err != nil { - return fmt.Errorf("start cpu manager error: %v", err) + return fmt.Errorf("start cpu manager error: %w", err) } // Initialize memory manager - if utilfeature.DefaultFeatureGate.Enabled(kubefeatures.MemoryManager) { - containerMap, _ := buildContainerMapAndRunningSetFromRuntime(ctx, runtimeService) - err := cm.memoryManager.Start(memorymanager.ActivePodsFunc(activePods), sourcesReady, podStatusProvider, runtimeService, containerMap) - if err != nil { - return fmt.Errorf("start memory manager error: %v", err) - } + err = cm.memoryManager.Start(memorymanager.ActivePodsFunc(activePods), sourcesReady, podStatusProvider, runtimeService, containerMap) + if err != nil { + return fmt.Errorf("start memory manager error: %w", err) } // cache the node Info including resource capacity and diff --git a/pkg/kubelet/metrics/metrics.go b/pkg/kubelet/metrics/metrics.go index 3050f3c5663..c7b6262563d 100644 --- a/pkg/kubelet/metrics/metrics.go +++ b/pkg/kubelet/metrics/metrics.go @@ -1065,10 +1065,8 @@ func Register(collectors ...metrics.StableCollector) { legacyregistry.MustRegister(CPUManagerSharedPoolSizeMilliCores) legacyregistry.MustRegister(CPUManagerExclusiveCPUsAllocationCount) legacyregistry.MustRegister(ContainerAlignedComputeResources) - if utilfeature.DefaultFeatureGate.Enabled(features.MemoryManager) { - legacyregistry.MustRegister(MemoryManagerPinningRequestTotal) - legacyregistry.MustRegister(MemoryManagerPinningErrorsTotal) - } + legacyregistry.MustRegister(MemoryManagerPinningRequestTotal) + legacyregistry.MustRegister(MemoryManagerPinningErrorsTotal) legacyregistry.MustRegister(TopologyManagerAdmissionRequestsTotal) legacyregistry.MustRegister(TopologyManagerAdmissionErrorsTotal) legacyregistry.MustRegister(TopologyManagerAdmissionDuration) diff --git a/test/featuregates_linter/test_data/versioned_feature_list.yaml b/test/featuregates_linter/test_data/versioned_feature_list.yaml index 2fd042ffda5..f69f2b99a23 100644 --- a/test/featuregates_linter/test_data/versioned_feature_list.yaml +++ b/test/featuregates_linter/test_data/versioned_feature_list.yaml @@ -726,6 +726,10 @@ lockToDefault: false preRelease: Beta version: "1.22" + - default: true + lockToDefault: true + preRelease: GA + version: "1.32" - name: MemoryQoS versionedSpecs: - default: false