-
Notifications
You must be signed in to change notification settings - Fork 13
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat(deps): update helm release node-feature-discovery to 0.17.0 #2238
base: main
Are you sure you want to change the base?
Conversation
Path: @@ -3,6 +3,7 @@
kind: ServiceAccount
metadata:
name: node-feature-discovery
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
@@ -16,16 +17,32 @@
kind: ServiceAccount
metadata:
name: node-feature-discovery-worker
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
app.kubernetes.io/managed-by: Helm
---
+# Source: node-feature-discovery/templates/nfd-topologyupdater-conf.yaml
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: node-feature-discovery-topology-updater-conf
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+data:
+ nfd-topology-updater.conf: |-
+ null
+---
# Source: node-feature-discovery/templates/nfd-worker-conf.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: node-feature-discovery-worker-conf
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
@@ -79,171 +96,6 @@
- vendor
- device
---
-# Source: node-feature-discovery/templates/nodefeaturerule-crd.yaml
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.7.0
- creationTimestamp: null
- name: nodefeaturerules.nfd.k8s-sigs.io
-spec:
- group: nfd.k8s-sigs.io
- names:
- kind: NodeFeatureRule
- listKind: NodeFeatureRuleList
- plural: nodefeaturerules
- singular: nodefeaturerule
- scope: Cluster
- versions:
- - name: v1alpha1
- schema:
- openAPIV3Schema:
- description: NodeFeatureRule resource specifies a configuration for feature-based customization of node objects, such as node labeling.
- properties:
- apiVersion:
- description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
- type: string
- kind:
- description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
- type: string
- metadata:
- type: object
- spec:
- description: NodeFeatureRuleSpec describes a NodeFeatureRule.
- properties:
- rules:
- description: Rules is a list of node customization rules.
- items:
- description: Rule defines a rule for node customization such as labeling.
- properties:
- labels:
- additionalProperties:
- type: string
- description: Labels to create if the rule matches.
- type: object
- labelsTemplate:
- description: LabelsTemplate specifies a template to expand for dynamically generating multiple labels. Data (after template expansion) must be keys with an optional value (<key>[=<value>]) separated by newlines.
- type: string
- matchAny:
- description: MatchAny specifies a list of matchers one of which must match.
- items:
- description: MatchAnyElem specifies one sub-matcher of MatchAny.
- properties:
- matchFeatures:
- description: MatchFeatures specifies a set of matcher terms all of which must match.
- items:
- description: FeatureMatcherTerm defines requirements against one feature set. All requirements (specified as MatchExpressions) are evaluated against each element in the feature set.
- properties:
- feature:
- type: string
- matchExpressions:
- additionalProperties:
- description: "MatchExpression specifies an expression to evaluate against a set of input values. It contains an operator that is applied when matching the input and an array of values that the operator evaluates the input against. \n NB: CreateMatchExpression or MustCreateMatchExpression() should be used for creating new instances. NB: Validate() must be called if Op or Value fields are modified or if a new instance is created from scratch without using the helper functions."
- properties:
- op:
- description: Op is the operator to be applied.
- enum:
- - In
- - NotIn
- - InRegexp
- - Exists
- - DoesNotExist
- - Gt
- - Lt
- - GtLt
- - IsTrue
- - IsFalse
- type: string
- value:
- description: Value is the list of values that the operand evaluates the input against. Value should be empty if the operator is Exists, DoesNotExist, IsTrue or IsFalse. Value should contain exactly one element if the operator is Gt or Lt and exactly two elements if the operator is GtLt. In other cases Value should contain at least one element.
- items:
- type: string
- type: array
- required:
- - op
- type: object
- description: MatchExpressionSet contains a set of MatchExpressions, each of which is evaluated against a set of input values.
- type: object
- required:
- - feature
- - matchExpressions
- type: object
- type: array
- required:
- - matchFeatures
- type: object
- type: array
- matchFeatures:
- description: MatchFeatures specifies a set of matcher terms all of which must match.
- items:
- description: FeatureMatcherTerm defines requirements against one feature set. All requirements (specified as MatchExpressions) are evaluated against each element in the feature set.
- properties:
- feature:
- type: string
- matchExpressions:
- additionalProperties:
- description: "MatchExpression specifies an expression to evaluate against a set of input values. It contains an operator that is applied when matching the input and an array of values that the operator evaluates the input against. \n NB: CreateMatchExpression or MustCreateMatchExpression() should be used for creating new instances. NB: Validate() must be called if Op or Value fields are modified or if a new instance is created from scratch without using the helper functions."
- properties:
- op:
- description: Op is the operator to be applied.
- enum:
- - In
- - NotIn
- - InRegexp
- - Exists
- - DoesNotExist
- - Gt
- - Lt
- - GtLt
- - IsTrue
- - IsFalse
- type: string
- value:
- description: Value is the list of values that the operand evaluates the input against. Value should be empty if the operator is Exists, DoesNotExist, IsTrue or IsFalse. Value should contain exactly one element if the operator is Gt or Lt and exactly two elements if the operator is GtLt. In other cases Value should contain at least one element.
- items:
- type: string
- type: array
- required:
- - op
- type: object
- description: MatchExpressionSet contains a set of MatchExpressions, each of which is evaluated against a set of input values.
- type: object
- required:
- - feature
- - matchExpressions
- type: object
- type: array
- name:
- description: Name of the rule.
- type: string
- vars:
- additionalProperties:
- type: string
- description: Vars is the variables to store if the rule matches. Variables do not directly inflict any changes in the node object. However, they can be referenced from other rules enabling more complex rule hierarchies, without exposing intermediary output values as labels.
- type: object
- varsTemplate:
- description: VarsTemplate specifies a template to expand for dynamically generating multiple variables. Data (after template expansion) must be keys with an optional value (<key>[=<value>]) separated by newlines.
- type: string
- required:
- - name
- type: object
- type: array
- required:
- - rules
- type: object
- required:
- - spec
- type: object
- served: true
- storage: true
-status:
- acceptedNames:
- kind: ""
- plural: ""
- conditions: []
- storedVersions: []
----
# Source: node-feature-discovery/templates/clusterrole.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
@@ -264,8 +116,15 @@
- update
- list
- apiGroups:
+ - ""
+ resources:
+ - nodes/proxy
+ verbs:
+ - get
+ - apiGroups:
- nfd.k8s-sigs.io
resources:
+ - nodefeatures
- nodefeaturerules
verbs:
- get
@@ -290,11 +149,49 @@
name: node-feature-discovery
namespace: default
---
+# Source: node-feature-discovery/templates/role.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: Role
+metadata:
+ name: node-feature-discovery-worker
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+rules:
+ - apiGroups:
+ - nfd.k8s-sigs.io
+ resources:
+ - nodefeatures
+ verbs:
+ - create
+ - get
+ - update
+---
+# Source: node-feature-discovery/templates/rolebinding.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: RoleBinding
+metadata:
+ name: node-feature-discovery-worker
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: Role
+ name: node-feature-discovery-worker
+subjects:
+ - kind: ServiceAccount
+ name: node-feature-discovery-worker
+ namespace: default
+---
# Source: node-feature-discovery/templates/service.yaml
apiVersion: v1
kind: Service
metadata:
name: node-feature-discovery-master
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
@@ -310,12 +207,14 @@
selector:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
+ role: master
---
# Source: node-feature-discovery/templates/worker.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: node-feature-discovery-worker
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
@@ -349,7 +248,7 @@
- ALL
readOnlyRootFilesystem: true
runAsNonRoot: true
- image: "k8s.gcr.io/nfd/node-feature-discovery:v0.11.2"
+ image: "registry.k8s.io/nfd/node-feature-discovery:v0.12.0"
imagePullPolicy: IfNotPresent
env:
- name: NODE_NAME
@@ -425,6 +324,7 @@
kind: Deployment
metadata:
name: node-feature-discovery-master
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
@@ -457,7 +357,7 @@
- ALL
readOnlyRootFilesystem: true
runAsNonRoot: true
- image: "k8s.gcr.io/nfd/node-feature-discovery:v0.11.2"
+ image: "registry.k8s.io/nfd/node-feature-discovery:v0.12.0"
imagePullPolicy: IfNotPresent
livenessProbe:
exec:
@@ -486,7 +386,7 @@
- "nfd-master"
resources: {}
args:
- ## By default, disable NodeFeatureRules controller for other than the default instances
+ ## By default, disable crd controller for other than the default instances
- "-featurerules-controller=true"
affinity:
nodeAffinity: |
e9a636b
to
e7740a1
Compare
Path: @@ -3,6 +3,7 @@
kind: ServiceAccount
metadata:
name: node-feature-discovery
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
@@ -16,16 +17,32 @@
kind: ServiceAccount
metadata:
name: node-feature-discovery-worker
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
app.kubernetes.io/managed-by: Helm
---
+# Source: node-feature-discovery/templates/nfd-topologyupdater-conf.yaml
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: node-feature-discovery-topology-updater-conf
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+data:
+ nfd-topology-updater.conf: |-
+ null
+---
# Source: node-feature-discovery/templates/nfd-worker-conf.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: node-feature-discovery-worker-conf
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
@@ -79,171 +96,6 @@
- vendor
- device
---
-# Source: node-feature-discovery/templates/nodefeaturerule-crd.yaml
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.7.0
- creationTimestamp: null
- name: nodefeaturerules.nfd.k8s-sigs.io
-spec:
- group: nfd.k8s-sigs.io
- names:
- kind: NodeFeatureRule
- listKind: NodeFeatureRuleList
- plural: nodefeaturerules
- singular: nodefeaturerule
- scope: Cluster
- versions:
- - name: v1alpha1
- schema:
- openAPIV3Schema:
- description: NodeFeatureRule resource specifies a configuration for feature-based customization of node objects, such as node labeling.
- properties:
- apiVersion:
- description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
- type: string
- kind:
- description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
- type: string
- metadata:
- type: object
- spec:
- description: NodeFeatureRuleSpec describes a NodeFeatureRule.
- properties:
- rules:
- description: Rules is a list of node customization rules.
- items:
- description: Rule defines a rule for node customization such as labeling.
- properties:
- labels:
- additionalProperties:
- type: string
- description: Labels to create if the rule matches.
- type: object
- labelsTemplate:
- description: LabelsTemplate specifies a template to expand for dynamically generating multiple labels. Data (after template expansion) must be keys with an optional value (<key>[=<value>]) separated by newlines.
- type: string
- matchAny:
- description: MatchAny specifies a list of matchers one of which must match.
- items:
- description: MatchAnyElem specifies one sub-matcher of MatchAny.
- properties:
- matchFeatures:
- description: MatchFeatures specifies a set of matcher terms all of which must match.
- items:
- description: FeatureMatcherTerm defines requirements against one feature set. All requirements (specified as MatchExpressions) are evaluated against each element in the feature set.
- properties:
- feature:
- type: string
- matchExpressions:
- additionalProperties:
- description: "MatchExpression specifies an expression to evaluate against a set of input values. It contains an operator that is applied when matching the input and an array of values that the operator evaluates the input against. \n NB: CreateMatchExpression or MustCreateMatchExpression() should be used for creating new instances. NB: Validate() must be called if Op or Value fields are modified or if a new instance is created from scratch without using the helper functions."
- properties:
- op:
- description: Op is the operator to be applied.
- enum:
- - In
- - NotIn
- - InRegexp
- - Exists
- - DoesNotExist
- - Gt
- - Lt
- - GtLt
- - IsTrue
- - IsFalse
- type: string
- value:
- description: Value is the list of values that the operand evaluates the input against. Value should be empty if the operator is Exists, DoesNotExist, IsTrue or IsFalse. Value should contain exactly one element if the operator is Gt or Lt and exactly two elements if the operator is GtLt. In other cases Value should contain at least one element.
- items:
- type: string
- type: array
- required:
- - op
- type: object
- description: MatchExpressionSet contains a set of MatchExpressions, each of which is evaluated against a set of input values.
- type: object
- required:
- - feature
- - matchExpressions
- type: object
- type: array
- required:
- - matchFeatures
- type: object
- type: array
- matchFeatures:
- description: MatchFeatures specifies a set of matcher terms all of which must match.
- items:
- description: FeatureMatcherTerm defines requirements against one feature set. All requirements (specified as MatchExpressions) are evaluated against each element in the feature set.
- properties:
- feature:
- type: string
- matchExpressions:
- additionalProperties:
- description: "MatchExpression specifies an expression to evaluate against a set of input values. It contains an operator that is applied when matching the input and an array of values that the operator evaluates the input against. \n NB: CreateMatchExpression or MustCreateMatchExpression() should be used for creating new instances. NB: Validate() must be called if Op or Value fields are modified or if a new instance is created from scratch without using the helper functions."
- properties:
- op:
- description: Op is the operator to be applied.
- enum:
- - In
- - NotIn
- - InRegexp
- - Exists
- - DoesNotExist
- - Gt
- - Lt
- - GtLt
- - IsTrue
- - IsFalse
- type: string
- value:
- description: Value is the list of values that the operand evaluates the input against. Value should be empty if the operator is Exists, DoesNotExist, IsTrue or IsFalse. Value should contain exactly one element if the operator is Gt or Lt and exactly two elements if the operator is GtLt. In other cases Value should contain at least one element.
- items:
- type: string
- type: array
- required:
- - op
- type: object
- description: MatchExpressionSet contains a set of MatchExpressions, each of which is evaluated against a set of input values.
- type: object
- required:
- - feature
- - matchExpressions
- type: object
- type: array
- name:
- description: Name of the rule.
- type: string
- vars:
- additionalProperties:
- type: string
- description: Vars is the variables to store if the rule matches. Variables do not directly inflict any changes in the node object. However, they can be referenced from other rules enabling more complex rule hierarchies, without exposing intermediary output values as labels.
- type: object
- varsTemplate:
- description: VarsTemplate specifies a template to expand for dynamically generating multiple variables. Data (after template expansion) must be keys with an optional value (<key>[=<value>]) separated by newlines.
- type: string
- required:
- - name
- type: object
- type: array
- required:
- - rules
- type: object
- required:
- - spec
- type: object
- served: true
- storage: true
-status:
- acceptedNames:
- kind: ""
- plural: ""
- conditions: []
- storedVersions: []
----
# Source: node-feature-discovery/templates/clusterrole.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
@@ -264,8 +116,15 @@
- update
- list
- apiGroups:
+ - ""
+ resources:
+ - nodes/proxy
+ verbs:
+ - get
+ - apiGroups:
- nfd.k8s-sigs.io
resources:
+ - nodefeatures
- nodefeaturerules
verbs:
- get
@@ -290,11 +149,49 @@
name: node-feature-discovery
namespace: default
---
+# Source: node-feature-discovery/templates/role.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: Role
+metadata:
+ name: node-feature-discovery-worker
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+rules:
+ - apiGroups:
+ - nfd.k8s-sigs.io
+ resources:
+ - nodefeatures
+ verbs:
+ - create
+ - get
+ - update
+---
+# Source: node-feature-discovery/templates/rolebinding.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: RoleBinding
+metadata:
+ name: node-feature-discovery-worker
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: Role
+ name: node-feature-discovery-worker
+subjects:
+ - kind: ServiceAccount
+ name: node-feature-discovery-worker
+ namespace: default
+---
# Source: node-feature-discovery/templates/service.yaml
apiVersion: v1
kind: Service
metadata:
name: node-feature-discovery-master
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
@@ -310,12 +207,14 @@
selector:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
+ role: master
---
# Source: node-feature-discovery/templates/worker.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: node-feature-discovery-worker
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
@@ -349,7 +248,7 @@
- ALL
readOnlyRootFilesystem: true
runAsNonRoot: true
- image: "k8s.gcr.io/nfd/node-feature-discovery:v0.11.2"
+ image: "registry.k8s.io/nfd/node-feature-discovery:v0.12.1"
imagePullPolicy: IfNotPresent
env:
- name: NODE_NAME
@@ -425,6 +324,7 @@
kind: Deployment
metadata:
name: node-feature-discovery-master
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
@@ -457,7 +357,7 @@
- ALL
readOnlyRootFilesystem: true
runAsNonRoot: true
- image: "k8s.gcr.io/nfd/node-feature-discovery:v0.11.2"
+ image: "registry.k8s.io/nfd/node-feature-discovery:v0.12.1"
imagePullPolicy: IfNotPresent
livenessProbe:
exec:
@@ -486,7 +386,7 @@
- "nfd-master"
resources: {}
args:
- ## By default, disable NodeFeatureRules controller for other than the default instances
+ ## By default, disable crd controller for other than the default instances
- "-featurerules-controller=true"
affinity:
nodeAffinity: |
e7740a1
to
9562045
Compare
Path: @@ -3,6 +3,7 @@
kind: ServiceAccount
metadata:
name: node-feature-discovery
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
@@ -16,16 +17,32 @@
kind: ServiceAccount
metadata:
name: node-feature-discovery-worker
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
app.kubernetes.io/managed-by: Helm
---
+# Source: node-feature-discovery/templates/nfd-topologyupdater-conf.yaml
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: node-feature-discovery-topology-updater-conf
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+data:
+ nfd-topology-updater.conf: |-
+ null
+---
# Source: node-feature-discovery/templates/nfd-worker-conf.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: node-feature-discovery-worker-conf
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
@@ -79,171 +96,6 @@
- vendor
- device
---
-# Source: node-feature-discovery/templates/nodefeaturerule-crd.yaml
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.7.0
- creationTimestamp: null
- name: nodefeaturerules.nfd.k8s-sigs.io
-spec:
- group: nfd.k8s-sigs.io
- names:
- kind: NodeFeatureRule
- listKind: NodeFeatureRuleList
- plural: nodefeaturerules
- singular: nodefeaturerule
- scope: Cluster
- versions:
- - name: v1alpha1
- schema:
- openAPIV3Schema:
- description: NodeFeatureRule resource specifies a configuration for feature-based customization of node objects, such as node labeling.
- properties:
- apiVersion:
- description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
- type: string
- kind:
- description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
- type: string
- metadata:
- type: object
- spec:
- description: NodeFeatureRuleSpec describes a NodeFeatureRule.
- properties:
- rules:
- description: Rules is a list of node customization rules.
- items:
- description: Rule defines a rule for node customization such as labeling.
- properties:
- labels:
- additionalProperties:
- type: string
- description: Labels to create if the rule matches.
- type: object
- labelsTemplate:
- description: LabelsTemplate specifies a template to expand for dynamically generating multiple labels. Data (after template expansion) must be keys with an optional value (<key>[=<value>]) separated by newlines.
- type: string
- matchAny:
- description: MatchAny specifies a list of matchers one of which must match.
- items:
- description: MatchAnyElem specifies one sub-matcher of MatchAny.
- properties:
- matchFeatures:
- description: MatchFeatures specifies a set of matcher terms all of which must match.
- items:
- description: FeatureMatcherTerm defines requirements against one feature set. All requirements (specified as MatchExpressions) are evaluated against each element in the feature set.
- properties:
- feature:
- type: string
- matchExpressions:
- additionalProperties:
- description: "MatchExpression specifies an expression to evaluate against a set of input values. It contains an operator that is applied when matching the input and an array of values that the operator evaluates the input against. \n NB: CreateMatchExpression or MustCreateMatchExpression() should be used for creating new instances. NB: Validate() must be called if Op or Value fields are modified or if a new instance is created from scratch without using the helper functions."
- properties:
- op:
- description: Op is the operator to be applied.
- enum:
- - In
- - NotIn
- - InRegexp
- - Exists
- - DoesNotExist
- - Gt
- - Lt
- - GtLt
- - IsTrue
- - IsFalse
- type: string
- value:
- description: Value is the list of values that the operand evaluates the input against. Value should be empty if the operator is Exists, DoesNotExist, IsTrue or IsFalse. Value should contain exactly one element if the operator is Gt or Lt and exactly two elements if the operator is GtLt. In other cases Value should contain at least one element.
- items:
- type: string
- type: array
- required:
- - op
- type: object
- description: MatchExpressionSet contains a set of MatchExpressions, each of which is evaluated against a set of input values.
- type: object
- required:
- - feature
- - matchExpressions
- type: object
- type: array
- required:
- - matchFeatures
- type: object
- type: array
- matchFeatures:
- description: MatchFeatures specifies a set of matcher terms all of which must match.
- items:
- description: FeatureMatcherTerm defines requirements against one feature set. All requirements (specified as MatchExpressions) are evaluated against each element in the feature set.
- properties:
- feature:
- type: string
- matchExpressions:
- additionalProperties:
- description: "MatchExpression specifies an expression to evaluate against a set of input values. It contains an operator that is applied when matching the input and an array of values that the operator evaluates the input against. \n NB: CreateMatchExpression or MustCreateMatchExpression() should be used for creating new instances. NB: Validate() must be called if Op or Value fields are modified or if a new instance is created from scratch without using the helper functions."
- properties:
- op:
- description: Op is the operator to be applied.
- enum:
- - In
- - NotIn
- - InRegexp
- - Exists
- - DoesNotExist
- - Gt
- - Lt
- - GtLt
- - IsTrue
- - IsFalse
- type: string
- value:
- description: Value is the list of values that the operand evaluates the input against. Value should be empty if the operator is Exists, DoesNotExist, IsTrue or IsFalse. Value should contain exactly one element if the operator is Gt or Lt and exactly two elements if the operator is GtLt. In other cases Value should contain at least one element.
- items:
- type: string
- type: array
- required:
- - op
- type: object
- description: MatchExpressionSet contains a set of MatchExpressions, each of which is evaluated against a set of input values.
- type: object
- required:
- - feature
- - matchExpressions
- type: object
- type: array
- name:
- description: Name of the rule.
- type: string
- vars:
- additionalProperties:
- type: string
- description: Vars is the variables to store if the rule matches. Variables do not directly inflict any changes in the node object. However, they can be referenced from other rules enabling more complex rule hierarchies, without exposing intermediary output values as labels.
- type: object
- varsTemplate:
- description: VarsTemplate specifies a template to expand for dynamically generating multiple variables. Data (after template expansion) must be keys with an optional value (<key>[=<value>]) separated by newlines.
- type: string
- required:
- - name
- type: object
- type: array
- required:
- - rules
- type: object
- required:
- - spec
- type: object
- served: true
- storage: true
-status:
- acceptedNames:
- kind: ""
- plural: ""
- conditions: []
- storedVersions: []
----
# Source: node-feature-discovery/templates/clusterrole.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
@@ -266,6 +118,7 @@
- apiGroups:
- nfd.k8s-sigs.io
resources:
+ - nodefeatures
- nodefeaturerules
verbs:
- get
@@ -290,11 +143,67 @@
name: node-feature-discovery
namespace: default
---
+# Source: node-feature-discovery/templates/clusterrolebinding.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+ name: node-feature-discovery-topology-updater
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: node-feature-discovery-topology-updater
+subjects:
+ - kind: ServiceAccount
+ name: default
+ namespace: default
+---
+# Source: node-feature-discovery/templates/role.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: Role
+metadata:
+ name: node-feature-discovery-worker
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+rules:
+ - apiGroups:
+ - nfd.k8s-sigs.io
+ resources:
+ - nodefeatures
+ verbs:
+ - create
+ - get
+ - update
+---
+# Source: node-feature-discovery/templates/rolebinding.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: RoleBinding
+metadata:
+ name: node-feature-discovery-worker
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: Role
+ name: node-feature-discovery-worker
+subjects:
+ - kind: ServiceAccount
+ name: node-feature-discovery-worker
+ namespace: default
+---
# Source: node-feature-discovery/templates/service.yaml
apiVersion: v1
kind: Service
metadata:
name: node-feature-discovery-master
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
@@ -310,12 +219,14 @@
selector:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
+ role: master
---
# Source: node-feature-discovery/templates/worker.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: node-feature-discovery-worker
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
@@ -349,7 +260,7 @@
- ALL
readOnlyRootFilesystem: true
runAsNonRoot: true
- image: "k8s.gcr.io/nfd/node-feature-discovery:v0.11.2"
+ image: "registry.k8s.io/nfd/node-feature-discovery:v0.12.2"
imagePullPolicy: IfNotPresent
env:
- name: NODE_NAME
@@ -425,6 +336,7 @@
kind: Deployment
metadata:
name: node-feature-discovery-master
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
@@ -457,7 +369,7 @@
- ALL
readOnlyRootFilesystem: true
runAsNonRoot: true
- image: "k8s.gcr.io/nfd/node-feature-discovery:v0.11.2"
+ image: "registry.k8s.io/nfd/node-feature-discovery:v0.12.2"
imagePullPolicy: IfNotPresent
livenessProbe:
exec:
@@ -486,7 +398,7 @@
- "nfd-master"
resources: {}
args:
- ## By default, disable NodeFeatureRules controller for other than the default instances
+ ## By default, disable crd controller for other than the default instances
- "-featurerules-controller=true"
affinity:
nodeAffinity: |
9562045
to
b59e925
Compare
Path: @@ -3,29 +3,57 @@
kind: ServiceAccount
metadata:
name: node-feature-discovery
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
app.kubernetes.io/managed-by: Helm
---
-{}
-
# Source: node-feature-discovery/templates/serviceaccount.yaml
----
apiVersion: v1
kind: ServiceAccount
metadata:
name: node-feature-discovery-worker
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+---
+# Source: node-feature-discovery/templates/nfd-master-conf.yaml
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: node-feature-discovery-master-conf
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
app.kubernetes.io/managed-by: Helm
+data:
+ nfd-master.conf: |-
+ null
+---
+# Source: node-feature-discovery/templates/nfd-topologyupdater-conf.yaml
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: node-feature-discovery-topology-updater-conf
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+data:
+ nfd-topology-updater.conf: |-
+ null
---
# Source: node-feature-discovery/templates/nfd-worker-conf.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: node-feature-discovery-worker-conf
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
@@ -79,171 +107,6 @@
- vendor
- device
---
-# Source: node-feature-discovery/templates/nodefeaturerule-crd.yaml
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.7.0
- creationTimestamp: null
- name: nodefeaturerules.nfd.k8s-sigs.io
-spec:
- group: nfd.k8s-sigs.io
- names:
- kind: NodeFeatureRule
- listKind: NodeFeatureRuleList
- plural: nodefeaturerules
- singular: nodefeaturerule
- scope: Cluster
- versions:
- - name: v1alpha1
- schema:
- openAPIV3Schema:
- description: NodeFeatureRule resource specifies a configuration for feature-based customization of node objects, such as node labeling.
- properties:
- apiVersion:
- description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
- type: string
- kind:
- description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
- type: string
- metadata:
- type: object
- spec:
- description: NodeFeatureRuleSpec describes a NodeFeatureRule.
- properties:
- rules:
- description: Rules is a list of node customization rules.
- items:
- description: Rule defines a rule for node customization such as labeling.
- properties:
- labels:
- additionalProperties:
- type: string
- description: Labels to create if the rule matches.
- type: object
- labelsTemplate:
- description: LabelsTemplate specifies a template to expand for dynamically generating multiple labels. Data (after template expansion) must be keys with an optional value (<key>[=<value>]) separated by newlines.
- type: string
- matchAny:
- description: MatchAny specifies a list of matchers one of which must match.
- items:
- description: MatchAnyElem specifies one sub-matcher of MatchAny.
- properties:
- matchFeatures:
- description: MatchFeatures specifies a set of matcher terms all of which must match.
- items:
- description: FeatureMatcherTerm defines requirements against one feature set. All requirements (specified as MatchExpressions) are evaluated against each element in the feature set.
- properties:
- feature:
- type: string
- matchExpressions:
- additionalProperties:
- description: "MatchExpression specifies an expression to evaluate against a set of input values. It contains an operator that is applied when matching the input and an array of values that the operator evaluates the input against. \n NB: CreateMatchExpression or MustCreateMatchExpression() should be used for creating new instances. NB: Validate() must be called if Op or Value fields are modified or if a new instance is created from scratch without using the helper functions."
- properties:
- op:
- description: Op is the operator to be applied.
- enum:
- - In
- - NotIn
- - InRegexp
- - Exists
- - DoesNotExist
- - Gt
- - Lt
- - GtLt
- - IsTrue
- - IsFalse
- type: string
- value:
- description: Value is the list of values that the operand evaluates the input against. Value should be empty if the operator is Exists, DoesNotExist, IsTrue or IsFalse. Value should contain exactly one element if the operator is Gt or Lt and exactly two elements if the operator is GtLt. In other cases Value should contain at least one element.
- items:
- type: string
- type: array
- required:
- - op
- type: object
- description: MatchExpressionSet contains a set of MatchExpressions, each of which is evaluated against a set of input values.
- type: object
- required:
- - feature
- - matchExpressions
- type: object
- type: array
- required:
- - matchFeatures
- type: object
- type: array
- matchFeatures:
- description: MatchFeatures specifies a set of matcher terms all of which must match.
- items:
- description: FeatureMatcherTerm defines requirements against one feature set. All requirements (specified as MatchExpressions) are evaluated against each element in the feature set.
- properties:
- feature:
- type: string
- matchExpressions:
- additionalProperties:
- description: "MatchExpression specifies an expression to evaluate against a set of input values. It contains an operator that is applied when matching the input and an array of values that the operator evaluates the input against. \n NB: CreateMatchExpression or MustCreateMatchExpression() should be used for creating new instances. NB: Validate() must be called if Op or Value fields are modified or if a new instance is created from scratch without using the helper functions."
- properties:
- op:
- description: Op is the operator to be applied.
- enum:
- - In
- - NotIn
- - InRegexp
- - Exists
- - DoesNotExist
- - Gt
- - Lt
- - GtLt
- - IsTrue
- - IsFalse
- type: string
- value:
- description: Value is the list of values that the operand evaluates the input against. Value should be empty if the operator is Exists, DoesNotExist, IsTrue or IsFalse. Value should contain exactly one element if the operator is Gt or Lt and exactly two elements if the operator is GtLt. In other cases Value should contain at least one element.
- items:
- type: string
- type: array
- required:
- - op
- type: object
- description: MatchExpressionSet contains a set of MatchExpressions, each of which is evaluated against a set of input values.
- type: object
- required:
- - feature
- - matchExpressions
- type: object
- type: array
- name:
- description: Name of the rule.
- type: string
- vars:
- additionalProperties:
- type: string
- description: Vars is the variables to store if the rule matches. Variables do not directly inflict any changes in the node object. However, they can be referenced from other rules enabling more complex rule hierarchies, without exposing intermediary output values as labels.
- type: object
- varsTemplate:
- description: VarsTemplate specifies a template to expand for dynamically generating multiple variables. Data (after template expansion) must be keys with an optional value (<key>[=<value>]) separated by newlines.
- type: string
- required:
- - name
- type: object
- type: array
- required:
- - rules
- type: object
- required:
- - spec
- type: object
- served: true
- storage: true
-status:
- acceptedNames:
- kind: ""
- plural: ""
- conditions: []
- storedVersions: []
----
# Source: node-feature-discovery/templates/clusterrole.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
@@ -258,6 +121,7 @@
- ""
resources:
- nodes
+ - nodes/status
verbs:
- get
- patch
@@ -266,6 +130,7 @@
- apiGroups:
- nfd.k8s-sigs.io
resources:
+ - nodefeatures
- nodefeaturerules
verbs:
- get
@@ -290,11 +155,67 @@
name: node-feature-discovery
namespace: default
---
+# Source: node-feature-discovery/templates/clusterrolebinding.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+ name: node-feature-discovery-topology-updater
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: node-feature-discovery-topology-updater
+subjects:
+ - kind: ServiceAccount
+ name: default
+ namespace: default
+---
+# Source: node-feature-discovery/templates/role.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: Role
+metadata:
+ name: node-feature-discovery-worker
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+rules:
+ - apiGroups:
+ - nfd.k8s-sigs.io
+ resources:
+ - nodefeatures
+ verbs:
+ - create
+ - get
+ - update
+---
+# Source: node-feature-discovery/templates/rolebinding.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: RoleBinding
+metadata:
+ name: node-feature-discovery-worker
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: Role
+ name: node-feature-discovery-worker
+subjects:
+ - kind: ServiceAccount
+ name: node-feature-discovery-worker
+ namespace: default
+---
# Source: node-feature-discovery/templates/service.yaml
apiVersion: v1
kind: Service
metadata:
name: node-feature-discovery-master
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
@@ -310,12 +231,14 @@
selector:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
+ role: master
---
# Source: node-feature-discovery/templates/worker.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: node-feature-discovery-worker
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
@@ -349,7 +272,7 @@
- ALL
readOnlyRootFilesystem: true
runAsNonRoot: true
- image: "k8s.gcr.io/nfd/node-feature-discovery:v0.11.2"
+ image: "registry.k8s.io/nfd/node-feature-discovery:v0.13.1"
imagePullPolicy: IfNotPresent
env:
- name: NODE_NAME
@@ -366,7 +289,7 @@
command:
- "nfd-worker"
args:
- - "--server=node-feature-discovery-master:8080"
+ - "-server=node-feature-discovery-master:8080"
volumeMounts:
- name: host-boot
mountPath: "/host-boot"
@@ -380,6 +303,9 @@
- name: host-usr-lib
mountPath: "/host-usr/lib"
readOnly: true
+ - name: host-lib
+ mountPath: "/host-lib"
+ readOnly: true
- name: source-d
mountPath: "/etc/kubernetes/node-feature-discovery/source.d/"
readOnly: true
@@ -402,6 +328,9 @@
- name: host-usr-lib
hostPath:
path: "/usr/lib"
+ - name: host-lib
+ hostPath:
+ path: "/lib"
- name: source-d
hostPath:
path: "/etc/kubernetes/node-feature-discovery/source.d/"
@@ -425,6 +354,7 @@
kind: Deployment
metadata:
name: node-feature-discovery-master
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
@@ -447,6 +377,7 @@
annotations: {}
spec:
serviceAccountName: node-feature-discovery
+ enableServiceLinks: false
securityContext: {}
containers:
- name: master
@@ -457,7 +388,7 @@
- ALL
readOnlyRootFilesystem: true
runAsNonRoot: true
- image: "k8s.gcr.io/nfd/node-feature-discovery:v0.11.2"
+ image: "registry.k8s.io/nfd/node-feature-discovery:v0.13.1"
imagePullPolicy: IfNotPresent
livenessProbe:
exec:
@@ -486,7 +417,8 @@
- "nfd-master"
resources: {}
args:
- ## By default, disable NodeFeatureRules controller for other than the default instances
+ - "-port=8080"
+ ## By default, disable crd controller for other than the default instances
- "-featurerules-controller=true"
affinity:
nodeAffinity:
@@ -511,3 +443,15 @@
key: node.kubernetes.io/unreachable
operator: Exists
tolerationSeconds: 300
+---
+{}
+
+# Source: node-feature-discovery/templates/clusterrole.yaml
+---
+{}
+---
+{}
+
+# Source: node-feature-discovery/templates/serviceaccount.yaml
+---
+{} |
b59e925
to
8c7a87b
Compare
Path: @@ -3,29 +3,57 @@
kind: ServiceAccount
metadata:
name: node-feature-discovery
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
app.kubernetes.io/managed-by: Helm
---
-{}
-
# Source: node-feature-discovery/templates/serviceaccount.yaml
----
apiVersion: v1
kind: ServiceAccount
metadata:
name: node-feature-discovery-worker
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+---
+# Source: node-feature-discovery/templates/nfd-master-conf.yaml
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: node-feature-discovery-master-conf
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+data:
+ nfd-master.conf: |-
+ null
+---
+# Source: node-feature-discovery/templates/nfd-topologyupdater-conf.yaml
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: node-feature-discovery-topology-updater-conf
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
app.kubernetes.io/managed-by: Helm
+data:
+ nfd-topology-updater.conf: |-
+ null
---
# Source: node-feature-discovery/templates/nfd-worker-conf.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: node-feature-discovery-worker-conf
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
@@ -79,171 +107,6 @@
- vendor
- device
---
-# Source: node-feature-discovery/templates/nodefeaturerule-crd.yaml
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.7.0
- creationTimestamp: null
- name: nodefeaturerules.nfd.k8s-sigs.io
-spec:
- group: nfd.k8s-sigs.io
- names:
- kind: NodeFeatureRule
- listKind: NodeFeatureRuleList
- plural: nodefeaturerules
- singular: nodefeaturerule
- scope: Cluster
- versions:
- - name: v1alpha1
- schema:
- openAPIV3Schema:
- description: NodeFeatureRule resource specifies a configuration for feature-based customization of node objects, such as node labeling.
- properties:
- apiVersion:
- description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
- type: string
- kind:
- description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
- type: string
- metadata:
- type: object
- spec:
- description: NodeFeatureRuleSpec describes a NodeFeatureRule.
- properties:
- rules:
- description: Rules is a list of node customization rules.
- items:
- description: Rule defines a rule for node customization such as labeling.
- properties:
- labels:
- additionalProperties:
- type: string
- description: Labels to create if the rule matches.
- type: object
- labelsTemplate:
- description: LabelsTemplate specifies a template to expand for dynamically generating multiple labels. Data (after template expansion) must be keys with an optional value (<key>[=<value>]) separated by newlines.
- type: string
- matchAny:
- description: MatchAny specifies a list of matchers one of which must match.
- items:
- description: MatchAnyElem specifies one sub-matcher of MatchAny.
- properties:
- matchFeatures:
- description: MatchFeatures specifies a set of matcher terms all of which must match.
- items:
- description: FeatureMatcherTerm defines requirements against one feature set. All requirements (specified as MatchExpressions) are evaluated against each element in the feature set.
- properties:
- feature:
- type: string
- matchExpressions:
- additionalProperties:
- description: "MatchExpression specifies an expression to evaluate against a set of input values. It contains an operator that is applied when matching the input and an array of values that the operator evaluates the input against. \n NB: CreateMatchExpression or MustCreateMatchExpression() should be used for creating new instances. NB: Validate() must be called if Op or Value fields are modified or if a new instance is created from scratch without using the helper functions."
- properties:
- op:
- description: Op is the operator to be applied.
- enum:
- - In
- - NotIn
- - InRegexp
- - Exists
- - DoesNotExist
- - Gt
- - Lt
- - GtLt
- - IsTrue
- - IsFalse
- type: string
- value:
- description: Value is the list of values that the operand evaluates the input against. Value should be empty if the operator is Exists, DoesNotExist, IsTrue or IsFalse. Value should contain exactly one element if the operator is Gt or Lt and exactly two elements if the operator is GtLt. In other cases Value should contain at least one element.
- items:
- type: string
- type: array
- required:
- - op
- type: object
- description: MatchExpressionSet contains a set of MatchExpressions, each of which is evaluated against a set of input values.
- type: object
- required:
- - feature
- - matchExpressions
- type: object
- type: array
- required:
- - matchFeatures
- type: object
- type: array
- matchFeatures:
- description: MatchFeatures specifies a set of matcher terms all of which must match.
- items:
- description: FeatureMatcherTerm defines requirements against one feature set. All requirements (specified as MatchExpressions) are evaluated against each element in the feature set.
- properties:
- feature:
- type: string
- matchExpressions:
- additionalProperties:
- description: "MatchExpression specifies an expression to evaluate against a set of input values. It contains an operator that is applied when matching the input and an array of values that the operator evaluates the input against. \n NB: CreateMatchExpression or MustCreateMatchExpression() should be used for creating new instances. NB: Validate() must be called if Op or Value fields are modified or if a new instance is created from scratch without using the helper functions."
- properties:
- op:
- description: Op is the operator to be applied.
- enum:
- - In
- - NotIn
- - InRegexp
- - Exists
- - DoesNotExist
- - Gt
- - Lt
- - GtLt
- - IsTrue
- - IsFalse
- type: string
- value:
- description: Value is the list of values that the operand evaluates the input against. Value should be empty if the operator is Exists, DoesNotExist, IsTrue or IsFalse. Value should contain exactly one element if the operator is Gt or Lt and exactly two elements if the operator is GtLt. In other cases Value should contain at least one element.
- items:
- type: string
- type: array
- required:
- - op
- type: object
- description: MatchExpressionSet contains a set of MatchExpressions, each of which is evaluated against a set of input values.
- type: object
- required:
- - feature
- - matchExpressions
- type: object
- type: array
- name:
- description: Name of the rule.
- type: string
- vars:
- additionalProperties:
- type: string
- description: Vars is the variables to store if the rule matches. Variables do not directly inflict any changes in the node object. However, they can be referenced from other rules enabling more complex rule hierarchies, without exposing intermediary output values as labels.
- type: object
- varsTemplate:
- description: VarsTemplate specifies a template to expand for dynamically generating multiple variables. Data (after template expansion) must be keys with an optional value (<key>[=<value>]) separated by newlines.
- type: string
- required:
- - name
- type: object
- type: array
- required:
- - rules
- type: object
- required:
- - spec
- type: object
- served: true
- storage: true
-status:
- acceptedNames:
- kind: ""
- plural: ""
- conditions: []
- storedVersions: []
----
# Source: node-feature-discovery/templates/clusterrole.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
@@ -258,6 +121,7 @@
- ""
resources:
- nodes
+ - nodes/status
verbs:
- get
- patch
@@ -266,6 +130,7 @@
- apiGroups:
- nfd.k8s-sigs.io
resources:
+ - nodefeatures
- nodefeaturerules
verbs:
- get
@@ -290,11 +155,49 @@
name: node-feature-discovery
namespace: default
---
+# Source: node-feature-discovery/templates/role.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: Role
+metadata:
+ name: node-feature-discovery-worker
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+rules:
+ - apiGroups:
+ - nfd.k8s-sigs.io
+ resources:
+ - nodefeatures
+ verbs:
+ - create
+ - get
+ - update
+---
+# Source: node-feature-discovery/templates/rolebinding.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: RoleBinding
+metadata:
+ name: node-feature-discovery-worker
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: Role
+ name: node-feature-discovery-worker
+subjects:
+ - kind: ServiceAccount
+ name: node-feature-discovery-worker
+ namespace: default
+---
# Source: node-feature-discovery/templates/service.yaml
apiVersion: v1
kind: Service
metadata:
name: node-feature-discovery-master
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
@@ -310,12 +213,14 @@
selector:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
+ role: master
---
# Source: node-feature-discovery/templates/worker.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: node-feature-discovery-worker
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
@@ -349,7 +254,7 @@
- ALL
readOnlyRootFilesystem: true
runAsNonRoot: true
- image: "k8s.gcr.io/nfd/node-feature-discovery:v0.11.2"
+ image: "registry.k8s.io/nfd/node-feature-discovery:v0.13.2"
imagePullPolicy: IfNotPresent
env:
- name: NODE_NAME
@@ -366,7 +271,7 @@
command:
- "nfd-worker"
args:
- - "--server=node-feature-discovery-master:8080"
+ - "-server=node-feature-discovery-master:8080"
volumeMounts:
- name: host-boot
mountPath: "/host-boot"
@@ -380,6 +285,9 @@
- name: host-usr-lib
mountPath: "/host-usr/lib"
readOnly: true
+ - name: host-lib
+ mountPath: "/host-lib"
+ readOnly: true
- name: source-d
mountPath: "/etc/kubernetes/node-feature-discovery/source.d/"
readOnly: true
@@ -402,6 +310,9 @@
- name: host-usr-lib
hostPath:
path: "/usr/lib"
+ - name: host-lib
+ hostPath:
+ path: "/lib"
- name: source-d
hostPath:
path: "/etc/kubernetes/node-feature-discovery/source.d/"
@@ -425,6 +336,7 @@
kind: Deployment
metadata:
name: node-feature-discovery-master
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
@@ -447,6 +359,7 @@
annotations: {}
spec:
serviceAccountName: node-feature-discovery
+ enableServiceLinks: false
securityContext: {}
containers:
- name: master
@@ -457,7 +370,7 @@
- ALL
readOnlyRootFilesystem: true
runAsNonRoot: true
- image: "k8s.gcr.io/nfd/node-feature-discovery:v0.11.2"
+ image: "registry.k8s.io/nfd/node-feature-discovery:v0.13.2"
imagePullPolicy: IfNotPresent
livenessProbe:
exec:
@@ -486,8 +399,20 @@
- "nfd-master"
resources: {}
args:
- ## By default, disable NodeFeatureRules controller for other than the default instances
+ - "-port=8080"
+ ## By default, disable crd controller for other than the default instances
- "-featurerules-controller=true"
+ volumeMounts:
+ - name: nfd-master-conf
+ mountPath: "/etc/kubernetes/node-feature-discovery"
+ readOnly: true
+ volumes:
+ - name: nfd-master-conf
+ configMap:
+ name: node-feature-discovery-master-conf
+ items:
+ - key: nfd-master.conf
+ path: nfd-master.conf
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
@@ -511,3 +436,21 @@
key: node.kubernetes.io/unreachable
operator: Exists
tolerationSeconds: 300
+---
+{}
+
+# Source: node-feature-discovery/templates/clusterrole.yaml
+---
+{}
+---
+{}
+
+# Source: node-feature-discovery/templates/clusterrolebinding.yaml
+---
+{}
+---
+{}
+
+# Source: node-feature-discovery/templates/serviceaccount.yaml
+---
+{} |
8c7a87b
to
4e06daa
Compare
Path: @@ -3,29 +3,57 @@
kind: ServiceAccount
metadata:
name: node-feature-discovery
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
app.kubernetes.io/managed-by: Helm
---
-{}
-
# Source: node-feature-discovery/templates/serviceaccount.yaml
----
apiVersion: v1
kind: ServiceAccount
metadata:
name: node-feature-discovery-worker
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+---
+# Source: node-feature-discovery/templates/nfd-master-conf.yaml
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: node-feature-discovery-master-conf
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+data:
+ nfd-master.conf: |-
+ null
+---
+# Source: node-feature-discovery/templates/nfd-topologyupdater-conf.yaml
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: node-feature-discovery-topology-updater-conf
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
app.kubernetes.io/managed-by: Helm
+data:
+ nfd-topology-updater.conf: |-
+ null
---
# Source: node-feature-discovery/templates/nfd-worker-conf.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: node-feature-discovery-worker-conf
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
@@ -79,171 +107,6 @@
- vendor
- device
---
-# Source: node-feature-discovery/templates/nodefeaturerule-crd.yaml
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.7.0
- creationTimestamp: null
- name: nodefeaturerules.nfd.k8s-sigs.io
-spec:
- group: nfd.k8s-sigs.io
- names:
- kind: NodeFeatureRule
- listKind: NodeFeatureRuleList
- plural: nodefeaturerules
- singular: nodefeaturerule
- scope: Cluster
- versions:
- - name: v1alpha1
- schema:
- openAPIV3Schema:
- description: NodeFeatureRule resource specifies a configuration for feature-based customization of node objects, such as node labeling.
- properties:
- apiVersion:
- description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
- type: string
- kind:
- description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
- type: string
- metadata:
- type: object
- spec:
- description: NodeFeatureRuleSpec describes a NodeFeatureRule.
- properties:
- rules:
- description: Rules is a list of node customization rules.
- items:
- description: Rule defines a rule for node customization such as labeling.
- properties:
- labels:
- additionalProperties:
- type: string
- description: Labels to create if the rule matches.
- type: object
- labelsTemplate:
- description: LabelsTemplate specifies a template to expand for dynamically generating multiple labels. Data (after template expansion) must be keys with an optional value (<key>[=<value>]) separated by newlines.
- type: string
- matchAny:
- description: MatchAny specifies a list of matchers one of which must match.
- items:
- description: MatchAnyElem specifies one sub-matcher of MatchAny.
- properties:
- matchFeatures:
- description: MatchFeatures specifies a set of matcher terms all of which must match.
- items:
- description: FeatureMatcherTerm defines requirements against one feature set. All requirements (specified as MatchExpressions) are evaluated against each element in the feature set.
- properties:
- feature:
- type: string
- matchExpressions:
- additionalProperties:
- description: "MatchExpression specifies an expression to evaluate against a set of input values. It contains an operator that is applied when matching the input and an array of values that the operator evaluates the input against. \n NB: CreateMatchExpression or MustCreateMatchExpression() should be used for creating new instances. NB: Validate() must be called if Op or Value fields are modified or if a new instance is created from scratch without using the helper functions."
- properties:
- op:
- description: Op is the operator to be applied.
- enum:
- - In
- - NotIn
- - InRegexp
- - Exists
- - DoesNotExist
- - Gt
- - Lt
- - GtLt
- - IsTrue
- - IsFalse
- type: string
- value:
- description: Value is the list of values that the operand evaluates the input against. Value should be empty if the operator is Exists, DoesNotExist, IsTrue or IsFalse. Value should contain exactly one element if the operator is Gt or Lt and exactly two elements if the operator is GtLt. In other cases Value should contain at least one element.
- items:
- type: string
- type: array
- required:
- - op
- type: object
- description: MatchExpressionSet contains a set of MatchExpressions, each of which is evaluated against a set of input values.
- type: object
- required:
- - feature
- - matchExpressions
- type: object
- type: array
- required:
- - matchFeatures
- type: object
- type: array
- matchFeatures:
- description: MatchFeatures specifies a set of matcher terms all of which must match.
- items:
- description: FeatureMatcherTerm defines requirements against one feature set. All requirements (specified as MatchExpressions) are evaluated against each element in the feature set.
- properties:
- feature:
- type: string
- matchExpressions:
- additionalProperties:
- description: "MatchExpression specifies an expression to evaluate against a set of input values. It contains an operator that is applied when matching the input and an array of values that the operator evaluates the input against. \n NB: CreateMatchExpression or MustCreateMatchExpression() should be used for creating new instances. NB: Validate() must be called if Op or Value fields are modified or if a new instance is created from scratch without using the helper functions."
- properties:
- op:
- description: Op is the operator to be applied.
- enum:
- - In
- - NotIn
- - InRegexp
- - Exists
- - DoesNotExist
- - Gt
- - Lt
- - GtLt
- - IsTrue
- - IsFalse
- type: string
- value:
- description: Value is the list of values that the operand evaluates the input against. Value should be empty if the operator is Exists, DoesNotExist, IsTrue or IsFalse. Value should contain exactly one element if the operator is Gt or Lt and exactly two elements if the operator is GtLt. In other cases Value should contain at least one element.
- items:
- type: string
- type: array
- required:
- - op
- type: object
- description: MatchExpressionSet contains a set of MatchExpressions, each of which is evaluated against a set of input values.
- type: object
- required:
- - feature
- - matchExpressions
- type: object
- type: array
- name:
- description: Name of the rule.
- type: string
- vars:
- additionalProperties:
- type: string
- description: Vars is the variables to store if the rule matches. Variables do not directly inflict any changes in the node object. However, they can be referenced from other rules enabling more complex rule hierarchies, without exposing intermediary output values as labels.
- type: object
- varsTemplate:
- description: VarsTemplate specifies a template to expand for dynamically generating multiple variables. Data (after template expansion) must be keys with an optional value (<key>[=<value>]) separated by newlines.
- type: string
- required:
- - name
- type: object
- type: array
- required:
- - rules
- type: object
- required:
- - spec
- type: object
- served: true
- storage: true
-status:
- acceptedNames:
- kind: ""
- plural: ""
- conditions: []
- storedVersions: []
----
# Source: node-feature-discovery/templates/clusterrole.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
@@ -258,6 +121,7 @@
- ""
resources:
- nodes
+ - nodes/status
verbs:
- get
- patch
@@ -266,6 +130,7 @@
- apiGroups:
- nfd.k8s-sigs.io
resources:
+ - nodefeatures
- nodefeaturerules
verbs:
- get
@@ -290,11 +155,49 @@
name: node-feature-discovery
namespace: default
---
+# Source: node-feature-discovery/templates/role.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: Role
+metadata:
+ name: node-feature-discovery-worker
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+rules:
+ - apiGroups:
+ - nfd.k8s-sigs.io
+ resources:
+ - nodefeatures
+ verbs:
+ - create
+ - get
+ - update
+---
+# Source: node-feature-discovery/templates/rolebinding.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: RoleBinding
+metadata:
+ name: node-feature-discovery-worker
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: Role
+ name: node-feature-discovery-worker
+subjects:
+ - kind: ServiceAccount
+ name: node-feature-discovery-worker
+ namespace: default
+---
# Source: node-feature-discovery/templates/service.yaml
apiVersion: v1
kind: Service
metadata:
name: node-feature-discovery-master
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
@@ -310,12 +213,14 @@
selector:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
+ role: master
---
# Source: node-feature-discovery/templates/worker.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: node-feature-discovery-worker
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
@@ -349,7 +254,7 @@
- ALL
readOnlyRootFilesystem: true
runAsNonRoot: true
- image: "k8s.gcr.io/nfd/node-feature-discovery:v0.11.2"
+ image: "registry.k8s.io/nfd/node-feature-discovery:v0.13.3"
imagePullPolicy: IfNotPresent
env:
- name: NODE_NAME
@@ -366,7 +271,7 @@
command:
- "nfd-worker"
args:
- - "--server=node-feature-discovery-master:8080"
+ - "-server=node-feature-discovery-master:8080"
volumeMounts:
- name: host-boot
mountPath: "/host-boot"
@@ -380,6 +285,9 @@
- name: host-usr-lib
mountPath: "/host-usr/lib"
readOnly: true
+ - name: host-lib
+ mountPath: "/host-lib"
+ readOnly: true
- name: source-d
mountPath: "/etc/kubernetes/node-feature-discovery/source.d/"
readOnly: true
@@ -402,6 +310,9 @@
- name: host-usr-lib
hostPath:
path: "/usr/lib"
+ - name: host-lib
+ hostPath:
+ path: "/lib"
- name: source-d
hostPath:
path: "/etc/kubernetes/node-feature-discovery/source.d/"
@@ -425,6 +336,7 @@
kind: Deployment
metadata:
name: node-feature-discovery-master
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
@@ -447,6 +359,7 @@
annotations: {}
spec:
serviceAccountName: node-feature-discovery
+ enableServiceLinks: false
securityContext: {}
containers:
- name: master
@@ -457,7 +370,7 @@
- ALL
readOnlyRootFilesystem: true
runAsNonRoot: true
- image: "k8s.gcr.io/nfd/node-feature-discovery:v0.11.2"
+ image: "registry.k8s.io/nfd/node-feature-discovery:v0.13.3"
imagePullPolicy: IfNotPresent
livenessProbe:
exec:
@@ -486,8 +399,20 @@
- "nfd-master"
resources: {}
args:
- ## By default, disable NodeFeatureRules controller for other than the default instances
+ - "-port=8080"
+ ## By default, disable crd controller for other than the default instances
- "-featurerules-controller=true"
+ volumeMounts:
+ - name: nfd-master-conf
+ mountPath: "/etc/kubernetes/node-feature-discovery"
+ readOnly: true
+ volumes:
+ - name: nfd-master-conf
+ configMap:
+ name: node-feature-discovery-master-conf
+ items:
+ - key: nfd-master.conf
+ path: nfd-master.conf
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
@@ -511,3 +436,21 @@
key: node.kubernetes.io/unreachable
operator: Exists
tolerationSeconds: 300
+---
+{}
+
+# Source: node-feature-discovery/templates/clusterrole.yaml
+---
+{}
+---
+{}
+
+# Source: node-feature-discovery/templates/clusterrolebinding.yaml
+---
+{}
+---
+{}
+
+# Source: node-feature-discovery/templates/serviceaccount.yaml
+---
+{} |
4e06daa
to
22aef4a
Compare
Path: @@ -3,29 +3,57 @@
kind: ServiceAccount
metadata:
name: node-feature-discovery
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
app.kubernetes.io/managed-by: Helm
---
-{}
-
# Source: node-feature-discovery/templates/serviceaccount.yaml
----
apiVersion: v1
kind: ServiceAccount
metadata:
name: node-feature-discovery-worker
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+---
+# Source: node-feature-discovery/templates/nfd-master-conf.yaml
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: node-feature-discovery-master-conf
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+data:
+ nfd-master.conf: |-
+ null
+---
+# Source: node-feature-discovery/templates/nfd-topologyupdater-conf.yaml
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: node-feature-discovery-topology-updater-conf
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
app.kubernetes.io/managed-by: Helm
+data:
+ nfd-topology-updater.conf: |-
+ null
---
# Source: node-feature-discovery/templates/nfd-worker-conf.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: node-feature-discovery-worker-conf
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
@@ -79,171 +107,6 @@
- vendor
- device
---
-# Source: node-feature-discovery/templates/nodefeaturerule-crd.yaml
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.7.0
- creationTimestamp: null
- name: nodefeaturerules.nfd.k8s-sigs.io
-spec:
- group: nfd.k8s-sigs.io
- names:
- kind: NodeFeatureRule
- listKind: NodeFeatureRuleList
- plural: nodefeaturerules
- singular: nodefeaturerule
- scope: Cluster
- versions:
- - name: v1alpha1
- schema:
- openAPIV3Schema:
- description: NodeFeatureRule resource specifies a configuration for feature-based customization of node objects, such as node labeling.
- properties:
- apiVersion:
- description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
- type: string
- kind:
- description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
- type: string
- metadata:
- type: object
- spec:
- description: NodeFeatureRuleSpec describes a NodeFeatureRule.
- properties:
- rules:
- description: Rules is a list of node customization rules.
- items:
- description: Rule defines a rule for node customization such as labeling.
- properties:
- labels:
- additionalProperties:
- type: string
- description: Labels to create if the rule matches.
- type: object
- labelsTemplate:
- description: LabelsTemplate specifies a template to expand for dynamically generating multiple labels. Data (after template expansion) must be keys with an optional value (<key>[=<value>]) separated by newlines.
- type: string
- matchAny:
- description: MatchAny specifies a list of matchers one of which must match.
- items:
- description: MatchAnyElem specifies one sub-matcher of MatchAny.
- properties:
- matchFeatures:
- description: MatchFeatures specifies a set of matcher terms all of which must match.
- items:
- description: FeatureMatcherTerm defines requirements against one feature set. All requirements (specified as MatchExpressions) are evaluated against each element in the feature set.
- properties:
- feature:
- type: string
- matchExpressions:
- additionalProperties:
- description: "MatchExpression specifies an expression to evaluate against a set of input values. It contains an operator that is applied when matching the input and an array of values that the operator evaluates the input against. \n NB: CreateMatchExpression or MustCreateMatchExpression() should be used for creating new instances. NB: Validate() must be called if Op or Value fields are modified or if a new instance is created from scratch without using the helper functions."
- properties:
- op:
- description: Op is the operator to be applied.
- enum:
- - In
- - NotIn
- - InRegexp
- - Exists
- - DoesNotExist
- - Gt
- - Lt
- - GtLt
- - IsTrue
- - IsFalse
- type: string
- value:
- description: Value is the list of values that the operand evaluates the input against. Value should be empty if the operator is Exists, DoesNotExist, IsTrue or IsFalse. Value should contain exactly one element if the operator is Gt or Lt and exactly two elements if the operator is GtLt. In other cases Value should contain at least one element.
- items:
- type: string
- type: array
- required:
- - op
- type: object
- description: MatchExpressionSet contains a set of MatchExpressions, each of which is evaluated against a set of input values.
- type: object
- required:
- - feature
- - matchExpressions
- type: object
- type: array
- required:
- - matchFeatures
- type: object
- type: array
- matchFeatures:
- description: MatchFeatures specifies a set of matcher terms all of which must match.
- items:
- description: FeatureMatcherTerm defines requirements against one feature set. All requirements (specified as MatchExpressions) are evaluated against each element in the feature set.
- properties:
- feature:
- type: string
- matchExpressions:
- additionalProperties:
- description: "MatchExpression specifies an expression to evaluate against a set of input values. It contains an operator that is applied when matching the input and an array of values that the operator evaluates the input against. \n NB: CreateMatchExpression or MustCreateMatchExpression() should be used for creating new instances. NB: Validate() must be called if Op or Value fields are modified or if a new instance is created from scratch without using the helper functions."
- properties:
- op:
- description: Op is the operator to be applied.
- enum:
- - In
- - NotIn
- - InRegexp
- - Exists
- - DoesNotExist
- - Gt
- - Lt
- - GtLt
- - IsTrue
- - IsFalse
- type: string
- value:
- description: Value is the list of values that the operand evaluates the input against. Value should be empty if the operator is Exists, DoesNotExist, IsTrue or IsFalse. Value should contain exactly one element if the operator is Gt or Lt and exactly two elements if the operator is GtLt. In other cases Value should contain at least one element.
- items:
- type: string
- type: array
- required:
- - op
- type: object
- description: MatchExpressionSet contains a set of MatchExpressions, each of which is evaluated against a set of input values.
- type: object
- required:
- - feature
- - matchExpressions
- type: object
- type: array
- name:
- description: Name of the rule.
- type: string
- vars:
- additionalProperties:
- type: string
- description: Vars is the variables to store if the rule matches. Variables do not directly inflict any changes in the node object. However, they can be referenced from other rules enabling more complex rule hierarchies, without exposing intermediary output values as labels.
- type: object
- varsTemplate:
- description: VarsTemplate specifies a template to expand for dynamically generating multiple variables. Data (after template expansion) must be keys with an optional value (<key>[=<value>]) separated by newlines.
- type: string
- required:
- - name
- type: object
- type: array
- required:
- - rules
- type: object
- required:
- - spec
- type: object
- served: true
- storage: true
-status:
- acceptedNames:
- kind: ""
- plural: ""
- conditions: []
- storedVersions: []
----
# Source: node-feature-discovery/templates/clusterrole.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
@@ -258,6 +121,7 @@
- ""
resources:
- nodes
+ - nodes/status
verbs:
- get
- patch
@@ -266,6 +130,7 @@
- apiGroups:
- nfd.k8s-sigs.io
resources:
+ - nodefeatures
- nodefeaturerules
verbs:
- get
@@ -290,11 +155,49 @@
name: node-feature-discovery
namespace: default
---
+# Source: node-feature-discovery/templates/role.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: Role
+metadata:
+ name: node-feature-discovery-worker
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+rules:
+ - apiGroups:
+ - nfd.k8s-sigs.io
+ resources:
+ - nodefeatures
+ verbs:
+ - create
+ - get
+ - update
+---
+# Source: node-feature-discovery/templates/rolebinding.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: RoleBinding
+metadata:
+ name: node-feature-discovery-worker
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: Role
+ name: node-feature-discovery-worker
+subjects:
+ - kind: ServiceAccount
+ name: node-feature-discovery-worker
+ namespace: default
+---
# Source: node-feature-discovery/templates/service.yaml
apiVersion: v1
kind: Service
metadata:
name: node-feature-discovery-master
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
@@ -310,12 +213,14 @@
selector:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
+ role: master
---
# Source: node-feature-discovery/templates/worker.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: node-feature-discovery-worker
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
@@ -349,7 +254,7 @@
- ALL
readOnlyRootFilesystem: true
runAsNonRoot: true
- image: "k8s.gcr.io/nfd/node-feature-discovery:v0.11.2"
+ image: "registry.k8s.io/nfd/node-feature-discovery:v0.13.4"
imagePullPolicy: IfNotPresent
env:
- name: NODE_NAME
@@ -366,7 +271,7 @@
command:
- "nfd-worker"
args:
- - "--server=node-feature-discovery-master:8080"
+ - "-server=node-feature-discovery-master:8080"
volumeMounts:
- name: host-boot
mountPath: "/host-boot"
@@ -380,6 +285,9 @@
- name: host-usr-lib
mountPath: "/host-usr/lib"
readOnly: true
+ - name: host-lib
+ mountPath: "/host-lib"
+ readOnly: true
- name: source-d
mountPath: "/etc/kubernetes/node-feature-discovery/source.d/"
readOnly: true
@@ -402,6 +310,9 @@
- name: host-usr-lib
hostPath:
path: "/usr/lib"
+ - name: host-lib
+ hostPath:
+ path: "/lib"
- name: source-d
hostPath:
path: "/etc/kubernetes/node-feature-discovery/source.d/"
@@ -425,6 +336,7 @@
kind: Deployment
metadata:
name: node-feature-discovery-master
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
@@ -447,6 +359,7 @@
annotations: {}
spec:
serviceAccountName: node-feature-discovery
+ enableServiceLinks: false
securityContext: {}
containers:
- name: master
@@ -457,7 +370,7 @@
- ALL
readOnlyRootFilesystem: true
runAsNonRoot: true
- image: "k8s.gcr.io/nfd/node-feature-discovery:v0.11.2"
+ image: "registry.k8s.io/nfd/node-feature-discovery:v0.13.4"
imagePullPolicy: IfNotPresent
livenessProbe:
exec:
@@ -486,8 +399,20 @@
- "nfd-master"
resources: {}
args:
- ## By default, disable NodeFeatureRules controller for other than the default instances
+ - "-port=8080"
+ ## By default, disable crd controller for other than the default instances
- "-featurerules-controller=true"
+ volumeMounts:
+ - name: nfd-master-conf
+ mountPath: "/etc/kubernetes/node-feature-discovery"
+ readOnly: true
+ volumes:
+ - name: nfd-master-conf
+ configMap:
+ name: node-feature-discovery-master-conf
+ items:
+ - key: nfd-master.conf
+ path: nfd-master.conf
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
@@ -511,3 +436,21 @@
key: node.kubernetes.io/unreachable
operator: Exists
tolerationSeconds: 300
+---
+{}
+
+# Source: node-feature-discovery/templates/clusterrole.yaml
+---
+{}
+---
+{}
+
+# Source: node-feature-discovery/templates/clusterrolebinding.yaml
+---
+{}
+---
+{}
+
+# Source: node-feature-discovery/templates/serviceaccount.yaml
+---
+{} |
22aef4a
to
77adf30
Compare
Path: @@ -3,29 +3,68 @@
kind: ServiceAccount
metadata:
name: node-feature-discovery
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
app.kubernetes.io/managed-by: Helm
---
-{}
-
# Source: node-feature-discovery/templates/serviceaccount.yaml
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ name: nfd-gc
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
---
+# Source: node-feature-discovery/templates/serviceaccount.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: node-feature-discovery-worker
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+---
+# Source: node-feature-discovery/templates/nfd-master-conf.yaml
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: node-feature-discovery-master-conf
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+data:
+ nfd-master.conf: |-
+ null
+---
+# Source: node-feature-discovery/templates/nfd-topologyupdater-conf.yaml
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: node-feature-discovery-topology-updater-conf
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
app.kubernetes.io/managed-by: Helm
+data:
+ nfd-topology-updater.conf: |-
+ null
---
# Source: node-feature-discovery/templates/nfd-worker-conf.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: node-feature-discovery-worker-conf
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
@@ -79,171 +118,6 @@
- vendor
- device
---
-# Source: node-feature-discovery/templates/nodefeaturerule-crd.yaml
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.7.0
- creationTimestamp: null
- name: nodefeaturerules.nfd.k8s-sigs.io
-spec:
- group: nfd.k8s-sigs.io
- names:
- kind: NodeFeatureRule
- listKind: NodeFeatureRuleList
- plural: nodefeaturerules
- singular: nodefeaturerule
- scope: Cluster
- versions:
- - name: v1alpha1
- schema:
- openAPIV3Schema:
- description: NodeFeatureRule resource specifies a configuration for feature-based customization of node objects, such as node labeling.
- properties:
- apiVersion:
- description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
- type: string
- kind:
- description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
- type: string
- metadata:
- type: object
- spec:
- description: NodeFeatureRuleSpec describes a NodeFeatureRule.
- properties:
- rules:
- description: Rules is a list of node customization rules.
- items:
- description: Rule defines a rule for node customization such as labeling.
- properties:
- labels:
- additionalProperties:
- type: string
- description: Labels to create if the rule matches.
- type: object
- labelsTemplate:
- description: LabelsTemplate specifies a template to expand for dynamically generating multiple labels. Data (after template expansion) must be keys with an optional value (<key>[=<value>]) separated by newlines.
- type: string
- matchAny:
- description: MatchAny specifies a list of matchers one of which must match.
- items:
- description: MatchAnyElem specifies one sub-matcher of MatchAny.
- properties:
- matchFeatures:
- description: MatchFeatures specifies a set of matcher terms all of which must match.
- items:
- description: FeatureMatcherTerm defines requirements against one feature set. All requirements (specified as MatchExpressions) are evaluated against each element in the feature set.
- properties:
- feature:
- type: string
- matchExpressions:
- additionalProperties:
- description: "MatchExpression specifies an expression to evaluate against a set of input values. It contains an operator that is applied when matching the input and an array of values that the operator evaluates the input against. \n NB: CreateMatchExpression or MustCreateMatchExpression() should be used for creating new instances. NB: Validate() must be called if Op or Value fields are modified or if a new instance is created from scratch without using the helper functions."
- properties:
- op:
- description: Op is the operator to be applied.
- enum:
- - In
- - NotIn
- - InRegexp
- - Exists
- - DoesNotExist
- - Gt
- - Lt
- - GtLt
- - IsTrue
- - IsFalse
- type: string
- value:
- description: Value is the list of values that the operand evaluates the input against. Value should be empty if the operator is Exists, DoesNotExist, IsTrue or IsFalse. Value should contain exactly one element if the operator is Gt or Lt and exactly two elements if the operator is GtLt. In other cases Value should contain at least one element.
- items:
- type: string
- type: array
- required:
- - op
- type: object
- description: MatchExpressionSet contains a set of MatchExpressions, each of which is evaluated against a set of input values.
- type: object
- required:
- - feature
- - matchExpressions
- type: object
- type: array
- required:
- - matchFeatures
- type: object
- type: array
- matchFeatures:
- description: MatchFeatures specifies a set of matcher terms all of which must match.
- items:
- description: FeatureMatcherTerm defines requirements against one feature set. All requirements (specified as MatchExpressions) are evaluated against each element in the feature set.
- properties:
- feature:
- type: string
- matchExpressions:
- additionalProperties:
- description: "MatchExpression specifies an expression to evaluate against a set of input values. It contains an operator that is applied when matching the input and an array of values that the operator evaluates the input against. \n NB: CreateMatchExpression or MustCreateMatchExpression() should be used for creating new instances. NB: Validate() must be called if Op or Value fields are modified or if a new instance is created from scratch without using the helper functions."
- properties:
- op:
- description: Op is the operator to be applied.
- enum:
- - In
- - NotIn
- - InRegexp
- - Exists
- - DoesNotExist
- - Gt
- - Lt
- - GtLt
- - IsTrue
- - IsFalse
- type: string
- value:
- description: Value is the list of values that the operand evaluates the input against. Value should be empty if the operator is Exists, DoesNotExist, IsTrue or IsFalse. Value should contain exactly one element if the operator is Gt or Lt and exactly two elements if the operator is GtLt. In other cases Value should contain at least one element.
- items:
- type: string
- type: array
- required:
- - op
- type: object
- description: MatchExpressionSet contains a set of MatchExpressions, each of which is evaluated against a set of input values.
- type: object
- required:
- - feature
- - matchExpressions
- type: object
- type: array
- name:
- description: Name of the rule.
- type: string
- vars:
- additionalProperties:
- type: string
- description: Vars is the variables to store if the rule matches. Variables do not directly inflict any changes in the node object. However, they can be referenced from other rules enabling more complex rule hierarchies, without exposing intermediary output values as labels.
- type: object
- varsTemplate:
- description: VarsTemplate specifies a template to expand for dynamically generating multiple variables. Data (after template expansion) must be keys with an optional value (<key>[=<value>]) separated by newlines.
- type: string
- required:
- - name
- type: object
- type: array
- required:
- - rules
- type: object
- required:
- - spec
- type: object
- served: true
- storage: true
-status:
- acceptedNames:
- kind: ""
- plural: ""
- conditions: []
- storedVersions: []
----
# Source: node-feature-discovery/templates/clusterrole.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
@@ -258,6 +132,7 @@
- ""
resources:
- nodes
+ - nodes/status
verbs:
- get
- patch
@@ -266,11 +141,65 @@
- apiGroups:
- nfd.k8s-sigs.io
resources:
+ - nodefeatures
- nodefeaturerules
verbs:
- get
- list
- watch
+ - apiGroups:
+ - coordination.k8s.io
+ resources:
+ - leases
+ verbs:
+ - create
+ - apiGroups:
+ - coordination.k8s.io
+ resources:
+ - leases
+ resourceNames:
+ - "nfd-master.nfd.kubernetes.io"
+ verbs:
+ - get
+ - update
+---
+# Source: node-feature-discovery/templates/clusterrole.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+ name: node-feature-discovery-gc
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+rules:
+ - apiGroups:
+ - ""
+ resources:
+ - nodes
+ verbs:
+ - list
+ - watch
+ - apiGroups:
+ - ""
+ resources:
+ - nodes/proxy
+ verbs:
+ - get
+ - apiGroups:
+ - topology.node.k8s.io
+ resources:
+ - noderesourcetopologies
+ verbs:
+ - delete
+ - list
+ - apiGroups:
+ - nfd.k8s-sigs.io
+ resources:
+ - nodefeatures
+ verbs:
+ - delete
+ - list
---
# Source: node-feature-discovery/templates/clusterrolebinding.yaml
apiVersion: rbac.authorization.k8s.io/v1
@@ -290,11 +219,67 @@
name: node-feature-discovery
namespace: default
---
+# Source: node-feature-discovery/templates/clusterrolebinding.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+ name: node-feature-discovery-gc
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: node-feature-discovery-gc
+subjects:
+ - kind: ServiceAccount
+ name: nfd-gc
+ namespace: default
+---
+# Source: node-feature-discovery/templates/role.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: Role
+metadata:
+ name: node-feature-discovery-worker
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+rules:
+ - apiGroups:
+ - nfd.k8s-sigs.io
+ resources:
+ - nodefeatures
+ verbs:
+ - create
+ - get
+ - update
+---
+# Source: node-feature-discovery/templates/rolebinding.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: RoleBinding
+metadata:
+ name: node-feature-discovery-worker
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: Role
+ name: node-feature-discovery-worker
+subjects:
+ - kind: ServiceAccount
+ name: node-feature-discovery-worker
+ namespace: default
+---
# Source: node-feature-discovery/templates/service.yaml
apiVersion: v1
kind: Service
metadata:
name: node-feature-discovery-master
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
@@ -310,18 +295,19 @@
selector:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
+ role: master
---
# Source: node-feature-discovery/templates/worker.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: node-feature-discovery-worker
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
app.kubernetes.io/managed-by: Helm
role: worker
- annotations: {}
spec:
selector:
matchLabels:
@@ -349,7 +335,7 @@
- ALL
readOnlyRootFilesystem: true
runAsNonRoot: true
- image: "k8s.gcr.io/nfd/node-feature-discovery:v0.11.2"
+ image: "registry.k8s.io/nfd/node-feature-discovery:v0.14.0"
imagePullPolicy: IfNotPresent
env:
- name: NODE_NAME
@@ -366,7 +352,12 @@
command:
- "nfd-worker"
args:
- - "--server=node-feature-discovery-master:8080"
+ - "-server=node-feature-discovery-master:8080"
+ - "-enable-nodefeature-api"
+ - "-metrics=8081"
+ ports:
+ - name: metrics
+ containerPort: 8081
volumeMounts:
- name: host-boot
mountPath: "/host-boot"
@@ -380,6 +371,9 @@
- name: host-usr-lib
mountPath: "/host-usr/lib"
readOnly: true
+ - name: host-lib
+ mountPath: "/host-lib"
+ readOnly: true
- name: source-d
mountPath: "/etc/kubernetes/node-feature-discovery/source.d/"
readOnly: true
@@ -402,6 +396,9 @@
- name: host-usr-lib
hostPath:
path: "/usr/lib"
+ - name: host-lib
+ hostPath:
+ path: "/lib"
- name: source-d
hostPath:
path: "/etc/kubernetes/node-feature-discovery/source.d/"
@@ -425,12 +422,12 @@
kind: Deployment
metadata:
name: node-feature-discovery-master
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
app.kubernetes.io/managed-by: Helm
role: master
- annotations: {}
spec:
replicas: 1
selector:
@@ -444,9 +441,9 @@
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
role: master
- annotations: {}
spec:
serviceAccountName: node-feature-discovery
+ enableServiceLinks: false
securityContext: {}
containers:
- name: master
@@ -457,7 +454,7 @@
- ALL
readOnlyRootFilesystem: true
runAsNonRoot: true
- image: "k8s.gcr.io/nfd/node-feature-discovery:v0.11.2"
+ image: "registry.k8s.io/nfd/node-feature-discovery:v0.14.0"
imagePullPolicy: IfNotPresent
livenessProbe:
exec:
@@ -477,6 +474,8 @@
ports:
- containerPort: 8080
name: grpc
+ - containerPort: 8081
+ name: metrics
env:
- name: NODE_NAME
valueFrom:
@@ -486,8 +485,22 @@
- "nfd-master"
resources: {}
args:
- ## By default, disable NodeFeatureRules controller for other than the default instances
- - "-featurerules-controller=true"
+ - "-port=8080"
+ - "-enable-nodefeature-api"
+ ## By default, disable crd controller for other than the default instances
+ - "-crd-controller=true"
+ - "-metrics=8081"
+ volumeMounts:
+ - name: nfd-master-conf
+ mountPath: "/etc/kubernetes/node-feature-discovery"
+ readOnly: true
+ volumes:
+ - name: nfd-master-conf
+ configMap:
+ name: node-feature-discovery-master-conf
+ items:
+ - key: nfd-master.conf
+ path: nfd-master.conf
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
@@ -511,3 +524,52 @@
key: node.kubernetes.io/unreachable
operator: Exists
tolerationSeconds: 300
+---
+# Source: node-feature-discovery/templates/nfd-gc.yaml
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: node-feature-discovery-gc
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+ role: gc
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ role: gc
+ template:
+ metadata:
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ role: gc
+ spec:
+ serviceAccountName: nfd-gc
+ dnsPolicy: ClusterFirstWithHostNet
+ securityContext: {}
+ containers:
+ - name: gc
+ image: "registry.k8s.io/nfd/node-feature-discovery:v0.14.0"
+ imagePullPolicy: "IfNotPresent"
+ env:
+ - name: NODE_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: spec.nodeName
+ command:
+ - "nfd-gc"
+ args:
+ - "-gc-interval=1h"
+ resources: {}
+ securityContext:
+ allowPrivilegeEscalation: false
+ capabilities:
+ drop: ["ALL"]
+ readOnlyRootFilesystem: true
+ runAsNonRoot: true |
77adf30
to
d4d6e23
Compare
Path: @@ -3,29 +3,68 @@
kind: ServiceAccount
metadata:
name: node-feature-discovery
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
app.kubernetes.io/managed-by: Helm
---
-{}
-
# Source: node-feature-discovery/templates/serviceaccount.yaml
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ name: nfd-gc
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
---
+# Source: node-feature-discovery/templates/serviceaccount.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: node-feature-discovery-worker
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+---
+# Source: node-feature-discovery/templates/nfd-master-conf.yaml
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: node-feature-discovery-master-conf
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+data:
+ nfd-master.conf: |-
+ null
+---
+# Source: node-feature-discovery/templates/nfd-topologyupdater-conf.yaml
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: node-feature-discovery-topology-updater-conf
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
app.kubernetes.io/managed-by: Helm
+data:
+ nfd-topology-updater.conf: |-
+ null
---
# Source: node-feature-discovery/templates/nfd-worker-conf.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: node-feature-discovery-worker-conf
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
@@ -79,171 +118,6 @@
- vendor
- device
---
-# Source: node-feature-discovery/templates/nodefeaturerule-crd.yaml
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.7.0
- creationTimestamp: null
- name: nodefeaturerules.nfd.k8s-sigs.io
-spec:
- group: nfd.k8s-sigs.io
- names:
- kind: NodeFeatureRule
- listKind: NodeFeatureRuleList
- plural: nodefeaturerules
- singular: nodefeaturerule
- scope: Cluster
- versions:
- - name: v1alpha1
- schema:
- openAPIV3Schema:
- description: NodeFeatureRule resource specifies a configuration for feature-based customization of node objects, such as node labeling.
- properties:
- apiVersion:
- description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
- type: string
- kind:
- description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
- type: string
- metadata:
- type: object
- spec:
- description: NodeFeatureRuleSpec describes a NodeFeatureRule.
- properties:
- rules:
- description: Rules is a list of node customization rules.
- items:
- description: Rule defines a rule for node customization such as labeling.
- properties:
- labels:
- additionalProperties:
- type: string
- description: Labels to create if the rule matches.
- type: object
- labelsTemplate:
- description: LabelsTemplate specifies a template to expand for dynamically generating multiple labels. Data (after template expansion) must be keys with an optional value (<key>[=<value>]) separated by newlines.
- type: string
- matchAny:
- description: MatchAny specifies a list of matchers one of which must match.
- items:
- description: MatchAnyElem specifies one sub-matcher of MatchAny.
- properties:
- matchFeatures:
- description: MatchFeatures specifies a set of matcher terms all of which must match.
- items:
- description: FeatureMatcherTerm defines requirements against one feature set. All requirements (specified as MatchExpressions) are evaluated against each element in the feature set.
- properties:
- feature:
- type: string
- matchExpressions:
- additionalProperties:
- description: "MatchExpression specifies an expression to evaluate against a set of input values. It contains an operator that is applied when matching the input and an array of values that the operator evaluates the input against. \n NB: CreateMatchExpression or MustCreateMatchExpression() should be used for creating new instances. NB: Validate() must be called if Op or Value fields are modified or if a new instance is created from scratch without using the helper functions."
- properties:
- op:
- description: Op is the operator to be applied.
- enum:
- - In
- - NotIn
- - InRegexp
- - Exists
- - DoesNotExist
- - Gt
- - Lt
- - GtLt
- - IsTrue
- - IsFalse
- type: string
- value:
- description: Value is the list of values that the operand evaluates the input against. Value should be empty if the operator is Exists, DoesNotExist, IsTrue or IsFalse. Value should contain exactly one element if the operator is Gt or Lt and exactly two elements if the operator is GtLt. In other cases Value should contain at least one element.
- items:
- type: string
- type: array
- required:
- - op
- type: object
- description: MatchExpressionSet contains a set of MatchExpressions, each of which is evaluated against a set of input values.
- type: object
- required:
- - feature
- - matchExpressions
- type: object
- type: array
- required:
- - matchFeatures
- type: object
- type: array
- matchFeatures:
- description: MatchFeatures specifies a set of matcher terms all of which must match.
- items:
- description: FeatureMatcherTerm defines requirements against one feature set. All requirements (specified as MatchExpressions) are evaluated against each element in the feature set.
- properties:
- feature:
- type: string
- matchExpressions:
- additionalProperties:
- description: "MatchExpression specifies an expression to evaluate against a set of input values. It contains an operator that is applied when matching the input and an array of values that the operator evaluates the input against. \n NB: CreateMatchExpression or MustCreateMatchExpression() should be used for creating new instances. NB: Validate() must be called if Op or Value fields are modified or if a new instance is created from scratch without using the helper functions."
- properties:
- op:
- description: Op is the operator to be applied.
- enum:
- - In
- - NotIn
- - InRegexp
- - Exists
- - DoesNotExist
- - Gt
- - Lt
- - GtLt
- - IsTrue
- - IsFalse
- type: string
- value:
- description: Value is the list of values that the operand evaluates the input against. Value should be empty if the operator is Exists, DoesNotExist, IsTrue or IsFalse. Value should contain exactly one element if the operator is Gt or Lt and exactly two elements if the operator is GtLt. In other cases Value should contain at least one element.
- items:
- type: string
- type: array
- required:
- - op
- type: object
- description: MatchExpressionSet contains a set of MatchExpressions, each of which is evaluated against a set of input values.
- type: object
- required:
- - feature
- - matchExpressions
- type: object
- type: array
- name:
- description: Name of the rule.
- type: string
- vars:
- additionalProperties:
- type: string
- description: Vars is the variables to store if the rule matches. Variables do not directly inflict any changes in the node object. However, they can be referenced from other rules enabling more complex rule hierarchies, without exposing intermediary output values as labels.
- type: object
- varsTemplate:
- description: VarsTemplate specifies a template to expand for dynamically generating multiple variables. Data (after template expansion) must be keys with an optional value (<key>[=<value>]) separated by newlines.
- type: string
- required:
- - name
- type: object
- type: array
- required:
- - rules
- type: object
- required:
- - spec
- type: object
- served: true
- storage: true
-status:
- acceptedNames:
- kind: ""
- plural: ""
- conditions: []
- storedVersions: []
----
# Source: node-feature-discovery/templates/clusterrole.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
@@ -258,6 +132,7 @@
- ""
resources:
- nodes
+ - nodes/status
verbs:
- get
- patch
@@ -266,11 +141,65 @@
- apiGroups:
- nfd.k8s-sigs.io
resources:
+ - nodefeatures
- nodefeaturerules
verbs:
- get
- list
- watch
+ - apiGroups:
+ - coordination.k8s.io
+ resources:
+ - leases
+ verbs:
+ - create
+ - apiGroups:
+ - coordination.k8s.io
+ resources:
+ - leases
+ resourceNames:
+ - "nfd-master.nfd.kubernetes.io"
+ verbs:
+ - get
+ - update
+---
+# Source: node-feature-discovery/templates/clusterrole.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+ name: node-feature-discovery-gc
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+rules:
+ - apiGroups:
+ - ""
+ resources:
+ - nodes
+ verbs:
+ - list
+ - watch
+ - apiGroups:
+ - ""
+ resources:
+ - nodes/proxy
+ verbs:
+ - get
+ - apiGroups:
+ - topology.node.k8s.io
+ resources:
+ - noderesourcetopologies
+ verbs:
+ - delete
+ - list
+ - apiGroups:
+ - nfd.k8s-sigs.io
+ resources:
+ - nodefeatures
+ verbs:
+ - delete
+ - list
---
# Source: node-feature-discovery/templates/clusterrolebinding.yaml
apiVersion: rbac.authorization.k8s.io/v1
@@ -290,11 +219,69 @@
name: node-feature-discovery
namespace: default
---
+# Source: node-feature-discovery/templates/clusterrolebinding.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+ name: node-feature-discovery-gc
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: node-feature-discovery-gc
+subjects:
+ - kind: ServiceAccount
+ name: nfd-gc
+ namespace: default
+---
+# Source: node-feature-discovery/templates/role.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: Role
+metadata:
+ name: node-feature-discovery-worker
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+rules:
+ - apiGroups:
+ - nfd.k8s-sigs.io
+ resources:
+ - nodefeatures
+ verbs:
+ - create
+ - get
+ - update
+---
+# Source: node-feature-discovery/templates/rolebinding.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: RoleBinding
+metadata:
+ name: node-feature-discovery-worker
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: Role
+ name: node-feature-discovery-worker
+subjects:
+ - kind: ServiceAccount
+ name: node-feature-discovery-worker
+ namespace: default
+---
# Source: node-feature-discovery/templates/service.yaml
apiVersion: v1
kind: Service
metadata:
name: node-feature-discovery-master
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
@@ -310,18 +297,19 @@
selector:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
+ role: master
---
# Source: node-feature-discovery/templates/worker.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: node-feature-discovery-worker
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
app.kubernetes.io/managed-by: Helm
role: worker
- annotations: {}
spec:
selector:
matchLabels:
@@ -349,7 +337,7 @@
- ALL
readOnlyRootFilesystem: true
runAsNonRoot: true
- image: "k8s.gcr.io/nfd/node-feature-discovery:v0.11.2"
+ image: "registry.k8s.io/nfd/node-feature-discovery:v0.14.1"
imagePullPolicy: IfNotPresent
env:
- name: NODE_NAME
@@ -366,7 +354,11 @@
command:
- "nfd-worker"
args:
- - "--server=node-feature-discovery-master:8080"
+ - "-server=node-feature-discovery-master:8080"
+ - "-metrics=8081"
+ ports:
+ - name: metrics
+ containerPort: 8081
volumeMounts:
- name: host-boot
mountPath: "/host-boot"
@@ -380,6 +372,9 @@
- name: host-usr-lib
mountPath: "/host-usr/lib"
readOnly: true
+ - name: host-lib
+ mountPath: "/host-lib"
+ readOnly: true
- name: source-d
mountPath: "/etc/kubernetes/node-feature-discovery/source.d/"
readOnly: true
@@ -402,6 +397,9 @@
- name: host-usr-lib
hostPath:
path: "/usr/lib"
+ - name: host-lib
+ hostPath:
+ path: "/lib"
- name: source-d
hostPath:
path: "/etc/kubernetes/node-feature-discovery/source.d/"
@@ -425,12 +423,12 @@
kind: Deployment
metadata:
name: node-feature-discovery-master
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
app.kubernetes.io/managed-by: Helm
role: master
- annotations: {}
spec:
replicas: 1
selector:
@@ -444,9 +442,9 @@
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
role: master
- annotations: {}
spec:
serviceAccountName: node-feature-discovery
+ enableServiceLinks: false
securityContext: {}
containers:
- name: master
@@ -457,7 +455,7 @@
- ALL
readOnlyRootFilesystem: true
runAsNonRoot: true
- image: "k8s.gcr.io/nfd/node-feature-discovery:v0.11.2"
+ image: "registry.k8s.io/nfd/node-feature-discovery:v0.14.1"
imagePullPolicy: IfNotPresent
livenessProbe:
exec:
@@ -477,6 +475,8 @@
ports:
- containerPort: 8080
name: grpc
+ - containerPort: 8081
+ name: metrics
env:
- name: NODE_NAME
valueFrom:
@@ -486,8 +486,21 @@
- "nfd-master"
resources: {}
args:
- ## By default, disable NodeFeatureRules controller for other than the default instances
- - "-featurerules-controller=true"
+ - "-port=8080"
+ ## By default, disable crd controller for other than the default instances
+ - "-crd-controller=true"
+ - "-metrics=8081"
+ volumeMounts:
+ - name: nfd-master-conf
+ mountPath: "/etc/kubernetes/node-feature-discovery"
+ readOnly: true
+ volumes:
+ - name: nfd-master-conf
+ configMap:
+ name: node-feature-discovery-master-conf
+ items:
+ - key: nfd-master.conf
+ path: nfd-master.conf
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
@@ -511,3 +524,52 @@
key: node.kubernetes.io/unreachable
operator: Exists
tolerationSeconds: 300
+---
+# Source: node-feature-discovery/templates/nfd-gc.yaml
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: node-feature-discovery-gc
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+ role: gc
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ role: gc
+ template:
+ metadata:
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ role: gc
+ spec:
+ serviceAccountName: nfd-gc
+ dnsPolicy: ClusterFirstWithHostNet
+ securityContext: {}
+ containers:
+ - name: gc
+ image: "registry.k8s.io/nfd/node-feature-discovery:v0.14.1"
+ imagePullPolicy: "IfNotPresent"
+ env:
+ - name: NODE_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: spec.nodeName
+ command:
+ - "nfd-gc"
+ args:
+ - "-gc-interval=1h"
+ resources: {}
+ securityContext:
+ allowPrivilegeEscalation: false
+ capabilities:
+ drop: ["ALL"]
+ readOnlyRootFilesystem: true
+ runAsNonRoot: true |
d4d6e23
to
dacad36
Compare
dacad36
to
a396116
Compare
Path: @@ -3,29 +3,68 @@
kind: ServiceAccount
metadata:
name: node-feature-discovery
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
app.kubernetes.io/managed-by: Helm
---
-{}
-
# Source: node-feature-discovery/templates/serviceaccount.yaml
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ name: node-feature-discovery-gc
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
---
+# Source: node-feature-discovery/templates/serviceaccount.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: node-feature-discovery-worker
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+---
+# Source: node-feature-discovery/templates/nfd-master-conf.yaml
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: node-feature-discovery-master-conf
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+data:
+ nfd-master.conf: |-
+ null
+---
+# Source: node-feature-discovery/templates/nfd-topologyupdater-conf.yaml
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: node-feature-discovery-topology-updater-conf
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
app.kubernetes.io/managed-by: Helm
+data:
+ nfd-topology-updater.conf: |-
+ null
---
# Source: node-feature-discovery/templates/nfd-worker-conf.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: node-feature-discovery-worker-conf
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
@@ -79,171 +118,6 @@
- vendor
- device
---
-# Source: node-feature-discovery/templates/nodefeaturerule-crd.yaml
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.7.0
- creationTimestamp: null
- name: nodefeaturerules.nfd.k8s-sigs.io
-spec:
- group: nfd.k8s-sigs.io
- names:
- kind: NodeFeatureRule
- listKind: NodeFeatureRuleList
- plural: nodefeaturerules
- singular: nodefeaturerule
- scope: Cluster
- versions:
- - name: v1alpha1
- schema:
- openAPIV3Schema:
- description: NodeFeatureRule resource specifies a configuration for feature-based customization of node objects, such as node labeling.
- properties:
- apiVersion:
- description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
- type: string
- kind:
- description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
- type: string
- metadata:
- type: object
- spec:
- description: NodeFeatureRuleSpec describes a NodeFeatureRule.
- properties:
- rules:
- description: Rules is a list of node customization rules.
- items:
- description: Rule defines a rule for node customization such as labeling.
- properties:
- labels:
- additionalProperties:
- type: string
- description: Labels to create if the rule matches.
- type: object
- labelsTemplate:
- description: LabelsTemplate specifies a template to expand for dynamically generating multiple labels. Data (after template expansion) must be keys with an optional value (<key>[=<value>]) separated by newlines.
- type: string
- matchAny:
- description: MatchAny specifies a list of matchers one of which must match.
- items:
- description: MatchAnyElem specifies one sub-matcher of MatchAny.
- properties:
- matchFeatures:
- description: MatchFeatures specifies a set of matcher terms all of which must match.
- items:
- description: FeatureMatcherTerm defines requirements against one feature set. All requirements (specified as MatchExpressions) are evaluated against each element in the feature set.
- properties:
- feature:
- type: string
- matchExpressions:
- additionalProperties:
- description: "MatchExpression specifies an expression to evaluate against a set of input values. It contains an operator that is applied when matching the input and an array of values that the operator evaluates the input against. \n NB: CreateMatchExpression or MustCreateMatchExpression() should be used for creating new instances. NB: Validate() must be called if Op or Value fields are modified or if a new instance is created from scratch without using the helper functions."
- properties:
- op:
- description: Op is the operator to be applied.
- enum:
- - In
- - NotIn
- - InRegexp
- - Exists
- - DoesNotExist
- - Gt
- - Lt
- - GtLt
- - IsTrue
- - IsFalse
- type: string
- value:
- description: Value is the list of values that the operand evaluates the input against. Value should be empty if the operator is Exists, DoesNotExist, IsTrue or IsFalse. Value should contain exactly one element if the operator is Gt or Lt and exactly two elements if the operator is GtLt. In other cases Value should contain at least one element.
- items:
- type: string
- type: array
- required:
- - op
- type: object
- description: MatchExpressionSet contains a set of MatchExpressions, each of which is evaluated against a set of input values.
- type: object
- required:
- - feature
- - matchExpressions
- type: object
- type: array
- required:
- - matchFeatures
- type: object
- type: array
- matchFeatures:
- description: MatchFeatures specifies a set of matcher terms all of which must match.
- items:
- description: FeatureMatcherTerm defines requirements against one feature set. All requirements (specified as MatchExpressions) are evaluated against each element in the feature set.
- properties:
- feature:
- type: string
- matchExpressions:
- additionalProperties:
- description: "MatchExpression specifies an expression to evaluate against a set of input values. It contains an operator that is applied when matching the input and an array of values that the operator evaluates the input against. \n NB: CreateMatchExpression or MustCreateMatchExpression() should be used for creating new instances. NB: Validate() must be called if Op or Value fields are modified or if a new instance is created from scratch without using the helper functions."
- properties:
- op:
- description: Op is the operator to be applied.
- enum:
- - In
- - NotIn
- - InRegexp
- - Exists
- - DoesNotExist
- - Gt
- - Lt
- - GtLt
- - IsTrue
- - IsFalse
- type: string
- value:
- description: Value is the list of values that the operand evaluates the input against. Value should be empty if the operator is Exists, DoesNotExist, IsTrue or IsFalse. Value should contain exactly one element if the operator is Gt or Lt and exactly two elements if the operator is GtLt. In other cases Value should contain at least one element.
- items:
- type: string
- type: array
- required:
- - op
- type: object
- description: MatchExpressionSet contains a set of MatchExpressions, each of which is evaluated against a set of input values.
- type: object
- required:
- - feature
- - matchExpressions
- type: object
- type: array
- name:
- description: Name of the rule.
- type: string
- vars:
- additionalProperties:
- type: string
- description: Vars is the variables to store if the rule matches. Variables do not directly inflict any changes in the node object. However, they can be referenced from other rules enabling more complex rule hierarchies, without exposing intermediary output values as labels.
- type: object
- varsTemplate:
- description: VarsTemplate specifies a template to expand for dynamically generating multiple variables. Data (after template expansion) must be keys with an optional value (<key>[=<value>]) separated by newlines.
- type: string
- required:
- - name
- type: object
- type: array
- required:
- - rules
- type: object
- required:
- - spec
- type: object
- served: true
- storage: true
-status:
- acceptedNames:
- kind: ""
- plural: ""
- conditions: []
- storedVersions: []
----
# Source: node-feature-discovery/templates/clusterrole.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
@@ -258,6 +132,7 @@
- ""
resources:
- nodes
+ - nodes/status
verbs:
- get
- patch
@@ -266,11 +141,65 @@
- apiGroups:
- nfd.k8s-sigs.io
resources:
+ - nodefeatures
- nodefeaturerules
verbs:
- get
- list
- watch
+ - apiGroups:
+ - coordination.k8s.io
+ resources:
+ - leases
+ verbs:
+ - create
+ - apiGroups:
+ - coordination.k8s.io
+ resources:
+ - leases
+ resourceNames:
+ - "nfd-master.nfd.kubernetes.io"
+ verbs:
+ - get
+ - update
+---
+# Source: node-feature-discovery/templates/clusterrole.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+ name: node-feature-discovery-gc
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+rules:
+ - apiGroups:
+ - ""
+ resources:
+ - nodes
+ verbs:
+ - list
+ - watch
+ - apiGroups:
+ - ""
+ resources:
+ - nodes/proxy
+ verbs:
+ - get
+ - apiGroups:
+ - topology.node.k8s.io
+ resources:
+ - noderesourcetopologies
+ verbs:
+ - delete
+ - list
+ - apiGroups:
+ - nfd.k8s-sigs.io
+ resources:
+ - nodefeatures
+ verbs:
+ - delete
+ - list
---
# Source: node-feature-discovery/templates/clusterrolebinding.yaml
apiVersion: rbac.authorization.k8s.io/v1
@@ -290,38 +219,74 @@
name: node-feature-discovery
namespace: default
---
-# Source: node-feature-discovery/templates/service.yaml
-apiVersion: v1
-kind: Service
+# Source: node-feature-discovery/templates/clusterrolebinding.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
metadata:
- name: node-feature-discovery-master
+ name: node-feature-discovery-gc
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
app.kubernetes.io/managed-by: Helm
- role: master
-spec:
- type: ClusterIP
- ports:
- - port: 8080
- targetPort: grpc
- protocol: TCP
- name: grpc
- selector:
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: node-feature-discovery-gc
+subjects:
+ - kind: ServiceAccount
+ name: node-feature-discovery-gc
+ namespace: default
+---
+# Source: node-feature-discovery/templates/role.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: Role
+metadata:
+ name: node-feature-discovery-worker
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+rules:
+ - apiGroups:
+ - nfd.k8s-sigs.io
+ resources:
+ - nodefeatures
+ verbs:
+ - create
+ - get
+ - update
+---
+# Source: node-feature-discovery/templates/rolebinding.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: RoleBinding
+metadata:
+ name: node-feature-discovery-worker
+ namespace: default
+ labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: Role
+ name: node-feature-discovery-worker
+subjects:
+ - kind: ServiceAccount
+ name: node-feature-discovery-worker
+ namespace: default
---
# Source: node-feature-discovery/templates/worker.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: node-feature-discovery-worker
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
app.kubernetes.io/managed-by: Helm
role: worker
- annotations: {}
spec:
selector:
matchLabels:
@@ -349,13 +314,21 @@
- ALL
readOnlyRootFilesystem: true
runAsNonRoot: true
- image: "k8s.gcr.io/nfd/node-feature-discovery:v0.11.2"
+ image: "registry.k8s.io/nfd/node-feature-discovery:v0.15.3"
imagePullPolicy: IfNotPresent
env:
- name: NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
+ - name: POD_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.name
+ - name: POD_UID
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.uid
resources:
limits:
cpu: 1024m
@@ -366,7 +339,10 @@
command:
- "nfd-worker"
args:
- - "--server=node-feature-discovery-master:8080"
+ - "-metrics=8081"
+ ports:
+ - name: metrics
+ containerPort: 8081
volumeMounts:
- name: host-boot
mountPath: "/host-boot"
@@ -380,6 +356,9 @@
- name: host-usr-lib
mountPath: "/host-usr/lib"
readOnly: true
+ - name: host-lib
+ mountPath: "/host-lib"
+ readOnly: true
- name: source-d
mountPath: "/etc/kubernetes/node-feature-discovery/source.d/"
readOnly: true
@@ -402,6 +381,9 @@
- name: host-usr-lib
hostPath:
path: "/usr/lib"
+ - name: host-lib
+ hostPath:
+ path: "/lib"
- name: source-d
hostPath:
path: "/etc/kubernetes/node-feature-discovery/source.d/"
@@ -425,12 +407,12 @@
kind: Deployment
metadata:
name: node-feature-discovery-master
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
app.kubernetes.io/managed-by: Helm
role: master
- annotations: {}
spec:
replicas: 1
selector:
@@ -444,9 +426,9 @@
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
role: master
- annotations: {}
spec:
serviceAccountName: node-feature-discovery
+ enableServiceLinks: false
securityContext: {}
containers:
- name: master
@@ -457,26 +439,24 @@
- ALL
readOnlyRootFilesystem: true
runAsNonRoot: true
- image: "k8s.gcr.io/nfd/node-feature-discovery:v0.11.2"
+ image: "registry.k8s.io/nfd/node-feature-discovery:v0.15.3"
imagePullPolicy: IfNotPresent
livenessProbe:
- exec:
- command:
- - "/usr/bin/grpc_health_probe"
- - "-addr=:8080"
+ grpc:
+ port: 8080
initialDelaySeconds: 10
periodSeconds: 10
readinessProbe:
- exec:
- command:
- - "/usr/bin/grpc_health_probe"
- - "-addr=:8080"
+ grpc:
+ port: 8080
initialDelaySeconds: 5
periodSeconds: 10
failureThreshold: 10
ports:
- containerPort: 8080
name: grpc
+ - containerPort: 8081
+ name: metrics
env:
- name: NODE_NAME
valueFrom:
@@ -486,8 +466,20 @@
- "nfd-master"
resources: {}
args:
- ## By default, disable NodeFeatureRules controller for other than the default instances
- - "-featurerules-controller=true"
+ ## By default, disable crd controller for other than the default instances
+ - "-crd-controller=true"
+ - "-metrics=8081"
+ volumeMounts:
+ - name: nfd-master-conf
+ mountPath: "/etc/kubernetes/node-feature-discovery"
+ readOnly: true
+ volumes:
+ - name: nfd-master-conf
+ configMap:
+ name: node-feature-discovery-master-conf
+ items:
+ - key: nfd-master.conf
+ path: nfd-master.conf
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
@@ -511,3 +503,55 @@
key: node.kubernetes.io/unreachable
operator: Exists
tolerationSeconds: 300
+---
+# Source: node-feature-discovery/templates/nfd-gc.yaml
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: node-feature-discovery-gc
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+ role: gc
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ role: gc
+ template:
+ metadata:
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ role: gc
+ spec:
+ serviceAccountName: node-feature-discovery-gc
+ dnsPolicy: ClusterFirstWithHostNet
+ securityContext: {}
+ containers:
+ - name: gc
+ image: "registry.k8s.io/nfd/node-feature-discovery:v0.15.3"
+ imagePullPolicy: "IfNotPresent"
+ env:
+ - name: NODE_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: spec.nodeName
+ command:
+ - "nfd-gc"
+ args:
+ - "-gc-interval=1h"
+ resources: {}
+ securityContext:
+ allowPrivilegeEscalation: false
+ capabilities:
+ drop: ["ALL"]
+ readOnlyRootFilesystem: true
+ runAsNonRoot: true
+ ports:
+ - name: metrics
+ containerPort: 8081 |
59f2804
to
4e812c2
Compare
Path: @@ -3,29 +3,68 @@
kind: ServiceAccount
metadata:
name: node-feature-discovery
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
app.kubernetes.io/managed-by: Helm
---
-{}
-
# Source: node-feature-discovery/templates/serviceaccount.yaml
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ name: node-feature-discovery-gc
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
---
+# Source: node-feature-discovery/templates/serviceaccount.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: node-feature-discovery-worker
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+---
+# Source: node-feature-discovery/templates/nfd-master-conf.yaml
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: node-feature-discovery-master-conf
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+data:
+ nfd-master.conf: |-
+ null
+---
+# Source: node-feature-discovery/templates/nfd-topologyupdater-conf.yaml
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: node-feature-discovery-topology-updater-conf
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
app.kubernetes.io/managed-by: Helm
+data:
+ nfd-topology-updater.conf: |-
+ null
---
# Source: node-feature-discovery/templates/nfd-worker-conf.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: node-feature-discovery-worker-conf
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
@@ -79,171 +118,6 @@
- vendor
- device
---
-# Source: node-feature-discovery/templates/nodefeaturerule-crd.yaml
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.7.0
- creationTimestamp: null
- name: nodefeaturerules.nfd.k8s-sigs.io
-spec:
- group: nfd.k8s-sigs.io
- names:
- kind: NodeFeatureRule
- listKind: NodeFeatureRuleList
- plural: nodefeaturerules
- singular: nodefeaturerule
- scope: Cluster
- versions:
- - name: v1alpha1
- schema:
- openAPIV3Schema:
- description: NodeFeatureRule resource specifies a configuration for feature-based customization of node objects, such as node labeling.
- properties:
- apiVersion:
- description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
- type: string
- kind:
- description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
- type: string
- metadata:
- type: object
- spec:
- description: NodeFeatureRuleSpec describes a NodeFeatureRule.
- properties:
- rules:
- description: Rules is a list of node customization rules.
- items:
- description: Rule defines a rule for node customization such as labeling.
- properties:
- labels:
- additionalProperties:
- type: string
- description: Labels to create if the rule matches.
- type: object
- labelsTemplate:
- description: LabelsTemplate specifies a template to expand for dynamically generating multiple labels. Data (after template expansion) must be keys with an optional value (<key>[=<value>]) separated by newlines.
- type: string
- matchAny:
- description: MatchAny specifies a list of matchers one of which must match.
- items:
- description: MatchAnyElem specifies one sub-matcher of MatchAny.
- properties:
- matchFeatures:
- description: MatchFeatures specifies a set of matcher terms all of which must match.
- items:
- description: FeatureMatcherTerm defines requirements against one feature set. All requirements (specified as MatchExpressions) are evaluated against each element in the feature set.
- properties:
- feature:
- type: string
- matchExpressions:
- additionalProperties:
- description: "MatchExpression specifies an expression to evaluate against a set of input values. It contains an operator that is applied when matching the input and an array of values that the operator evaluates the input against. \n NB: CreateMatchExpression or MustCreateMatchExpression() should be used for creating new instances. NB: Validate() must be called if Op or Value fields are modified or if a new instance is created from scratch without using the helper functions."
- properties:
- op:
- description: Op is the operator to be applied.
- enum:
- - In
- - NotIn
- - InRegexp
- - Exists
- - DoesNotExist
- - Gt
- - Lt
- - GtLt
- - IsTrue
- - IsFalse
- type: string
- value:
- description: Value is the list of values that the operand evaluates the input against. Value should be empty if the operator is Exists, DoesNotExist, IsTrue or IsFalse. Value should contain exactly one element if the operator is Gt or Lt and exactly two elements if the operator is GtLt. In other cases Value should contain at least one element.
- items:
- type: string
- type: array
- required:
- - op
- type: object
- description: MatchExpressionSet contains a set of MatchExpressions, each of which is evaluated against a set of input values.
- type: object
- required:
- - feature
- - matchExpressions
- type: object
- type: array
- required:
- - matchFeatures
- type: object
- type: array
- matchFeatures:
- description: MatchFeatures specifies a set of matcher terms all of which must match.
- items:
- description: FeatureMatcherTerm defines requirements against one feature set. All requirements (specified as MatchExpressions) are evaluated against each element in the feature set.
- properties:
- feature:
- type: string
- matchExpressions:
- additionalProperties:
- description: "MatchExpression specifies an expression to evaluate against a set of input values. It contains an operator that is applied when matching the input and an array of values that the operator evaluates the input against. \n NB: CreateMatchExpression or MustCreateMatchExpression() should be used for creating new instances. NB: Validate() must be called if Op or Value fields are modified or if a new instance is created from scratch without using the helper functions."
- properties:
- op:
- description: Op is the operator to be applied.
- enum:
- - In
- - NotIn
- - InRegexp
- - Exists
- - DoesNotExist
- - Gt
- - Lt
- - GtLt
- - IsTrue
- - IsFalse
- type: string
- value:
- description: Value is the list of values that the operand evaluates the input against. Value should be empty if the operator is Exists, DoesNotExist, IsTrue or IsFalse. Value should contain exactly one element if the operator is Gt or Lt and exactly two elements if the operator is GtLt. In other cases Value should contain at least one element.
- items:
- type: string
- type: array
- required:
- - op
- type: object
- description: MatchExpressionSet contains a set of MatchExpressions, each of which is evaluated against a set of input values.
- type: object
- required:
- - feature
- - matchExpressions
- type: object
- type: array
- name:
- description: Name of the rule.
- type: string
- vars:
- additionalProperties:
- type: string
- description: Vars is the variables to store if the rule matches. Variables do not directly inflict any changes in the node object. However, they can be referenced from other rules enabling more complex rule hierarchies, without exposing intermediary output values as labels.
- type: object
- varsTemplate:
- description: VarsTemplate specifies a template to expand for dynamically generating multiple variables. Data (after template expansion) must be keys with an optional value (<key>[=<value>]) separated by newlines.
- type: string
- required:
- - name
- type: object
- type: array
- required:
- - rules
- type: object
- required:
- - spec
- type: object
- served: true
- storage: true
-status:
- acceptedNames:
- kind: ""
- plural: ""
- conditions: []
- storedVersions: []
----
# Source: node-feature-discovery/templates/clusterrole.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
@@ -258,6 +132,7 @@
- ""
resources:
- nodes
+ - nodes/status
verbs:
- get
- patch
@@ -266,11 +141,65 @@
- apiGroups:
- nfd.k8s-sigs.io
resources:
+ - nodefeatures
- nodefeaturerules
verbs:
- get
- list
- watch
+ - apiGroups:
+ - coordination.k8s.io
+ resources:
+ - leases
+ verbs:
+ - create
+ - apiGroups:
+ - coordination.k8s.io
+ resources:
+ - leases
+ resourceNames:
+ - "nfd-master.nfd.kubernetes.io"
+ verbs:
+ - get
+ - update
+---
+# Source: node-feature-discovery/templates/clusterrole.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+ name: node-feature-discovery-gc
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+rules:
+ - apiGroups:
+ - ""
+ resources:
+ - nodes
+ verbs:
+ - list
+ - watch
+ - apiGroups:
+ - ""
+ resources:
+ - nodes/proxy
+ verbs:
+ - get
+ - apiGroups:
+ - topology.node.k8s.io
+ resources:
+ - noderesourcetopologies
+ verbs:
+ - delete
+ - list
+ - apiGroups:
+ - nfd.k8s-sigs.io
+ resources:
+ - nodefeatures
+ verbs:
+ - delete
+ - list
---
# Source: node-feature-discovery/templates/clusterrolebinding.yaml
apiVersion: rbac.authorization.k8s.io/v1
@@ -290,38 +219,74 @@
name: node-feature-discovery
namespace: default
---
-# Source: node-feature-discovery/templates/service.yaml
-apiVersion: v1
-kind: Service
+# Source: node-feature-discovery/templates/clusterrolebinding.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
metadata:
- name: node-feature-discovery-master
+ name: node-feature-discovery-gc
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
app.kubernetes.io/managed-by: Helm
- role: master
-spec:
- type: ClusterIP
- ports:
- - port: 8080
- targetPort: grpc
- protocol: TCP
- name: grpc
- selector:
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: node-feature-discovery-gc
+subjects:
+ - kind: ServiceAccount
+ name: node-feature-discovery-gc
+ namespace: default
+---
+# Source: node-feature-discovery/templates/role.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: Role
+metadata:
+ name: node-feature-discovery-worker
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+rules:
+ - apiGroups:
+ - nfd.k8s-sigs.io
+ resources:
+ - nodefeatures
+ verbs:
+ - create
+ - get
+ - update
+---
+# Source: node-feature-discovery/templates/rolebinding.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: RoleBinding
+metadata:
+ name: node-feature-discovery-worker
+ namespace: default
+ labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: Role
+ name: node-feature-discovery-worker
+subjects:
+ - kind: ServiceAccount
+ name: node-feature-discovery-worker
+ namespace: default
---
# Source: node-feature-discovery/templates/worker.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: node-feature-discovery-worker
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
app.kubernetes.io/managed-by: Helm
role: worker
- annotations: {}
spec:
selector:
matchLabels:
@@ -349,13 +314,21 @@
- ALL
readOnlyRootFilesystem: true
runAsNonRoot: true
- image: "k8s.gcr.io/nfd/node-feature-discovery:v0.11.2"
+ image: "registry.k8s.io/nfd/node-feature-discovery:v0.15.4"
imagePullPolicy: IfNotPresent
env:
- name: NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
+ - name: POD_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.name
+ - name: POD_UID
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.uid
resources:
limits:
cpu: 1024m
@@ -366,7 +339,10 @@
command:
- "nfd-worker"
args:
- - "--server=node-feature-discovery-master:8080"
+ - "-metrics=8081"
+ ports:
+ - name: metrics
+ containerPort: 8081
volumeMounts:
- name: host-boot
mountPath: "/host-boot"
@@ -380,6 +356,9 @@
- name: host-usr-lib
mountPath: "/host-usr/lib"
readOnly: true
+ - name: host-lib
+ mountPath: "/host-lib"
+ readOnly: true
- name: source-d
mountPath: "/etc/kubernetes/node-feature-discovery/source.d/"
readOnly: true
@@ -402,6 +381,9 @@
- name: host-usr-lib
hostPath:
path: "/usr/lib"
+ - name: host-lib
+ hostPath:
+ path: "/lib"
- name: source-d
hostPath:
path: "/etc/kubernetes/node-feature-discovery/source.d/"
@@ -425,12 +407,12 @@
kind: Deployment
metadata:
name: node-feature-discovery-master
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
app.kubernetes.io/managed-by: Helm
role: master
- annotations: {}
spec:
replicas: 1
selector:
@@ -444,9 +426,9 @@
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
role: master
- annotations: {}
spec:
serviceAccountName: node-feature-discovery
+ enableServiceLinks: false
securityContext: {}
containers:
- name: master
@@ -457,26 +439,24 @@
- ALL
readOnlyRootFilesystem: true
runAsNonRoot: true
- image: "k8s.gcr.io/nfd/node-feature-discovery:v0.11.2"
+ image: "registry.k8s.io/nfd/node-feature-discovery:v0.15.4"
imagePullPolicy: IfNotPresent
livenessProbe:
- exec:
- command:
- - "/usr/bin/grpc_health_probe"
- - "-addr=:8080"
+ grpc:
+ port: 8080
initialDelaySeconds: 10
periodSeconds: 10
readinessProbe:
- exec:
- command:
- - "/usr/bin/grpc_health_probe"
- - "-addr=:8080"
+ grpc:
+ port: 8080
initialDelaySeconds: 5
periodSeconds: 10
failureThreshold: 10
ports:
- containerPort: 8080
name: grpc
+ - containerPort: 8081
+ name: metrics
env:
- name: NODE_NAME
valueFrom:
@@ -486,8 +466,20 @@
- "nfd-master"
resources: {}
args:
- ## By default, disable NodeFeatureRules controller for other than the default instances
- - "-featurerules-controller=true"
+ ## By default, disable crd controller for other than the default instances
+ - "-crd-controller=true"
+ - "-metrics=8081"
+ volumeMounts:
+ - name: nfd-master-conf
+ mountPath: "/etc/kubernetes/node-feature-discovery"
+ readOnly: true
+ volumes:
+ - name: nfd-master-conf
+ configMap:
+ name: node-feature-discovery-master-conf
+ items:
+ - key: nfd-master.conf
+ path: nfd-master.conf
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
@@ -511,3 +503,55 @@
key: node.kubernetes.io/unreachable
operator: Exists
tolerationSeconds: 300
+---
+# Source: node-feature-discovery/templates/nfd-gc.yaml
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: node-feature-discovery-gc
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+ role: gc
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ role: gc
+ template:
+ metadata:
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ role: gc
+ spec:
+ serviceAccountName: node-feature-discovery-gc
+ dnsPolicy: ClusterFirstWithHostNet
+ securityContext: {}
+ containers:
+ - name: gc
+ image: "registry.k8s.io/nfd/node-feature-discovery:v0.15.4"
+ imagePullPolicy: "IfNotPresent"
+ env:
+ - name: NODE_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: spec.nodeName
+ command:
+ - "nfd-gc"
+ args:
+ - "-gc-interval=1h"
+ resources: {}
+ securityContext:
+ allowPrivilegeEscalation: false
+ capabilities:
+ drop: ["ALL"]
+ readOnlyRootFilesystem: true
+ runAsNonRoot: true
+ ports:
+ - name: metrics
+ containerPort: 8081 |
4e812c2
to
f719846
Compare
Path: @@ -3,29 +3,54 @@
kind: ServiceAccount
metadata:
name: node-feature-discovery
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
app.kubernetes.io/managed-by: Helm
---
-{}
-
# Source: node-feature-discovery/templates/serviceaccount.yaml
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ name: node-feature-discovery-gc
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
---
+# Source: node-feature-discovery/templates/serviceaccount.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: node-feature-discovery-worker
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+---
+# Source: node-feature-discovery/templates/nfd-master-conf.yaml
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: node-feature-discovery-master-conf
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
app.kubernetes.io/managed-by: Helm
+data:
+ nfd-master.conf: |-
+ null
---
# Source: node-feature-discovery/templates/nfd-worker-conf.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: node-feature-discovery-worker-conf
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
@@ -79,171 +104,6 @@
- vendor
- device
---
-# Source: node-feature-discovery/templates/nodefeaturerule-crd.yaml
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.7.0
- creationTimestamp: null
- name: nodefeaturerules.nfd.k8s-sigs.io
-spec:
- group: nfd.k8s-sigs.io
- names:
- kind: NodeFeatureRule
- listKind: NodeFeatureRuleList
- plural: nodefeaturerules
- singular: nodefeaturerule
- scope: Cluster
- versions:
- - name: v1alpha1
- schema:
- openAPIV3Schema:
- description: NodeFeatureRule resource specifies a configuration for feature-based customization of node objects, such as node labeling.
- properties:
- apiVersion:
- description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
- type: string
- kind:
- description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
- type: string
- metadata:
- type: object
- spec:
- description: NodeFeatureRuleSpec describes a NodeFeatureRule.
- properties:
- rules:
- description: Rules is a list of node customization rules.
- items:
- description: Rule defines a rule for node customization such as labeling.
- properties:
- labels:
- additionalProperties:
- type: string
- description: Labels to create if the rule matches.
- type: object
- labelsTemplate:
- description: LabelsTemplate specifies a template to expand for dynamically generating multiple labels. Data (after template expansion) must be keys with an optional value (<key>[=<value>]) separated by newlines.
- type: string
- matchAny:
- description: MatchAny specifies a list of matchers one of which must match.
- items:
- description: MatchAnyElem specifies one sub-matcher of MatchAny.
- properties:
- matchFeatures:
- description: MatchFeatures specifies a set of matcher terms all of which must match.
- items:
- description: FeatureMatcherTerm defines requirements against one feature set. All requirements (specified as MatchExpressions) are evaluated against each element in the feature set.
- properties:
- feature:
- type: string
- matchExpressions:
- additionalProperties:
- description: "MatchExpression specifies an expression to evaluate against a set of input values. It contains an operator that is applied when matching the input and an array of values that the operator evaluates the input against. \n NB: CreateMatchExpression or MustCreateMatchExpression() should be used for creating new instances. NB: Validate() must be called if Op or Value fields are modified or if a new instance is created from scratch without using the helper functions."
- properties:
- op:
- description: Op is the operator to be applied.
- enum:
- - In
- - NotIn
- - InRegexp
- - Exists
- - DoesNotExist
- - Gt
- - Lt
- - GtLt
- - IsTrue
- - IsFalse
- type: string
- value:
- description: Value is the list of values that the operand evaluates the input against. Value should be empty if the operator is Exists, DoesNotExist, IsTrue or IsFalse. Value should contain exactly one element if the operator is Gt or Lt and exactly two elements if the operator is GtLt. In other cases Value should contain at least one element.
- items:
- type: string
- type: array
- required:
- - op
- type: object
- description: MatchExpressionSet contains a set of MatchExpressions, each of which is evaluated against a set of input values.
- type: object
- required:
- - feature
- - matchExpressions
- type: object
- type: array
- required:
- - matchFeatures
- type: object
- type: array
- matchFeatures:
- description: MatchFeatures specifies a set of matcher terms all of which must match.
- items:
- description: FeatureMatcherTerm defines requirements against one feature set. All requirements (specified as MatchExpressions) are evaluated against each element in the feature set.
- properties:
- feature:
- type: string
- matchExpressions:
- additionalProperties:
- description: "MatchExpression specifies an expression to evaluate against a set of input values. It contains an operator that is applied when matching the input and an array of values that the operator evaluates the input against. \n NB: CreateMatchExpression or MustCreateMatchExpression() should be used for creating new instances. NB: Validate() must be called if Op or Value fields are modified or if a new instance is created from scratch without using the helper functions."
- properties:
- op:
- description: Op is the operator to be applied.
- enum:
- - In
- - NotIn
- - InRegexp
- - Exists
- - DoesNotExist
- - Gt
- - Lt
- - GtLt
- - IsTrue
- - IsFalse
- type: string
- value:
- description: Value is the list of values that the operand evaluates the input against. Value should be empty if the operator is Exists, DoesNotExist, IsTrue or IsFalse. Value should contain exactly one element if the operator is Gt or Lt and exactly two elements if the operator is GtLt. In other cases Value should contain at least one element.
- items:
- type: string
- type: array
- required:
- - op
- type: object
- description: MatchExpressionSet contains a set of MatchExpressions, each of which is evaluated against a set of input values.
- type: object
- required:
- - feature
- - matchExpressions
- type: object
- type: array
- name:
- description: Name of the rule.
- type: string
- vars:
- additionalProperties:
- type: string
- description: Vars is the variables to store if the rule matches. Variables do not directly inflict any changes in the node object. However, they can be referenced from other rules enabling more complex rule hierarchies, without exposing intermediary output values as labels.
- type: object
- varsTemplate:
- description: VarsTemplate specifies a template to expand for dynamically generating multiple variables. Data (after template expansion) must be keys with an optional value (<key>[=<value>]) separated by newlines.
- type: string
- required:
- - name
- type: object
- type: array
- required:
- - rules
- type: object
- required:
- - spec
- type: object
- served: true
- storage: true
-status:
- acceptedNames:
- kind: ""
- plural: ""
- conditions: []
- storedVersions: []
----
# Source: node-feature-discovery/templates/clusterrole.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
@@ -258,6 +118,7 @@
- ""
resources:
- nodes
+ - nodes/status
verbs:
- get
- patch
@@ -266,11 +127,73 @@
- apiGroups:
- nfd.k8s-sigs.io
resources:
+ - nodefeatures
- nodefeaturerules
+ - nodefeaturegroups
verbs:
- get
- list
- watch
+ - apiGroups:
+ - nfd.k8s-sigs.io
+ resources:
+ - nodefeaturegroups/status
+ verbs:
+ - patch
+ - update
+ - apiGroups:
+ - coordination.k8s.io
+ resources:
+ - leases
+ verbs:
+ - create
+ - apiGroups:
+ - coordination.k8s.io
+ resources:
+ - leases
+ resourceNames:
+ - "nfd-master.nfd.kubernetes.io"
+ verbs:
+ - get
+ - update
+---
+# Source: node-feature-discovery/templates/clusterrole.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+ name: node-feature-discovery-gc
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+rules:
+ - apiGroups:
+ - ""
+ resources:
+ - nodes
+ verbs:
+ - list
+ - watch
+ - apiGroups:
+ - ""
+ resources:
+ - nodes/proxy
+ verbs:
+ - get
+ - apiGroups:
+ - topology.node.k8s.io
+ resources:
+ - noderesourcetopologies
+ verbs:
+ - delete
+ - list
+ - apiGroups:
+ - nfd.k8s-sigs.io
+ resources:
+ - nodefeatures
+ verbs:
+ - delete
+ - list
---
# Source: node-feature-discovery/templates/clusterrolebinding.yaml
apiVersion: rbac.authorization.k8s.io/v1
@@ -290,38 +213,74 @@
name: node-feature-discovery
namespace: default
---
-# Source: node-feature-discovery/templates/service.yaml
-apiVersion: v1
-kind: Service
+# Source: node-feature-discovery/templates/clusterrolebinding.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
metadata:
- name: node-feature-discovery-master
+ name: node-feature-discovery-gc
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
app.kubernetes.io/managed-by: Helm
- role: master
-spec:
- type: ClusterIP
- ports:
- - port: 8080
- targetPort: grpc
- protocol: TCP
- name: grpc
- selector:
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: node-feature-discovery-gc
+subjects:
+ - kind: ServiceAccount
+ name: node-feature-discovery-gc
+ namespace: default
+---
+# Source: node-feature-discovery/templates/role.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: Role
+metadata:
+ name: node-feature-discovery-worker
+ namespace: default
+ labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+rules:
+ - apiGroups:
+ - nfd.k8s-sigs.io
+ resources:
+ - nodefeatures
+ verbs:
+ - create
+ - get
+ - update
+---
+# Source: node-feature-discovery/templates/rolebinding.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: RoleBinding
+metadata:
+ name: node-feature-discovery-worker
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: Role
+ name: node-feature-discovery-worker
+subjects:
+ - kind: ServiceAccount
+ name: node-feature-discovery-worker
+ namespace: default
---
# Source: node-feature-discovery/templates/worker.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: node-feature-discovery-worker
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
app.kubernetes.io/managed-by: Helm
role: worker
- annotations: {}
spec:
selector:
matchLabels:
@@ -349,13 +308,32 @@
- ALL
readOnlyRootFilesystem: true
runAsNonRoot: true
- image: "k8s.gcr.io/nfd/node-feature-discovery:v0.11.2"
+ image: "registry.k8s.io/nfd/node-feature-discovery:v0.16.0"
imagePullPolicy: IfNotPresent
+ livenessProbe:
+ grpc:
+ port: 8082
+ initialDelaySeconds: 10
+ periodSeconds: 10
+ readinessProbe:
+ grpc:
+ port: 8082
+ initialDelaySeconds: 5
+ periodSeconds: 10
+ failureThreshold: 10
env:
- name: NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
+ - name: POD_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.name
+ - name: POD_UID
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.uid
resources:
limits:
cpu: 1024m
@@ -366,7 +344,13 @@
command:
- "nfd-worker"
args:
- - "--server=node-feature-discovery-master:8080"
+ # Go over featureGate and add the feature-gate flag
+ - "-feature-gates=NodeFeatureAPI=true"
+ - "-feature-gates=NodeFeatureGroupAPI=false"
+ - "-metrics=8081"
+ ports:
+ - name: metrics
+ containerPort: 8081
volumeMounts:
- name: host-boot
mountPath: "/host-boot"
@@ -380,6 +364,12 @@
- name: host-usr-lib
mountPath: "/host-usr/lib"
readOnly: true
+ - name: host-lib
+ mountPath: "/host-lib"
+ readOnly: true
+ - name: host-proc-swaps
+ mountPath: "/host-proc/swaps"
+ readOnly: true
- name: source-d
mountPath: "/etc/kubernetes/node-feature-discovery/source.d/"
readOnly: true
@@ -402,6 +392,12 @@
- name: host-usr-lib
hostPath:
path: "/usr/lib"
+ - name: host-lib
+ hostPath:
+ path: "/lib"
+ - name: host-proc-swaps
+ hostPath:
+ path: "/proc/swaps"
- name: source-d
hostPath:
path: "/etc/kubernetes/node-feature-discovery/source.d/"
@@ -425,12 +421,12 @@
kind: Deployment
metadata:
name: node-feature-discovery-master
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
app.kubernetes.io/managed-by: Helm
role: master
- annotations: {}
spec:
replicas: 1
selector:
@@ -444,9 +440,9 @@
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
role: master
- annotations: {}
spec:
serviceAccountName: node-feature-discovery
+ enableServiceLinks: false
securityContext: {}
containers:
- name: master
@@ -457,37 +453,236 @@
- ALL
readOnlyRootFilesystem: true
runAsNonRoot: true
- image: "k8s.gcr.io/nfd/node-feature-discovery:v0.11.2"
+ image: "registry.k8s.io/nfd/node-feature-discovery:v0.16.0"
imagePullPolicy: IfNotPresent
livenessProbe:
- exec:
- command:
- - "/usr/bin/grpc_health_probe"
- - "-addr=:8080"
+ grpc:
+ port: 8082
initialDelaySeconds: 10
periodSeconds: 10
readinessProbe:
- exec:
- command:
- - "/usr/bin/grpc_health_probe"
- - "-addr=:8080"
+ grpc:
+ port: 8082
initialDelaySeconds: 5
periodSeconds: 10
failureThreshold: 10
ports:
- containerPort: 8080
name: grpc
+ - containerPort: 8081
+ name: metrics
+ env:
+ - name: NODE_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: spec.nodeName
+ command:
+ - "nfd-master"
+ resources:
+ limits:
+ cpu: 300m
+ memory: 4Gi
+ requests:
+ cpu: 100m
+ memory: 128Mi
+ args:
+ ## By default, disable crd controller for other than the default instances
+ - "-crd-controller=true"
+ # Go over featureGates and add the feature-gate flag
+ - "-feature-gates=NodeFeatureAPI=true"
+ - "-feature-gates=NodeFeatureGroupAPI=false"
+ - "-metrics=8081"
+ volumeMounts:
+ - name: nfd-master-conf
+ mountPath: "/etc/kubernetes/node-feature-discovery"
+ readOnly: true
+ volumes:
+ - name: nfd-master-conf
+ configMap:
+ name: node-feature-discovery-master-conf
+ items:
+ - key: nfd-master.conf
+ path: nfd-master.conf
+ affinity:
+ nodeAffinity:
+ preferredDuringSchedulingIgnoredDuringExecution:
+ - preference:
+ matchExpressions:
+ - key: node-role.kubernetes.io/master
+ operator: In
+ values:
+ - ""
+ weight: 1
+ tolerations:
+ - effect: NoExecute
+ operator: Exists
+ - effect: NoSchedule
+ operator: Exists
+ - effect: NoExecute
+ key: node.kubernetes.io/not-ready
+ operator: Exists
+ tolerationSeconds: 300
+ - effect: NoExecute
+ key: node.kubernetes.io/unreachable
+ operator: Exists
+ tolerationSeconds: 300
+---
+# Source: node-feature-discovery/templates/nfd-gc.yaml
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: node-feature-discovery-gc
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+ role: gc
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ role: gc
+ template:
+ metadata:
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ role: gc
+ spec:
+ serviceAccountName: node-feature-discovery-gc
+ dnsPolicy: ClusterFirstWithHostNet
+ securityContext: {}
+ containers:
+ - name: gc
+ image: "registry.k8s.io/nfd/node-feature-discovery:v0.16.0"
+ imagePullPolicy: "IfNotPresent"
env:
- name: NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
command:
+ - "nfd-gc"
+ args:
+ - "-gc-interval=1h"
+ resources:
+ limits:
+ cpu: 20m
+ memory: 1Gi
+ requests:
+ cpu: 10m
+ memory: 128Mi
+ securityContext:
+ allowPrivilegeEscalation: false
+ capabilities:
+ drop: ["ALL"]
+ readOnlyRootFilesystem: true
+ runAsNonRoot: true
+ ports:
+ - name: metrics
+ containerPort: 8081
+---
+# Source: node-feature-discovery/templates/post-delete-job.yaml
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ name: node-feature-discovery-prune
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+ annotations:
+ "helm.sh/hook": post-delete
+ "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
+---
+# Source: node-feature-discovery/templates/post-delete-job.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+ name: node-feature-discovery-prune
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+ annotations:
+ "helm.sh/hook": post-delete
+ "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
+rules:
+ - apiGroups:
+ - ""
+ resources:
+ - nodes
+ - nodes/status
+ verbs:
+ - get
+ - patch
+ - update
+ - list
+---
+# Source: node-feature-discovery/templates/post-delete-job.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+ name: node-feature-discovery-prune
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+ annotations:
+ "helm.sh/hook": post-delete
+ "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: node-feature-discovery-prune
+subjects:
+ - kind: ServiceAccount
+ name: node-feature-discovery-prune
+ namespace: default
+---
+# Source: node-feature-discovery/templates/post-delete-job.yaml
+apiVersion: batch/v1
+kind: Job
+metadata:
+ name: node-feature-discovery-prune
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+ annotations:
+ "helm.sh/hook": post-delete
+ "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
+spec:
+ template:
+ metadata:
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+ role: prune
+ spec:
+ serviceAccountName: node-feature-discovery-prune
+ containers:
+ - name: nfd-master
+ securityContext:
+ allowPrivilegeEscalation: false
+ capabilities:
+ drop:
+ - ALL
+ readOnlyRootFilesystem: true
+ runAsNonRoot: true
+ image: "registry.k8s.io/nfd/node-feature-discovery:v0.16.0"
+ imagePullPolicy: IfNotPresent
+ command:
- "nfd-master"
- resources: {}
args:
- ## By default, disable NodeFeatureRules controller for other than the default instances
- - "-featurerules-controller=true"
+ - "-prune"
+ restartPolicy: Never
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution: |
f719846
to
7ea31e7
Compare
Path: @@ -3,29 +3,54 @@
kind: ServiceAccount
metadata:
name: node-feature-discovery
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
app.kubernetes.io/managed-by: Helm
---
-{}
-
# Source: node-feature-discovery/templates/serviceaccount.yaml
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ name: node-feature-discovery-gc
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
---
+# Source: node-feature-discovery/templates/serviceaccount.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: node-feature-discovery-worker
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+---
+# Source: node-feature-discovery/templates/nfd-master-conf.yaml
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: node-feature-discovery-master-conf
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
app.kubernetes.io/managed-by: Helm
+data:
+ nfd-master.conf: |-
+ null
---
# Source: node-feature-discovery/templates/nfd-worker-conf.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: node-feature-discovery-worker-conf
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
@@ -79,171 +104,6 @@
- vendor
- device
---
-# Source: node-feature-discovery/templates/nodefeaturerule-crd.yaml
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.7.0
- creationTimestamp: null
- name: nodefeaturerules.nfd.k8s-sigs.io
-spec:
- group: nfd.k8s-sigs.io
- names:
- kind: NodeFeatureRule
- listKind: NodeFeatureRuleList
- plural: nodefeaturerules
- singular: nodefeaturerule
- scope: Cluster
- versions:
- - name: v1alpha1
- schema:
- openAPIV3Schema:
- description: NodeFeatureRule resource specifies a configuration for feature-based customization of node objects, such as node labeling.
- properties:
- apiVersion:
- description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
- type: string
- kind:
- description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
- type: string
- metadata:
- type: object
- spec:
- description: NodeFeatureRuleSpec describes a NodeFeatureRule.
- properties:
- rules:
- description: Rules is a list of node customization rules.
- items:
- description: Rule defines a rule for node customization such as labeling.
- properties:
- labels:
- additionalProperties:
- type: string
- description: Labels to create if the rule matches.
- type: object
- labelsTemplate:
- description: LabelsTemplate specifies a template to expand for dynamically generating multiple labels. Data (after template expansion) must be keys with an optional value (<key>[=<value>]) separated by newlines.
- type: string
- matchAny:
- description: MatchAny specifies a list of matchers one of which must match.
- items:
- description: MatchAnyElem specifies one sub-matcher of MatchAny.
- properties:
- matchFeatures:
- description: MatchFeatures specifies a set of matcher terms all of which must match.
- items:
- description: FeatureMatcherTerm defines requirements against one feature set. All requirements (specified as MatchExpressions) are evaluated against each element in the feature set.
- properties:
- feature:
- type: string
- matchExpressions:
- additionalProperties:
- description: "MatchExpression specifies an expression to evaluate against a set of input values. It contains an operator that is applied when matching the input and an array of values that the operator evaluates the input against. \n NB: CreateMatchExpression or MustCreateMatchExpression() should be used for creating new instances. NB: Validate() must be called if Op or Value fields are modified or if a new instance is created from scratch without using the helper functions."
- properties:
- op:
- description: Op is the operator to be applied.
- enum:
- - In
- - NotIn
- - InRegexp
- - Exists
- - DoesNotExist
- - Gt
- - Lt
- - GtLt
- - IsTrue
- - IsFalse
- type: string
- value:
- description: Value is the list of values that the operand evaluates the input against. Value should be empty if the operator is Exists, DoesNotExist, IsTrue or IsFalse. Value should contain exactly one element if the operator is Gt or Lt and exactly two elements if the operator is GtLt. In other cases Value should contain at least one element.
- items:
- type: string
- type: array
- required:
- - op
- type: object
- description: MatchExpressionSet contains a set of MatchExpressions, each of which is evaluated against a set of input values.
- type: object
- required:
- - feature
- - matchExpressions
- type: object
- type: array
- required:
- - matchFeatures
- type: object
- type: array
- matchFeatures:
- description: MatchFeatures specifies a set of matcher terms all of which must match.
- items:
- description: FeatureMatcherTerm defines requirements against one feature set. All requirements (specified as MatchExpressions) are evaluated against each element in the feature set.
- properties:
- feature:
- type: string
- matchExpressions:
- additionalProperties:
- description: "MatchExpression specifies an expression to evaluate against a set of input values. It contains an operator that is applied when matching the input and an array of values that the operator evaluates the input against. \n NB: CreateMatchExpression or MustCreateMatchExpression() should be used for creating new instances. NB: Validate() must be called if Op or Value fields are modified or if a new instance is created from scratch without using the helper functions."
- properties:
- op:
- description: Op is the operator to be applied.
- enum:
- - In
- - NotIn
- - InRegexp
- - Exists
- - DoesNotExist
- - Gt
- - Lt
- - GtLt
- - IsTrue
- - IsFalse
- type: string
- value:
- description: Value is the list of values that the operand evaluates the input against. Value should be empty if the operator is Exists, DoesNotExist, IsTrue or IsFalse. Value should contain exactly one element if the operator is Gt or Lt and exactly two elements if the operator is GtLt. In other cases Value should contain at least one element.
- items:
- type: string
- type: array
- required:
- - op
- type: object
- description: MatchExpressionSet contains a set of MatchExpressions, each of which is evaluated against a set of input values.
- type: object
- required:
- - feature
- - matchExpressions
- type: object
- type: array
- name:
- description: Name of the rule.
- type: string
- vars:
- additionalProperties:
- type: string
- description: Vars is the variables to store if the rule matches. Variables do not directly inflict any changes in the node object. However, they can be referenced from other rules enabling more complex rule hierarchies, without exposing intermediary output values as labels.
- type: object
- varsTemplate:
- description: VarsTemplate specifies a template to expand for dynamically generating multiple variables. Data (after template expansion) must be keys with an optional value (<key>[=<value>]) separated by newlines.
- type: string
- required:
- - name
- type: object
- type: array
- required:
- - rules
- type: object
- required:
- - spec
- type: object
- served: true
- storage: true
-status:
- acceptedNames:
- kind: ""
- plural: ""
- conditions: []
- storedVersions: []
----
# Source: node-feature-discovery/templates/clusterrole.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
@@ -258,6 +118,7 @@
- ""
resources:
- nodes
+ - nodes/status
verbs:
- get
- patch
@@ -266,11 +127,73 @@
- apiGroups:
- nfd.k8s-sigs.io
resources:
+ - nodefeatures
- nodefeaturerules
+ - nodefeaturegroups
verbs:
- get
- list
- watch
+ - apiGroups:
+ - nfd.k8s-sigs.io
+ resources:
+ - nodefeaturegroups/status
+ verbs:
+ - patch
+ - update
+ - apiGroups:
+ - coordination.k8s.io
+ resources:
+ - leases
+ verbs:
+ - create
+ - apiGroups:
+ - coordination.k8s.io
+ resources:
+ - leases
+ resourceNames:
+ - "nfd-master.nfd.kubernetes.io"
+ verbs:
+ - get
+ - update
+---
+# Source: node-feature-discovery/templates/clusterrole.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+ name: node-feature-discovery-gc
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+rules:
+ - apiGroups:
+ - ""
+ resources:
+ - nodes
+ verbs:
+ - list
+ - watch
+ - apiGroups:
+ - ""
+ resources:
+ - nodes/proxy
+ verbs:
+ - get
+ - apiGroups:
+ - topology.node.k8s.io
+ resources:
+ - noderesourcetopologies
+ verbs:
+ - delete
+ - list
+ - apiGroups:
+ - nfd.k8s-sigs.io
+ resources:
+ - nodefeatures
+ verbs:
+ - delete
+ - list
---
# Source: node-feature-discovery/templates/clusterrolebinding.yaml
apiVersion: rbac.authorization.k8s.io/v1
@@ -290,38 +213,74 @@
name: node-feature-discovery
namespace: default
---
-# Source: node-feature-discovery/templates/service.yaml
-apiVersion: v1
-kind: Service
+# Source: node-feature-discovery/templates/clusterrolebinding.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
metadata:
- name: node-feature-discovery-master
+ name: node-feature-discovery-gc
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
app.kubernetes.io/managed-by: Helm
- role: master
-spec:
- type: ClusterIP
- ports:
- - port: 8080
- targetPort: grpc
- protocol: TCP
- name: grpc
- selector:
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: node-feature-discovery-gc
+subjects:
+ - kind: ServiceAccount
+ name: node-feature-discovery-gc
+ namespace: default
+---
+# Source: node-feature-discovery/templates/role.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: Role
+metadata:
+ name: node-feature-discovery-worker
+ namespace: default
+ labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+rules:
+ - apiGroups:
+ - nfd.k8s-sigs.io
+ resources:
+ - nodefeatures
+ verbs:
+ - create
+ - get
+ - update
+---
+# Source: node-feature-discovery/templates/rolebinding.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: RoleBinding
+metadata:
+ name: node-feature-discovery-worker
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: Role
+ name: node-feature-discovery-worker
+subjects:
+ - kind: ServiceAccount
+ name: node-feature-discovery-worker
+ namespace: default
---
# Source: node-feature-discovery/templates/worker.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: node-feature-discovery-worker
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
app.kubernetes.io/managed-by: Helm
role: worker
- annotations: {}
spec:
selector:
matchLabels:
@@ -349,13 +308,32 @@
- ALL
readOnlyRootFilesystem: true
runAsNonRoot: true
- image: "k8s.gcr.io/nfd/node-feature-discovery:v0.11.2"
+ image: "registry.k8s.io/nfd/node-feature-discovery:v0.16.1"
imagePullPolicy: IfNotPresent
+ livenessProbe:
+ grpc:
+ port: 8082
+ initialDelaySeconds: 10
+ periodSeconds: 10
+ readinessProbe:
+ grpc:
+ port: 8082
+ initialDelaySeconds: 5
+ periodSeconds: 10
+ failureThreshold: 10
env:
- name: NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
+ - name: POD_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.name
+ - name: POD_UID
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.uid
resources:
limits:
cpu: 1024m
@@ -366,7 +344,13 @@
command:
- "nfd-worker"
args:
- - "--server=node-feature-discovery-master:8080"
+ # Go over featureGate and add the feature-gate flag
+ - "-feature-gates=NodeFeatureAPI=true"
+ - "-feature-gates=NodeFeatureGroupAPI=false"
+ - "-metrics=8081"
+ ports:
+ - name: metrics
+ containerPort: 8081
volumeMounts:
- name: host-boot
mountPath: "/host-boot"
@@ -380,6 +364,12 @@
- name: host-usr-lib
mountPath: "/host-usr/lib"
readOnly: true
+ - name: host-lib
+ mountPath: "/host-lib"
+ readOnly: true
+ - name: host-proc-swaps
+ mountPath: "/host-proc/swaps"
+ readOnly: true
- name: source-d
mountPath: "/etc/kubernetes/node-feature-discovery/source.d/"
readOnly: true
@@ -402,6 +392,12 @@
- name: host-usr-lib
hostPath:
path: "/usr/lib"
+ - name: host-lib
+ hostPath:
+ path: "/lib"
+ - name: host-proc-swaps
+ hostPath:
+ path: "/proc/swaps"
- name: source-d
hostPath:
path: "/etc/kubernetes/node-feature-discovery/source.d/"
@@ -425,12 +421,12 @@
kind: Deployment
metadata:
name: node-feature-discovery-master
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
app.kubernetes.io/managed-by: Helm
role: master
- annotations: {}
spec:
replicas: 1
selector:
@@ -444,9 +440,9 @@
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
role: master
- annotations: {}
spec:
serviceAccountName: node-feature-discovery
+ enableServiceLinks: false
securityContext: {}
containers:
- name: master
@@ -457,37 +453,234 @@
- ALL
readOnlyRootFilesystem: true
runAsNonRoot: true
- image: "k8s.gcr.io/nfd/node-feature-discovery:v0.11.2"
+ image: "registry.k8s.io/nfd/node-feature-discovery:v0.16.1"
imagePullPolicy: IfNotPresent
livenessProbe:
- exec:
- command:
- - "/usr/bin/grpc_health_probe"
- - "-addr=:8080"
+ grpc:
+ port: 8082
initialDelaySeconds: 10
periodSeconds: 10
readinessProbe:
- exec:
- command:
- - "/usr/bin/grpc_health_probe"
- - "-addr=:8080"
+ grpc:
+ port: 8082
initialDelaySeconds: 5
periodSeconds: 10
failureThreshold: 10
ports:
- containerPort: 8080
name: grpc
+ - containerPort: 8081
+ name: metrics
+ env:
+ - name: NODE_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: spec.nodeName
+ command:
+ - "nfd-master"
+ resources:
+ limits:
+ memory: 4Gi
+ requests:
+ cpu: 100m
+ memory: 128Mi
+ args:
+ ## By default, disable crd controller for other than the default instances
+ - "-crd-controller=true"
+ # Go over featureGates and add the feature-gate flag
+ - "-feature-gates=NodeFeatureAPI=true"
+ - "-feature-gates=NodeFeatureGroupAPI=false"
+ - "-metrics=8081"
+ volumeMounts:
+ - name: nfd-master-conf
+ mountPath: "/etc/kubernetes/node-feature-discovery"
+ readOnly: true
+ volumes:
+ - name: nfd-master-conf
+ configMap:
+ name: node-feature-discovery-master-conf
+ items:
+ - key: nfd-master.conf
+ path: nfd-master.conf
+ affinity:
+ nodeAffinity:
+ preferredDuringSchedulingIgnoredDuringExecution:
+ - preference:
+ matchExpressions:
+ - key: node-role.kubernetes.io/master
+ operator: In
+ values:
+ - ""
+ weight: 1
+ tolerations:
+ - effect: NoExecute
+ operator: Exists
+ - effect: NoSchedule
+ operator: Exists
+ - effect: NoExecute
+ key: node.kubernetes.io/not-ready
+ operator: Exists
+ tolerationSeconds: 300
+ - effect: NoExecute
+ key: node.kubernetes.io/unreachable
+ operator: Exists
+ tolerationSeconds: 300
+---
+# Source: node-feature-discovery/templates/nfd-gc.yaml
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: node-feature-discovery-gc
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+ role: gc
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ role: gc
+ template:
+ metadata:
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ role: gc
+ spec:
+ serviceAccountName: node-feature-discovery-gc
+ dnsPolicy: ClusterFirstWithHostNet
+ securityContext: {}
+ containers:
+ - name: gc
+ image: "registry.k8s.io/nfd/node-feature-discovery:v0.16.1"
+ imagePullPolicy: "IfNotPresent"
env:
- name: NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
command:
+ - "nfd-gc"
+ args:
+ - "-gc-interval=1h"
+ resources:
+ limits:
+ memory: 1Gi
+ requests:
+ cpu: 10m
+ memory: 128Mi
+ securityContext:
+ allowPrivilegeEscalation: false
+ capabilities:
+ drop: ["ALL"]
+ readOnlyRootFilesystem: true
+ runAsNonRoot: true
+ ports:
+ - name: metrics
+ containerPort: 8081
+---
+# Source: node-feature-discovery/templates/post-delete-job.yaml
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ name: node-feature-discovery-prune
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+ annotations:
+ "helm.sh/hook": post-delete
+ "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
+---
+# Source: node-feature-discovery/templates/post-delete-job.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+ name: node-feature-discovery-prune
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+ annotations:
+ "helm.sh/hook": post-delete
+ "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
+rules:
+ - apiGroups:
+ - ""
+ resources:
+ - nodes
+ - nodes/status
+ verbs:
+ - get
+ - patch
+ - update
+ - list
+---
+# Source: node-feature-discovery/templates/post-delete-job.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+ name: node-feature-discovery-prune
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+ annotations:
+ "helm.sh/hook": post-delete
+ "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: node-feature-discovery-prune
+subjects:
+ - kind: ServiceAccount
+ name: node-feature-discovery-prune
+ namespace: default
+---
+# Source: node-feature-discovery/templates/post-delete-job.yaml
+apiVersion: batch/v1
+kind: Job
+metadata:
+ name: node-feature-discovery-prune
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+ annotations:
+ "helm.sh/hook": post-delete
+ "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
+spec:
+ template:
+ metadata:
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+ role: prune
+ spec:
+ serviceAccountName: node-feature-discovery-prune
+ containers:
+ - name: nfd-master
+ securityContext:
+ allowPrivilegeEscalation: false
+ capabilities:
+ drop:
+ - ALL
+ readOnlyRootFilesystem: true
+ runAsNonRoot: true
+ image: "registry.k8s.io/nfd/node-feature-discovery:v0.16.1"
+ imagePullPolicy: IfNotPresent
+ command:
- "nfd-master"
- resources: {}
args:
- ## By default, disable NodeFeatureRules controller for other than the default instances
- - "-featurerules-controller=true"
+ - "-prune"
+ restartPolicy: Never
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution: |
7ea31e7
to
d27e791
Compare
Path: @@ -3,29 +3,54 @@
kind: ServiceAccount
metadata:
name: node-feature-discovery
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
app.kubernetes.io/managed-by: Helm
---
-{}
-
# Source: node-feature-discovery/templates/serviceaccount.yaml
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ name: node-feature-discovery-gc
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
---
+# Source: node-feature-discovery/templates/serviceaccount.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: node-feature-discovery-worker
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
app.kubernetes.io/managed-by: Helm
---
+# Source: node-feature-discovery/templates/nfd-master-conf.yaml
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: node-feature-discovery-master-conf
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+data:
+ nfd-master.conf: |-
+ null
+---
# Source: node-feature-discovery/templates/nfd-worker-conf.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: node-feature-discovery-worker-conf
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
@@ -79,171 +104,6 @@
- vendor
- device
---
-# Source: node-feature-discovery/templates/nodefeaturerule-crd.yaml
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.7.0
- creationTimestamp: null
- name: nodefeaturerules.nfd.k8s-sigs.io
-spec:
- group: nfd.k8s-sigs.io
- names:
- kind: NodeFeatureRule
- listKind: NodeFeatureRuleList
- plural: nodefeaturerules
- singular: nodefeaturerule
- scope: Cluster
- versions:
- - name: v1alpha1
- schema:
- openAPIV3Schema:
- description: NodeFeatureRule resource specifies a configuration for feature-based customization of node objects, such as node labeling.
- properties:
- apiVersion:
- description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
- type: string
- kind:
- description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
- type: string
- metadata:
- type: object
- spec:
- description: NodeFeatureRuleSpec describes a NodeFeatureRule.
- properties:
- rules:
- description: Rules is a list of node customization rules.
- items:
- description: Rule defines a rule for node customization such as labeling.
- properties:
- labels:
- additionalProperties:
- type: string
- description: Labels to create if the rule matches.
- type: object
- labelsTemplate:
- description: LabelsTemplate specifies a template to expand for dynamically generating multiple labels. Data (after template expansion) must be keys with an optional value (<key>[=<value>]) separated by newlines.
- type: string
- matchAny:
- description: MatchAny specifies a list of matchers one of which must match.
- items:
- description: MatchAnyElem specifies one sub-matcher of MatchAny.
- properties:
- matchFeatures:
- description: MatchFeatures specifies a set of matcher terms all of which must match.
- items:
- description: FeatureMatcherTerm defines requirements against one feature set. All requirements (specified as MatchExpressions) are evaluated against each element in the feature set.
- properties:
- feature:
- type: string
- matchExpressions:
- additionalProperties:
- description: "MatchExpression specifies an expression to evaluate against a set of input values. It contains an operator that is applied when matching the input and an array of values that the operator evaluates the input against. \n NB: CreateMatchExpression or MustCreateMatchExpression() should be used for creating new instances. NB: Validate() must be called if Op or Value fields are modified or if a new instance is created from scratch without using the helper functions."
- properties:
- op:
- description: Op is the operator to be applied.
- enum:
- - In
- - NotIn
- - InRegexp
- - Exists
- - DoesNotExist
- - Gt
- - Lt
- - GtLt
- - IsTrue
- - IsFalse
- type: string
- value:
- description: Value is the list of values that the operand evaluates the input against. Value should be empty if the operator is Exists, DoesNotExist, IsTrue or IsFalse. Value should contain exactly one element if the operator is Gt or Lt and exactly two elements if the operator is GtLt. In other cases Value should contain at least one element.
- items:
- type: string
- type: array
- required:
- - op
- type: object
- description: MatchExpressionSet contains a set of MatchExpressions, each of which is evaluated against a set of input values.
- type: object
- required:
- - feature
- - matchExpressions
- type: object
- type: array
- required:
- - matchFeatures
- type: object
- type: array
- matchFeatures:
- description: MatchFeatures specifies a set of matcher terms all of which must match.
- items:
- description: FeatureMatcherTerm defines requirements against one feature set. All requirements (specified as MatchExpressions) are evaluated against each element in the feature set.
- properties:
- feature:
- type: string
- matchExpressions:
- additionalProperties:
- description: "MatchExpression specifies an expression to evaluate against a set of input values. It contains an operator that is applied when matching the input and an array of values that the operator evaluates the input against. \n NB: CreateMatchExpression or MustCreateMatchExpression() should be used for creating new instances. NB: Validate() must be called if Op or Value fields are modified or if a new instance is created from scratch without using the helper functions."
- properties:
- op:
- description: Op is the operator to be applied.
- enum:
- - In
- - NotIn
- - InRegexp
- - Exists
- - DoesNotExist
- - Gt
- - Lt
- - GtLt
- - IsTrue
- - IsFalse
- type: string
- value:
- description: Value is the list of values that the operand evaluates the input against. Value should be empty if the operator is Exists, DoesNotExist, IsTrue or IsFalse. Value should contain exactly one element if the operator is Gt or Lt and exactly two elements if the operator is GtLt. In other cases Value should contain at least one element.
- items:
- type: string
- type: array
- required:
- - op
- type: object
- description: MatchExpressionSet contains a set of MatchExpressions, each of which is evaluated against a set of input values.
- type: object
- required:
- - feature
- - matchExpressions
- type: object
- type: array
- name:
- description: Name of the rule.
- type: string
- vars:
- additionalProperties:
- type: string
- description: Vars is the variables to store if the rule matches. Variables do not directly inflict any changes in the node object. However, they can be referenced from other rules enabling more complex rule hierarchies, without exposing intermediary output values as labels.
- type: object
- varsTemplate:
- description: VarsTemplate specifies a template to expand for dynamically generating multiple variables. Data (after template expansion) must be keys with an optional value (<key>[=<value>]) separated by newlines.
- type: string
- required:
- - name
- type: object
- type: array
- required:
- - rules
- type: object
- required:
- - spec
- type: object
- served: true
- storage: true
-status:
- acceptedNames:
- kind: ""
- plural: ""
- conditions: []
- storedVersions: []
----
# Source: node-feature-discovery/templates/clusterrole.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
@@ -258,6 +118,7 @@
- ""
resources:
- nodes
+ - nodes/status
verbs:
- get
- patch
@@ -266,11 +127,73 @@
- apiGroups:
- nfd.k8s-sigs.io
resources:
+ - nodefeatures
- nodefeaturerules
+ - nodefeaturegroups
verbs:
- get
- list
- watch
+ - apiGroups:
+ - nfd.k8s-sigs.io
+ resources:
+ - nodefeaturegroups/status
+ verbs:
+ - patch
+ - update
+ - apiGroups:
+ - coordination.k8s.io
+ resources:
+ - leases
+ verbs:
+ - create
+ - apiGroups:
+ - coordination.k8s.io
+ resources:
+ - leases
+ resourceNames:
+ - "nfd-master.nfd.kubernetes.io"
+ verbs:
+ - get
+ - update
+---
+# Source: node-feature-discovery/templates/clusterrole.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+ name: node-feature-discovery-gc
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+rules:
+ - apiGroups:
+ - ""
+ resources:
+ - nodes
+ verbs:
+ - list
+ - watch
+ - apiGroups:
+ - ""
+ resources:
+ - nodes/proxy
+ verbs:
+ - get
+ - apiGroups:
+ - topology.node.k8s.io
+ resources:
+ - noderesourcetopologies
+ verbs:
+ - delete
+ - list
+ - apiGroups:
+ - nfd.k8s-sigs.io
+ resources:
+ - nodefeatures
+ verbs:
+ - delete
+ - list
---
# Source: node-feature-discovery/templates/clusterrolebinding.yaml
apiVersion: rbac.authorization.k8s.io/v1
@@ -290,38 +213,80 @@
name: node-feature-discovery
namespace: default
---
-# Source: node-feature-discovery/templates/service.yaml
-apiVersion: v1
-kind: Service
+# Source: node-feature-discovery/templates/clusterrolebinding.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
metadata:
- name: node-feature-discovery-master
+ name: node-feature-discovery-gc
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
app.kubernetes.io/managed-by: Helm
- role: master
-spec:
- type: ClusterIP
- ports:
- - port: 8080
- targetPort: grpc
- protocol: TCP
- name: grpc
- selector:
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: node-feature-discovery-gc
+subjects:
+ - kind: ServiceAccount
+ name: node-feature-discovery-gc
+ namespace: default
+---
+# Source: node-feature-discovery/templates/role.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: Role
+metadata:
+ name: node-feature-discovery-worker
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+rules:
+ - apiGroups:
+ - nfd.k8s-sigs.io
+ resources:
+ - nodefeatures
+ verbs:
+ - create
+ - get
+ - update
+ - apiGroups:
+ - ""
+ resources:
+ - pods
+ verbs:
+ - get
+---
+# Source: node-feature-discovery/templates/rolebinding.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: RoleBinding
+metadata:
+ name: node-feature-discovery-worker
+ namespace: default
+ labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: Role
+ name: node-feature-discovery-worker
+subjects:
+ - kind: ServiceAccount
+ name: node-feature-discovery-worker
+ namespace: default
---
# Source: node-feature-discovery/templates/worker.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: node-feature-discovery-worker
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
app.kubernetes.io/managed-by: Helm
role: worker
- annotations: {}
spec:
selector:
matchLabels:
@@ -349,13 +314,32 @@
- ALL
readOnlyRootFilesystem: true
runAsNonRoot: true
- image: "k8s.gcr.io/nfd/node-feature-discovery:v0.11.2"
+ image: "registry.k8s.io/nfd/node-feature-discovery:v0.16.2"
imagePullPolicy: IfNotPresent
+ livenessProbe:
+ grpc:
+ port: 8082
+ initialDelaySeconds: 10
+ periodSeconds: 10
+ readinessProbe:
+ grpc:
+ port: 8082
+ initialDelaySeconds: 5
+ periodSeconds: 10
+ failureThreshold: 10
env:
- name: NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
+ - name: POD_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.name
+ - name: POD_UID
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.uid
resources:
limits:
cpu: 1024m
@@ -366,7 +350,13 @@
command:
- "nfd-worker"
args:
- - "--server=node-feature-discovery-master:8080"
+ # Go over featureGate and add the feature-gate flag
+ - "-feature-gates=NodeFeatureAPI=true"
+ - "-feature-gates=NodeFeatureGroupAPI=false"
+ - "-metrics=8081"
+ ports:
+ - name: metrics
+ containerPort: 8081
volumeMounts:
- name: host-boot
mountPath: "/host-boot"
@@ -380,6 +370,12 @@
- name: host-usr-lib
mountPath: "/host-usr/lib"
readOnly: true
+ - name: host-lib
+ mountPath: "/host-lib"
+ readOnly: true
+ - name: host-proc-swaps
+ mountPath: "/host-proc/swaps"
+ readOnly: true
- name: source-d
mountPath: "/etc/kubernetes/node-feature-discovery/source.d/"
readOnly: true
@@ -402,6 +398,12 @@
- name: host-usr-lib
hostPath:
path: "/usr/lib"
+ - name: host-lib
+ hostPath:
+ path: "/lib"
+ - name: host-proc-swaps
+ hostPath:
+ path: "/proc/swaps"
- name: source-d
hostPath:
path: "/etc/kubernetes/node-feature-discovery/source.d/"
@@ -425,12 +427,12 @@
kind: Deployment
metadata:
name: node-feature-discovery-master
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
app.kubernetes.io/managed-by: Helm
role: master
- annotations: {}
spec:
replicas: 1
selector:
@@ -444,9 +446,9 @@
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
role: master
- annotations: {}
spec:
serviceAccountName: node-feature-discovery
+ enableServiceLinks: false
securityContext: {}
containers:
- name: master
@@ -457,26 +459,24 @@
- ALL
readOnlyRootFilesystem: true
runAsNonRoot: true
- image: "k8s.gcr.io/nfd/node-feature-discovery:v0.11.2"
+ image: "registry.k8s.io/nfd/node-feature-discovery:v0.16.2"
imagePullPolicy: IfNotPresent
livenessProbe:
- exec:
- command:
- - "/usr/bin/grpc_health_probe"
- - "-addr=:8080"
+ grpc:
+ port: 8082
initialDelaySeconds: 10
periodSeconds: 10
readinessProbe:
- exec:
- command:
- - "/usr/bin/grpc_health_probe"
- - "-addr=:8080"
+ grpc:
+ port: 8082
initialDelaySeconds: 5
periodSeconds: 10
failureThreshold: 10
ports:
- containerPort: 8080
name: grpc
+ - containerPort: 8081
+ name: metrics
env:
- name: NODE_NAME
valueFrom:
@@ -484,10 +484,209 @@
fieldPath: spec.nodeName
command:
- "nfd-master"
- resources: {}
+ resources:
+ limits:
+ memory: 4Gi
+ requests:
+ cpu: 100m
+ memory: 128Mi
+ args:
+ ## By default, disable crd controller for other than the default instances
+ - "-crd-controller=true"
+ # Go over featureGates and add the feature-gate flag
+ - "-feature-gates=NodeFeatureAPI=true"
+ - "-feature-gates=NodeFeatureGroupAPI=false"
+ - "-metrics=8081"
+ volumeMounts:
+ - name: nfd-master-conf
+ mountPath: "/etc/kubernetes/node-feature-discovery"
+ readOnly: true
+ volumes:
+ - name: nfd-master-conf
+ configMap:
+ name: node-feature-discovery-master-conf
+ items:
+ - key: nfd-master.conf
+ path: nfd-master.conf
+ affinity:
+ nodeAffinity:
+ preferredDuringSchedulingIgnoredDuringExecution:
+ - preference:
+ matchExpressions:
+ - key: node-role.kubernetes.io/master
+ operator: In
+ values:
+ - ""
+ weight: 1
+ tolerations:
+ - effect: NoExecute
+ operator: Exists
+ - effect: NoSchedule
+ operator: Exists
+ - effect: NoExecute
+ key: node.kubernetes.io/not-ready
+ operator: Exists
+ tolerationSeconds: 300
+ - effect: NoExecute
+ key: node.kubernetes.io/unreachable
+ operator: Exists
+ tolerationSeconds: 300
+---
+# Source: node-feature-discovery/templates/nfd-gc.yaml
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: node-feature-discovery-gc
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+ role: gc
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ role: gc
+ template:
+ metadata:
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ role: gc
+ spec:
+ serviceAccountName: node-feature-discovery-gc
+ dnsPolicy: ClusterFirstWithHostNet
+ securityContext: {}
+ containers:
+ - name: gc
+ image: "registry.k8s.io/nfd/node-feature-discovery:v0.16.2"
+ imagePullPolicy: "IfNotPresent"
+ env:
+ - name: NODE_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: spec.nodeName
+ command:
+ - "nfd-gc"
+ args:
+ - "-gc-interval=1h"
+ resources:
+ limits:
+ memory: 1Gi
+ requests:
+ cpu: 10m
+ memory: 128Mi
+ securityContext:
+ allowPrivilegeEscalation: false
+ capabilities:
+ drop: ["ALL"]
+ readOnlyRootFilesystem: true
+ runAsNonRoot: true
+ ports:
+ - name: metrics
+ containerPort: 8081
+---
+# Source: node-feature-discovery/templates/post-delete-job.yaml
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ name: node-feature-discovery-prune
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+ annotations:
+ "helm.sh/hook": post-delete
+ "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
+---
+# Source: node-feature-discovery/templates/post-delete-job.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+ name: node-feature-discovery-prune
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+ annotations:
+ "helm.sh/hook": post-delete
+ "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
+rules:
+ - apiGroups:
+ - ""
+ resources:
+ - nodes
+ - nodes/status
+ verbs:
+ - get
+ - patch
+ - update
+ - list
+---
+# Source: node-feature-discovery/templates/post-delete-job.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+ name: node-feature-discovery-prune
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+ annotations:
+ "helm.sh/hook": post-delete
+ "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: node-feature-discovery-prune
+subjects:
+ - kind: ServiceAccount
+ name: node-feature-discovery-prune
+ namespace: default
+---
+# Source: node-feature-discovery/templates/post-delete-job.yaml
+apiVersion: batch/v1
+kind: Job
+metadata:
+ name: node-feature-discovery-prune
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+ annotations:
+ "helm.sh/hook": post-delete
+ "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
+spec:
+ template:
+ metadata:
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+ role: prune
+ spec:
+ serviceAccountName: node-feature-discovery-prune
+ containers:
+ - name: nfd-master
+ securityContext:
+ allowPrivilegeEscalation: false
+ capabilities:
+ drop:
+ - ALL
+ readOnlyRootFilesystem: true
+ runAsNonRoot: true
+ image: "registry.k8s.io/nfd/node-feature-discovery:v0.16.2"
+ imagePullPolicy: IfNotPresent
+ command:
+ - "nfd-master"
args:
- ## By default, disable NodeFeatureRules controller for other than the default instances
- - "-featurerules-controller=true"
+ - "-prune"
+ restartPolicy: Never
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution: |
d27e791
to
adc35a5
Compare
Path: @@ -3,29 +3,54 @@
kind: ServiceAccount
metadata:
name: node-feature-discovery
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
app.kubernetes.io/managed-by: Helm
---
-{}
-
# Source: node-feature-discovery/templates/serviceaccount.yaml
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ name: node-feature-discovery-gc
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
---
+# Source: node-feature-discovery/templates/serviceaccount.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: node-feature-discovery-worker
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
app.kubernetes.io/managed-by: Helm
---
+# Source: node-feature-discovery/templates/nfd-master-conf.yaml
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: node-feature-discovery-master-conf
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+data:
+ nfd-master.conf: |-
+ null
+---
# Source: node-feature-discovery/templates/nfd-worker-conf.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: node-feature-discovery-worker-conf
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
@@ -79,171 +104,6 @@
- vendor
- device
---
-# Source: node-feature-discovery/templates/nodefeaturerule-crd.yaml
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.7.0
- creationTimestamp: null
- name: nodefeaturerules.nfd.k8s-sigs.io
-spec:
- group: nfd.k8s-sigs.io
- names:
- kind: NodeFeatureRule
- listKind: NodeFeatureRuleList
- plural: nodefeaturerules
- singular: nodefeaturerule
- scope: Cluster
- versions:
- - name: v1alpha1
- schema:
- openAPIV3Schema:
- description: NodeFeatureRule resource specifies a configuration for feature-based customization of node objects, such as node labeling.
- properties:
- apiVersion:
- description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
- type: string
- kind:
- description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
- type: string
- metadata:
- type: object
- spec:
- description: NodeFeatureRuleSpec describes a NodeFeatureRule.
- properties:
- rules:
- description: Rules is a list of node customization rules.
- items:
- description: Rule defines a rule for node customization such as labeling.
- properties:
- labels:
- additionalProperties:
- type: string
- description: Labels to create if the rule matches.
- type: object
- labelsTemplate:
- description: LabelsTemplate specifies a template to expand for dynamically generating multiple labels. Data (after template expansion) must be keys with an optional value (<key>[=<value>]) separated by newlines.
- type: string
- matchAny:
- description: MatchAny specifies a list of matchers one of which must match.
- items:
- description: MatchAnyElem specifies one sub-matcher of MatchAny.
- properties:
- matchFeatures:
- description: MatchFeatures specifies a set of matcher terms all of which must match.
- items:
- description: FeatureMatcherTerm defines requirements against one feature set. All requirements (specified as MatchExpressions) are evaluated against each element in the feature set.
- properties:
- feature:
- type: string
- matchExpressions:
- additionalProperties:
- description: "MatchExpression specifies an expression to evaluate against a set of input values. It contains an operator that is applied when matching the input and an array of values that the operator evaluates the input against. \n NB: CreateMatchExpression or MustCreateMatchExpression() should be used for creating new instances. NB: Validate() must be called if Op or Value fields are modified or if a new instance is created from scratch without using the helper functions."
- properties:
- op:
- description: Op is the operator to be applied.
- enum:
- - In
- - NotIn
- - InRegexp
- - Exists
- - DoesNotExist
- - Gt
- - Lt
- - GtLt
- - IsTrue
- - IsFalse
- type: string
- value:
- description: Value is the list of values that the operand evaluates the input against. Value should be empty if the operator is Exists, DoesNotExist, IsTrue or IsFalse. Value should contain exactly one element if the operator is Gt or Lt and exactly two elements if the operator is GtLt. In other cases Value should contain at least one element.
- items:
- type: string
- type: array
- required:
- - op
- type: object
- description: MatchExpressionSet contains a set of MatchExpressions, each of which is evaluated against a set of input values.
- type: object
- required:
- - feature
- - matchExpressions
- type: object
- type: array
- required:
- - matchFeatures
- type: object
- type: array
- matchFeatures:
- description: MatchFeatures specifies a set of matcher terms all of which must match.
- items:
- description: FeatureMatcherTerm defines requirements against one feature set. All requirements (specified as MatchExpressions) are evaluated against each element in the feature set.
- properties:
- feature:
- type: string
- matchExpressions:
- additionalProperties:
- description: "MatchExpression specifies an expression to evaluate against a set of input values. It contains an operator that is applied when matching the input and an array of values that the operator evaluates the input against. \n NB: CreateMatchExpression or MustCreateMatchExpression() should be used for creating new instances. NB: Validate() must be called if Op or Value fields are modified or if a new instance is created from scratch without using the helper functions."
- properties:
- op:
- description: Op is the operator to be applied.
- enum:
- - In
- - NotIn
- - InRegexp
- - Exists
- - DoesNotExist
- - Gt
- - Lt
- - GtLt
- - IsTrue
- - IsFalse
- type: string
- value:
- description: Value is the list of values that the operand evaluates the input against. Value should be empty if the operator is Exists, DoesNotExist, IsTrue or IsFalse. Value should contain exactly one element if the operator is Gt or Lt and exactly two elements if the operator is GtLt. In other cases Value should contain at least one element.
- items:
- type: string
- type: array
- required:
- - op
- type: object
- description: MatchExpressionSet contains a set of MatchExpressions, each of which is evaluated against a set of input values.
- type: object
- required:
- - feature
- - matchExpressions
- type: object
- type: array
- name:
- description: Name of the rule.
- type: string
- vars:
- additionalProperties:
- type: string
- description: Vars is the variables to store if the rule matches. Variables do not directly inflict any changes in the node object. However, they can be referenced from other rules enabling more complex rule hierarchies, without exposing intermediary output values as labels.
- type: object
- varsTemplate:
- description: VarsTemplate specifies a template to expand for dynamically generating multiple variables. Data (after template expansion) must be keys with an optional value (<key>[=<value>]) separated by newlines.
- type: string
- required:
- - name
- type: object
- type: array
- required:
- - rules
- type: object
- required:
- - spec
- type: object
- served: true
- storage: true
-status:
- acceptedNames:
- kind: ""
- plural: ""
- conditions: []
- storedVersions: []
----
# Source: node-feature-discovery/templates/clusterrole.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
@@ -258,6 +118,7 @@
- ""
resources:
- nodes
+ - nodes/status
verbs:
- get
- patch
@@ -266,11 +127,73 @@
- apiGroups:
- nfd.k8s-sigs.io
resources:
+ - nodefeatures
- nodefeaturerules
+ - nodefeaturegroups
verbs:
- get
- list
- watch
+ - apiGroups:
+ - nfd.k8s-sigs.io
+ resources:
+ - nodefeaturegroups/status
+ verbs:
+ - patch
+ - update
+ - apiGroups:
+ - coordination.k8s.io
+ resources:
+ - leases
+ verbs:
+ - create
+ - apiGroups:
+ - coordination.k8s.io
+ resources:
+ - leases
+ resourceNames:
+ - "nfd-master.nfd.kubernetes.io"
+ verbs:
+ - get
+ - update
+---
+# Source: node-feature-discovery/templates/clusterrole.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+ name: node-feature-discovery-gc
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+rules:
+ - apiGroups:
+ - ""
+ resources:
+ - nodes
+ verbs:
+ - list
+ - watch
+ - apiGroups:
+ - ""
+ resources:
+ - nodes/proxy
+ verbs:
+ - get
+ - apiGroups:
+ - topology.node.k8s.io
+ resources:
+ - noderesourcetopologies
+ verbs:
+ - delete
+ - list
+ - apiGroups:
+ - nfd.k8s-sigs.io
+ resources:
+ - nodefeatures
+ verbs:
+ - delete
+ - list
---
# Source: node-feature-discovery/templates/clusterrolebinding.yaml
apiVersion: rbac.authorization.k8s.io/v1
@@ -290,38 +213,80 @@
name: node-feature-discovery
namespace: default
---
-# Source: node-feature-discovery/templates/service.yaml
-apiVersion: v1
-kind: Service
+# Source: node-feature-discovery/templates/clusterrolebinding.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
metadata:
- name: node-feature-discovery-master
+ name: node-feature-discovery-gc
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
app.kubernetes.io/managed-by: Helm
- role: master
-spec:
- type: ClusterIP
- ports:
- - port: 8080
- targetPort: grpc
- protocol: TCP
- name: grpc
- selector:
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: node-feature-discovery-gc
+subjects:
+ - kind: ServiceAccount
+ name: node-feature-discovery-gc
+ namespace: default
+---
+# Source: node-feature-discovery/templates/role.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: Role
+metadata:
+ name: node-feature-discovery-worker
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+rules:
+ - apiGroups:
+ - nfd.k8s-sigs.io
+ resources:
+ - nodefeatures
+ verbs:
+ - create
+ - get
+ - update
+ - apiGroups:
+ - ""
+ resources:
+ - pods
+ verbs:
+ - get
+---
+# Source: node-feature-discovery/templates/rolebinding.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: RoleBinding
+metadata:
+ name: node-feature-discovery-worker
+ namespace: default
+ labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: Role
+ name: node-feature-discovery-worker
+subjects:
+ - kind: ServiceAccount
+ name: node-feature-discovery-worker
+ namespace: default
---
# Source: node-feature-discovery/templates/worker.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: node-feature-discovery-worker
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
app.kubernetes.io/managed-by: Helm
role: worker
- annotations: {}
spec:
selector:
matchLabels:
@@ -349,13 +314,32 @@
- ALL
readOnlyRootFilesystem: true
runAsNonRoot: true
- image: "k8s.gcr.io/nfd/node-feature-discovery:v0.11.2"
+ image: "registry.k8s.io/nfd/node-feature-discovery:v0.16.3"
imagePullPolicy: IfNotPresent
+ livenessProbe:
+ grpc:
+ port: 8082
+ initialDelaySeconds: 10
+ periodSeconds: 10
+ readinessProbe:
+ grpc:
+ port: 8082
+ initialDelaySeconds: 5
+ periodSeconds: 10
+ failureThreshold: 10
env:
- name: NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
+ - name: POD_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.name
+ - name: POD_UID
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.uid
resources:
limits:
cpu: 1024m
@@ -366,7 +350,13 @@
command:
- "nfd-worker"
args:
- - "--server=node-feature-discovery-master:8080"
+ # Go over featureGate and add the feature-gate flag
+ - "-feature-gates=NodeFeatureAPI=true"
+ - "-feature-gates=NodeFeatureGroupAPI=false"
+ - "-metrics=8081"
+ ports:
+ - name: metrics
+ containerPort: 8081
volumeMounts:
- name: host-boot
mountPath: "/host-boot"
@@ -380,6 +370,12 @@
- name: host-usr-lib
mountPath: "/host-usr/lib"
readOnly: true
+ - name: host-lib
+ mountPath: "/host-lib"
+ readOnly: true
+ - name: host-proc-swaps
+ mountPath: "/host-proc/swaps"
+ readOnly: true
- name: source-d
mountPath: "/etc/kubernetes/node-feature-discovery/source.d/"
readOnly: true
@@ -402,6 +398,12 @@
- name: host-usr-lib
hostPath:
path: "/usr/lib"
+ - name: host-lib
+ hostPath:
+ path: "/lib"
+ - name: host-proc-swaps
+ hostPath:
+ path: "/proc/swaps"
- name: source-d
hostPath:
path: "/etc/kubernetes/node-feature-discovery/source.d/"
@@ -425,12 +427,12 @@
kind: Deployment
metadata:
name: node-feature-discovery-master
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
app.kubernetes.io/managed-by: Helm
role: master
- annotations: {}
spec:
replicas: 1
selector:
@@ -444,9 +446,9 @@
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
role: master
- annotations: {}
spec:
serviceAccountName: node-feature-discovery
+ enableServiceLinks: false
securityContext: {}
containers:
- name: master
@@ -457,26 +459,24 @@
- ALL
readOnlyRootFilesystem: true
runAsNonRoot: true
- image: "k8s.gcr.io/nfd/node-feature-discovery:v0.11.2"
+ image: "registry.k8s.io/nfd/node-feature-discovery:v0.16.3"
imagePullPolicy: IfNotPresent
livenessProbe:
- exec:
- command:
- - "/usr/bin/grpc_health_probe"
- - "-addr=:8080"
+ grpc:
+ port: 8082
initialDelaySeconds: 10
periodSeconds: 10
readinessProbe:
- exec:
- command:
- - "/usr/bin/grpc_health_probe"
- - "-addr=:8080"
+ grpc:
+ port: 8082
initialDelaySeconds: 5
periodSeconds: 10
failureThreshold: 10
ports:
- containerPort: 8080
name: grpc
+ - containerPort: 8081
+ name: metrics
env:
- name: NODE_NAME
valueFrom:
@@ -484,10 +484,209 @@
fieldPath: spec.nodeName
command:
- "nfd-master"
- resources: {}
+ resources:
+ limits:
+ memory: 4Gi
+ requests:
+ cpu: 100m
+ memory: 128Mi
+ args:
+ ## By default, disable crd controller for other than the default instances
+ - "-crd-controller=true"
+ # Go over featureGates and add the feature-gate flag
+ - "-feature-gates=NodeFeatureAPI=true"
+ - "-feature-gates=NodeFeatureGroupAPI=false"
+ - "-metrics=8081"
+ volumeMounts:
+ - name: nfd-master-conf
+ mountPath: "/etc/kubernetes/node-feature-discovery"
+ readOnly: true
+ volumes:
+ - name: nfd-master-conf
+ configMap:
+ name: node-feature-discovery-master-conf
+ items:
+ - key: nfd-master.conf
+ path: nfd-master.conf
+ affinity:
+ nodeAffinity:
+ preferredDuringSchedulingIgnoredDuringExecution:
+ - preference:
+ matchExpressions:
+ - key: node-role.kubernetes.io/master
+ operator: In
+ values:
+ - ""
+ weight: 1
+ tolerations:
+ - effect: NoExecute
+ operator: Exists
+ - effect: NoSchedule
+ operator: Exists
+ - effect: NoExecute
+ key: node.kubernetes.io/not-ready
+ operator: Exists
+ tolerationSeconds: 300
+ - effect: NoExecute
+ key: node.kubernetes.io/unreachable
+ operator: Exists
+ tolerationSeconds: 300
+---
+# Source: node-feature-discovery/templates/nfd-gc.yaml
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: node-feature-discovery-gc
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+ role: gc
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ role: gc
+ template:
+ metadata:
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ role: gc
+ spec:
+ serviceAccountName: node-feature-discovery-gc
+ dnsPolicy: ClusterFirstWithHostNet
+ securityContext: {}
+ containers:
+ - name: gc
+ image: "registry.k8s.io/nfd/node-feature-discovery:v0.16.3"
+ imagePullPolicy: "IfNotPresent"
+ env:
+ - name: NODE_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: spec.nodeName
+ command:
+ - "nfd-gc"
+ args:
+ - "-gc-interval=1h"
+ resources:
+ limits:
+ memory: 1Gi
+ requests:
+ cpu: 10m
+ memory: 128Mi
+ securityContext:
+ allowPrivilegeEscalation: false
+ capabilities:
+ drop: ["ALL"]
+ readOnlyRootFilesystem: true
+ runAsNonRoot: true
+ ports:
+ - name: metrics
+ containerPort: 8081
+---
+# Source: node-feature-discovery/templates/post-delete-job.yaml
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ name: node-feature-discovery-prune
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+ annotations:
+ "helm.sh/hook": post-delete
+ "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
+---
+# Source: node-feature-discovery/templates/post-delete-job.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+ name: node-feature-discovery-prune
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+ annotations:
+ "helm.sh/hook": post-delete
+ "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
+rules:
+ - apiGroups:
+ - ""
+ resources:
+ - nodes
+ - nodes/status
+ verbs:
+ - get
+ - patch
+ - update
+ - list
+---
+# Source: node-feature-discovery/templates/post-delete-job.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+ name: node-feature-discovery-prune
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+ annotations:
+ "helm.sh/hook": post-delete
+ "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: node-feature-discovery-prune
+subjects:
+ - kind: ServiceAccount
+ name: node-feature-discovery-prune
+ namespace: default
+---
+# Source: node-feature-discovery/templates/post-delete-job.yaml
+apiVersion: batch/v1
+kind: Job
+metadata:
+ name: node-feature-discovery-prune
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+ annotations:
+ "helm.sh/hook": post-delete
+ "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
+spec:
+ template:
+ metadata:
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+ role: prune
+ spec:
+ serviceAccountName: node-feature-discovery-prune
+ containers:
+ - name: nfd-master
+ securityContext:
+ allowPrivilegeEscalation: false
+ capabilities:
+ drop:
+ - ALL
+ readOnlyRootFilesystem: true
+ runAsNonRoot: true
+ image: "registry.k8s.io/nfd/node-feature-discovery:v0.16.3"
+ imagePullPolicy: IfNotPresent
+ command:
+ - "nfd-master"
args:
- ## By default, disable NodeFeatureRules controller for other than the default instances
- - "-featurerules-controller=true"
+ - "-prune"
+ restartPolicy: Never
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution: |
adc35a5
to
55ca541
Compare
Path: @@ -3,29 +3,54 @@
kind: ServiceAccount
metadata:
name: node-feature-discovery
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
app.kubernetes.io/managed-by: Helm
---
-{}
-
# Source: node-feature-discovery/templates/serviceaccount.yaml
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ name: node-feature-discovery-gc
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
---
+# Source: node-feature-discovery/templates/serviceaccount.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: node-feature-discovery-worker
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
app.kubernetes.io/managed-by: Helm
---
+# Source: node-feature-discovery/templates/nfd-master-conf.yaml
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: node-feature-discovery-master-conf
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+data:
+ nfd-master.conf: |-
+ null
+---
# Source: node-feature-discovery/templates/nfd-worker-conf.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: node-feature-discovery-worker-conf
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
@@ -79,171 +104,6 @@
- vendor
- device
---
-# Source: node-feature-discovery/templates/nodefeaturerule-crd.yaml
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.7.0
- creationTimestamp: null
- name: nodefeaturerules.nfd.k8s-sigs.io
-spec:
- group: nfd.k8s-sigs.io
- names:
- kind: NodeFeatureRule
- listKind: NodeFeatureRuleList
- plural: nodefeaturerules
- singular: nodefeaturerule
- scope: Cluster
- versions:
- - name: v1alpha1
- schema:
- openAPIV3Schema:
- description: NodeFeatureRule resource specifies a configuration for feature-based customization of node objects, such as node labeling.
- properties:
- apiVersion:
- description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
- type: string
- kind:
- description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
- type: string
- metadata:
- type: object
- spec:
- description: NodeFeatureRuleSpec describes a NodeFeatureRule.
- properties:
- rules:
- description: Rules is a list of node customization rules.
- items:
- description: Rule defines a rule for node customization such as labeling.
- properties:
- labels:
- additionalProperties:
- type: string
- description: Labels to create if the rule matches.
- type: object
- labelsTemplate:
- description: LabelsTemplate specifies a template to expand for dynamically generating multiple labels. Data (after template expansion) must be keys with an optional value (<key>[=<value>]) separated by newlines.
- type: string
- matchAny:
- description: MatchAny specifies a list of matchers one of which must match.
- items:
- description: MatchAnyElem specifies one sub-matcher of MatchAny.
- properties:
- matchFeatures:
- description: MatchFeatures specifies a set of matcher terms all of which must match.
- items:
- description: FeatureMatcherTerm defines requirements against one feature set. All requirements (specified as MatchExpressions) are evaluated against each element in the feature set.
- properties:
- feature:
- type: string
- matchExpressions:
- additionalProperties:
- description: "MatchExpression specifies an expression to evaluate against a set of input values. It contains an operator that is applied when matching the input and an array of values that the operator evaluates the input against. \n NB: CreateMatchExpression or MustCreateMatchExpression() should be used for creating new instances. NB: Validate() must be called if Op or Value fields are modified or if a new instance is created from scratch without using the helper functions."
- properties:
- op:
- description: Op is the operator to be applied.
- enum:
- - In
- - NotIn
- - InRegexp
- - Exists
- - DoesNotExist
- - Gt
- - Lt
- - GtLt
- - IsTrue
- - IsFalse
- type: string
- value:
- description: Value is the list of values that the operand evaluates the input against. Value should be empty if the operator is Exists, DoesNotExist, IsTrue or IsFalse. Value should contain exactly one element if the operator is Gt or Lt and exactly two elements if the operator is GtLt. In other cases Value should contain at least one element.
- items:
- type: string
- type: array
- required:
- - op
- type: object
- description: MatchExpressionSet contains a set of MatchExpressions, each of which is evaluated against a set of input values.
- type: object
- required:
- - feature
- - matchExpressions
- type: object
- type: array
- required:
- - matchFeatures
- type: object
- type: array
- matchFeatures:
- description: MatchFeatures specifies a set of matcher terms all of which must match.
- items:
- description: FeatureMatcherTerm defines requirements against one feature set. All requirements (specified as MatchExpressions) are evaluated against each element in the feature set.
- properties:
- feature:
- type: string
- matchExpressions:
- additionalProperties:
- description: "MatchExpression specifies an expression to evaluate against a set of input values. It contains an operator that is applied when matching the input and an array of values that the operator evaluates the input against. \n NB: CreateMatchExpression or MustCreateMatchExpression() should be used for creating new instances. NB: Validate() must be called if Op or Value fields are modified or if a new instance is created from scratch without using the helper functions."
- properties:
- op:
- description: Op is the operator to be applied.
- enum:
- - In
- - NotIn
- - InRegexp
- - Exists
- - DoesNotExist
- - Gt
- - Lt
- - GtLt
- - IsTrue
- - IsFalse
- type: string
- value:
- description: Value is the list of values that the operand evaluates the input against. Value should be empty if the operator is Exists, DoesNotExist, IsTrue or IsFalse. Value should contain exactly one element if the operator is Gt or Lt and exactly two elements if the operator is GtLt. In other cases Value should contain at least one element.
- items:
- type: string
- type: array
- required:
- - op
- type: object
- description: MatchExpressionSet contains a set of MatchExpressions, each of which is evaluated against a set of input values.
- type: object
- required:
- - feature
- - matchExpressions
- type: object
- type: array
- name:
- description: Name of the rule.
- type: string
- vars:
- additionalProperties:
- type: string
- description: Vars is the variables to store if the rule matches. Variables do not directly inflict any changes in the node object. However, they can be referenced from other rules enabling more complex rule hierarchies, without exposing intermediary output values as labels.
- type: object
- varsTemplate:
- description: VarsTemplate specifies a template to expand for dynamically generating multiple variables. Data (after template expansion) must be keys with an optional value (<key>[=<value>]) separated by newlines.
- type: string
- required:
- - name
- type: object
- type: array
- required:
- - rules
- type: object
- required:
- - spec
- type: object
- served: true
- storage: true
-status:
- acceptedNames:
- kind: ""
- plural: ""
- conditions: []
- storedVersions: []
----
# Source: node-feature-discovery/templates/clusterrole.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
@@ -258,6 +118,7 @@
- ""
resources:
- nodes
+ - nodes/status
verbs:
- get
- patch
@@ -266,11 +127,73 @@
- apiGroups:
- nfd.k8s-sigs.io
resources:
+ - nodefeatures
- nodefeaturerules
+ - nodefeaturegroups
verbs:
- get
- list
- watch
+ - apiGroups:
+ - nfd.k8s-sigs.io
+ resources:
+ - nodefeaturegroups/status
+ verbs:
+ - patch
+ - update
+ - apiGroups:
+ - coordination.k8s.io
+ resources:
+ - leases
+ verbs:
+ - create
+ - apiGroups:
+ - coordination.k8s.io
+ resources:
+ - leases
+ resourceNames:
+ - "nfd-master.nfd.kubernetes.io"
+ verbs:
+ - get
+ - update
+---
+# Source: node-feature-discovery/templates/clusterrole.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+ name: node-feature-discovery-gc
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+rules:
+ - apiGroups:
+ - ""
+ resources:
+ - nodes
+ verbs:
+ - list
+ - watch
+ - apiGroups:
+ - ""
+ resources:
+ - nodes/proxy
+ verbs:
+ - get
+ - apiGroups:
+ - topology.node.k8s.io
+ resources:
+ - noderesourcetopologies
+ verbs:
+ - delete
+ - list
+ - apiGroups:
+ - nfd.k8s-sigs.io
+ resources:
+ - nodefeatures
+ verbs:
+ - delete
+ - list
---
# Source: node-feature-discovery/templates/clusterrolebinding.yaml
apiVersion: rbac.authorization.k8s.io/v1
@@ -290,39 +213,82 @@
name: node-feature-discovery
namespace: default
---
-# Source: node-feature-discovery/templates/service.yaml
-apiVersion: v1
-kind: Service
+# Source: node-feature-discovery/templates/clusterrolebinding.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
metadata:
- name: node-feature-discovery-master
+ name: node-feature-discovery-gc
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
app.kubernetes.io/managed-by: Helm
- role: master
-spec:
- type: ClusterIP
- ports:
- - port: 8080
- targetPort: grpc
- protocol: TCP
- name: grpc
- selector:
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: node-feature-discovery-gc
+subjects:
+ - kind: ServiceAccount
+ name: node-feature-discovery-gc
+ namespace: default
+---
+# Source: node-feature-discovery/templates/role.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: Role
+metadata:
+ name: node-feature-discovery-worker
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+rules:
+ - apiGroups:
+ - nfd.k8s-sigs.io
+ resources:
+ - nodefeatures
+ verbs:
+ - create
+ - get
+ - update
+ - apiGroups:
+ - ""
+ resources:
+ - pods
+ verbs:
+ - get
+---
+# Source: node-feature-discovery/templates/rolebinding.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: RoleBinding
+metadata:
+ name: node-feature-discovery-worker
+ namespace: default
+ labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: Role
+ name: node-feature-discovery-worker
+subjects:
+ - kind: ServiceAccount
+ name: node-feature-discovery-worker
+ namespace: default
---
# Source: node-feature-discovery/templates/worker.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: node-feature-discovery-worker
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
app.kubernetes.io/managed-by: Helm
role: worker
- annotations: {}
spec:
+ revisionHistoryLimit:
selector:
matchLabels:
app.kubernetes.io/name: node-feature-discovery
@@ -349,13 +315,30 @@
- ALL
readOnlyRootFilesystem: true
runAsNonRoot: true
- image: "k8s.gcr.io/nfd/node-feature-discovery:v0.11.2"
+ image: "registry.k8s.io/nfd/node-feature-discovery:v0.16.4"
imagePullPolicy: IfNotPresent
+ livenessProbe:
+ grpc:
+ port: 8082
+ initialDelaySeconds: 10
+ readinessProbe:
+ failureThreshold: 10
+ grpc:
+ port: 8082
+ initialDelaySeconds: 5
env:
- name: NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
+ - name: POD_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.name
+ - name: POD_UID
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.uid
resources:
limits:
cpu: 1024m
@@ -366,7 +349,13 @@
command:
- "nfd-worker"
args:
- - "--server=node-feature-discovery-master:8080"
+ # Go over featureGate and add the feature-gate flag
+ - "-feature-gates=NodeFeatureAPI=true"
+ - "-feature-gates=NodeFeatureGroupAPI=false"
+ - "-metrics=8081"
+ ports:
+ - name: metrics
+ containerPort: 8081
volumeMounts:
- name: host-boot
mountPath: "/host-boot"
@@ -380,6 +369,12 @@
- name: host-usr-lib
mountPath: "/host-usr/lib"
readOnly: true
+ - name: host-lib
+ mountPath: "/host-lib"
+ readOnly: true
+ - name: host-proc-swaps
+ mountPath: "/host-proc/swaps"
+ readOnly: true
- name: source-d
mountPath: "/etc/kubernetes/node-feature-discovery/source.d/"
readOnly: true
@@ -402,6 +397,12 @@
- name: host-usr-lib
hostPath:
path: "/usr/lib"
+ - name: host-lib
+ hostPath:
+ path: "/lib"
+ - name: host-proc-swaps
+ hostPath:
+ path: "/proc/swaps"
- name: source-d
hostPath:
path: "/etc/kubernetes/node-feature-discovery/source.d/"
@@ -425,14 +426,15 @@
kind: Deployment
metadata:
name: node-feature-discovery-master
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
app.kubernetes.io/managed-by: Helm
role: master
- annotations: {}
spec:
replicas: 1
+ revisionHistoryLimit:
selector:
matchLabels:
app.kubernetes.io/name: node-feature-discovery
@@ -444,9 +446,9 @@
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
role: master
- annotations: {}
spec:
serviceAccountName: node-feature-discovery
+ enableServiceLinks: false
securityContext: {}
containers:
- name: master
@@ -457,26 +459,22 @@
- ALL
readOnlyRootFilesystem: true
runAsNonRoot: true
- image: "k8s.gcr.io/nfd/node-feature-discovery:v0.11.2"
+ image: "registry.k8s.io/nfd/node-feature-discovery:v0.16.4"
imagePullPolicy: IfNotPresent
livenessProbe:
- exec:
- command:
- - "/usr/bin/grpc_health_probe"
- - "-addr=:8080"
+ grpc:
+ port: 8082
initialDelaySeconds: 10
- periodSeconds: 10
readinessProbe:
- exec:
- command:
- - "/usr/bin/grpc_health_probe"
- - "-addr=:8080"
- initialDelaySeconds: 5
- periodSeconds: 10
failureThreshold: 10
+ grpc:
+ port: 8082
+ initialDelaySeconds: 5
ports:
- containerPort: 8080
name: grpc
+ - containerPort: 8081
+ name: metrics
env:
- name: NODE_NAME
valueFrom:
@@ -484,10 +482,210 @@
fieldPath: spec.nodeName
command:
- "nfd-master"
- resources: {}
+ resources:
+ limits:
+ memory: 4Gi
+ requests:
+ cpu: 100m
+ memory: 128Mi
+ args:
+ ## By default, disable crd controller for other than the default instances
+ - "-crd-controller=true"
+ # Go over featureGates and add the feature-gate flag
+ - "-feature-gates=NodeFeatureAPI=true"
+ - "-feature-gates=NodeFeatureGroupAPI=false"
+ - "-metrics=8081"
+ volumeMounts:
+ - name: nfd-master-conf
+ mountPath: "/etc/kubernetes/node-feature-discovery"
+ readOnly: true
+ volumes:
+ - name: nfd-master-conf
+ configMap:
+ name: node-feature-discovery-master-conf
+ items:
+ - key: nfd-master.conf
+ path: nfd-master.conf
+ affinity:
+ nodeAffinity:
+ preferredDuringSchedulingIgnoredDuringExecution:
+ - preference:
+ matchExpressions:
+ - key: node-role.kubernetes.io/master
+ operator: In
+ values:
+ - ""
+ weight: 1
+ tolerations:
+ - effect: NoExecute
+ operator: Exists
+ - effect: NoSchedule
+ operator: Exists
+ - effect: NoExecute
+ key: node.kubernetes.io/not-ready
+ operator: Exists
+ tolerationSeconds: 300
+ - effect: NoExecute
+ key: node.kubernetes.io/unreachable
+ operator: Exists
+ tolerationSeconds: 300
+---
+# Source: node-feature-discovery/templates/nfd-gc.yaml
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: node-feature-discovery-gc
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+ role: gc
+spec:
+ replicas: 1
+ revisionHistoryLimit:
+ selector:
+ matchLabels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ role: gc
+ template:
+ metadata:
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ role: gc
+ spec:
+ serviceAccountName: node-feature-discovery-gc
+ dnsPolicy: ClusterFirstWithHostNet
+ securityContext: {}
+ containers:
+ - name: gc
+ image: "registry.k8s.io/nfd/node-feature-discovery:v0.16.4"
+ imagePullPolicy: "IfNotPresent"
+ env:
+ - name: NODE_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: spec.nodeName
+ command:
+ - "nfd-gc"
+ args:
+ - "-gc-interval=1h"
+ resources:
+ limits:
+ memory: 1Gi
+ requests:
+ cpu: 10m
+ memory: 128Mi
+ securityContext:
+ allowPrivilegeEscalation: false
+ capabilities:
+ drop: ["ALL"]
+ readOnlyRootFilesystem: true
+ runAsNonRoot: true
+ ports:
+ - name: metrics
+ containerPort: 8081
+---
+# Source: node-feature-discovery/templates/post-delete-job.yaml
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ name: node-feature-discovery-prune
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+ annotations:
+ "helm.sh/hook": post-delete
+ "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
+---
+# Source: node-feature-discovery/templates/post-delete-job.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+ name: node-feature-discovery-prune
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+ annotations:
+ "helm.sh/hook": post-delete
+ "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
+rules:
+ - apiGroups:
+ - ""
+ resources:
+ - nodes
+ - nodes/status
+ verbs:
+ - get
+ - patch
+ - update
+ - list
+---
+# Source: node-feature-discovery/templates/post-delete-job.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+ name: node-feature-discovery-prune
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+ annotations:
+ "helm.sh/hook": post-delete
+ "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: node-feature-discovery-prune
+subjects:
+ - kind: ServiceAccount
+ name: node-feature-discovery-prune
+ namespace: default
+---
+# Source: node-feature-discovery/templates/post-delete-job.yaml
+apiVersion: batch/v1
+kind: Job
+metadata:
+ name: node-feature-discovery-prune
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+ annotations:
+ "helm.sh/hook": post-delete
+ "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
+spec:
+ template:
+ metadata:
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+ role: prune
+ spec:
+ serviceAccountName: node-feature-discovery-prune
+ containers:
+ - name: nfd-master
+ securityContext:
+ allowPrivilegeEscalation: false
+ capabilities:
+ drop:
+ - ALL
+ readOnlyRootFilesystem: true
+ runAsNonRoot: true
+ image: "registry.k8s.io/nfd/node-feature-discovery:v0.16.4"
+ imagePullPolicy: IfNotPresent
+ command:
+ - "nfd-master"
args:
- ## By default, disable NodeFeatureRules controller for other than the default instances
- - "-featurerules-controller=true"
+ - "-prune"
+ restartPolicy: Never
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution: |
55ca541
to
9b5fff1
Compare
Path: @@ -3,29 +3,54 @@
kind: ServiceAccount
metadata:
name: node-feature-discovery
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
app.kubernetes.io/managed-by: Helm
---
-{}
-
# Source: node-feature-discovery/templates/serviceaccount.yaml
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ name: node-feature-discovery-gc
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
---
+# Source: node-feature-discovery/templates/serviceaccount.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: node-feature-discovery-worker
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
app.kubernetes.io/managed-by: Helm
---
+# Source: node-feature-discovery/templates/nfd-master-conf.yaml
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: node-feature-discovery-master-conf
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+data:
+ nfd-master.conf: |-
+ null
+---
# Source: node-feature-discovery/templates/nfd-worker-conf.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: node-feature-discovery-worker-conf
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
@@ -79,171 +104,6 @@
- vendor
- device
---
-# Source: node-feature-discovery/templates/nodefeaturerule-crd.yaml
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.7.0
- creationTimestamp: null
- name: nodefeaturerules.nfd.k8s-sigs.io
-spec:
- group: nfd.k8s-sigs.io
- names:
- kind: NodeFeatureRule
- listKind: NodeFeatureRuleList
- plural: nodefeaturerules
- singular: nodefeaturerule
- scope: Cluster
- versions:
- - name: v1alpha1
- schema:
- openAPIV3Schema:
- description: NodeFeatureRule resource specifies a configuration for feature-based customization of node objects, such as node labeling.
- properties:
- apiVersion:
- description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
- type: string
- kind:
- description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
- type: string
- metadata:
- type: object
- spec:
- description: NodeFeatureRuleSpec describes a NodeFeatureRule.
- properties:
- rules:
- description: Rules is a list of node customization rules.
- items:
- description: Rule defines a rule for node customization such as labeling.
- properties:
- labels:
- additionalProperties:
- type: string
- description: Labels to create if the rule matches.
- type: object
- labelsTemplate:
- description: LabelsTemplate specifies a template to expand for dynamically generating multiple labels. Data (after template expansion) must be keys with an optional value (<key>[=<value>]) separated by newlines.
- type: string
- matchAny:
- description: MatchAny specifies a list of matchers one of which must match.
- items:
- description: MatchAnyElem specifies one sub-matcher of MatchAny.
- properties:
- matchFeatures:
- description: MatchFeatures specifies a set of matcher terms all of which must match.
- items:
- description: FeatureMatcherTerm defines requirements against one feature set. All requirements (specified as MatchExpressions) are evaluated against each element in the feature set.
- properties:
- feature:
- type: string
- matchExpressions:
- additionalProperties:
- description: "MatchExpression specifies an expression to evaluate against a set of input values. It contains an operator that is applied when matching the input and an array of values that the operator evaluates the input against. \n NB: CreateMatchExpression or MustCreateMatchExpression() should be used for creating new instances. NB: Validate() must be called if Op or Value fields are modified or if a new instance is created from scratch without using the helper functions."
- properties:
- op:
- description: Op is the operator to be applied.
- enum:
- - In
- - NotIn
- - InRegexp
- - Exists
- - DoesNotExist
- - Gt
- - Lt
- - GtLt
- - IsTrue
- - IsFalse
- type: string
- value:
- description: Value is the list of values that the operand evaluates the input against. Value should be empty if the operator is Exists, DoesNotExist, IsTrue or IsFalse. Value should contain exactly one element if the operator is Gt or Lt and exactly two elements if the operator is GtLt. In other cases Value should contain at least one element.
- items:
- type: string
- type: array
- required:
- - op
- type: object
- description: MatchExpressionSet contains a set of MatchExpressions, each of which is evaluated against a set of input values.
- type: object
- required:
- - feature
- - matchExpressions
- type: object
- type: array
- required:
- - matchFeatures
- type: object
- type: array
- matchFeatures:
- description: MatchFeatures specifies a set of matcher terms all of which must match.
- items:
- description: FeatureMatcherTerm defines requirements against one feature set. All requirements (specified as MatchExpressions) are evaluated against each element in the feature set.
- properties:
- feature:
- type: string
- matchExpressions:
- additionalProperties:
- description: "MatchExpression specifies an expression to evaluate against a set of input values. It contains an operator that is applied when matching the input and an array of values that the operator evaluates the input against. \n NB: CreateMatchExpression or MustCreateMatchExpression() should be used for creating new instances. NB: Validate() must be called if Op or Value fields are modified or if a new instance is created from scratch without using the helper functions."
- properties:
- op:
- description: Op is the operator to be applied.
- enum:
- - In
- - NotIn
- - InRegexp
- - Exists
- - DoesNotExist
- - Gt
- - Lt
- - GtLt
- - IsTrue
- - IsFalse
- type: string
- value:
- description: Value is the list of values that the operand evaluates the input against. Value should be empty if the operator is Exists, DoesNotExist, IsTrue or IsFalse. Value should contain exactly one element if the operator is Gt or Lt and exactly two elements if the operator is GtLt. In other cases Value should contain at least one element.
- items:
- type: string
- type: array
- required:
- - op
- type: object
- description: MatchExpressionSet contains a set of MatchExpressions, each of which is evaluated against a set of input values.
- type: object
- required:
- - feature
- - matchExpressions
- type: object
- type: array
- name:
- description: Name of the rule.
- type: string
- vars:
- additionalProperties:
- type: string
- description: Vars is the variables to store if the rule matches. Variables do not directly inflict any changes in the node object. However, they can be referenced from other rules enabling more complex rule hierarchies, without exposing intermediary output values as labels.
- type: object
- varsTemplate:
- description: VarsTemplate specifies a template to expand for dynamically generating multiple variables. Data (after template expansion) must be keys with an optional value (<key>[=<value>]) separated by newlines.
- type: string
- required:
- - name
- type: object
- type: array
- required:
- - rules
- type: object
- required:
- - spec
- type: object
- served: true
- storage: true
-status:
- acceptedNames:
- kind: ""
- plural: ""
- conditions: []
- storedVersions: []
----
# Source: node-feature-discovery/templates/clusterrole.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
@@ -258,6 +118,7 @@
- ""
resources:
- nodes
+ - nodes/status
verbs:
- get
- patch
@@ -266,11 +127,73 @@
- apiGroups:
- nfd.k8s-sigs.io
resources:
+ - nodefeatures
- nodefeaturerules
+ - nodefeaturegroups
verbs:
- get
- list
- watch
+ - apiGroups:
+ - nfd.k8s-sigs.io
+ resources:
+ - nodefeaturegroups/status
+ verbs:
+ - patch
+ - update
+ - apiGroups:
+ - coordination.k8s.io
+ resources:
+ - leases
+ verbs:
+ - create
+ - apiGroups:
+ - coordination.k8s.io
+ resources:
+ - leases
+ resourceNames:
+ - "nfd-master.nfd.kubernetes.io"
+ verbs:
+ - get
+ - update
+---
+# Source: node-feature-discovery/templates/clusterrole.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+ name: node-feature-discovery-gc
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+rules:
+ - apiGroups:
+ - ""
+ resources:
+ - nodes
+ verbs:
+ - list
+ - watch
+ - apiGroups:
+ - ""
+ resources:
+ - nodes/proxy
+ verbs:
+ - get
+ - apiGroups:
+ - topology.node.k8s.io
+ resources:
+ - noderesourcetopologies
+ verbs:
+ - delete
+ - list
+ - apiGroups:
+ - nfd.k8s-sigs.io
+ resources:
+ - nodefeatures
+ verbs:
+ - delete
+ - list
---
# Source: node-feature-discovery/templates/clusterrolebinding.yaml
apiVersion: rbac.authorization.k8s.io/v1
@@ -290,39 +213,82 @@
name: node-feature-discovery
namespace: default
---
-# Source: node-feature-discovery/templates/service.yaml
-apiVersion: v1
-kind: Service
+# Source: node-feature-discovery/templates/clusterrolebinding.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
metadata:
- name: node-feature-discovery-master
+ name: node-feature-discovery-gc
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
app.kubernetes.io/managed-by: Helm
- role: master
-spec:
- type: ClusterIP
- ports:
- - port: 8080
- targetPort: grpc
- protocol: TCP
- name: grpc
- selector:
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: node-feature-discovery-gc
+subjects:
+ - kind: ServiceAccount
+ name: node-feature-discovery-gc
+ namespace: default
+---
+# Source: node-feature-discovery/templates/role.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: Role
+metadata:
+ name: node-feature-discovery-worker
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+rules:
+ - apiGroups:
+ - nfd.k8s-sigs.io
+ resources:
+ - nodefeatures
+ verbs:
+ - create
+ - get
+ - update
+ - apiGroups:
+ - ""
+ resources:
+ - pods
+ verbs:
+ - get
+---
+# Source: node-feature-discovery/templates/rolebinding.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: RoleBinding
+metadata:
+ name: node-feature-discovery-worker
+ namespace: default
+ labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: Role
+ name: node-feature-discovery-worker
+subjects:
+ - kind: ServiceAccount
+ name: node-feature-discovery-worker
+ namespace: default
---
# Source: node-feature-discovery/templates/worker.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: node-feature-discovery-worker
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
app.kubernetes.io/managed-by: Helm
role: worker
- annotations: {}
spec:
+ revisionHistoryLimit:
selector:
matchLabels:
app.kubernetes.io/name: node-feature-discovery
@@ -340,6 +306,7 @@
dnsPolicy: ClusterFirstWithHostNet
serviceAccountName: node-feature-discovery-worker
securityContext: {}
+ hostNetwork: false
containers:
- name: worker
securityContext:
@@ -349,13 +316,30 @@
- ALL
readOnlyRootFilesystem: true
runAsNonRoot: true
- image: "k8s.gcr.io/nfd/node-feature-discovery:v0.11.2"
+ image: "registry.k8s.io/nfd/node-feature-discovery:v0.16.5"
imagePullPolicy: IfNotPresent
+ livenessProbe:
+ grpc:
+ port: 8082
+ initialDelaySeconds: 10
+ readinessProbe:
+ failureThreshold: 10
+ grpc:
+ port: 8082
+ initialDelaySeconds: 5
env:
- name: NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
+ - name: POD_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.name
+ - name: POD_UID
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.uid
resources:
limits:
cpu: 1024m
@@ -366,7 +350,16 @@
command:
- "nfd-worker"
args:
- - "--server=node-feature-discovery-master:8080"
+ # Go over featureGate and add the feature-gate flag
+ - "-feature-gates=NodeFeatureAPI=true"
+ - "-feature-gates=NodeFeatureGroupAPI=false"
+ - "-metrics=8081"
+ - "-grpc-health=8082"
+ ports:
+ - containerPort: 8081
+ name: metrics
+ - containerPort: 8082
+ name: health
volumeMounts:
- name: host-boot
mountPath: "/host-boot"
@@ -380,6 +373,12 @@
- name: host-usr-lib
mountPath: "/host-usr/lib"
readOnly: true
+ - name: host-lib
+ mountPath: "/host-lib"
+ readOnly: true
+ - name: host-proc-swaps
+ mountPath: "/host-proc/swaps"
+ readOnly: true
- name: source-d
mountPath: "/etc/kubernetes/node-feature-discovery/source.d/"
readOnly: true
@@ -402,6 +401,12 @@
- name: host-usr-lib
hostPath:
path: "/usr/lib"
+ - name: host-lib
+ hostPath:
+ path: "/lib"
+ - name: host-proc-swaps
+ hostPath:
+ path: "/proc/swaps"
- name: source-d
hostPath:
path: "/etc/kubernetes/node-feature-discovery/source.d/"
@@ -425,14 +430,15 @@
kind: Deployment
metadata:
name: node-feature-discovery-master
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
app.kubernetes.io/managed-by: Helm
role: master
- annotations: {}
spec:
replicas: 1
+ revisionHistoryLimit:
selector:
matchLabels:
app.kubernetes.io/name: node-feature-discovery
@@ -444,10 +450,11 @@
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
role: master
- annotations: {}
spec:
serviceAccountName: node-feature-discovery
+ enableServiceLinks: false
securityContext: {}
+ hostNetwork: false
containers:
- name: master
securityContext:
@@ -457,26 +464,24 @@
- ALL
readOnlyRootFilesystem: true
runAsNonRoot: true
- image: "k8s.gcr.io/nfd/node-feature-discovery:v0.11.2"
+ image: "registry.k8s.io/nfd/node-feature-discovery:v0.16.5"
imagePullPolicy: IfNotPresent
livenessProbe:
- exec:
- command:
- - "/usr/bin/grpc_health_probe"
- - "-addr=:8080"
+ grpc:
+ port: 8082
initialDelaySeconds: 10
- periodSeconds: 10
readinessProbe:
- exec:
- command:
- - "/usr/bin/grpc_health_probe"
- - "-addr=:8080"
- initialDelaySeconds: 5
- periodSeconds: 10
failureThreshold: 10
+ grpc:
+ port: 8082
+ initialDelaySeconds: 5
ports:
- containerPort: 8080
name: grpc
+ - containerPort: 8081
+ name: metrics
+ - containerPort: 8082
+ name: health
env:
- name: NODE_NAME
valueFrom:
@@ -484,10 +489,212 @@
fieldPath: spec.nodeName
command:
- "nfd-master"
- resources: {}
+ resources:
+ limits:
+ memory: 4Gi
+ requests:
+ cpu: 100m
+ memory: 128Mi
+ args:
+ ## By default, disable crd controller for other than the default instances
+ - "-crd-controller=true"
+ # Go over featureGates and add the feature-gate flag
+ - "-feature-gates=NodeFeatureAPI=true"
+ - "-feature-gates=NodeFeatureGroupAPI=false"
+ - "-metrics=8081"
+ - "-grpc-health=8082"
+ volumeMounts:
+ - name: nfd-master-conf
+ mountPath: "/etc/kubernetes/node-feature-discovery"
+ readOnly: true
+ volumes:
+ - name: nfd-master-conf
+ configMap:
+ name: node-feature-discovery-master-conf
+ items:
+ - key: nfd-master.conf
+ path: nfd-master.conf
+ affinity:
+ nodeAffinity:
+ preferredDuringSchedulingIgnoredDuringExecution:
+ - preference:
+ matchExpressions:
+ - key: node-role.kubernetes.io/master
+ operator: In
+ values:
+ - ""
+ weight: 1
+ tolerations:
+ - effect: NoExecute
+ operator: Exists
+ - effect: NoSchedule
+ operator: Exists
+ - effect: NoExecute
+ key: node.kubernetes.io/not-ready
+ operator: Exists
+ tolerationSeconds: 300
+ - effect: NoExecute
+ key: node.kubernetes.io/unreachable
+ operator: Exists
+ tolerationSeconds: 300
+---
+# Source: node-feature-discovery/templates/nfd-gc.yaml
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: node-feature-discovery-gc
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+ role: gc
+spec:
+ replicas: 1
+ revisionHistoryLimit:
+ selector:
+ matchLabels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ role: gc
+ template:
+ metadata:
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ role: gc
+ spec:
+ serviceAccountName: node-feature-discovery-gc
+ dnsPolicy: ClusterFirstWithHostNet
+ securityContext: {}
+ hostNetwork: false
+ containers:
+ - name: gc
+ image: "registry.k8s.io/nfd/node-feature-discovery:v0.16.5"
+ imagePullPolicy: "IfNotPresent"
+ env:
+ - name: NODE_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: spec.nodeName
+ command:
+ - "nfd-gc"
+ args:
+ - "-gc-interval=1h"
+ resources:
+ limits:
+ memory: 1Gi
+ requests:
+ cpu: 10m
+ memory: 128Mi
+ securityContext:
+ allowPrivilegeEscalation: false
+ capabilities:
+ drop: ["ALL"]
+ readOnlyRootFilesystem: true
+ runAsNonRoot: true
+ ports:
+ - name: metrics
+ containerPort: 8081
+---
+# Source: node-feature-discovery/templates/post-delete-job.yaml
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ name: node-feature-discovery-prune
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+ annotations:
+ "helm.sh/hook": post-delete
+ "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
+---
+# Source: node-feature-discovery/templates/post-delete-job.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+ name: node-feature-discovery-prune
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+ annotations:
+ "helm.sh/hook": post-delete
+ "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
+rules:
+ - apiGroups:
+ - ""
+ resources:
+ - nodes
+ - nodes/status
+ verbs:
+ - get
+ - patch
+ - update
+ - list
+---
+# Source: node-feature-discovery/templates/post-delete-job.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+ name: node-feature-discovery-prune
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+ annotations:
+ "helm.sh/hook": post-delete
+ "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: node-feature-discovery-prune
+subjects:
+ - kind: ServiceAccount
+ name: node-feature-discovery-prune
+ namespace: default
+---
+# Source: node-feature-discovery/templates/post-delete-job.yaml
+apiVersion: batch/v1
+kind: Job
+metadata:
+ name: node-feature-discovery-prune
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+ annotations:
+ "helm.sh/hook": post-delete
+ "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
+spec:
+ template:
+ metadata:
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+ role: prune
+ spec:
+ serviceAccountName: node-feature-discovery-prune
+ containers:
+ - name: nfd-master
+ securityContext:
+ allowPrivilegeEscalation: false
+ capabilities:
+ drop:
+ - ALL
+ readOnlyRootFilesystem: true
+ runAsNonRoot: true
+ image: "registry.k8s.io/nfd/node-feature-discovery:v0.16.5"
+ imagePullPolicy: IfNotPresent
+ command:
+ - "nfd-master"
args:
- ## By default, disable NodeFeatureRules controller for other than the default instances
- - "-featurerules-controller=true"
+ - "-prune"
+ restartPolicy: Never
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution: |
9b5fff1
to
b2b95bd
Compare
Path: @@ -3,29 +3,54 @@
kind: ServiceAccount
metadata:
name: node-feature-discovery
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
app.kubernetes.io/managed-by: Helm
---
-{}
-
# Source: node-feature-discovery/templates/serviceaccount.yaml
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ name: node-feature-discovery-gc
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
---
+# Source: node-feature-discovery/templates/serviceaccount.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: node-feature-discovery-worker
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
app.kubernetes.io/managed-by: Helm
---
+# Source: node-feature-discovery/templates/nfd-master-conf.yaml
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: node-feature-discovery-master-conf
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+data:
+ nfd-master.conf: |-
+ null
+---
# Source: node-feature-discovery/templates/nfd-worker-conf.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: node-feature-discovery-worker-conf
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
@@ -79,171 +104,6 @@
- vendor
- device
---
-# Source: node-feature-discovery/templates/nodefeaturerule-crd.yaml
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.7.0
- creationTimestamp: null
- name: nodefeaturerules.nfd.k8s-sigs.io
-spec:
- group: nfd.k8s-sigs.io
- names:
- kind: NodeFeatureRule
- listKind: NodeFeatureRuleList
- plural: nodefeaturerules
- singular: nodefeaturerule
- scope: Cluster
- versions:
- - name: v1alpha1
- schema:
- openAPIV3Schema:
- description: NodeFeatureRule resource specifies a configuration for feature-based customization of node objects, such as node labeling.
- properties:
- apiVersion:
- description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
- type: string
- kind:
- description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
- type: string
- metadata:
- type: object
- spec:
- description: NodeFeatureRuleSpec describes a NodeFeatureRule.
- properties:
- rules:
- description: Rules is a list of node customization rules.
- items:
- description: Rule defines a rule for node customization such as labeling.
- properties:
- labels:
- additionalProperties:
- type: string
- description: Labels to create if the rule matches.
- type: object
- labelsTemplate:
- description: LabelsTemplate specifies a template to expand for dynamically generating multiple labels. Data (after template expansion) must be keys with an optional value (<key>[=<value>]) separated by newlines.
- type: string
- matchAny:
- description: MatchAny specifies a list of matchers one of which must match.
- items:
- description: MatchAnyElem specifies one sub-matcher of MatchAny.
- properties:
- matchFeatures:
- description: MatchFeatures specifies a set of matcher terms all of which must match.
- items:
- description: FeatureMatcherTerm defines requirements against one feature set. All requirements (specified as MatchExpressions) are evaluated against each element in the feature set.
- properties:
- feature:
- type: string
- matchExpressions:
- additionalProperties:
- description: "MatchExpression specifies an expression to evaluate against a set of input values. It contains an operator that is applied when matching the input and an array of values that the operator evaluates the input against. \n NB: CreateMatchExpression or MustCreateMatchExpression() should be used for creating new instances. NB: Validate() must be called if Op or Value fields are modified or if a new instance is created from scratch without using the helper functions."
- properties:
- op:
- description: Op is the operator to be applied.
- enum:
- - In
- - NotIn
- - InRegexp
- - Exists
- - DoesNotExist
- - Gt
- - Lt
- - GtLt
- - IsTrue
- - IsFalse
- type: string
- value:
- description: Value is the list of values that the operand evaluates the input against. Value should be empty if the operator is Exists, DoesNotExist, IsTrue or IsFalse. Value should contain exactly one element if the operator is Gt or Lt and exactly two elements if the operator is GtLt. In other cases Value should contain at least one element.
- items:
- type: string
- type: array
- required:
- - op
- type: object
- description: MatchExpressionSet contains a set of MatchExpressions, each of which is evaluated against a set of input values.
- type: object
- required:
- - feature
- - matchExpressions
- type: object
- type: array
- required:
- - matchFeatures
- type: object
- type: array
- matchFeatures:
- description: MatchFeatures specifies a set of matcher terms all of which must match.
- items:
- description: FeatureMatcherTerm defines requirements against one feature set. All requirements (specified as MatchExpressions) are evaluated against each element in the feature set.
- properties:
- feature:
- type: string
- matchExpressions:
- additionalProperties:
- description: "MatchExpression specifies an expression to evaluate against a set of input values. It contains an operator that is applied when matching the input and an array of values that the operator evaluates the input against. \n NB: CreateMatchExpression or MustCreateMatchExpression() should be used for creating new instances. NB: Validate() must be called if Op or Value fields are modified or if a new instance is created from scratch without using the helper functions."
- properties:
- op:
- description: Op is the operator to be applied.
- enum:
- - In
- - NotIn
- - InRegexp
- - Exists
- - DoesNotExist
- - Gt
- - Lt
- - GtLt
- - IsTrue
- - IsFalse
- type: string
- value:
- description: Value is the list of values that the operand evaluates the input against. Value should be empty if the operator is Exists, DoesNotExist, IsTrue or IsFalse. Value should contain exactly one element if the operator is Gt or Lt and exactly two elements if the operator is GtLt. In other cases Value should contain at least one element.
- items:
- type: string
- type: array
- required:
- - op
- type: object
- description: MatchExpressionSet contains a set of MatchExpressions, each of which is evaluated against a set of input values.
- type: object
- required:
- - feature
- - matchExpressions
- type: object
- type: array
- name:
- description: Name of the rule.
- type: string
- vars:
- additionalProperties:
- type: string
- description: Vars is the variables to store if the rule matches. Variables do not directly inflict any changes in the node object. However, they can be referenced from other rules enabling more complex rule hierarchies, without exposing intermediary output values as labels.
- type: object
- varsTemplate:
- description: VarsTemplate specifies a template to expand for dynamically generating multiple variables. Data (after template expansion) must be keys with an optional value (<key>[=<value>]) separated by newlines.
- type: string
- required:
- - name
- type: object
- type: array
- required:
- - rules
- type: object
- required:
- - spec
- type: object
- served: true
- storage: true
-status:
- acceptedNames:
- kind: ""
- plural: ""
- conditions: []
- storedVersions: []
----
# Source: node-feature-discovery/templates/clusterrole.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
@@ -258,6 +118,7 @@
- ""
resources:
- nodes
+ - nodes/status
verbs:
- get
- patch
@@ -266,11 +127,73 @@
- apiGroups:
- nfd.k8s-sigs.io
resources:
+ - nodefeatures
- nodefeaturerules
+ - nodefeaturegroups
verbs:
- get
- list
- watch
+ - apiGroups:
+ - nfd.k8s-sigs.io
+ resources:
+ - nodefeaturegroups/status
+ verbs:
+ - patch
+ - update
+ - apiGroups:
+ - coordination.k8s.io
+ resources:
+ - leases
+ verbs:
+ - create
+ - apiGroups:
+ - coordination.k8s.io
+ resources:
+ - leases
+ resourceNames:
+ - "nfd-master.nfd.kubernetes.io"
+ verbs:
+ - get
+ - update
+---
+# Source: node-feature-discovery/templates/clusterrole.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+ name: node-feature-discovery-gc
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+rules:
+ - apiGroups:
+ - ""
+ resources:
+ - nodes
+ verbs:
+ - list
+ - watch
+ - apiGroups:
+ - ""
+ resources:
+ - nodes/proxy
+ verbs:
+ - get
+ - apiGroups:
+ - topology.node.k8s.io
+ resources:
+ - noderesourcetopologies
+ verbs:
+ - delete
+ - list
+ - apiGroups:
+ - nfd.k8s-sigs.io
+ resources:
+ - nodefeatures
+ verbs:
+ - delete
+ - list
---
# Source: node-feature-discovery/templates/clusterrolebinding.yaml
apiVersion: rbac.authorization.k8s.io/v1
@@ -290,39 +213,82 @@
name: node-feature-discovery
namespace: default
---
-# Source: node-feature-discovery/templates/service.yaml
-apiVersion: v1
-kind: Service
+# Source: node-feature-discovery/templates/clusterrolebinding.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
metadata:
- name: node-feature-discovery-master
+ name: node-feature-discovery-gc
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
app.kubernetes.io/managed-by: Helm
- role: master
-spec:
- type: ClusterIP
- ports:
- - port: 8080
- targetPort: grpc
- protocol: TCP
- name: grpc
- selector:
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: node-feature-discovery-gc
+subjects:
+ - kind: ServiceAccount
+ name: node-feature-discovery-gc
+ namespace: default
+---
+# Source: node-feature-discovery/templates/role.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: Role
+metadata:
+ name: node-feature-discovery-worker
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+rules:
+ - apiGroups:
+ - nfd.k8s-sigs.io
+ resources:
+ - nodefeatures
+ verbs:
+ - create
+ - get
+ - update
+ - apiGroups:
+ - ""
+ resources:
+ - pods
+ verbs:
+ - get
+---
+# Source: node-feature-discovery/templates/rolebinding.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: RoleBinding
+metadata:
+ name: node-feature-discovery-worker
+ namespace: default
+ labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: Role
+ name: node-feature-discovery-worker
+subjects:
+ - kind: ServiceAccount
+ name: node-feature-discovery-worker
+ namespace: default
---
# Source: node-feature-discovery/templates/worker.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: node-feature-discovery-worker
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
app.kubernetes.io/managed-by: Helm
role: worker
- annotations: {}
spec:
+ revisionHistoryLimit:
selector:
matchLabels:
app.kubernetes.io/name: node-feature-discovery
@@ -340,6 +306,7 @@
dnsPolicy: ClusterFirstWithHostNet
serviceAccountName: node-feature-discovery-worker
securityContext: {}
+ hostNetwork: false
containers:
- name: worker
securityContext:
@@ -349,13 +316,30 @@
- ALL
readOnlyRootFilesystem: true
runAsNonRoot: true
- image: "k8s.gcr.io/nfd/node-feature-discovery:v0.11.2"
+ image: "registry.k8s.io/nfd/node-feature-discovery:v0.16.6"
imagePullPolicy: IfNotPresent
+ livenessProbe:
+ grpc:
+ port: 8082
+ initialDelaySeconds: 10
+ readinessProbe:
+ failureThreshold: 10
+ grpc:
+ port: 8082
+ initialDelaySeconds: 5
env:
- name: NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
+ - name: POD_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.name
+ - name: POD_UID
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.uid
resources:
limits:
cpu: 1024m
@@ -366,7 +350,16 @@
command:
- "nfd-worker"
args:
- - "--server=node-feature-discovery-master:8080"
+ # Go over featureGate and add the feature-gate flag
+ - "-feature-gates=NodeFeatureAPI=true"
+ - "-feature-gates=NodeFeatureGroupAPI=false"
+ - "-metrics=8081"
+ - "-grpc-health=8082"
+ ports:
+ - containerPort: 8081
+ name: metrics
+ - containerPort: 8082
+ name: health
volumeMounts:
- name: host-boot
mountPath: "/host-boot"
@@ -380,6 +373,12 @@
- name: host-usr-lib
mountPath: "/host-usr/lib"
readOnly: true
+ - name: host-lib
+ mountPath: "/host-lib"
+ readOnly: true
+ - name: host-proc-swaps
+ mountPath: "/host-proc/swaps"
+ readOnly: true
- name: source-d
mountPath: "/etc/kubernetes/node-feature-discovery/source.d/"
readOnly: true
@@ -402,6 +401,12 @@
- name: host-usr-lib
hostPath:
path: "/usr/lib"
+ - name: host-lib
+ hostPath:
+ path: "/lib"
+ - name: host-proc-swaps
+ hostPath:
+ path: "/proc/swaps"
- name: source-d
hostPath:
path: "/etc/kubernetes/node-feature-discovery/source.d/"
@@ -425,14 +430,15 @@
kind: Deployment
metadata:
name: node-feature-discovery-master
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
app.kubernetes.io/managed-by: Helm
role: master
- annotations: {}
spec:
replicas: 1
+ revisionHistoryLimit:
selector:
matchLabels:
app.kubernetes.io/name: node-feature-discovery
@@ -444,10 +450,11 @@
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
role: master
- annotations: {}
spec:
serviceAccountName: node-feature-discovery
+ enableServiceLinks: false
securityContext: {}
+ hostNetwork: false
containers:
- name: master
securityContext:
@@ -457,26 +464,24 @@
- ALL
readOnlyRootFilesystem: true
runAsNonRoot: true
- image: "k8s.gcr.io/nfd/node-feature-discovery:v0.11.2"
+ image: "registry.k8s.io/nfd/node-feature-discovery:v0.16.6"
imagePullPolicy: IfNotPresent
livenessProbe:
- exec:
- command:
- - "/usr/bin/grpc_health_probe"
- - "-addr=:8080"
+ grpc:
+ port: 8082
initialDelaySeconds: 10
- periodSeconds: 10
readinessProbe:
- exec:
- command:
- - "/usr/bin/grpc_health_probe"
- - "-addr=:8080"
- initialDelaySeconds: 5
- periodSeconds: 10
failureThreshold: 10
+ grpc:
+ port: 8082
+ initialDelaySeconds: 5
ports:
- containerPort: 8080
name: grpc
+ - containerPort: 8081
+ name: metrics
+ - containerPort: 8082
+ name: health
env:
- name: NODE_NAME
valueFrom:
@@ -484,10 +489,212 @@
fieldPath: spec.nodeName
command:
- "nfd-master"
- resources: {}
+ resources:
+ limits:
+ memory: 4Gi
+ requests:
+ cpu: 100m
+ memory: 128Mi
+ args:
+ ## By default, disable crd controller for other than the default instances
+ - "-crd-controller=true"
+ # Go over featureGates and add the feature-gate flag
+ - "-feature-gates=NodeFeatureAPI=true"
+ - "-feature-gates=NodeFeatureGroupAPI=false"
+ - "-metrics=8081"
+ - "-grpc-health=8082"
+ volumeMounts:
+ - name: nfd-master-conf
+ mountPath: "/etc/kubernetes/node-feature-discovery"
+ readOnly: true
+ volumes:
+ - name: nfd-master-conf
+ configMap:
+ name: node-feature-discovery-master-conf
+ items:
+ - key: nfd-master.conf
+ path: nfd-master.conf
+ affinity:
+ nodeAffinity:
+ preferredDuringSchedulingIgnoredDuringExecution:
+ - preference:
+ matchExpressions:
+ - key: node-role.kubernetes.io/master
+ operator: In
+ values:
+ - ""
+ weight: 1
+ tolerations:
+ - effect: NoExecute
+ operator: Exists
+ - effect: NoSchedule
+ operator: Exists
+ - effect: NoExecute
+ key: node.kubernetes.io/not-ready
+ operator: Exists
+ tolerationSeconds: 300
+ - effect: NoExecute
+ key: node.kubernetes.io/unreachable
+ operator: Exists
+ tolerationSeconds: 300
+---
+# Source: node-feature-discovery/templates/nfd-gc.yaml
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: node-feature-discovery-gc
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+ role: gc
+spec:
+ replicas: 1
+ revisionHistoryLimit:
+ selector:
+ matchLabels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ role: gc
+ template:
+ metadata:
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ role: gc
+ spec:
+ serviceAccountName: node-feature-discovery-gc
+ dnsPolicy: ClusterFirstWithHostNet
+ securityContext: {}
+ hostNetwork: false
+ containers:
+ - name: gc
+ image: "registry.k8s.io/nfd/node-feature-discovery:v0.16.6"
+ imagePullPolicy: "IfNotPresent"
+ env:
+ - name: NODE_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: spec.nodeName
+ command:
+ - "nfd-gc"
+ args:
+ - "-gc-interval=1h"
+ resources:
+ limits:
+ memory: 1Gi
+ requests:
+ cpu: 10m
+ memory: 128Mi
+ securityContext:
+ allowPrivilegeEscalation: false
+ capabilities:
+ drop: ["ALL"]
+ readOnlyRootFilesystem: true
+ runAsNonRoot: true
+ ports:
+ - name: metrics
+ containerPort: 8081
+---
+# Source: node-feature-discovery/templates/post-delete-job.yaml
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ name: node-feature-discovery-prune
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+ annotations:
+ "helm.sh/hook": post-delete
+ "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
+---
+# Source: node-feature-discovery/templates/post-delete-job.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+ name: node-feature-discovery-prune
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+ annotations:
+ "helm.sh/hook": post-delete
+ "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
+rules:
+ - apiGroups:
+ - ""
+ resources:
+ - nodes
+ - nodes/status
+ verbs:
+ - get
+ - patch
+ - update
+ - list
+---
+# Source: node-feature-discovery/templates/post-delete-job.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+ name: node-feature-discovery-prune
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+ annotations:
+ "helm.sh/hook": post-delete
+ "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: node-feature-discovery-prune
+subjects:
+ - kind: ServiceAccount
+ name: node-feature-discovery-prune
+ namespace: default
+---
+# Source: node-feature-discovery/templates/post-delete-job.yaml
+apiVersion: batch/v1
+kind: Job
+metadata:
+ name: node-feature-discovery-prune
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+ annotations:
+ "helm.sh/hook": post-delete
+ "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
+spec:
+ template:
+ metadata:
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+ role: prune
+ spec:
+ serviceAccountName: node-feature-discovery-prune
+ containers:
+ - name: nfd-master
+ securityContext:
+ allowPrivilegeEscalation: false
+ capabilities:
+ drop:
+ - ALL
+ readOnlyRootFilesystem: true
+ runAsNonRoot: true
+ image: "registry.k8s.io/nfd/node-feature-discovery:v0.16.6"
+ imagePullPolicy: IfNotPresent
+ command:
+ - "nfd-master"
args:
- ## By default, disable NodeFeatureRules controller for other than the default instances
- - "-featurerules-controller=true"
+ - "-prune"
+ restartPolicy: Never
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution: |
Signed-off-by: Danny Froberg <[email protected]>
b2b95bd
to
e0ee111
Compare
Path: @@ -3,29 +3,54 @@
kind: ServiceAccount
metadata:
name: node-feature-discovery
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
app.kubernetes.io/managed-by: Helm
---
-{}
-
# Source: node-feature-discovery/templates/serviceaccount.yaml
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ name: node-feature-discovery-gc
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
---
+# Source: node-feature-discovery/templates/serviceaccount.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: node-feature-discovery-worker
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
app.kubernetes.io/managed-by: Helm
---
+# Source: node-feature-discovery/templates/nfd-master-conf.yaml
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: node-feature-discovery-master-conf
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+data:
+ nfd-master.conf: |-
+ null
+---
# Source: node-feature-discovery/templates/nfd-worker-conf.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: node-feature-discovery-worker-conf
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
@@ -79,171 +104,6 @@
- vendor
- device
---
-# Source: node-feature-discovery/templates/nodefeaturerule-crd.yaml
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.7.0
- creationTimestamp: null
- name: nodefeaturerules.nfd.k8s-sigs.io
-spec:
- group: nfd.k8s-sigs.io
- names:
- kind: NodeFeatureRule
- listKind: NodeFeatureRuleList
- plural: nodefeaturerules
- singular: nodefeaturerule
- scope: Cluster
- versions:
- - name: v1alpha1
- schema:
- openAPIV3Schema:
- description: NodeFeatureRule resource specifies a configuration for feature-based customization of node objects, such as node labeling.
- properties:
- apiVersion:
- description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
- type: string
- kind:
- description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
- type: string
- metadata:
- type: object
- spec:
- description: NodeFeatureRuleSpec describes a NodeFeatureRule.
- properties:
- rules:
- description: Rules is a list of node customization rules.
- items:
- description: Rule defines a rule for node customization such as labeling.
- properties:
- labels:
- additionalProperties:
- type: string
- description: Labels to create if the rule matches.
- type: object
- labelsTemplate:
- description: LabelsTemplate specifies a template to expand for dynamically generating multiple labels. Data (after template expansion) must be keys with an optional value (<key>[=<value>]) separated by newlines.
- type: string
- matchAny:
- description: MatchAny specifies a list of matchers one of which must match.
- items:
- description: MatchAnyElem specifies one sub-matcher of MatchAny.
- properties:
- matchFeatures:
- description: MatchFeatures specifies a set of matcher terms all of which must match.
- items:
- description: FeatureMatcherTerm defines requirements against one feature set. All requirements (specified as MatchExpressions) are evaluated against each element in the feature set.
- properties:
- feature:
- type: string
- matchExpressions:
- additionalProperties:
- description: "MatchExpression specifies an expression to evaluate against a set of input values. It contains an operator that is applied when matching the input and an array of values that the operator evaluates the input against. \n NB: CreateMatchExpression or MustCreateMatchExpression() should be used for creating new instances. NB: Validate() must be called if Op or Value fields are modified or if a new instance is created from scratch without using the helper functions."
- properties:
- op:
- description: Op is the operator to be applied.
- enum:
- - In
- - NotIn
- - InRegexp
- - Exists
- - DoesNotExist
- - Gt
- - Lt
- - GtLt
- - IsTrue
- - IsFalse
- type: string
- value:
- description: Value is the list of values that the operand evaluates the input against. Value should be empty if the operator is Exists, DoesNotExist, IsTrue or IsFalse. Value should contain exactly one element if the operator is Gt or Lt and exactly two elements if the operator is GtLt. In other cases Value should contain at least one element.
- items:
- type: string
- type: array
- required:
- - op
- type: object
- description: MatchExpressionSet contains a set of MatchExpressions, each of which is evaluated against a set of input values.
- type: object
- required:
- - feature
- - matchExpressions
- type: object
- type: array
- required:
- - matchFeatures
- type: object
- type: array
- matchFeatures:
- description: MatchFeatures specifies a set of matcher terms all of which must match.
- items:
- description: FeatureMatcherTerm defines requirements against one feature set. All requirements (specified as MatchExpressions) are evaluated against each element in the feature set.
- properties:
- feature:
- type: string
- matchExpressions:
- additionalProperties:
- description: "MatchExpression specifies an expression to evaluate against a set of input values. It contains an operator that is applied when matching the input and an array of values that the operator evaluates the input against. \n NB: CreateMatchExpression or MustCreateMatchExpression() should be used for creating new instances. NB: Validate() must be called if Op or Value fields are modified or if a new instance is created from scratch without using the helper functions."
- properties:
- op:
- description: Op is the operator to be applied.
- enum:
- - In
- - NotIn
- - InRegexp
- - Exists
- - DoesNotExist
- - Gt
- - Lt
- - GtLt
- - IsTrue
- - IsFalse
- type: string
- value:
- description: Value is the list of values that the operand evaluates the input against. Value should be empty if the operator is Exists, DoesNotExist, IsTrue or IsFalse. Value should contain exactly one element if the operator is Gt or Lt and exactly two elements if the operator is GtLt. In other cases Value should contain at least one element.
- items:
- type: string
- type: array
- required:
- - op
- type: object
- description: MatchExpressionSet contains a set of MatchExpressions, each of which is evaluated against a set of input values.
- type: object
- required:
- - feature
- - matchExpressions
- type: object
- type: array
- name:
- description: Name of the rule.
- type: string
- vars:
- additionalProperties:
- type: string
- description: Vars is the variables to store if the rule matches. Variables do not directly inflict any changes in the node object. However, they can be referenced from other rules enabling more complex rule hierarchies, without exposing intermediary output values as labels.
- type: object
- varsTemplate:
- description: VarsTemplate specifies a template to expand for dynamically generating multiple variables. Data (after template expansion) must be keys with an optional value (<key>[=<value>]) separated by newlines.
- type: string
- required:
- - name
- type: object
- type: array
- required:
- - rules
- type: object
- required:
- - spec
- type: object
- served: true
- storage: true
-status:
- acceptedNames:
- kind: ""
- plural: ""
- conditions: []
- storedVersions: []
----
# Source: node-feature-discovery/templates/clusterrole.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
@@ -257,7 +117,15 @@
- apiGroups:
- ""
resources:
+ - namespaces
+ verbs:
+ - watch
+ - list
+ - apiGroups:
+ - ""
+ resources:
- nodes
+ - nodes/status
verbs:
- get
- patch
@@ -266,11 +134,73 @@
- apiGroups:
- nfd.k8s-sigs.io
resources:
+ - nodefeatures
- nodefeaturerules
+ - nodefeaturegroups
verbs:
- get
- list
- watch
+ - apiGroups:
+ - nfd.k8s-sigs.io
+ resources:
+ - nodefeaturegroups/status
+ verbs:
+ - patch
+ - update
+ - apiGroups:
+ - coordination.k8s.io
+ resources:
+ - leases
+ verbs:
+ - create
+ - apiGroups:
+ - coordination.k8s.io
+ resources:
+ - leases
+ resourceNames:
+ - "nfd-master.nfd.kubernetes.io"
+ verbs:
+ - get
+ - update
+---
+# Source: node-feature-discovery/templates/clusterrole.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+ name: node-feature-discovery-gc
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+rules:
+ - apiGroups:
+ - ""
+ resources:
+ - nodes
+ verbs:
+ - list
+ - watch
+ - apiGroups:
+ - ""
+ resources:
+ - nodes/proxy
+ verbs:
+ - get
+ - apiGroups:
+ - topology.node.k8s.io
+ resources:
+ - noderesourcetopologies
+ verbs:
+ - delete
+ - list
+ - apiGroups:
+ - nfd.k8s-sigs.io
+ resources:
+ - nodefeatures
+ verbs:
+ - delete
+ - list
---
# Source: node-feature-discovery/templates/clusterrolebinding.yaml
apiVersion: rbac.authorization.k8s.io/v1
@@ -290,39 +220,82 @@
name: node-feature-discovery
namespace: default
---
-# Source: node-feature-discovery/templates/service.yaml
-apiVersion: v1
-kind: Service
+# Source: node-feature-discovery/templates/clusterrolebinding.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
metadata:
- name: node-feature-discovery-master
+ name: node-feature-discovery-gc
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
app.kubernetes.io/managed-by: Helm
- role: master
-spec:
- type: ClusterIP
- ports:
- - port: 8080
- targetPort: grpc
- protocol: TCP
- name: grpc
- selector:
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: node-feature-discovery-gc
+subjects:
+ - kind: ServiceAccount
+ name: node-feature-discovery-gc
+ namespace: default
+---
+# Source: node-feature-discovery/templates/role.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: Role
+metadata:
+ name: node-feature-discovery-worker
+ namespace: default
+ labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+rules:
+ - apiGroups:
+ - nfd.k8s-sigs.io
+ resources:
+ - nodefeatures
+ verbs:
+ - create
+ - get
+ - update
+ - apiGroups:
+ - ""
+ resources:
+ - pods
+ verbs:
+ - get
+---
+# Source: node-feature-discovery/templates/rolebinding.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: RoleBinding
+metadata:
+ name: node-feature-discovery-worker
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: Role
+ name: node-feature-discovery-worker
+subjects:
+ - kind: ServiceAccount
+ name: node-feature-discovery-worker
+ namespace: default
---
# Source: node-feature-discovery/templates/worker.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: node-feature-discovery-worker
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
app.kubernetes.io/managed-by: Helm
role: worker
- annotations: {}
spec:
+ revisionHistoryLimit:
selector:
matchLabels:
app.kubernetes.io/name: node-feature-discovery
@@ -335,11 +308,13 @@
app.kubernetes.io/instance: node-feature-discovery
role: worker
annotations:
+ checksum/config: 32abca98ab3e78fbad3b7180c1d1f84c88c821e366307c758d44bfbe2585cbcd
configmap.reloader.stakater.com/reload: node-feature-discovery-worker-conf
spec:
dnsPolicy: ClusterFirstWithHostNet
serviceAccountName: node-feature-discovery-worker
securityContext: {}
+ hostNetwork: false
containers:
- name: worker
securityContext:
@@ -349,13 +324,30 @@
- ALL
readOnlyRootFilesystem: true
runAsNonRoot: true
- image: "k8s.gcr.io/nfd/node-feature-discovery:v0.11.2"
+ image: "registry.k8s.io/nfd/node-feature-discovery:v0.17.0"
imagePullPolicy: IfNotPresent
+ livenessProbe:
+ grpc:
+ port: 8082
+ initialDelaySeconds: 10
+ readinessProbe:
+ grpc:
+ port: 8082
+ initialDelaySeconds: 5
+ failureThreshold: 10
env:
- name: NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
+ - name: POD_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.name
+ - name: POD_UID
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.uid
resources:
limits:
cpu: 1024m
@@ -366,7 +358,15 @@
command:
- "nfd-worker"
args:
- - "--server=node-feature-discovery-master:8080"
+ # Go over featureGate and add the feature-gate flag
+ - "-feature-gates=NodeFeatureGroupAPI=false"
+ - "-metrics=8081"
+ - "-grpc-health=8082"
+ ports:
+ - containerPort: 8081
+ name: metrics
+ - containerPort: 8082
+ name: health
volumeMounts:
- name: host-boot
mountPath: "/host-boot"
@@ -380,8 +380,11 @@
- name: host-usr-lib
mountPath: "/host-usr/lib"
readOnly: true
- - name: source-d
- mountPath: "/etc/kubernetes/node-feature-discovery/source.d/"
+ - name: host-lib
+ mountPath: "/host-lib"
+ readOnly: true
+ - name: host-proc-swaps
+ mountPath: "/host-proc/swaps"
readOnly: true
- name: features-d
mountPath: "/etc/kubernetes/node-feature-discovery/features.d/"
@@ -402,9 +405,12 @@
- name: host-usr-lib
hostPath:
path: "/usr/lib"
- - name: source-d
+ - name: host-lib
hostPath:
- path: "/etc/kubernetes/node-feature-discovery/source.d/"
+ path: "/lib"
+ - name: host-proc-swaps
+ hostPath:
+ path: "/proc/swaps"
- name: features-d
hostPath:
path: "/etc/kubernetes/node-feature-discovery/features.d/"
@@ -425,14 +431,15 @@
kind: Deployment
metadata:
name: node-feature-discovery-master
+ namespace: default
labels:
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
app.kubernetes.io/managed-by: Helm
role: master
- annotations: {}
spec:
replicas: 1
+ revisionHistoryLimit:
selector:
matchLabels:
app.kubernetes.io/name: node-feature-discovery
@@ -444,10 +451,13 @@
app.kubernetes.io/name: node-feature-discovery
app.kubernetes.io/instance: node-feature-discovery
role: master
- annotations: {}
+ annotations:
+ checksum/config: 0e39572ff18dbc2e9f804d7adebf2a489376f319d8007872286385bf74c1eb3d
spec:
serviceAccountName: node-feature-discovery
+ enableServiceLinks: false
securityContext: {}
+ hostNetwork: false
containers:
- name: master
securityContext:
@@ -457,37 +467,235 @@
- ALL
readOnlyRootFilesystem: true
runAsNonRoot: true
- image: "k8s.gcr.io/nfd/node-feature-discovery:v0.11.2"
+ image: "registry.k8s.io/nfd/node-feature-discovery:v0.17.0"
imagePullPolicy: IfNotPresent
+ startupProbe:
+ grpc:
+ port: 8082
+ failureThreshold: 30
livenessProbe:
- exec:
- command:
- - "/usr/bin/grpc_health_probe"
- - "-addr=:8080"
- initialDelaySeconds: 10
- periodSeconds: 10
+ grpc:
+ port: 8082
readinessProbe:
- exec:
- command:
- - "/usr/bin/grpc_health_probe"
- - "-addr=:8080"
- initialDelaySeconds: 5
- periodSeconds: 10
+ grpc:
+ port: 8082
failureThreshold: 10
ports:
- - containerPort: 8080
- name: grpc
+ - containerPort: 8081
+ name: metrics
+ - containerPort: 8082
+ name: health
+ env:
+ - name: NODE_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: spec.nodeName
+ command:
+ - "nfd-master"
+ resources:
+ limits:
+ memory: 4Gi
+ requests:
+ cpu: 100m
+ memory: 128Mi
+ args:
+ - "-enable-leader-election"
+ # Go over featureGates and add the feature-gate flag
+ - "-feature-gates=NodeFeatureGroupAPI=false"
+ - "-metrics=8081"
+ - "-grpc-health=8082"
+ volumeMounts:
+ - name: nfd-master-conf
+ mountPath: "/etc/kubernetes/node-feature-discovery"
+ readOnly: true
+ volumes:
+ - name: nfd-master-conf
+ configMap:
+ name: node-feature-discovery-master-conf
+ items:
+ - key: nfd-master.conf
+ path: nfd-master.conf
+ affinity:
+ nodeAffinity:
+ preferredDuringSchedulingIgnoredDuringExecution:
+ - preference:
+ matchExpressions:
+ - key: node-role.kubernetes.io/master
+ operator: In
+ values:
+ - ""
+ weight: 1
+ tolerations:
+ - effect: NoExecute
+ operator: Exists
+ - effect: NoSchedule
+ operator: Exists
+ - effect: NoExecute
+ key: node.kubernetes.io/not-ready
+ operator: Exists
+ tolerationSeconds: 300
+ - effect: NoExecute
+ key: node.kubernetes.io/unreachable
+ operator: Exists
+ tolerationSeconds: 300
+---
+# Source: node-feature-discovery/templates/nfd-gc.yaml
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: node-feature-discovery-gc
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+ role: gc
+spec:
+ replicas: 1
+ revisionHistoryLimit:
+ selector:
+ matchLabels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ role: gc
+ template:
+ metadata:
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ role: gc
+ spec:
+ serviceAccountName: node-feature-discovery-gc
+ dnsPolicy: ClusterFirstWithHostNet
+ securityContext: {}
+ hostNetwork: false
+ containers:
+ - name: gc
+ image: "registry.k8s.io/nfd/node-feature-discovery:v0.17.0"
+ imagePullPolicy: "IfNotPresent"
env:
- name: NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
command:
+ - "nfd-gc"
+ args:
+ - "-gc-interval=1h"
+ resources:
+ limits:
+ memory: 1Gi
+ requests:
+ cpu: 10m
+ memory: 128Mi
+ securityContext:
+ allowPrivilegeEscalation: false
+ capabilities:
+ drop: ["ALL"]
+ readOnlyRootFilesystem: true
+ runAsNonRoot: true
+ ports:
+ - name: metrics
+ containerPort: 8081
+---
+# Source: node-feature-discovery/templates/post-delete-job.yaml
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ name: node-feature-discovery-prune
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+ annotations:
+ "helm.sh/hook": post-delete
+ "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
+---
+# Source: node-feature-discovery/templates/post-delete-job.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+ name: node-feature-discovery-prune
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+ annotations:
+ "helm.sh/hook": post-delete
+ "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
+rules:
+ - apiGroups:
+ - ""
+ resources:
+ - nodes
+ - nodes/status
+ verbs:
+ - get
+ - patch
+ - update
+ - list
+---
+# Source: node-feature-discovery/templates/post-delete-job.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+ name: node-feature-discovery-prune
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+ annotations:
+ "helm.sh/hook": post-delete
+ "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: node-feature-discovery-prune
+subjects:
+ - kind: ServiceAccount
+ name: node-feature-discovery-prune
+ namespace: default
+---
+# Source: node-feature-discovery/templates/post-delete-job.yaml
+apiVersion: batch/v1
+kind: Job
+metadata:
+ name: node-feature-discovery-prune
+ namespace: default
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+ annotations:
+ "helm.sh/hook": post-delete
+ "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
+spec:
+ template:
+ metadata:
+ labels:
+ app.kubernetes.io/name: node-feature-discovery
+ app.kubernetes.io/instance: node-feature-discovery
+ app.kubernetes.io/managed-by: Helm
+ role: prune
+ spec:
+ serviceAccountName: node-feature-discovery-prune
+ containers:
+ - name: nfd-master
+ securityContext:
+ allowPrivilegeEscalation: false
+ capabilities:
+ drop:
+ - ALL
+ readOnlyRootFilesystem: true
+ runAsNonRoot: true
+ image: "registry.k8s.io/nfd/node-feature-discovery:v0.17.0"
+ imagePullPolicy: IfNotPresent
+ command:
- "nfd-master"
- resources: {}
args:
- ## By default, disable NodeFeatureRules controller for other than the default instances
- - "-featurerules-controller=true"
+ - "-prune"
+ restartPolicy: Never
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution: |
This PR contains the following updates:
0.11.2
->0.17.0
Warning
Some dependencies could not be looked up. Check the Dependency Dashboard for more information.
Release Notes
kubernetes-sigs/node-feature-discovery (node-feature-discovery)
v0.17.0
Compare Source
Changelog
Configurable restrictions (EXPERIMENTAL)
The nfd-master now has configuration options to restrict its capabilities, that is what modifications on node objects are allowed. See the nfd-master configuration file reference for documentation.
Image compatibity (EXPERIMENTAL)
There is an initiative to utilize NFD to implement system compatibility requirements for container images. As part of this work NFD v0.17 includes
nfd
command line client for validating systems against image compatibility manifests. See the documentation for more details, including examples how to create container images with compatibility manifests and validating nodes.See the enhancement proposal for background information and design details.
Miscellaneous
Scalability
This release contains numerous fixes to fix issues and improve the scalability of NFD in larger clusters.
DMI features
Discovery of
system.dmiid.product_name
was added.CPUID features
Support for new CPUID flags were added, including AMX-FP8 and AVX-VNNI-INT16.
Helm chart
Numerous small improvements in the NFD Helm chart, mainly new configuration values (see chart parameters for documentation).
Deprecations
gRPC API
The NodeFeature API is now GA and the legacy gRPC API has been completely removed.
Hooks
Support for hooks (deprecated in v0.12 has been removed. See the customization guide for replacements.
ResourceLabels config option
The
resourceLabels
configuration file option (and the corresponding-resource-labels
flag), deprecated in v0.13 were removed. Use NodeFeatureRule object's extendedResources field instead.Dynamic configuration
Dynamic runt-time reconfiguration was removed. This improves robustness and consistency as some of the configuration options did not support dynamic configuration.
Upcoming changes
The separate metric and health ports will be united behind a single port and the corresponding Helm chart values will be removed in NFD v0.18. This should be invisible to most users.
List of PRs
(Full Changelog: kubernetes-sigs/node-feature-discovery@v0.17.0-devel...v0.17.0)
v0.16.6
Compare Source
What's Changed
Contributors @marquiz @elezar @ArangoGutierrez
Full Changelog: kubernetes-sigs/node-feature-discovery@v0.16.5...v0.16.6
v0.16.5
Compare Source
What's Changed
Fixes an nfd-master memory leak on re-configure events when leader election is enabled. Adds parameters to configure health endpoint port.
Full Changelog: kubernetes-sigs/node-feature-discovery@v0.16.4...v0.16.5
v0.16.4
Compare Source
What's Changed
This patch release contains improvements to the Helm chart, adding configurable liveness and readiness probes for all daemons and configurable revision history limit for the nfd-worker and nfd-topology-updater.
Full Changelog: kubernetes-sigs/node-feature-discovery@v0.16.3...v0.16.4
v0.16.3
Compare Source
Fix detection of swap in some scenarios (#1751) and add Helm parameter to set the revisionHistoryLimit of nfd-master and nfd-gc (#1759).
Full Changelog: kubernetes-sigs/node-feature-discovery@v0.16.2...v0.16.3
v0.16.2
Compare Source
What's Changed
Fixes an issue where node labels were temporarily removed on nfd-worker pod restarts.
Full Changelog: kubernetes-sigs/node-feature-discovery@v0.16.1...v0.16.2
v0.16.1
Compare Source
What's Changed
Full Changelog: kubernetes-sigs/node-feature-discovery@v0.16.0...v0.16.1
v0.16.0
: v0.16Compare Source
Changelog
NodeFeatureGroup API
The NodeFeatureGroup custom resource was added to the NFD API. The NodeFeatureGroup API enables the creation of node groups based on features discovered by NFD. The API is an alpha feature and is disabled by default and can be enabled with the NodeFeatureGroupAPI feature gate.
See documentation for more details.
Feature gates
NFD adapted the concept of feature gates from Kubernetes to introduce and stabilize new features in a controlled way. See the documentation for more details. Two existing features (NodeFeature API and disabling label auto-prefixing) were converted into feature gates.
Deprecations
Upcoming changes
Support for hooks is deprecated since v0.12.0 and will be completely dropped in the NFD v0.17.
RDT feature labels removed
The
feature.node.kubernetes.io/cpu-rdt.*
feature labels that were deprecated in NFD v0.13 were removed. RDT features are still available for use in NodeFeatureRules for custom labels.Deprecated flags and options
The autoDefaultNs config file option of nfd-master is deprecated and will be removed in NFD v0.17. Superseded by the DisableAutoPrefix feature gate (
featureGates.DisableAutoPrefix
Helm parameter).The
-enable-nodefeature-api
command line flag of nfd-master and nfd-worker and the correspondingenableNodeFeatureApi
Helm chart parameter have been deprecated and will be removed in NFD v0.17. Superseded by the NodeFeature API feature gate (featureGates.NodeFeatureAPI
Helm parameter).The
-crd-controller
command line flag of nfd-master is deprecated and will be removed with the gRPC API in a future release.Miscellaneous
Network devices
Discover speed of virtual network interfaces.
DMI
Added support for detecting DMI attributes from
/sys/devices/virtual/dmi/id/
. In v0.16 onlysys_vendor
discovered, available assystem.dmiid.sys_vendor
feature for use in NodeFeatureRules.Swap
Discover the availability of swap on the node. Available as
memory.swap.enabled
feature for use in NodeFeatureRules.Helm chart
Now all nodes are cleaned up (feature labels, annotations, extended resources and taints are removed) after uninstalling NFD using a post-delete hook.
The Helm chart now sets resource requests (cpu and memory) for NFD pods. Users may want to adjust these for their cluster. An option to set the pod priority class was added. See Helm chart parameters in the documentation).
Container health
A gRPC health server was added to the nfd-master, nfd-worker and nfd-topology-updater daemons. Deployments (Helm and kustomize) configure container liveness and readiness probes to use that for health checking.
List of PRs
nfd-worker
erroring when reading attributes from paravirtual devices (#1557)v0.15.7
Compare Source
What's Changed
This patch release updates dependencies.
Full Changelog: kubernetes-sigs/node-feature-discovery@v0.15.6...v0.15.7
v0.15.6
Compare Source
What's Changed
Fixes an issue where node labels were temporarily removed on nfd-worker pod restarts.
Full Changelog: kubernetes-sigs/node-feature-discovery@v0.15.5...v0.15.6
v0.15.5
Compare Source
Changelog
This patch release fixes nfd-topology-updater on IPv6 clusters.
List of PRs
v0.15.4
Compare Source
This patch release fixes a potential crash in nfd-master (#1644).
v0.15.3
Compare Source
Changelog
This patch release fixes a critical memory leak in nfd-master, along with updating dependencies.
Full Changelog: kubernetes-sigs/node-feature-discovery@v0.15.2...v0.15.3
v0.15.2
Compare Source
Changel
Configuration
📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about these updates again.
This PR was generated by Mend Renovate. View the repository job log.