1
0
Fork 0
mirror of https://github.com/kubernetes-sigs/node-feature-discovery.git synced 2025-03-28 02:37:11 +00:00

Advertise TopologyManger policy and scope as Attributes

Signed-off-by: pprokop <pprokop@nvidia.com>
This commit is contained in:
pprokop 2023-02-09 15:31:38 +01:00 committed by PiotrProkop
parent 1084ce8b1d
commit 5484babcb1
2 changed files with 40 additions and 14 deletions

View file

@ -28,7 +28,6 @@ import (
topology "sigs.k8s.io/node-feature-discovery/pkg/nfd-topology-updater"
"sigs.k8s.io/node-feature-discovery/pkg/resourcemonitor"
"sigs.k8s.io/node-feature-discovery/pkg/topologypolicy"
"sigs.k8s.io/node-feature-discovery/pkg/utils"
"sigs.k8s.io/node-feature-discovery/pkg/utils/hostpath"
"sigs.k8s.io/node-feature-discovery/pkg/utils/kubeconf"
@ -88,11 +87,8 @@ func main() {
klog.Exitf("unsupported URI scheme: %v", u.Scheme)
}
tmPolicy := string(topologypolicy.DetectTopologyPolicy(klConfig.TopologyManagerPolicy, klConfig.TopologyManagerScope))
klog.Infof("detected kubelet Topology Manager policy %q", tmPolicy)
// Get new TopologyUpdater instance
instance := topology.NewTopologyUpdater(*args, *resourcemonitorArgs, tmPolicy)
instance := topology.NewTopologyUpdater(*args, *resourcemonitorArgs, klConfig.TopologyManagerPolicy, klConfig.TopologyManagerScope)
if err = instance.Run(); err != nil {
klog.Exit(err)

View file

@ -32,11 +32,19 @@ import (
"sigs.k8s.io/node-feature-discovery/pkg/apihelper"
"sigs.k8s.io/node-feature-discovery/pkg/podres"
"sigs.k8s.io/node-feature-discovery/pkg/resourcemonitor"
"sigs.k8s.io/node-feature-discovery/pkg/topologypolicy"
"sigs.k8s.io/node-feature-discovery/pkg/utils"
"sigs.k8s.io/node-feature-discovery/pkg/version"
"sigs.k8s.io/yaml"
)
const (
// TopologyManagerPolicyAttributeName represents an attribute which defines Topology Manager Policy
TopologyManagerPolicyAttributeName = "topologyManagerPolicy"
// TopologyManagerScopeAttributeName represents an attribute which defines Topology Manager Policy Scope
TopologyManagerScopeAttributeName = "topologyManagerScope"
)
// Args are the command line arguments
type Args struct {
NoPublish bool
@ -60,10 +68,21 @@ type NfdTopologyUpdater interface {
type staticNodeInfo struct {
nodeName string
tmPolicy string
tmScope string
}
func newStaticNodeInfo(policy, scope string) staticNodeInfo {
nodeName := utils.NodeName()
klog.InfoS("detected kubelet Topology Manager configuration", "policy", policy, "scope", scope, "nodeName", nodeName)
return staticNodeInfo{
nodeName: nodeName,
tmPolicy: policy,
tmScope: scope,
}
}
type nfdTopologyUpdater struct {
nodeInfo *staticNodeInfo
nodeInfo staticNodeInfo
args Args
apihelper apihelper.APIHelpers
resourcemonitorArgs resourcemonitor.Args
@ -73,16 +92,13 @@ type nfdTopologyUpdater struct {
}
// NewTopologyUpdater creates a new NfdTopologyUpdater instance.
func NewTopologyUpdater(args Args, resourcemonitorArgs resourcemonitor.Args, policy string) NfdTopologyUpdater {
func NewTopologyUpdater(args Args, resourcemonitorArgs resourcemonitor.Args, policy, scope string) NfdTopologyUpdater {
nfd := &nfdTopologyUpdater{
args: args,
resourcemonitorArgs: resourcemonitorArgs,
nodeInfo: &staticNodeInfo{
nodeName: utils.NodeName(),
tmPolicy: policy,
},
stop: make(chan struct{}, 1),
config: &NFDConfig{},
nodeInfo: newStaticNodeInfo(policy, scope),
stop: make(chan struct{}, 1),
config: &NFDConfig{},
}
if args.ConfigFile != "" {
nfd.configFilePath = filepath.Clean(args.ConfigFile)
@ -185,7 +201,8 @@ func (w *nfdTopologyUpdater) updateNodeResourceTopology(zoneInfo v1alpha2.ZoneLi
Name: w.nodeInfo.nodeName,
},
Zones: zoneInfo,
TopologyPolicies: []string{w.nodeInfo.tmPolicy},
TopologyPolicies: []string{string(topologypolicy.DetectTopologyPolicy(w.nodeInfo.tmPolicy, w.nodeInfo.tmScope))},
Attributes: createTopologyAttributes(w.nodeInfo.tmPolicy, w.nodeInfo.tmScope),
}
_, err := cli.TopologyV1alpha2().NodeResourceTopologies().Create(context.TODO(), &nrtNew, metav1.CreateOptions{})
@ -231,3 +248,16 @@ func (w *nfdTopologyUpdater) configure() error {
klog.Infof("configuration file %q parsed:\n %v", w.configFilePath, w.config)
return nil
}
func createTopologyAttributes(policy string, scope string) v1alpha2.AttributeList {
return v1alpha2.AttributeList{
{
Name: TopologyManagerPolicyAttributeName,
Value: policy,
},
{
Name: TopologyManagerScopeAttributeName,
Value: scope,
},
}
}