1
0
Fork 0
mirror of https://github.com/kubernetes-sigs/node-feature-discovery.git synced 2024-12-14 11:57:51 +00:00
Node feature discovery for Kubernetes
Find a file
Markus Lehtonen 79ed747be8 nfd-master: handle multiple NodeFeature objects
Implement handling of multiple NodeFeature objects by merging all
objects (targeting a certain node) into one before processing the data.
This patch implements MergeInto() methods for all required data types.

With support for multiple NodeFeature objects per node, The "nfd api
workflow" can be easily demonstrated and tested from the command line.
Creating the folloiwing object (assuming node-n exists in the cluster):

    apiVersion: nfd.k8s-sigs.io/v1alpha1
    kind: NodeFeature
    metadata:
      labels:
        nfd.node.kubernetes.io/node-name: node-n
      name: my-features-for-node-n
    spec:
      # Features for NodeFeatureRule matching
      features:
        flags:
          vendor.domain-a:
            elements:
              feature-x: {}
        attributes:
          vendor.domain-b:
            elements:
              feature-y: "foo"
              feature-z: "123"
        instances:
          vendor.domain-c:
            elements:
            - attributes:
                name: "elem-1"
                vendor: "acme"
            - attributes:
                name: "elem-2"
                vendor: "acme"
      # Labels to be created
      labels:
        vendor-feature.enabled: "true"
        vendor-setting.value: "100"

will create two feature labes:

    feature.node.kubernetes.io/vendor-feature.enabled: "true"
    feature.node.kubernetes.io/vendor-setting.value: "100"

In addition it will advertise hidden/raw features that can be used for
custom rules in NodeFeatureRule objects. Now, creating a NodeFeatureRule
object:

    apiVersion: nfd.k8s-sigs.io/v1alpha1
    kind: NodeFeatureRule
    metadata:
      name: my-rule
    spec:
      rules:
        - name: "my feature rule"
          labels:
            "my-feature": "true"
          matchFeatures:
            - feature: vendor.domain-a
              matchExpressions:
                feature-x: {op: Exists}
            - feature: vendor.domain-c
              matchExpressions:
                vendor: {op: In, value: ["acme"]}

will match the features in the NodeFeature object above and cause one
more label to be created:

    feature.node.kubernetes.io/my-feature: "true"
2022-12-14 15:44:52 +02:00
.github scripts: move hacky scripts to hack directory 2022-09-13 17:58:09 +03:00
cmd Merge pull request #992 from marquiz/fixes/enable-nodefeature-flag 2022-12-14 03:37:34 -08:00
demo demo: make demo runnable again 2020-09-10 17:09:53 +03:00
deployment nfd-master: rename -featurerules-controller flag to -crd-controller 2022-12-14 10:23:45 +02:00
docs nfd-master: rename -featurerules-controller flag to -crd-controller 2022-12-14 10:23:45 +02:00
examples docs: add customization guide 2022-01-08 09:56:05 +02:00
hack apis/nfd: add CRD for communicating node features 2022-12-14 07:31:28 +02:00
pkg nfd-master: handle multiple NodeFeature objects 2022-12-14 15:44:52 +02:00
scripts scripts/mdlint: update mdlint to v0.12.0 2022-12-01 20:57:21 +02:00
source Merge pull request #927 from yselkowitz/cpuid 2022-11-08 07:08:23 -08:00
test test/e2e: fix creation of NFD CRDs 2022-12-14 14:44:17 +02:00
.dockerignore dockerignore: tidy up and update 2020-05-19 10:13:54 +03:00
.gitignore Only add kustomization.yaml in the root to .gitignore 2021-08-26 15:27:03 +01:00
cloudbuild.yaml Increase allowed image build timeout 2022-10-27 01:03:25 +03:00
code-of-conduct.md Update code-of-conduct.md 2017-12-20 14:12:51 -05:00
CONTRIBUTING.md Template project files 2016-07-22 22:13:48 -07:00
Dockerfile dockerfile: update builder image to golang v1.18 2022-07-08 10:04:04 +03:00
Dockerfile_generator generate: use common builder base image 2022-09-08 12:43:15 +03:00
go.mod Bump go.mod k8s.io to 1.26 2022-12-13 12:12:46 +02:00
go.sum Bump go.mod k8s.io to 1.26 2022-12-13 12:12:46 +02:00
LICENSE Template project files 2016-07-22 22:13:48 -07:00
Makefile helm: topology-updater: enable the configuration via helm 2022-11-21 21:31:37 +02:00
netlify.toml Add netlify configuration file 2022-09-16 00:47:49 +03:00
OWNERS OWNERS: add fmuyassarov as a reviewer 2022-10-13 16:39:59 +03:00
README.md README: update deployment instructions to use v0.11.3 2022-11-01 11:31:36 +02:00
SECURITY_CONTACTS Update SECURITY_CONTACTS 2020-11-19 15:10:27 -05:00
Tiltfile Update base image to Debian bullseye 2022-10-14 10:04:04 +03:00

Node Feature Discovery

Go Report Card Prow Build Prow E2E-Test

Welcome to Node Feature Discovery a Kubernetes add-on for detecting hardware features and system configuration!

See our Documentation for detailed instructions and reference

Quick-start the short-short version

$ kubectl apply -k https://github.com/kubernetes-sigs/node-feature-discovery/deployment/overlays/default?ref=v0.11.3
  namespace/node-feature-discovery created
  customresourcedefinition.apiextensions.k8s.io/nodefeaturerules.nfd.k8s-sigs.io created
  serviceaccount/nfd-master created
  clusterrole.rbac.authorization.k8s.io/nfd-master created
  clusterrolebinding.rbac.authorization.k8s.io/nfd-master created
  configmap/nfd-worker-conf created
  service/nfd-master created
  deployment.apps/nfd-master created
  daemonset.apps/nfd-worker created

$ kubectl -n node-feature-discovery get all
  NAME                              READY   STATUS    RESTARTS   AGE
  pod/nfd-master-555458dbbc-sxg6w   1/1     Running   0          56s
  pod/nfd-worker-mjg9f              1/1     Running   0          17s
...

$ kubectl get no -o json | jq .items[].metadata.labels
  {
    "kubernetes.io/arch": "amd64",
    "kubernetes.io/os": "linux",
    "feature.node.kubernetes.io/cpu-cpuid.ADX": "true",
    "feature.node.kubernetes.io/cpu-cpuid.AESNI": "true",
...