Deploymenet with Kustomize

Table of contents

  1. Overlays
    1. Master-worker pod
    2. Worker one-shot
    3. Master Worker Topologyupdater
    4. Topologyupdater
  2. Uninstallation

This deployment method requires kubectl v1.21 or later. The kustomize overlays provided in the repo can be used directly:

kubectl apply -k https://github.com/kubernetes-sigs/node-feature-discovery/deployment/overlays/default?ref=master

This will required RBAC rules and deploy nfd-master (as a deployment) and nfd-worker (as daemonset) in the node-feature-discovery namespace.

NOTE: nfd-topology-updater is not deployed as part of the default overlay. Please refer to the Master Worker Topologyupdater and Topologyupdater below.

Alternatively you can clone the repository and customize the deployment by creating your own overlays. For example, to deploy the minimal image. See kustomize for more information about managing deployment configurations.

Overlays

The NFD repository hosts a set of overlays for different usages and deployment scenarios under deployment/overlays

Master-worker pod

You can also run nfd-master and nfd-worker inside the same pod

kubectl apply -k https://github.com/kubernetes-sigs/node-feature-discovery/deployment/overlays/default-combined?ref=master

This creates a DaemonSet that runs nfd-worker and nfd-master in the same Pod. In this case no nfd-master is run on the master node(s), but, the worker nodes are able to label themselves which may be desirable e.g. in single-node setups.

NOTE: nfd-topology-updater is not deployed by the default-combined overlay. To enable nfd-topology-updater in this scenario,the users must customize the deployment themselves.

Worker one-shot

Feature discovery can alternatively be configured as a one-shot job. The default-job overlay may be used to achieve this:

NUM_NODES=$(kubectl get no -o jsonpath='{.items[*].metadata.name}' | wc -w)
kubectl kustomize https://github.com/kubernetes-sigs/node-feature-discovery/deployment/overlays/default-job?ref=master | \
    sed s"/NUM_NODES/$NUM_NODES/" | \
    kubectl apply -f -

The example above launches as many jobs as there are non-master nodes. Note that this approach does not guarantee running once on every node. For example, tainted, non-ready nodes or some other reasons in Job scheduling may cause some node(s) will run extra job instance(s) to satisfy the request.

Master Worker Topologyupdater

NFD Master, NFD worker and NFD Topologyupdater can be configured to be deployed as separate pods. The master-worker-topologyupdater overlay may be used to achieve this:

kubectl apply -k https://github.com/kubernetes-sigs/node-feature-discovery/deployment/overlays/master-worker-topologyupdater?ref=master

Topologyupdater

In order to deploy just NFD master and NFD Topologyupdater (without nfd-worker) use the topologyupdater overlay:

kubectl apply -k https://github.com/kubernetes-sigs/node-feature-discovery/deployment/overlays/topologyupdater?ref=master

NFD Topologyupdater can be configured along with the default overlay (which deploys NFD worker and NFD master) where all the software components are deployed as separate pods. The topologyupdater overlay may be used along with default overlay to achieve this:


kubectl apply -k https://github.com/kubernetes-sigs/node-feature-discovery/deployment/overlays/default?ref=master
kubectl apply -k https://github.com/kubernetes-sigs/node-feature-discovery/deployment/overlays/topologyupdater?ref=master

Uninstallation

Simplest way is to invoke kubectl delete on the overlay that was used for deployment. Beware that this will also delete the namespace that NFD is running in. For example, in case the default overlay from the repo was used:

kubectl delete -k https://github.com/kubernetes-sigs/node-feature-discovery/deployment/overlays/default?ref=master

Alternatively you can delete create objects one-by-one, depending on the type of deployment, for example:

NFD_NS=node-feature-discovery
kubectl -n $NFD_NS delete ds nfd-worker
kubectl -n $NFD_NS delete deploy nfd-master
kubectl -n $NFD_NS delete svc nfd-master
kubectl -n $NFD_NS delete sa nfd-master
kubectl delete clusterrole nfd-master
kubectl delete clusterrolebinding nfd-master