diff --git a/cmd/kubelet/app/server.go b/cmd/kubelet/app/server.go index 9444f136866..b25b277f9da 100644 --- a/cmd/kubelet/app/server.go +++ b/cmd/kubelet/app/server.go @@ -707,13 +707,11 @@ func run(ctx context.Context, s *options.KubeletServer, kubeDeps *kubelet.Depend devicePluginEnabled := utilfeature.DefaultFeatureGate.Enabled(features.DevicePlugins) var cpuManagerPolicyOptions map[string]string - if utilfeature.DefaultFeatureGate.Enabled(features.CPUManager) { - if utilfeature.DefaultFeatureGate.Enabled(features.CPUManagerPolicyOptions) { - cpuManagerPolicyOptions = s.CPUManagerPolicyOptions - } else if s.CPUManagerPolicyOptions != nil { - return fmt.Errorf("CPU Manager policy options %v require feature gates %q, %q enabled", - s.CPUManagerPolicyOptions, features.CPUManager, features.CPUManagerPolicyOptions) - } + if utilfeature.DefaultFeatureGate.Enabled(features.CPUManagerPolicyOptions) { + cpuManagerPolicyOptions = s.CPUManagerPolicyOptions + } else if s.CPUManagerPolicyOptions != nil { + return fmt.Errorf("CPU Manager policy options %v require feature gates %q, %q enabled", + s.CPUManagerPolicyOptions, features.CPUManager, features.CPUManagerPolicyOptions) } kubeDeps.ContainerManager, err = cm.NewContainerManager( diff --git a/pkg/kubelet/cm/container_manager_linux.go b/pkg/kubelet/cm/container_manager_linux.go index c7fcbaff8b0..14e981b9d34 100644 --- a/pkg/kubelet/cm/container_manager_linux.go +++ b/pkg/kubelet/cm/container_manager_linux.go @@ -310,23 +310,21 @@ func NewContainerManager(mountUtil mount.Interface, cadvisorInterface cadvisor.I } // Initialize CPU manager - if utilfeature.DefaultFeatureGate.Enabled(kubefeatures.CPUManager) { - cm.cpuManager, err = cpumanager.NewManager( - nodeConfig.ExperimentalCPUManagerPolicy, - nodeConfig.ExperimentalCPUManagerPolicyOptions, - nodeConfig.ExperimentalCPUManagerReconcilePeriod, - machineInfo, - nodeConfig.NodeAllocatableConfig.ReservedSystemCPUs, - cm.GetNodeAllocatableReservation(), - nodeConfig.KubeletRootDir, - cm.topologyManager, - ) - if err != nil { - klog.ErrorS(err, "Failed to initialize cpu manager") - return nil, err - } - cm.topologyManager.AddHintProvider(cm.cpuManager) + cm.cpuManager, err = cpumanager.NewManager( + nodeConfig.ExperimentalCPUManagerPolicy, + nodeConfig.ExperimentalCPUManagerPolicyOptions, + nodeConfig.ExperimentalCPUManagerReconcilePeriod, + machineInfo, + nodeConfig.NodeAllocatableConfig.ReservedSystemCPUs, + cm.GetNodeAllocatableReservation(), + nodeConfig.KubeletRootDir, + cm.topologyManager, + ) + if err != nil { + klog.ErrorS(err, "Failed to initialize cpu manager") + return nil, err } + cm.topologyManager.AddHintProvider(cm.cpuManager) if utilfeature.DefaultFeatureGate.Enabled(kubefeatures.MemoryManager) { cm.memoryManager, err = memorymanager.NewManager( @@ -559,12 +557,10 @@ func (cm *containerManagerImpl) Start(node *v1.Node, localStorageCapacityIsolation bool) error { // Initialize CPU manager - if utilfeature.DefaultFeatureGate.Enabled(kubefeatures.CPUManager) { - containerMap := buildContainerMapFromRuntime(runtimeService) - err := cm.cpuManager.Start(cpumanager.ActivePodsFunc(activePods), sourcesReady, podStatusProvider, runtimeService, containerMap) - if err != nil { - return fmt.Errorf("start cpu manager error: %v", err) - } + containerMap := buildContainerMapFromRuntime(runtimeService) + err := cm.cpuManager.Start(cpumanager.ActivePodsFunc(activePods), sourcesReady, podStatusProvider, runtimeService, containerMap) + if err != nil { + return fmt.Errorf("start cpu manager error: %v", err) } // Initialize memory manager diff --git a/pkg/kubelet/metrics/metrics.go b/pkg/kubelet/metrics/metrics.go index 5803cbc28ed..798f9d36862 100644 --- a/pkg/kubelet/metrics/metrics.go +++ b/pkg/kubelet/metrics/metrics.go @@ -578,6 +578,8 @@ func Register(collectors ...metrics.StableCollector) { legacyregistry.MustRegister(StartedHostProcessContainersErrorsTotal) legacyregistry.MustRegister(RunPodSandboxDuration) legacyregistry.MustRegister(RunPodSandboxErrors) + legacyregistry.MustRegister(CPUManagerPinningRequestsTotal) + legacyregistry.MustRegister(CPUManagerPinningErrorsTotal) for _, collector := range collectors { legacyregistry.CustomMustRegister(collector) @@ -592,11 +594,6 @@ func Register(collectors ...metrics.StableCollector) { if utilfeature.DefaultFeatureGate.Enabled(features.ConsistentHTTPGetHandlers) { legacyregistry.MustRegister(LifecycleHandlerHTTPFallbacks) } - - if utilfeature.DefaultFeatureGate.Enabled(features.CPUManager) { - legacyregistry.MustRegister(CPUManagerPinningRequestsTotal) - legacyregistry.MustRegister(CPUManagerPinningErrorsTotal) - } }) } diff --git a/test/e2e_node/cpu_manager_metrics_test.go b/test/e2e_node/cpu_manager_metrics_test.go index a899d393210..8693380aedb 100644 --- a/test/e2e_node/cpu_manager_metrics_test.go +++ b/test/e2e_node/cpu_manager_metrics_test.go @@ -78,7 +78,6 @@ var _ = SIGDescribe("CPU Manager Metrics [Serial][Feature:CPUManager]", func() { newCfg := configureCPUManagerInKubelet(oldCfg, &cpuManagerKubeletArguments{ policyName: string(cpumanager.PolicyStatic), - enableCPUManager: true, reservedSystemCPUs: cpuset.NewCPUSet(0), enableCPUManagerOptions: true, options: cpuPolicyOptions, diff --git a/test/e2e_node/cpu_manager_test.go b/test/e2e_node/cpu_manager_test.go index 12c95352883..68330c2a277 100644 --- a/test/e2e_node/cpu_manager_test.go +++ b/test/e2e_node/cpu_manager_test.go @@ -31,7 +31,6 @@ import ( runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1" kubeletconfig "k8s.io/kubernetes/pkg/kubelet/apis/config" "k8s.io/kubernetes/pkg/kubelet/cm/cpumanager" - cpumanagerstate "k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/state" "k8s.io/kubernetes/pkg/kubelet/cm/cpuset" "k8s.io/kubernetes/pkg/kubelet/types" admissionapi "k8s.io/pod-security-admission/api" @@ -130,18 +129,6 @@ func waitForContainerRemoval(containerName, podName, podNS string) { }, 2*time.Minute, 1*time.Second).Should(gomega.BeTrue()) } -func waitForStateFileCleanedUp() { - gomega.Eventually(func() bool { - restoredState, err := cpumanagerstate.NewCheckpointState("/var/lib/kubelet", "cpu_manager_state", "static", nil) - framework.ExpectNoError(err, "failed to create testing cpumanager state instance") - assignments := restoredState.GetCPUAssignments() - if len(assignments) == 0 { - return true - } - return false - }, 2*time.Minute, 1*time.Second).Should(gomega.BeTrue()) -} - func isHTEnabled() bool { outData, err := exec.Command("/bin/sh", "-c", "lscpu | grep \"Thread(s) per core:\" | cut -d \":\" -f 2").Output() framework.ExpectNoError(err) @@ -187,7 +174,6 @@ func getCoreSiblingList(cpuRes int64) string { type cpuManagerKubeletArguments struct { policyName string - enableCPUManager bool enableCPUManagerOptions bool reservedSystemCPUs cpuset.CPUSet options map[string]string @@ -199,8 +185,6 @@ func configureCPUManagerInKubelet(oldCfg *kubeletconfig.KubeletConfiguration, ku newCfg.FeatureGates = make(map[string]bool) } - newCfg.FeatureGates["CPUManager"] = kubeletArguments.enableCPUManager - newCfg.FeatureGates["CPUManagerPolicyOptions"] = kubeletArguments.enableCPUManagerOptions newCfg.FeatureGates["CPUManagerPolicyBetaOptions"] = kubeletArguments.enableCPUManagerOptions newCfg.FeatureGates["CPUManagerPolicyAlphaOptions"] = kubeletArguments.enableCPUManagerOptions @@ -550,7 +534,6 @@ func runCPUManagerTests(f *framework.Framework) { // Enable CPU Manager in the kubelet. newCfg := configureCPUManagerInKubelet(oldCfg, &cpuManagerKubeletArguments{ policyName: string(cpumanager.PolicyStatic), - enableCPUManager: true, reservedSystemCPUs: cpuset.CPUSet{}, }) updateKubeletConfig(f, newCfg, true) @@ -611,30 +594,6 @@ func runCPUManagerTests(f *framework.Framework) { err = e2epod.NewPodClient(f).MatchContainerOutput(pod.Name, pod.Spec.Containers[0].Name, expAllowedCPUsListRegex) framework.ExpectNoError(err, "expected log not found in container [%s] of pod [%s]", pod.Spec.Containers[0].Name, pod.Name) - - ginkgo.By("disable cpu manager in kubelet") - newCfg = configureCPUManagerInKubelet(oldCfg, &cpuManagerKubeletArguments{ - policyName: string(cpumanager.PolicyStatic), - enableCPUManager: false, - reservedSystemCPUs: cpuset.CPUSet{}, - }) - updateKubeletConfig(f, newCfg, false) - - ginkgo.By("by deleting the pod and waiting for container removal") - deletePods(f, []string{pod.Name}) - waitForContainerRemoval(pod.Spec.Containers[0].Name, pod.Name, pod.Namespace) - - ginkgo.By("enable cpu manager in kubelet without delete state file") - newCfg = configureCPUManagerInKubelet(oldCfg, &cpuManagerKubeletArguments{ - policyName: string(cpumanager.PolicyStatic), - enableCPUManager: true, - reservedSystemCPUs: cpuset.CPUSet{}, - }) - updateKubeletConfig(f, newCfg, false) - - ginkgo.By("wait for the deleted pod to be cleaned up from the state file") - waitForStateFileCleanedUp() - ginkgo.By("the deleted pod has already been deleted from the state file") }) ginkgo.It("should assign CPUs as expected with enhanced policy based on strict SMT alignment", func() { @@ -662,7 +621,6 @@ func runCPUManagerTests(f *framework.Framework) { newCfg := configureCPUManagerInKubelet(oldCfg, &cpuManagerKubeletArguments{ policyName: string(cpumanager.PolicyStatic), - enableCPUManager: true, reservedSystemCPUs: cpuset.NewCPUSet(0), enableCPUManagerOptions: true, options: cpuPolicyOptions, diff --git a/test/e2e_node/topology_manager_test.go b/test/e2e_node/topology_manager_test.go index 51beb171fd4..d9b062a5ae2 100644 --- a/test/e2e_node/topology_manager_test.go +++ b/test/e2e_node/topology_manager_test.go @@ -201,7 +201,6 @@ func configureTopologyManagerInKubelet(oldCfg *kubeletconfig.KubeletConfiguratio newCfg.FeatureGates = make(map[string]bool) } - newCfg.FeatureGates["CPUManager"] = true newCfg.FeatureGates["TopologyManager"] = true // Set the Topology Manager policy