kubelet: Add a TopologyManager policy options: "max-allowable-numa-nodes"

Signed-off-by: cyclidner <kuocyclinder@gmail.com>
This commit is contained in:
cyclinder
2024-04-10 14:49:06 +08:00
committed by cyclinder
parent bb089b9374
commit 87129c350a
7 changed files with 88 additions and 21 deletions

View File

@@ -66,7 +66,7 @@ var _ = SIGDescribe("Topology Manager Metrics", framework.WithSerial(), feature.
policy := topologymanager.PolicySingleNumaNode
scope := podScopeTopology
newCfg, _ := configureTopologyManagerInKubelet(oldCfg, policy, scope, nil, 0)
newCfg, _ := configureTopologyManagerInKubelet(oldCfg, policy, scope, nil, nil, 0)
updateKubeletConfig(ctx, f, newCfg, true)
})

View File

@@ -203,13 +203,17 @@ func findNUMANodeWithoutSRIOVDevices(configMap *v1.ConfigMap, numaNodes int) (in
return findNUMANodeWithoutSRIOVDevicesFromSysfs(numaNodes)
}
func configureTopologyManagerInKubelet(oldCfg *kubeletconfig.KubeletConfiguration, policy, scope string, configMap *v1.ConfigMap, numaNodes int) (*kubeletconfig.KubeletConfiguration, string) {
func configureTopologyManagerInKubelet(oldCfg *kubeletconfig.KubeletConfiguration, policy, scope string, topologyOptions map[string]string, configMap *v1.ConfigMap, numaNodes int) (*kubeletconfig.KubeletConfiguration, string) {
// Configure Topology Manager in Kubelet with policy.
newCfg := oldCfg.DeepCopy()
if newCfg.FeatureGates == nil {
newCfg.FeatureGates = make(map[string]bool)
}
if topologyOptions != nil {
newCfg.TopologyManagerPolicyOptions = topologyOptions
}
// Set the Topology Manager policy
newCfg.TopologyManagerPolicy = policy
@@ -858,7 +862,7 @@ func runTopologyManagerNodeAlignmentSuiteTests(ctx context.Context, f *framework
}
}
func runTopologyManagerTests(f *framework.Framework) {
func runTopologyManagerTests(f *framework.Framework, topologyOptions map[string]string) {
var oldCfg *kubeletconfig.KubeletConfiguration
var err error
@@ -879,7 +883,7 @@ func runTopologyManagerTests(f *framework.Framework) {
ginkgo.By(fmt.Sprintf("by configuring Topology Manager policy to %s", policy))
framework.Logf("Configuring topology Manager policy to %s", policy)
newCfg, _ := configureTopologyManagerInKubelet(oldCfg, policy, scope, nil, 0)
newCfg, _ := configureTopologyManagerInKubelet(oldCfg, policy, scope, topologyOptions, nil, 0)
updateKubeletConfig(ctx, f, newCfg, true)
// Run the tests
runTopologyManagerPolicySuiteTests(ctx, f)
@@ -903,7 +907,7 @@ func runTopologyManagerTests(f *framework.Framework) {
ginkgo.By(fmt.Sprintf("by configuring Topology Manager policy to %s", policy))
framework.Logf("Configuring topology Manager policy to %s", policy)
newCfg, reservedSystemCPUs := configureTopologyManagerInKubelet(oldCfg, policy, scope, configMap, numaNodes)
newCfg, reservedSystemCPUs := configureTopologyManagerInKubelet(oldCfg, policy, scope, topologyOptions, configMap, numaNodes)
updateKubeletConfig(ctx, f, newCfg, true)
runTopologyManagerNodeAlignmentSuiteTests(ctx, f, sd, reservedSystemCPUs, policy, numaNodes, coreCount)
@@ -921,7 +925,7 @@ func runTopologyManagerTests(f *framework.Framework) {
policy := topologymanager.PolicySingleNumaNode
scope := podScopeTopology
newCfg, reservedSystemCPUs := configureTopologyManagerInKubelet(oldCfg, policy, scope, configMap, numaNodes)
newCfg, reservedSystemCPUs := configureTopologyManagerInKubelet(oldCfg, policy, scope, topologyOptions, configMap, numaNodes)
updateKubeletConfig(ctx, f, newCfg, true)
runTMScopeResourceAlignmentTestSuite(ctx, f, configMap, reservedSystemCPUs, policy, numaNodes, coreCount)
@@ -960,6 +964,13 @@ var _ = SIGDescribe("Topology Manager", framework.WithSerial(), feature.Topology
f.NamespacePodSecurityLevel = admissionapi.LevelPrivileged
ginkgo.Context("With kubeconfig updated to static CPU Manager policy run the Topology Manager tests", func() {
runTopologyManagerTests(f)
runTopologyManagerTests(f, nil)
})
ginkgo.Context("With kubeconfig's topologyOptions updated to static CPU Manager policy run the Topology Manager tests", ginkgo.Label("MaxAllowableNUMANodes"), func() {
// At present, the default value of defaultMaxAllowableNUMANode is 8, we run
// the same tests with 2 * defaultMaxAllowableNUMANode(16). This is the
// most basic verification that the changed setting is not breaking stuff.
doubleDefaultMaxAllowableNUMANodes := strconv.Itoa(8 * 2)
runTopologyManagerTests(f, map[string]string{topologymanager.MaxAllowableNUMANodes: doubleDefaultMaxAllowableNUMANodes})
})
})