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:
parent
c8ab5a092c
commit
ff44dc1932
@ -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(
|
||||||
|
@ -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
|
||||||
|
@ -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)
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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,
|
||||||
|
@ -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,
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user