cpumanager: the FG is locked to default (ON)

hence we can remove the if() guards, the feature
is always available.

Signed-off-by: Francesco Romani <fromani@redhat.com>
This commit is contained in:
Francesco Romani 2022-10-24 16:45:19 +02:00
parent c8ab5a092c
commit ff44dc1932
6 changed files with 25 additions and 78 deletions

View File

@ -707,13 +707,11 @@ func run(ctx context.Context, s *options.KubeletServer, kubeDeps *kubelet.Depend
devicePluginEnabled := utilfeature.DefaultFeatureGate.Enabled(features.DevicePlugins) devicePluginEnabled := utilfeature.DefaultFeatureGate.Enabled(features.DevicePlugins)
var cpuManagerPolicyOptions map[string]string var cpuManagerPolicyOptions map[string]string
if utilfeature.DefaultFeatureGate.Enabled(features.CPUManager) { if utilfeature.DefaultFeatureGate.Enabled(features.CPUManagerPolicyOptions) {
if utilfeature.DefaultFeatureGate.Enabled(features.CPUManagerPolicyOptions) { cpuManagerPolicyOptions = s.CPUManagerPolicyOptions
cpuManagerPolicyOptions = s.CPUManagerPolicyOptions } else if s.CPUManagerPolicyOptions != nil {
} else if s.CPUManagerPolicyOptions != nil { return fmt.Errorf("CPU Manager policy options %v require feature gates %q, %q enabled",
return fmt.Errorf("CPU Manager policy options %v require feature gates %q, %q enabled", s.CPUManagerPolicyOptions, features.CPUManager, features.CPUManagerPolicyOptions)
s.CPUManagerPolicyOptions, features.CPUManager, features.CPUManagerPolicyOptions)
}
} }
kubeDeps.ContainerManager, err = cm.NewContainerManager( kubeDeps.ContainerManager, err = cm.NewContainerManager(

View File

@ -310,23 +310,21 @@ func NewContainerManager(mountUtil mount.Interface, cadvisorInterface cadvisor.I
} }
// Initialize CPU manager // Initialize CPU manager
if utilfeature.DefaultFeatureGate.Enabled(kubefeatures.CPUManager) { cm.cpuManager, err = cpumanager.NewManager(
cm.cpuManager, err = cpumanager.NewManager( nodeConfig.ExperimentalCPUManagerPolicy,
nodeConfig.ExperimentalCPUManagerPolicy, nodeConfig.ExperimentalCPUManagerPolicyOptions,
nodeConfig.ExperimentalCPUManagerPolicyOptions, nodeConfig.ExperimentalCPUManagerReconcilePeriod,
nodeConfig.ExperimentalCPUManagerReconcilePeriod, machineInfo,
machineInfo, nodeConfig.NodeAllocatableConfig.ReservedSystemCPUs,
nodeConfig.NodeAllocatableConfig.ReservedSystemCPUs, cm.GetNodeAllocatableReservation(),
cm.GetNodeAllocatableReservation(), nodeConfig.KubeletRootDir,
nodeConfig.KubeletRootDir, cm.topologyManager,
cm.topologyManager, )
) if err != nil {
if err != nil { klog.ErrorS(err, "Failed to initialize cpu manager")
klog.ErrorS(err, "Failed to initialize cpu manager") return nil, err
return nil, err
}
cm.topologyManager.AddHintProvider(cm.cpuManager)
} }
cm.topologyManager.AddHintProvider(cm.cpuManager)
if utilfeature.DefaultFeatureGate.Enabled(kubefeatures.MemoryManager) { if utilfeature.DefaultFeatureGate.Enabled(kubefeatures.MemoryManager) {
cm.memoryManager, err = memorymanager.NewManager( cm.memoryManager, err = memorymanager.NewManager(
@ -559,12 +557,10 @@ func (cm *containerManagerImpl) Start(node *v1.Node,
localStorageCapacityIsolation bool) error { localStorageCapacityIsolation bool) error {
// Initialize CPU manager // Initialize CPU manager
if utilfeature.DefaultFeatureGate.Enabled(kubefeatures.CPUManager) { containerMap := buildContainerMapFromRuntime(runtimeService)
containerMap := buildContainerMapFromRuntime(runtimeService) err := cm.cpuManager.Start(cpumanager.ActivePodsFunc(activePods), sourcesReady, podStatusProvider, runtimeService, containerMap)
err := cm.cpuManager.Start(cpumanager.ActivePodsFunc(activePods), sourcesReady, podStatusProvider, runtimeService, containerMap) if err != nil {
if err != nil { return fmt.Errorf("start cpu manager error: %v", err)
return fmt.Errorf("start cpu manager error: %v", err)
}
} }
// Initialize memory manager // Initialize memory manager

View File

@ -578,6 +578,8 @@ func Register(collectors ...metrics.StableCollector) {
legacyregistry.MustRegister(StartedHostProcessContainersErrorsTotal) legacyregistry.MustRegister(StartedHostProcessContainersErrorsTotal)
legacyregistry.MustRegister(RunPodSandboxDuration) legacyregistry.MustRegister(RunPodSandboxDuration)
legacyregistry.MustRegister(RunPodSandboxErrors) legacyregistry.MustRegister(RunPodSandboxErrors)
legacyregistry.MustRegister(CPUManagerPinningRequestsTotal)
legacyregistry.MustRegister(CPUManagerPinningErrorsTotal)
for _, collector := range collectors { for _, collector := range collectors {
legacyregistry.CustomMustRegister(collector) legacyregistry.CustomMustRegister(collector)
@ -592,11 +594,6 @@ func Register(collectors ...metrics.StableCollector) {
if utilfeature.DefaultFeatureGate.Enabled(features.ConsistentHTTPGetHandlers) { if utilfeature.DefaultFeatureGate.Enabled(features.ConsistentHTTPGetHandlers) {
legacyregistry.MustRegister(LifecycleHandlerHTTPFallbacks) legacyregistry.MustRegister(LifecycleHandlerHTTPFallbacks)
} }
if utilfeature.DefaultFeatureGate.Enabled(features.CPUManager) {
legacyregistry.MustRegister(CPUManagerPinningRequestsTotal)
legacyregistry.MustRegister(CPUManagerPinningErrorsTotal)
}
}) })
} }

View File

@ -78,7 +78,6 @@ var _ = SIGDescribe("CPU Manager Metrics [Serial][Feature:CPUManager]", func() {
newCfg := configureCPUManagerInKubelet(oldCfg, newCfg := configureCPUManagerInKubelet(oldCfg,
&cpuManagerKubeletArguments{ &cpuManagerKubeletArguments{
policyName: string(cpumanager.PolicyStatic), policyName: string(cpumanager.PolicyStatic),
enableCPUManager: true,
reservedSystemCPUs: cpuset.NewCPUSet(0), reservedSystemCPUs: cpuset.NewCPUSet(0),
enableCPUManagerOptions: true, enableCPUManagerOptions: true,
options: cpuPolicyOptions, options: cpuPolicyOptions,

View File

@ -31,7 +31,6 @@ import (
runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1" runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1"
kubeletconfig "k8s.io/kubernetes/pkg/kubelet/apis/config" kubeletconfig "k8s.io/kubernetes/pkg/kubelet/apis/config"
"k8s.io/kubernetes/pkg/kubelet/cm/cpumanager" "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/cm/cpuset"
"k8s.io/kubernetes/pkg/kubelet/types" "k8s.io/kubernetes/pkg/kubelet/types"
admissionapi "k8s.io/pod-security-admission/api" 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()) }, 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 { func isHTEnabled() bool {
outData, err := exec.Command("/bin/sh", "-c", "lscpu | grep \"Thread(s) per core:\" | cut -d \":\" -f 2").Output() outData, err := exec.Command("/bin/sh", "-c", "lscpu | grep \"Thread(s) per core:\" | cut -d \":\" -f 2").Output()
framework.ExpectNoError(err) framework.ExpectNoError(err)
@ -187,7 +174,6 @@ func getCoreSiblingList(cpuRes int64) string {
type cpuManagerKubeletArguments struct { type cpuManagerKubeletArguments struct {
policyName string policyName string
enableCPUManager bool
enableCPUManagerOptions bool enableCPUManagerOptions bool
reservedSystemCPUs cpuset.CPUSet reservedSystemCPUs cpuset.CPUSet
options map[string]string options map[string]string
@ -199,8 +185,6 @@ func configureCPUManagerInKubelet(oldCfg *kubeletconfig.KubeletConfiguration, ku
newCfg.FeatureGates = make(map[string]bool) newCfg.FeatureGates = make(map[string]bool)
} }
newCfg.FeatureGates["CPUManager"] = kubeletArguments.enableCPUManager
newCfg.FeatureGates["CPUManagerPolicyOptions"] = kubeletArguments.enableCPUManagerOptions newCfg.FeatureGates["CPUManagerPolicyOptions"] = kubeletArguments.enableCPUManagerOptions
newCfg.FeatureGates["CPUManagerPolicyBetaOptions"] = kubeletArguments.enableCPUManagerOptions newCfg.FeatureGates["CPUManagerPolicyBetaOptions"] = kubeletArguments.enableCPUManagerOptions
newCfg.FeatureGates["CPUManagerPolicyAlphaOptions"] = kubeletArguments.enableCPUManagerOptions newCfg.FeatureGates["CPUManagerPolicyAlphaOptions"] = kubeletArguments.enableCPUManagerOptions
@ -550,7 +534,6 @@ func runCPUManagerTests(f *framework.Framework) {
// Enable CPU Manager in the kubelet. // Enable CPU Manager in the kubelet.
newCfg := configureCPUManagerInKubelet(oldCfg, &cpuManagerKubeletArguments{ newCfg := configureCPUManagerInKubelet(oldCfg, &cpuManagerKubeletArguments{
policyName: string(cpumanager.PolicyStatic), policyName: string(cpumanager.PolicyStatic),
enableCPUManager: true,
reservedSystemCPUs: cpuset.CPUSet{}, reservedSystemCPUs: cpuset.CPUSet{},
}) })
updateKubeletConfig(f, newCfg, true) 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) 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]", framework.ExpectNoError(err, "expected log not found in container [%s] of pod [%s]",
pod.Spec.Containers[0].Name, pod.Name) 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() { 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, newCfg := configureCPUManagerInKubelet(oldCfg,
&cpuManagerKubeletArguments{ &cpuManagerKubeletArguments{
policyName: string(cpumanager.PolicyStatic), policyName: string(cpumanager.PolicyStatic),
enableCPUManager: true,
reservedSystemCPUs: cpuset.NewCPUSet(0), reservedSystemCPUs: cpuset.NewCPUSet(0),
enableCPUManagerOptions: true, enableCPUManagerOptions: true,
options: cpuPolicyOptions, options: cpuPolicyOptions,

View File

@ -201,7 +201,6 @@ func configureTopologyManagerInKubelet(oldCfg *kubeletconfig.KubeletConfiguratio
newCfg.FeatureGates = make(map[string]bool) newCfg.FeatureGates = make(map[string]bool)
} }
newCfg.FeatureGates["CPUManager"] = true
newCfg.FeatureGates["TopologyManager"] = true newCfg.FeatureGates["TopologyManager"] = true
// Set the Topology Manager policy // Set the Topology Manager policy