Skip to content

Commit

Permalink
Use worker DS OwnerReference for NF's
Browse files Browse the repository at this point in the history
Signed-off-by: Carlos Eduardo Arango Gutierrez <[email protected]>
  • Loading branch information
ArangoGutierrez committed Jul 3, 2024
1 parent 7a66da4 commit 5594d1e
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 23 deletions.
6 changes: 6 additions & 0 deletions deployment/base/rbac/worker-role.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,9 @@ rules:
- create
- get
- update
- apiGroups:
- ""
resources:
- pods
verbs:
- get
7 changes: 6 additions & 1 deletion deployment/helm/node-feature-discovery/templates/role.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -15,5 +15,10 @@ rules:
- create
- get
- update
- apiGroups:
- ""
resources:
- pods
verbs:
- get
{{- end }}

57 changes: 35 additions & 22 deletions pkg/nfd-worker/nfd-worker.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,8 @@ import (
"google.golang.org/grpc/health"
"google.golang.org/grpc/health/grpc_health_v1"
"k8s.io/apimachinery/pkg/api/errors"
"k8s.io/apimachinery/pkg/types"
"k8s.io/apimachinery/pkg/util/validation"
"k8s.io/client-go/kubernetes"
"k8s.io/klog/v2"
klogutils "sigs.k8s.io/node-feature-discovery/pkg/utils/klog"
"sigs.k8s.io/yaml"
Expand Down Expand Up @@ -134,6 +134,7 @@ type nfdWorker struct {
stop chan struct{} // channel for signaling stop
featureSources []source.FeatureSource
labelSources []source.LabelSource
ownerReference []metav1.OwnerReference
}

// This ticker can represent infinite and normal intervals.
Expand Down Expand Up @@ -271,6 +272,21 @@ func (w *nfdWorker) Run() error {
labelTrigger.Reset(w.config.Core.SleepInterval.Duration)
defer labelTrigger.Stop()

// Get pod ower reference
podName := os.Getenv("POD_NAME")
client, err := w.getKubeClient()
if err != nil {
return fmt.Errorf("failed to get kube client: %w", err)
}

selfPod, err := client.CoreV1().Pods(w.kubernetesNamespace).Get(context.TODO(), podName, metav1.GetOptions{})
if err != nil {
return fmt.Errorf("failed to get pod %q: %w", podName, err)
}

// Create owner ref
w.ownerReference = selfPod.OwnerReferences

// Register to metrics server
if w.args.MetricsPort > 0 {
m := utils.CreateMetricsServer(w.args.MetricsPort,
Expand Down Expand Up @@ -713,25 +729,6 @@ func (m *nfdWorker) updateNodeFeatureObject(labels Labels) error {

features := source.GetAllFeatures()

// Create owner ref
ownerRefs := []metav1.OwnerReference{}
podName := os.Getenv("POD_NAME")
podUID := os.Getenv("POD_UID")
if podName != "" && podUID != "" {
isTrue := true
ownerRefs = []metav1.OwnerReference{
{
APIVersion: "v1",
Kind: "Pod",
Name: podName,
UID: types.UID(podUID),
Controller: &isTrue,
},
}
} else {
klog.InfoS("Cannot set NodeFeature owner reference, POD_NAME and/or POD_UID not specified")
}

// TODO: we could implement some simple caching of the object, only get it
// every 10 minutes or so because nobody else should really be modifying it
if nfr, err := cli.NfdV1alpha1().NodeFeatures(namespace).Get(context.TODO(), nodename, metav1.GetOptions{}); errors.IsNotFound(err) {
Expand All @@ -740,7 +737,7 @@ func (m *nfdWorker) updateNodeFeatureObject(labels Labels) error {
Name: nodename,
Annotations: map[string]string{nfdv1alpha1.WorkerVersionAnnotation: version.Get()},
Labels: map[string]string{nfdv1alpha1.NodeFeatureObjNodeNameLabel: nodename},
OwnerReferences: ownerRefs,
OwnerReferences: m.ownerReference,
},
Spec: nfdv1alpha1.NodeFeatureSpec{
Features: *features,
Expand All @@ -761,7 +758,7 @@ func (m *nfdWorker) updateNodeFeatureObject(labels Labels) error {
nfrUpdated := nfr.DeepCopy()
nfrUpdated.Annotations = map[string]string{nfdv1alpha1.WorkerVersionAnnotation: version.Get()}
nfrUpdated.Labels = map[string]string{nfdv1alpha1.NodeFeatureObjNodeNameLabel: nodename}
nfrUpdated.OwnerReferences = ownerRefs
nfrUpdated.OwnerReferences = m.ownerReference
nfrUpdated.Spec = nfdv1alpha1.NodeFeatureSpec{
Features: *features,
Labels: labels,
Expand Down Expand Up @@ -801,6 +798,22 @@ func (m *nfdWorker) getNfdClient() (*nfdclient.Clientset, error) {
return c, nil
}

func (m *nfdWorker) getKubeClient() (*kubernetes.Clientset, error) {
// creates the in-cluster config
kubeconfig, err := utils.GetKubeconfig(m.args.Kubeconfig)
if err != nil {
return nil, err
}

// creates the clientset
clientset, err := kubernetes.NewForConfig(kubeconfig)
if err != nil {
return nil, err
}

return clientset, nil
}

// UnmarshalJSON implements the Unmarshaler interface from "encoding/json"
func (c *sourcesConfig) UnmarshalJSON(data []byte) error {
// First do a raw parse to get the per-source data
Expand Down

0 comments on commit 5594d1e

Please sign in to comment.