Update fpga-operator chart

Signed-off-by: Elias Koromilas <elias.koromilas@gmail.com>
pull/329/head
Elias Koromilas 2022-02-01 00:26:01 +02:00
parent 711f28af0d
commit 710549e62a
39 changed files with 2827 additions and 0 deletions

Binary file not shown.

View File

@ -0,0 +1,6 @@
dependencies:
- name: node-feature-discovery
repository: https://kubernetes-sigs.github.io/node-feature-discovery/charts
version: 0.10.0
digest: sha256:828293429b90cc2aee21bb9d617e9c70644f2d1a31ace67d07ff6931d4dc4f94
generated: "2022-01-14T11:44:16.302056581Z"

View File

@ -0,0 +1,53 @@
annotations:
artifacthub.io/images: |
- image: inaccel/coral:2.1
name: coral
- image: inaccel/daemon:latest
name: daemon
- image: inaccel/driver:latest
name: driver
- image: inaccel/mkrt:latest
name: mkrt
- image: inaccel/monitor:2.1
name: monitor
- image: inaccel/reef:latest
name: reef
- image: inaccel/vadd:latest
name: tests.vadd
artifacthub.io/license: Apache-2.0
artifacthub.io/links: |
- name: Documentation
url: https://docs.inaccel.com
- name: Support
url: https://github.com/inaccel/helm/issues
catalog.cattle.io/certified: partner
catalog.cattle.io/display-name: InAccel FPGA Operator
catalog.cattle.io/namespace: kube-system
catalog.cattle.io/os: linux
catalog.cattle.io/release-name: inaccel
catalog.cattle.io/scope: downstream
category: Infrastructure
apiVersion: v2
appVersion: "2.1"
dependencies:
- alias: fpga-discovery
condition: fpga-discovery.enabled
name: node-feature-discovery
repository: file://./charts/node-feature-discovery
version: 0.10.0
description: Simplifying FPGA management in Kubernetes
home: https://inaccel.com
icon: https://en.gravatar.com/userimage/147236320/2a11cd2992b4521ec287587f03fae35c.png?size=1250
keywords:
- fpga
- infrastructure
kubeVersion: '>= 1.18.0-0'
maintainers:
- email: info@inaccel.com
name: InAccel
name: fpga-operator
sources:
- https://docs.inaccel.com
- https://github.com/inaccel/helm
type: application
version: 2.7.401

View File

@ -0,0 +1,86 @@
# InAccel FPGA Operator
Simplifying FPGA management in Kubernetes
## Installing the Chart
To install the chart with the release name `my-fpga-operator`:
```console
$ helm repo add inaccel https://setup.inaccel.com/helm
$ helm install my-fpga-operator inaccel/fpga-operator
```
These commands deploy InAccel FPGA Operator on the Kubernetes cluster in the
default configuration.
> **Tip**: List all releases using `helm list`
## Uninstalling the Chart
To uninstall/delete the `my-fpga-operator` deployment:
```console
$ helm uninstall my-fpga-operator
```
The command removes all the Kubernetes components associated with the chart and
deletes the release.
## Parameters
The following table lists the configurable parameters of the InAccel FPGA
Operator chart and their default values.
| Parameter | Description | Default |
| ------------------------ | ------------------------------------------------------- | ------------------ |
| `coral.httpsProxy` | Sets HTTPS_PROXY environment variable in the container. | |
| `coral.image` | Container image name. | `inaccel/coral` |
| `coral.logLevel` | Sets LOG_LEVEL environment variable in the container. | `info` |
| `coral.port` | Number of port to expose on the host. | |
| `coral.pullPolicy` | Image pull policy. | `Always` |
| `coral.resources` | Compute resources required by this container. | |
| `coral.tag` | Release version. | *APP VERSION* |
| `daemon.debug` | Argument --debug to the entrypoint. | `false` |
| `daemon.image` | Container image name. | `inaccel/daemon` |
| `daemon.pullPolicy` | Image pull policy. | |
| `daemon.resources` | Compute resources required by this container. | |
| `daemon.tag` | Release version. | `latest` |
| `driver.enabled` | Indicates whether driver should be enabled. | `true` |
| `driver.image` | Container image name. | `inaccel/driver` |
| `driver.pullPolicy` | Image pull policy. | |
| `driver.tag` | Release version. | `latest` |
| `fpga-discovery.enabled` | Dependency condition. | `true` |
| `kubelet` | Directory path for managing kubelet files. | `/var/lib/kubelet` |
| `license` | String value of the secret license key. | |
| `mkrt.image` | Container image name. | `inaccel/mkrt` |
| `mkrt.pullPolicy` | Image pull policy. | |
| `mkrt.tag` | Release version. | `latest` |
| `monitor.image` | Container image name. | `inaccel/monitor` |
| `monitor.port` | Number of port to expose on the host. | |
| `monitor.pullPolicy` | Image pull policy. | `Always` |
| `monitor.resources` | Compute resources required by this container. | |
| `monitor.tag` | Release version. | *APP VERSION* |
| `reef.debug` | Argument --debug to the entrypoint. | `false` |
| `reef.image` | Container image name. | `inaccel/reef` |
| `reef.pullPolicy` | Image pull policy. | |
| `reef.resources` | Compute resources required by this container. | |
| `reef.tag` | Release version. | `latest` |
| `root.config` | Host-specific system configuration. | `/etc/inaccel` |
| `root.state` | Variable state information. | `/var/lib/inaccel` |
| `tests.vadd.image` | Container image name. | `inaccel/vadd` |
| `tests.vadd.platforms` | FPGA platforms to test. | |
| `tests.vadd.pullPolicy` | Image pull policy. | |
| `tests.vadd.tag` | Release version. | `latest` |
Specify each parameter using the `--set key=value[,key=value]` argument to
`helm install`.
Alternatively, a YAML file that specifies the values for the parameters can be
provided while installing the chart. For example,
```console
$ helm install my-fpga-operator -f values.yaml inaccel/fpga-operator
```
> **Tip**: You can use the default `values.yaml`

View File

@ -0,0 +1,7 @@
### Documentation
For detailed usage instructions visit: [docs.inaccel.com](https://docs.inaccel.com)
### Support
For more product information contact: info@inaccel.com

View File

@ -0,0 +1,23 @@
# Patterns to ignore when building packages.
# This supports shell glob matching, relative path matching, and
# negation (prefixed with !). Only one pattern per line.
.DS_Store
# Common VCS dirs
.git/
.gitignore
.bzr/
.bzrignore
.hg/
.hgignore
.svn/
# Common backup files
*.swp
*.bak
*.tmp
*.orig
*~
# Various IDEs
.project
.idea/
*.tmproj
.vscode/

View File

@ -0,0 +1,14 @@
apiVersion: v2
appVersion: v0.10.0
description: 'Detects hardware features available on each node in a Kubernetes cluster,
and advertises those features using node labels. '
home: https://github.com/kubernetes-sigs/node-feature-discovery
keywords:
- feature-discovery
- feature-detection
- node-labels
name: node-feature-discovery
sources:
- https://github.com/kubernetes-sigs/node-feature-discovery
type: application
version: 0.10.0

View File

@ -0,0 +1,10 @@
# Node Feature Discovery
Node Feature Discovery (NFD) is a Kubernetes add-on for detecting hardware
features and system configuration. Detected features are advertised as node
labels. NFD provides flexible configuration and extension points for a wide
range of vendor and application specific node labeling needs.
See
[NFD documentation](https://kubernetes-sigs.github.io/node-feature-discovery/v0.10/get-started/deployment-and-usage.html#deployment-with-helm)
for deployment instructions.

View File

@ -0,0 +1,223 @@
---
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: []

View File

@ -0,0 +1,74 @@
{{/* vim: set filetype=mustache: */}}
{{/*
Expand the name of the chart.
*/}}
{{- define "node-feature-discovery.name" -}}
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
{{- end -}}
{{/*
Create a default fully qualified app name.
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
If release name contains chart name it will be used as a full name.
*/}}
{{- define "node-feature-discovery.fullname" -}}
{{- if .Values.fullnameOverride -}}
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}}
{{- else -}}
{{- $name := default .Chart.Name .Values.nameOverride -}}
{{- if contains $name .Release.Name -}}
{{- .Release.Name | trunc 63 | trimSuffix "-" -}}
{{- else -}}
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
{{- end -}}
{{- end -}}
{{- end -}}
{{/*
Create chart name and version as used by the chart label.
*/}}
{{- define "node-feature-discovery.chart" -}}
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
{{- end -}}
{{/*
Common labels
*/}}
{{- define "node-feature-discovery.labels" -}}
helm.sh/chart: {{ include "node-feature-discovery.chart" . }}
{{ include "node-feature-discovery.selectorLabels" . }}
{{- if .Chart.AppVersion }}
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
{{- end }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
{{- end -}}
{{/*
Selector labels
*/}}
{{- define "node-feature-discovery.selectorLabels" -}}
app.kubernetes.io/name: {{ include "node-feature-discovery.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{- end -}}
{{/*
Create the name of the service account to use
*/}}
{{- define "node-feature-discovery.serviceAccountName" -}}
{{- if .Values.master.serviceAccount.create -}}
{{ default (include "node-feature-discovery.fullname" .) .Values.master.serviceAccount.name }}
{{- else -}}
{{ default "default" .Values.master.serviceAccount.name }}
{{- end -}}
{{- end -}}
{{/*
Create the name of the service account which topologyUpdater will use
*/}}
{{- define "node-feature-discovery.topologyUpdater.serviceAccountName" -}}
{{- if .Values.topologyUpdater.serviceAccount.create -}}
{{ default (printf "%s-topology-updater" (include "node-feature-discovery.fullname" .)) .Values.topologyUpdater.serviceAccount.name }}
{{- else -}}
{{ default "default" .Values.topologyUpdater.serviceAccount.name }}
{{- end -}}
{{- end -}}

View File

@ -0,0 +1,64 @@
{{- if .Values.tls.certManager }}
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: nfd-master-cert
spec:
secretName: nfd-master-cert
subject:
organizations:
- node-feature-discovery
commonName: nfd-master
dnsNames:
# must match the service name
- {{ include "node-feature-discovery.fullname" . }}-master
# first one is configured for use by the worker; below are for completeness
- {{ include "node-feature-discovery.fullname" . }}-master.{{ $.Release.Namespace }}.svc
- {{ include "node-feature-discovery.fullname" . }}-master.{{ $.Release.Namespace }}.svc.cluster.local
# localhost needed for grpc_health_probe
- localhost
issuerRef:
name: nfd-ca-issuer
kind: Issuer
group: cert-manager.io
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: nfd-worker-cert
spec:
secretName: nfd-worker-cert
subject:
organizations:
- node-feature-discovery
commonName: nfd-worker
dnsNames:
- {{ include "node-feature-discovery.fullname" . }}-worker.{{ $.Release.Namespace }}.svc.cluster.local
issuerRef:
name: nfd-ca-issuer
kind: Issuer
group: cert-manager.io
{{- if .Values.topologyUpdater.enable }}
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: nfd-topology-updater-cert
spec:
secretName: nfd-topology-updater-cert
subject:
organizations:
- node-feature-discovery
commonName: nfd-topology-updater
dnsNames:
- {{ include "node-feature-discovery.fullname" . }}-topology-updater.{{ $.Release.Namespace }}.svc.cluster.local
issuerRef:
name: nfd-ca-issuer
kind: Issuer
group: cert-manager.io
{{- end }}
{{- end }}

View File

@ -0,0 +1,39 @@
{{- if .Values.tls.certManager }}
# See https://cert-manager.io/docs/configuration/selfsigned/#bootstrapping-ca-issuers
# - Create a self signed issuer
# - Use this to create a CA cert
# - Use this to now create a CA issuer
---
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
name: nfd-ca-bootstrap
spec:
selfSigned: {}
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: nfd-ca-cert
spec:
isCA: true
secretName: nfd-ca-cert
subject:
organizations:
- node-feature-discovery
commonName: nfd-ca-cert
issuerRef:
name: nfd-ca-bootstrap
kind: Issuer
group: cert-manager.io
---
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
name: nfd-ca-issuer
spec:
ca:
secretName: nfd-ca-cert
{{- end }}

View File

@ -0,0 +1,63 @@
{{- if .Values.master.rbac.create }}
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: {{ include "node-feature-discovery.fullname" . }}
labels:
{{- include "node-feature-discovery.labels" . | nindent 4 }}
rules:
- apiGroups:
- ""
resources:
- nodes
# when using command line flag --resource-labels to create extended resources
# you will need to uncomment "- nodes/status"
# - nodes/status
verbs:
- get
- patch
- update
- list
- apiGroups:
- nfd.k8s-sigs.io
resources:
- nodefeaturerules
verbs:
- get
- list
- watch
{{- if .Values.topologyUpdater.enable }}
- apiGroups:
- topology.node.k8s.io
resources:
- noderesourcetopologies
verbs:
- create
- get
- update
{{- end }}
{{- end }}
---
{{- if .Values.topologyUpdater.rbac.create }}
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: {{ include "node-feature-discovery.fullname" . }}-topology-updater
labels:
{{- include "node-feature-discovery.labels" . | nindent 4 }}
rules:
- apiGroups:
- ""
resources:
- nodes
verbs:
- get
- list
- apiGroups:
- ""
resources:
- pods
verbs:
- get
{{- end }}

View File

@ -0,0 +1,34 @@
{{- if .Values.master.rbac.create }}
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: {{ include "node-feature-discovery.fullname" . }}
labels:
{{- include "node-feature-discovery.labels" . | nindent 4 }}
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: {{ include "node-feature-discovery.fullname" . }}
subjects:
- kind: ServiceAccount
name: {{ include "node-feature-discovery.serviceAccountName" . }}
namespace: {{ $.Release.Namespace }}
{{- end }}
---
{{- if .Values.topologyUpdater.rbac.create }}
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: {{ include "node-feature-discovery.fullname" . }}-topology-updater
labels:
{{- include "node-feature-discovery.labels" . | nindent 4 }}
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: {{ include "node-feature-discovery.fullname" . }}-topology-updater
subjects:
- kind: ServiceAccount
name: {{ include "node-feature-discovery.topologyUpdater.serviceAccountName" . }}
namespace: {{ $.Release.Namespace }}
{{- end }}

View File

@ -0,0 +1,112 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "node-feature-discovery.fullname" . }}-master
labels:
{{- include "node-feature-discovery.labels" . | nindent 4 }}
role: master
spec:
replicas: {{ .Values.master.replicaCount }}
selector:
matchLabels:
{{- include "node-feature-discovery.selectorLabels" . | nindent 6 }}
role: master
template:
metadata:
labels:
{{- include "node-feature-discovery.selectorLabels" . | nindent 8 }}
role: master
annotations:
{{- toYaml .Values.master.annotations | nindent 8 }}
spec:
{{- with .Values.imagePullSecrets }}
imagePullSecrets:
{{- toYaml . | nindent 8 }}
{{- end }}
serviceAccountName: {{ include "node-feature-discovery.serviceAccountName" . }}
securityContext:
{{- toYaml .Values.master.podSecurityContext | nindent 8 }}
containers:
- name: master
securityContext:
{{- toYaml .Values.master.securityContext | nindent 12 }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
livenessProbe:
exec:
command:
- "/usr/bin/grpc_health_probe"
- "-addr=:8080"
{{- if .Values.tls.enable }}
- "-tls"
- "-tls-ca-cert=/etc/kubernetes/node-feature-discovery/certs/ca.crt"
- "-tls-client-key=/etc/kubernetes/node-feature-discovery/certs/tls.key"
- "-tls-client-cert=/etc/kubernetes/node-feature-discovery/certs/tls.crt"
{{- end }}
initialDelaySeconds: 10
periodSeconds: 10
readinessProbe:
exec:
command:
- "/usr/bin/grpc_health_probe"
- "-addr=:8080"
{{- if .Values.tls.enable }}
- "-tls"
- "-tls-ca-cert=/etc/kubernetes/node-feature-discovery/certs/ca.crt"
- "-tls-client-key=/etc/kubernetes/node-feature-discovery/certs/tls.key"
- "-tls-client-cert=/etc/kubernetes/node-feature-discovery/certs/tls.crt"
{{- end }}
initialDelaySeconds: 5
periodSeconds: 10
failureThreshold: 10
ports:
- containerPort: 8080
name: grpc
env:
- name: NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
command:
- "nfd-master"
resources:
{{- toYaml .Values.master.resources | nindent 12 }}
args:
{{- if .Values.master.instance | empty | not }}
- "--instance={{ .Values.master.instance }}"
{{- end }}
{{- if .Values.master.extraLabelNs | empty | not }}
- "--extra-label-ns={{- join "," .Values.master.extraLabelNs }}"
{{- end }}
{{- if .Values.master.featureRulesController | kindIs "invalid" | not }}
- "-featurerules-controller={{ .Values.master.featureRulesController }}"
{{- else }}
## By default, disable NodeFeatureRules controller for other than the default instances
- "-featurerules-controller={{ .Values.master.instance | empty }}"
{{- end }}
{{- if .Values.tls.enable }}
- "--ca-file=/etc/kubernetes/node-feature-discovery/certs/ca.crt"
- "--key-file=/etc/kubernetes/node-feature-discovery/certs/tls.key"
- "--cert-file=/etc/kubernetes/node-feature-discovery/certs/tls.crt"
volumeMounts:
- name: nfd-master-cert
mountPath: "/etc/kubernetes/node-feature-discovery/certs"
readOnly: true
volumes:
- name: nfd-master-cert
secret:
secretName: nfd-master-cert
## /TLS ##
{{- end }}
{{- with .Values.master.nodeSelector }}
nodeSelector:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.master.affinity }}
affinity:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.master.tolerations }}
tolerations:
{{- toYaml . | nindent 8 }}
{{- end }}

View File

@ -0,0 +1,9 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ include "node-feature-discovery.fullname" . }}-worker-conf
labels:
{{- include "node-feature-discovery.labels" . | nindent 4 }}
data:
nfd-worker.conf: |-
{{- .Values.worker.config | toYaml | nindent 4 }}

View File

@ -0,0 +1,3 @@
{{- if .Values.nodeFeatureRule.createCRD }}
{{ .Files.Get "manifests/nodefeaturerule-crd.yaml" }}
{{- end}}

View File

@ -0,0 +1,16 @@
apiVersion: v1
kind: Service
metadata:
name: {{ include "node-feature-discovery.fullname" . }}-master
labels:
{{- include "node-feature-discovery.labels" . | nindent 4 }}
role: master
spec:
type: {{ .Values.master.service.type }}
ports:
- port: {{ .Values.master.service.port }}
targetPort: grpc
protocol: TCP
name: grpc
selector:
{{- include "node-feature-discovery.selectorLabels" . | nindent 4 }}

View File

@ -0,0 +1,26 @@
{{- if .Values.master.serviceAccount.create -}}
apiVersion: v1
kind: ServiceAccount
metadata:
name: {{ include "node-feature-discovery.serviceAccountName" . }}
labels:
{{- include "node-feature-discovery.labels" . | nindent 4 }}
{{- with .Values.master.serviceAccount.annotations }}
annotations:
{{- toYaml . | nindent 4 }}
{{- end }}
{{- end }}
---
{{- if .Values.topologyUpdater.serviceAccount.create -}}
apiVersion: v1
kind: ServiceAccount
metadata:
name: {{ include "node-feature-discovery.topologyUpdater.serviceAccountName" . }}
labels:
{{- include "node-feature-discovery.labels" . | nindent 4 }}
{{- with .Values.topologyUpdater.serviceAccount.annotations }}
annotations:
{{- toYaml . | nindent 4 }}
{{- end }}
{{- end }}

View File

@ -0,0 +1,145 @@
{{- if and .Values.topologyUpdater.enable .Values.topologyUpdater.createCRDs -}}
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
api-approved.kubernetes.io: https://github.com/kubernetes/enhancements/pull/1870
controller-gen.kubebuilder.io/version: v0.7.0
creationTimestamp: null
name: noderesourcetopologies.topology.node.k8s.io
spec:
group: topology.node.k8s.io
names:
kind: NodeResourceTopology
listKind: NodeResourceTopologyList
plural: noderesourcetopologies
shortNames:
- node-res-topo
singular: noderesourcetopology
scope: Cluster
versions:
- name: v1alpha1
schema:
openAPIV3Schema:
description: NodeResourceTopology describes node resources and their topology.
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
topologyPolicies:
items:
type: string
type: array
zones:
description: ZoneList contains an array of Zone objects.
items:
description: Zone represents a resource topology zone, e.g. socket,
node, die or core.
properties:
attributes:
description: AttributeList contains an array of AttributeInfo objects.
items:
description: AttributeInfo contains one attribute of a Zone.
properties:
name:
type: string
value:
type: string
required:
- name
- value
type: object
type: array
costs:
description: CostList contains an array of CostInfo objects.
items:
description: CostInfo describes the cost (or distance) between
two Zones.
properties:
name:
type: string
value:
format: int64
type: integer
required:
- name
- value
type: object
type: array
name:
type: string
parent:
type: string
resources:
description: ResourceInfoList contains an array of ResourceInfo
objects.
items:
description: ResourceInfo contains information about one resource
type.
properties:
allocatable:
anyOf:
- type: integer
- type: string
description: Allocatable quantity of the resource, corresponding
to allocatable in node status, i.e. total amount of this
resource available to be used by pods.
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
x-kubernetes-int-or-string: true
available:
anyOf:
- type: integer
- type: string
description: Available is the amount of this resource currently
available for new (to be scheduled) pods, i.e. Allocatable
minus the resources reserved by currently running pods.
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
x-kubernetes-int-or-string: true
capacity:
anyOf:
- type: integer
- type: string
description: Capacity of the resource, corresponding to capacity
in node status, i.e. total amount of this resource that
the node has.
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
x-kubernetes-int-or-string: true
name:
description: Name of the resource.
type: string
required:
- allocatable
- available
- capacity
- name
type: object
type: array
type:
type: string
required:
- name
- type
type: object
type: array
required:
- topologyPolicies
- zones
type: object
served: true
storage: true
status:
acceptedNames:
kind: ""
plural: ""
conditions: []
storedVersions: []
{{- end }}

View File

@ -0,0 +1,111 @@
{{- if .Values.topologyUpdater.enable -}}
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: {{ include "node-feature-discovery.fullname" . }}-topology-updater
labels:
{{- include "node-feature-discovery.labels" . | nindent 4 }}
role: topology-updater
spec:
selector:
matchLabels:
{{- include "node-feature-discovery.selectorLabels" . | nindent 6 }}
role: topology-updater
template:
metadata:
labels:
{{- include "node-feature-discovery.selectorLabels" . | nindent 8 }}
role: topology-updater
annotations:
{{- toYaml .Values.topologyUpdater.annotations | nindent 8 }}
spec:
serviceAccountName: {{ include "node-feature-discovery.topologyUpdater.serviceAccountName" . }}
dnsPolicy: ClusterFirstWithHostNet
{{- with .Values.imagePullSecrets }}
imagePullSecrets:
{{- toYaml . | nindent 8 }}
{{- end }}
securityContext:
{{- toYaml .Values.topologyUpdater.podSecurityContext | nindent 8 }}
containers:
- name: topology-updater
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
imagePullPolicy: "{{ .Values.image.pullPolicy }}"
env:
- name: NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
command:
- "nfd-topology-updater"
args:
- "--server={{ include "node-feature-discovery.fullname" . }}-master:{{ .Values.master.service.port }}"
{{- if .Values.topologyUpdater.updateInterval | empty | not }}
- "--sleep-interval={{ .Values.topologyUpdater.updateInterval }}"
{{- else }}
- "--sleep-interval=3s"
{{- end }}
{{- if .Values.topologyUpdater.watchNamespace | empty | not }}
- "--watch-namespace={{ .Values.topologyUpdater.watchNamespace }}"
{{- else }}
- "--watch-namespace=*"
{{- end }}
{{- if .Values.tls.enable }}
- "--ca-file=/etc/kubernetes/node-feature-discovery/certs/ca.crt"
- "--key-file=/etc/kubernetes/node-feature-discovery/certs/tls.key"
- "--cert-file=/etc/kubernetes/node-feature-discovery/certs/tls.crt"
{{- end }}
volumeMounts:
- name: kubelet-config
mountPath: /host-var/lib/kubelet/config.yaml
- name: kubelet-podresources-sock
mountPath: /host-var/lib/kubelet/pod-resources/kubelet.sock
- name: host-sys
mountPath: /host-sys
{{- if .Values.tls.enable }}
- name: nfd-topology-updater-cert
mountPath: "/etc/kubernetes/node-feature-discovery/certs"
readOnly: true
{{- end }}
resources:
{{- toYaml .Values.topologyUpdater.resources | nindent 12 }}
securityContext:
{{- toYaml .Values.topologyUpdater.securityContext | nindent 12 }}
volumes:
- name: host-sys
hostPath:
path: "/sys"
- name: kubelet-config
hostPath:
{{- if .Values.topologyUpdater.kubeletConfigPath | empty | not }}
path: {{ .Values.topologyUpdater.kubeletConfigPath }}
{{- else }}
path: /var/lib/kubelet/config.yaml
{{- end }}
- name: kubelet-podresources-sock
hostPath:
{{- if .Values.topologyUpdater.kubeletPodResourcesSockPath | empty | not }}
path: {{ .Values.topologyUpdater.kubeletPodResourcesSockPath }}
{{- else }}
path: /var/lib/kubelet/pod-resources/kubelet.sock
{{- end }}
{{- if .Values.tls.enable }}
- name: nfd-topology-updater-cert
secret:
secretName: nfd-topology-updater-cert
{{- end }}
{{- with .Values.topologyUpdater.nodeSelector }}
nodeSelector:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.topologyUpdater.affinity }}
affinity:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.topologyUpdater.tolerations }}
tolerations:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- end }}

View File

@ -0,0 +1,128 @@
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: {{ include "node-feature-discovery.fullname" . }}-worker
labels:
{{- include "node-feature-discovery.labels" . | nindent 4 }}
role: worker
spec:
selector:
matchLabels:
{{- include "node-feature-discovery.selectorLabels" . | nindent 6 }}
role: worker
template:
metadata:
labels:
{{- include "node-feature-discovery.selectorLabels" . | nindent 8 }}
role: worker
annotations:
{{- toYaml .Values.worker.annotations | nindent 8 }}
spec:
dnsPolicy: ClusterFirstWithHostNet
{{- with .Values.imagePullSecrets }}
imagePullSecrets:
{{- toYaml . | nindent 8 }}
{{- end }}
securityContext:
{{- toYaml .Values.worker.podSecurityContext | nindent 8 }}
containers:
- name: worker
securityContext:
{{- toYaml .Values.worker.securityContext | nindent 12 }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
env:
- name: NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
resources:
{{- toYaml .Values.worker.resources | nindent 12 }}
command:
- "nfd-worker"
args:
- "--server={{ include "node-feature-discovery.fullname" . }}-master:{{ .Values.master.service.port }}"
{{- if .Values.tls.enable }}
- "--ca-file=/etc/kubernetes/node-feature-discovery/certs/ca.crt"
- "--key-file=/etc/kubernetes/node-feature-discovery/certs/tls.key"
- "--cert-file=/etc/kubernetes/node-feature-discovery/certs/tls.crt"
{{- end }}
volumeMounts:
- name: host-boot
mountPath: "/host-boot"
readOnly: true
- name: host-os-release
mountPath: "/host-etc/os-release"
readOnly: true
- name: host-sys
mountPath: "/host-sys"
readOnly: true
- name: host-usr-lib
mountPath: "/host-usr/lib"
readOnly: true
{{- if .Values.worker.mountUsrSrc }}
- name: host-usr-src
mountPath: "/host-usr/src"
readOnly: true
{{- end }}
- name: source-d
mountPath: "/etc/kubernetes/node-feature-discovery/source.d/"
readOnly: true
- name: features-d
mountPath: "/etc/kubernetes/node-feature-discovery/features.d/"
readOnly: true
- name: nfd-worker-conf
mountPath: "/etc/kubernetes/node-feature-discovery"
readOnly: true
{{- if .Values.tls.enable }}
- name: nfd-worker-cert
mountPath: "/etc/kubernetes/node-feature-discovery/certs"
readOnly: true
{{- end }}
volumes:
- name: host-boot
hostPath:
path: "/boot"
- name: host-os-release
hostPath:
path: "/etc/os-release"
- name: host-sys
hostPath:
path: "/sys"
- name: host-usr-lib
hostPath:
path: "/usr/lib"
{{- if .Values.worker.mountUsrSrc }}
- name: host-usr-src
hostPath:
path: "/usr/src"
{{- end }}
- name: source-d
hostPath:
path: "/etc/kubernetes/node-feature-discovery/source.d/"
- name: features-d
hostPath:
path: "/etc/kubernetes/node-feature-discovery/features.d/"
- name: nfd-worker-conf
configMap:
name: {{ include "node-feature-discovery.fullname" . }}-worker-conf
items:
- key: nfd-worker.conf
path: nfd-worker.conf
{{- if .Values.tls.enable }}
- name: nfd-worker-cert
secret:
secretName: nfd-worker-cert
{{- end }}
{{- with .Values.worker.nodeSelector }}
nodeSelector:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.worker.affinity }}
affinity:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.worker.tolerations }}
tolerations:
{{- toYaml . | nindent 8 }}
{{- end }}

View File

@ -0,0 +1,401 @@
image:
repository: k8s.gcr.io/nfd/node-feature-discovery
# This should be set to 'IfNotPresent' for released version
pullPolicy: IfNotPresent
# tag, if defined will use the given image tag, else Chart.AppVersion will be used
# tag
imagePullSecrets: []
nameOverride: ""
fullnameOverride: ""
nodeFeatureRule:
createCRD: true
master:
instance:
extraLabelNs: []
featureRulesController: null
replicaCount: 1
podSecurityContext: {}
# fsGroup: 2000
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop: [ "ALL" ]
readOnlyRootFilesystem: true
runAsNonRoot: true
# runAsUser: 1000
serviceAccount:
# Specifies whether a service account should be created
create: true
# Annotations to add to the service account
annotations: {}
# The name of the service account to use.
# If not set and create is true, a name is generated using the fullname template
name:
rbac:
create: true
service:
type: ClusterIP
port: 8080
resources: {}
# We usually recommend not to specify default resources and to leave this as a conscious
# choice for the user. This also increases chances charts run on environments with little
# resources, such as Minikube. If you do want to specify resources, uncomment the following
# lines, adjust them as necessary, and remove the curly braces after 'resources:'.
# limits:
# cpu: 100m
# memory: 128Mi
# requests:
# cpu: 100m
# memory: 128Mi
nodeSelector: {}
tolerations:
- key: "node-role.kubernetes.io/master"
operator: "Equal"
value: ""
effect: "NoSchedule"
- key: "node-role.kubernetes.io/control-plane"
operator: "Equal"
value: ""
effect: "NoSchedule"
annotations: {}
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
preference:
matchExpressions:
- key: "node-role.kubernetes.io/master"
operator: In
values: [""]
- weight: 1
preference:
matchExpressions:
- key: "node-role.kubernetes.io/control-plane"
operator: In
values: [""]
worker:
config: ### <NFD-WORKER-CONF-START-DO-NOT-REMOVE>
#core:
# labelWhiteList:
# noPublish: false
# sleepInterval: 60s
# featureSources: [all]
# labelSources: [all]
# klog:
# addDirHeader: false
# alsologtostderr: false
# logBacktraceAt:
# logtostderr: true
# skipHeaders: false
# stderrthreshold: 2
# v: 0
# vmodule:
## NOTE: the following options are not dynamically run-time configurable
## and require a nfd-worker restart to take effect after being changed
# logDir:
# logFile:
# logFileMaxSize: 1800
# skipLogHeaders: false
#sources:
# cpu:
# cpuid:
## NOTE: whitelist has priority over blacklist
# attributeBlacklist:
# - "BMI1"
# - "BMI2"
# - "CLMUL"
# - "CMOV"
# - "CX16"
# - "ERMS"
# - "F16C"
# - "HTT"
# - "LZCNT"
# - "MMX"
# - "MMXEXT"
# - "NX"
# - "POPCNT"
# - "RDRAND"
# - "RDSEED"
# - "RDTSCP"
# - "SGX"
# - "SSE"
# - "SSE2"
# - "SSE3"
# - "SSE4"
# - "SSE42"
# - "SSSE3"
# attributeWhitelist:
# kernel:
# kconfigFile: "/path/to/kconfig"
# configOpts:
# - "NO_HZ"
# - "X86"
# - "DMI"
# pci:
# deviceClassWhitelist:
# - "0200"
# - "03"
# - "12"
# deviceLabelFields:
# - "class"
# - "vendor"
# - "device"
# - "subsystem_vendor"
# - "subsystem_device"
# usb:
# deviceClassWhitelist:
# - "0e"
# - "ef"
# - "fe"
# - "ff"
# deviceLabelFields:
# - "class"
# - "vendor"
# - "device"
# custom:
# # The following feature demonstrates the capabilities of the matchFeatures
# - name: "my custom rule"
# labels:
# my-ng-feature: "true"
# # matchFeatures implements a logical AND over all matcher terms in the
# # list (i.e. all of the terms, or per-feature matchers, must match)
# matchFeatures:
# - feature: cpu.cpuid
# matchExpressions:
# AVX512F: {op: Exists}
# - feature: cpu.cstate
# matchExpressions:
# enabled: {op: IsTrue}
# - feature: cpu.pstate
# matchExpressions:
# no_turbo: {op: IsFalse}
# scaling_governor: {op: In, value: ["performance"]}
# - feature: cpu.rdt
# matchExpressions:
# RDTL3CA: {op: Exists}
# - feature: cpu.sst
# matchExpressions:
# bf.enabled: {op: IsTrue}
# - feature: cpu.topology
# matchExpressions:
# hardware_multithreading: {op: IsFalse}
#
# - feature: kernel.config
# matchExpressions:
# X86: {op: Exists}
# LSM: {op: InRegexp, value: ["apparmor"]}
# - feature: kernel.loadedmodule
# matchExpressions:
# e1000e: {op: Exists}
# - feature: kernel.selinux
# matchExpressions:
# enabled: {op: IsFalse}
# - feature: kernel.version
# matchExpressions:
# major: {op: In, value: ["5"]}
# minor: {op: Gt, value: ["10"]}
#
# - feature: storage.block
# matchExpressions:
# rotational: {op: In, value: ["0"]}
# dax: {op: In, value: ["0"]}
#
# - feature: network.device
# matchExpressions:
# operstate: {op: In, value: ["up"]}
# speed: {op: Gt, value: ["100"]}
#
# - feature: memory.numa
# matchExpressions:
# node_count: {op: Gt, value: ["2"]}
# - feature: memory.nv
# matchExpressions:
# devtype: {op: In, value: ["nd_dax"]}
# mode: {op: In, value: ["memory"]}
#
# - feature: system.osrelease
# matchExpressions:
# ID: {op: In, value: ["fedora", "centos"]}
# - feature: system.name
# matchExpressions:
# nodename: {op: InRegexp, value: ["^worker-X"]}
#
# - feature: local.label
# matchExpressions:
# custom-feature-knob: {op: Gt, value: ["100"]}
#
# # The following feature demonstrates the capabilities of the matchAny
# - name: "my matchAny rule"
# labels:
# my-ng-feature-2: "my-value"
# # matchAny implements a logical IF over all elements (sub-matchers) in
# # the list (i.e. at least one feature matcher must match)
# matchAny:
# - matchFeatures:
# - feature: kernel.loadedmodule
# matchExpressions:
# driver-module-X: {op: Exists}
# - feature: pci.device
# matchExpressions:
# vendor: {op: In, value: ["8086"]}
# class: {op: In, value: ["0200"]}
# - matchFeatures:
# - feature: kernel.loadedmodule
# matchExpressions:
# driver-module-Y: {op: Exists}
# - feature: usb.device
# matchExpressions:
# vendor: {op: In, value: ["8086"]}
# class: {op: In, value: ["02"]}
#
# # The following features demonstreate label templating capabilities
# - name: "my template rule"
# labelsTemplate: |
# {{ range .system.osrelease }}my-system-feature.{{ .Name }}={{ .Value }}
# {{ end }}
# matchFeatures:
# - feature: system.osrelease
# matchExpressions:
# ID: {op: InRegexp, value: ["^open.*"]}
# VERSION_ID.major: {op: In, value: ["13", "15"]}
#
# - name: "my template rule 2"
# labelsTemplate: |
# {{ range .pci.device }}my-pci-device.{{ .class }}-{{ .device }}=with-cpuid
# {{ end }}
# matchFeatures:
# - feature: pci.device
# matchExpressions:
# class: {op: InRegexp, value: ["^06"]}
# vendor: ["8086"]
# - feature: cpu.cpuid
# matchExpressions:
# AVX: {op: Exists}
#
# # The following examples demonstrate vars field and back-referencing
# # previous labels and vars
# - name: "my dummy kernel rule"
# labels:
# "my.kernel.feature": "true"
# matchFeatures:
# - feature: kernel.version
# matchExpressions:
# major: {op: Gt, value: ["2"]}
#
# - name: "my dummy rule with no labels"
# vars:
# "my.dummy.var": "1"
# matchFeatures:
# - feature: cpu.cpuid
# matchExpressions: {}
#
# - name: "my rule using backrefs"
# labels:
# "my.backref.feature": "true"
# matchFeatures:
# - feature: rule.matched
# matchExpressions:
# my.kernel.feature: {op: IsTrue}
# my.dummy.var: {op: Gt, value: ["0"]}
#
### <NFD-WORKER-CONF-END-DO-NOT-REMOVE>
podSecurityContext: {}
# fsGroup: 2000
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop: [ "ALL" ]
readOnlyRootFilesystem: true
runAsNonRoot: true
# runAsUser: 1000
# Allow users to mount the hostPath /usr/src, useful for RHCOS on s390x
# Does not work on systems without /usr/src AND a read-only /usr, such as Talos
mountUsrSrc: false
resources: {}
# We usually recommend not to specify default resources and to leave this as a conscious
# choice for the user. This also increases chances charts run on environments with little
# resources, such as Minikube. If you do want to specify resources, uncomment the following
# lines, adjust them as necessary, and remove the curly braces after 'resources:'.
# limits:
# cpu: 100m
# memory: 128Mi
# requests:
# cpu: 100m
# memory: 128Mi
nodeSelector: {}
tolerations: []
annotations: {}
affinity: {}
topologyUpdater:
enable: false
createCRDs: false
serviceAccount:
create: false
annotations: {}
name:
rbac:
create: false
kubeletConfigPath:
kubeletPodResourcesSockPath:
updateInterval: 60s
watchNamespace: "*"
podSecurityContext: {}
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop: [ "ALL" ]
readOnlyRootFilesystem: true
runAsUser: 0
resources: {}
# We usually recommend not to specify default resources and to leave this as a conscious
# choice for the user. This also increases chances charts run on environments with little
# resources, such as Minikube. If you do want to specify resources, uncomment the following
# lines, adjust them as necessary, and remove the curly braces after 'resources:'.
# limits:
# cpu: 100m
# memory: 128Mi
# requests:
# cpu: 100m
# memory: 128Mi
nodeSelector: {}
tolerations: []
annotations: {}
affinity: {}
# Optionally use encryption for worker <--> master comms
# TODO: verify hostname is not yet supported
#
# If you do not enable certManager (and have it installed) you will
# need to manually, or otherwise, provision the TLS certs as secrets
tls:
enable: false
certManager: false

View File

@ -0,0 +1,208 @@
questions:
- description: Sets HTTPS_PROXY environment variable in the container.
group: coral
label: httpsProxy
variable: coral.httpsProxy
- default: inaccel/coral
description: Container image name.
group: coral
label: image
required: true
variable: coral.image
- default: info
description: Sets LOG_LEVEL environment variable in the container.
group: coral
label: logLevel
options:
- all
- trace
- debug
- info
- warn
- error
- fatal
- 'off'
type: enum
variable: coral.logLevel
- description: Number of port to expose on the host.
group: coral
label: port
max: 65535
min: 1
type: int
variable: coral.port
- default: Always
description: Image pull policy.
group: coral
label: pullPolicy
options:
- Always
- IfNotPresent
- Never
type: enum
variable: coral.pullPolicy
- description: Release version.
group: coral
label: tag
variable: coral.tag
- default: 'false'
description: Argument --debug to the entrypoint.
group: daemon
label: debug
required: true
type: boolean
variable: daemon.debug
- default: inaccel/daemon
description: Container image name.
group: daemon
label: image
required: true
variable: daemon.image
- description: Image pull policy.
group: daemon
label: pullPolicy
options:
- Always
- IfNotPresent
- Never
type: enum
variable: daemon.pullPolicy
- default: latest
description: Release version.
group: daemon
label: tag
required: true
variable: daemon.tag
- default: 'true'
description: Indicates whether driver should be enabled.
group: driver
label: enabled
required: true
type: boolean
variable: driver.enabled
- default: inaccel/driver
description: Container image name.
group: driver
label: image
required: true
variable: driver.image
- description: Image pull policy.
group: driver
label: pullPolicy
options:
- Always
- IfNotPresent
- Never
type: enum
variable: driver.pullPolicy
- default: latest
description: Release version.
group: driver
label: tag
required: true
variable: driver.tag
- default: 'true'
description: Dependency condition.
group: fpga-discovery
label: enabled
required: true
type: boolean
variable: fpga-discovery.enabled
- default: /var/lib/kubelet
description: Directory path for managing kubelet files.
group: kubelet
label: ' '
required: true
variable: kubelet
- description: String value of the secret license key.
group: license
label: ' '
variable: license
- default: inaccel/mkrt
description: Container image name.
group: mkrt
label: image
required: true
variable: mkrt.image
- description: Image pull policy.
group: mkrt
label: pullPolicy
options:
- Always
- IfNotPresent
- Never
type: enum
variable: mkrt.pullPolicy
- default: latest
description: Release version.
group: mkrt
label: tag
required: true
variable: mkrt.tag
- default: inaccel/monitor
description: Container image name.
group: monitor
label: image
required: true
variable: monitor.image
- description: Number of port to expose on the host.
group: monitor
label: port
max: 65535
min: 1
type: int
variable: monitor.port
- default: Always
description: Image pull policy.
group: monitor
label: pullPolicy
options:
- Always
- IfNotPresent
- Never
type: enum
variable: monitor.pullPolicy
- description: Release version.
group: monitor
label: tag
variable: monitor.tag
- default: 'false'
description: Argument --debug to the entrypoint.
group: reef
label: debug
required: true
type: boolean
variable: reef.debug
- default: inaccel/reef
description: Container image name.
group: reef
label: image
required: true
variable: reef.image
- description: Image pull policy.
group: reef
label: pullPolicy
options:
- Always
- IfNotPresent
- Never
type: enum
variable: reef.pullPolicy
- default: latest
description: Release version.
group: reef
label: tag
required: true
variable: reef.tag
- default: /etc/inaccel
description: Host-specific system configuration.
group: root
label: config
required: true
variable: root.config
- default: /var/lib/inaccel
description: Variable state information.
group: root
label: state
required: true
variable: root.state

View File

@ -0,0 +1,3 @@
{{ ( index $.Chart.Maintainers 0 ).Name }} [{{ include "chart" $ }}] {{ $.Release.Service }} chart
For detailed usage instructions visit: {{ index $.Chart.Sources 0 }}
For more product information contact: {{ ( index $.Chart.Maintainers 0 ).Email }}

View File

@ -0,0 +1,28 @@
{{/* vim: set filetype=mustache: */}}
{{/*
Create chart name and version as used by the chart label.
*/}}
{{- define "chart" -}}
{{- printf "%s-%s" $.Chart.Name $.Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
{{- end -}}
{{/*
Common labels
*/}}
{{- define "labels" -}}
helm.sh/chart: {{ include "chart" $ }}
{{ include "selectorLabels" $ }}
{{- if $.Chart.AppVersion }}
app.kubernetes.io/version: {{ $.Chart.AppVersion | quote }}
{{- end }}
app.kubernetes.io/managed-by: {{ $.Release.Service }}
{{- end -}}
{{/*
Selector labels
*/}}
{{- define "selectorLabels" -}}
app.kubernetes.io/name: {{ $.Chart.Name }}
app.kubernetes.io/instance: {{ $.Release.Name }}
{{- end -}}

View File

@ -0,0 +1,15 @@
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
labels:
{{- include "labels" $ | nindent 4 }}
name: {{ $.Chart.Name }}
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: {{ $.Chart.Name }}
subjects:
- kind: ServiceAccount
name: {{ $.Chart.Name }}
namespace: {{ $.Release.Namespace }}

View File

@ -0,0 +1,14 @@
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
labels:
{{- include "labels" $ | nindent 4 }}
name: {{ $.Chart.Name }}
rules:
- apiGroups: [""]
resources: ["nodes"]
verbs: ["patch"]
- apiGroups: ["admissionregistration.k8s.io"]
resources: ["mutatingwebhookconfigurations"]
verbs: ["get", "update"]

View File

@ -0,0 +1,11 @@
---
apiVersion: storage.k8s.io/v1
kind: CSIDriver
metadata:
labels:
{{- include "labels" $ | nindent 4 }}
name: inaccel
spec:
attachRequired: false
volumeLifecycleModes:
- Ephemeral

View File

@ -0,0 +1,186 @@
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
labels:
{{- include "labels" $ | nindent 4 }}
name: {{ $.Chart.Name }}
namespace: {{ $.Release.Namespace }}
spec:
selector:
matchLabels:
kind: DaemonSet
{{- include "selectorLabels" $ | nindent 6 }}
template:
metadata:
annotations:
kubectl.kubernetes.io/default-container: coral
labels:
kind: DaemonSet
{{- include "labels" $ | nindent 8 }}
spec:
containers:
- env:
{{- if $.Values.coral.httpsProxy }}
- name: HTTPS_PROXY
value: {{ $.Values.coral.httpsProxy }}
{{- end }}
{{- if $.Values.license }}
- name: LICENSE
valueFrom:
secretKeyRef:
key: license
name: {{ $.Chart.Name }}
{{- end }}
{{- if $.Values.coral.logLevel }}
- name: LOG_LEVEL
value: {{ $.Values.coral.logLevel }}
{{- end }}
- name: NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
image: {{ $.Values.coral.image }}:{{ default $.Chart.AppVersion $.Values.coral.tag }}
{{- if $.Values.coral.pullPolicy }}
imagePullPolicy: {{ $.Values.coral.pullPolicy }}
{{- end }}
name: coral
ports:
- containerPort: 55677
{{- if $.Values.coral.port }}
hostPort: {{ $.Values.coral.port }}
{{- end }}
readinessProbe:
exec:
command:
- get
- coral
{{- if $.Values.coral.resources }}
resources:
{{- $.Values.coral.resources | toYaml | nindent 10 }}
{{- end }}
securityContext:
privileged: true
volumeMounts:
- mountPath: /etc/localtime
name: localtime
readOnly: true
- mountPath: /sys
name: sys
- mountPath: /var/lib/inaccel
mountPropagation: HostToContainer
name: state-root
- mountPath: /var/lib/kubelet/plugins_registry
name: kubelet
subPath: plugins_registry
- mountPath: /var/opt/inaccel/runtimes
name: data-root
readOnly: true
subPath: runtimes
- args:
- --debug={{ $.Values.daemon.debug }}
env:
- name: DOCKER
value: disabled
- name: NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
image: {{ $.Values.daemon.image }}:{{ $.Values.daemon.tag }}
{{- if $.Values.daemon.pullPolicy }}
imagePullPolicy: {{ $.Values.daemon.pullPolicy }}
{{- end }}
name: daemon
{{- if $.Values.daemon.resources }}
resources:
{{- $.Values.daemon.resources | toYaml | nindent 10 }}
{{- end }}
securityContext:
privileged: true
volumeMounts:
- mountPath: /var/lib/inaccel
mountPropagation: Bidirectional
name: state-root
- mountPath: /var/lib/kubelet/plugins_registry
name: kubelet
subPath: plugins_registry
- mountPath: {{ $.Values.kubelet }}
mountPropagation: Bidirectional
name: kubelet
- image: {{ $.Values.monitor.image }}:{{ default $.Chart.AppVersion $.Values.monitor.tag }}
{{- if $.Values.monitor.pullPolicy }}
imagePullPolicy: {{ $.Values.monitor.pullPolicy }}
{{- end }}
name: monitor
ports:
- containerPort: 19999
{{- if $.Values.monitor.port }}
hostPort: {{ $.Values.monitor.port }}
{{- end }}
{{- if $.Values.monitor.resources }}
resources:
{{- $.Values.monitor.resources | toYaml | nindent 10 }}
{{- end }}
hostAliases:
- hostnames:
- coral
- daemon
- monitor
ip: 127.0.0.1
hostPID: {{ $.Values.driver.enabled }}
initContainers:
{{- if $.Values.driver.enabled }}
- env:
- name: DRIVER_SYSROOT_DIR
value: /host
image: {{ $.Values.driver.image }}:{{ $.Values.driver.tag }}
{{- if $.Values.driver.pullPolicy }}
imagePullPolicy: {{ $.Values.driver.pullPolicy }}
{{- end }}
name: driver
securityContext:
privileged: true
volumeMounts:
- mountPath: /host
name: host
{{- end }}
- env:
- name: MKRT_CONFIG_PATH
value: {{ $.Values.root.config }}/runtimes
- name: MKRT_SYSROOT_DIR
value: /host
image: {{ $.Values.mkrt.image }}:{{ $.Values.mkrt.tag }}
{{- if $.Values.mkrt.pullPolicy }}
imagePullPolicy: {{ $.Values.mkrt.pullPolicy }}
{{- end }}
name: mkrt
volumeMounts:
- mountPath: /host
name: host
readOnly: true
- mountPath: /var/opt/inaccel/runtimes
name: data-root
subPath: runtimes
nodeSelector:
inaccel/fpga: enabled
priorityClassName: system-node-critical
serviceAccountName: {{ $.Chart.Name }}
volumes:
- emptyDir: {}
name: data-root
- hostPath:
path: /
name: host
- hostPath:
path: {{ $.Values.kubelet }}
name: kubelet
- hostPath:
path: /etc/localtime
name: localtime
- hostPath:
path: {{ $.Values.root.state }}
type: DirectoryOrCreate
name: state-root
- hostPath:
path: /sys
name: sys

View File

@ -0,0 +1,61 @@
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
{{- include "labels" $ | nindent 4 }}
name: {{ $.Chart.Name }}
namespace: {{ $.Release.Namespace }}
spec:
replicas: 1
selector:
matchLabels:
kind: Deployment
{{- include "selectorLabels" $ | nindent 6 }}
template:
metadata:
annotations:
kubectl.kubernetes.io/default-container: reef
labels:
kind: Deployment
{{- include "labels" $ | nindent 8 }}
spec:
containers:
- args:
- --debug={{ $.Values.reef.debug }}
image: {{ $.Values.reef.image }}:{{ $.Values.reef.tag }}
{{- if $.Values.reef.pullPolicy }}
imagePullPolicy: {{ $.Values.reef.pullPolicy }}
{{- end }}
name: reef
{{- if $.Values.reef.resources }}
resources:
{{- $.Values.reef.resources | toYaml | nindent 10 }}
{{- end }}
volumeMounts:
- mountPath: /etc/inaccel
name: config-root
readOnly: true
hostAliases:
- hostnames:
- reef
ip: 127.0.0.1
initContainers:
- args:
- init
env:
- name: MUTATING_WEBHOOK_CONFIGURATION_NAME
value: {{ $.Chart.Name }}
image: {{ $.Values.reef.image }}:{{ $.Values.reef.tag }}
{{- if $.Values.reef.pullPolicy }}
imagePullPolicy: {{ $.Values.reef.pullPolicy }}
{{- end }}
name: reef-init
volumeMounts:
- mountPath: /etc/inaccel
name: config-root
priorityClassName: system-cluster-critical
serviceAccountName: {{ $.Chart.Name }}
volumes:
- emptyDir: {}
name: config-root

View File

@ -0,0 +1,18 @@
---
apiVersion: admissionregistration.k8s.io/v1
kind: MutatingWebhookConfiguration
metadata:
labels:
{{- include "labels" $ | nindent 4 }}
name: {{ $.Chart.Name }}
webhooks:
- admissionReviewVersions: ["v1"]
clientConfig:
service:
name: {{ $.Chart.Name }}
namespace: {{ $.Release.Namespace }}
name: reef.inaccel.com
objectSelector:
matchLabels:
inaccel/fpga: enabled
sideEffects: None

View File

@ -0,0 +1,13 @@
---
apiVersion: v1
kind: Secret
metadata:
labels:
{{- include "labels" $ | nindent 4 }}
name: {{ $.Chart.Name }}
namespace: {{ $.Release.Namespace }}
stringData:
{{- if $.Values.license }}
license: {{ $.Values.license }}
{{- end }}
type: Opaque

View File

@ -0,0 +1,8 @@
---
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
{{- include "labels" $ | nindent 4 }}
name: {{ $.Chart.Name }}
namespace: {{ $.Release.Namespace }}

View File

@ -0,0 +1,15 @@
---
apiVersion: v1
kind: Service
metadata:
labels:
{{- include "labels" $ | nindent 4 }}
name: {{ $.Chart.Name }}
namespace: {{ $.Release.Namespace }}
spec:
ports:
- port: 443
publishNotReadyAddresses: true
selector:
kind: Deployment
{{- include "selectorLabels" $ | nindent 4 }}

View File

@ -0,0 +1,36 @@
{{- range $index, $platform := $.Values.tests.vadd.platforms }}
{{- if and $platform.name $platform.vendor $platform.version }}
---
apiVersion: v1
kind: Pod
metadata:
annotations:
helm.sh/hook: test
helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
inaccel/cli: |
{{- if $platform.labels }}
bitstream install https://store.inaccel.com/artifactory/bitstreams/{{ $platform.vendor }}/{{ $platform.name }}/{{ $platform.version }}/{{ join "_" $platform.labels }}/vector/1/1addition
{{- else }}
bitstream install https://store.inaccel.com/artifactory/bitstreams/{{ $platform.vendor }}/{{ $platform.name }}/{{ $platform.version }}/vector/1/1addition
{{- end }}
kubectl.kubernetes.io/default-container: vadd
labels:
inaccel/fpga: enabled
{{- include "labels" $ | nindent 4 }}
name: {{ $.Chart.Name }}-tests-vadd-{{ $index }}
namespace: {{ $.Release.Namespace }}
spec:
containers:
- image: {{ $.Values.tests.vadd.image }}:{{ $.Values.tests.vadd.tag }}
{{- if $.Values.tests.vadd.pullPolicy }}
imagePullPolicy: {{ $.Values.tests.vadd.pullPolicy }}
{{- end }}
name: vadd
resources:
limits:
{{ $platform.vendor }}/{{ $platform.name }}: 1
nodeSelector:
{{ $platform.vendor }}/{{ $platform.name }}: {{ $platform.version }}
restartPolicy: Never
{{- end }}
{{- end }}

View File

@ -0,0 +1,415 @@
{
"$schema": "http://json-schema.org/schema#",
"description": "Simplifying FPGA management in Kubernetes",
"properties": {
"coral": {
"form": true,
"properties": {
"httpsProxy": {
"description": "Sets HTTPS_PROXY environment variable in the container.",
"form": true,
"title": "httpsProxy",
"type": "string"
},
"image": {
"description": "Container image name.",
"form": true,
"title": "image",
"type": "string"
},
"logLevel": {
"description": "Sets LOG_LEVEL environment variable in the container.",
"enum": [
"all",
"trace",
"debug",
"info",
"warn",
"error",
"fatal",
"off"
],
"form": true,
"title": "logLevel",
"type": "string"
},
"port": {
"description": "Number of port to expose on the host.",
"exclusiveMaximum": 65536,
"exclusiveMinimum": 0,
"form": true,
"multipleOf" : 1,
"title": "port",
"type": "integer"
},
"pullPolicy": {
"description": "Image pull policy.",
"enum": [
"Always",
"IfNotPresent",
"Never"
],
"form": true,
"title": "pullPolicy",
"type": "string"
},
"resources": {
"description": "Compute resources required by this container.",
"title": "resources",
"type": "object"
},
"tag": {
"default": "2.1",
"description": "Release version.",
"form": true,
"title": "tag",
"type": "string"
}
},
"required": [
"image"
],
"type": "object"
},
"daemon": {
"form": true,
"properties": {
"debug": {
"description": "Argument --debug to the entrypoint.",
"form": true,
"title": "debug",
"type": "boolean"
},
"image": {
"description": "Container image name.",
"form": true,
"title": "image",
"type": "string"
},
"pullPolicy": {
"description": "Image pull policy.",
"enum": [
"Always",
"IfNotPresent",
"Never"
],
"form": true,
"title": "pullPolicy",
"type": "string"
},
"resources": {
"description": "Compute resources required by this container.",
"title": "resources",
"type": "object"
},
"tag": {
"description": "Release version.",
"form": true,
"title": "tag",
"type": "string"
}
},
"required": [
"debug",
"image",
"tag"
],
"type": "object"
},
"driver": {
"form": true,
"properties": {
"enabled": {
"description": "Indicates whether driver should be enabled.",
"form": true,
"title": "enabled",
"type": "boolean"
},
"image": {
"description": "Container image name.",
"form": true,
"title": "image",
"type": "string"
},
"pullPolicy": {
"description": "Image pull policy.",
"enum": [
"Always",
"IfNotPresent",
"Never"
],
"form": true,
"title": "pullPolicy",
"type": "string"
},
"tag": {
"description": "Release version.",
"form": true,
"title": "tag",
"type": "string"
}
},
"required": [
"enabled",
"image",
"tag"
],
"type": "object"
},
"fpga-discovery": {
"form": true,
"properties": {
"enabled": {
"description": "Dependency condition.",
"form": true,
"title": "enabled",
"type": "boolean"
}
},
"required": [
"enabled"
],
"type": "object"
},
"kubelet": {
"description": "Directory path for managing kubelet files.",
"form": true,
"title": "kubelet",
"type": "string"
},
"license": {
"description": "String value of the secret license key.",
"form": true,
"title": "license",
"type": "string"
},
"mkrt": {
"form": true,
"properties": {
"image": {
"description": "Container image name.",
"form": true,
"title": "image",
"type": "string"
},
"pullPolicy": {
"description": "Image pull policy.",
"enum": [
"Always",
"IfNotPresent",
"Never"
],
"form": true,
"title": "pullPolicy",
"type": "string"
},
"tag": {
"description": "Release version.",
"form": true,
"title": "tag",
"type": "string"
}
},
"required": [
"image",
"tag"
],
"type": "object"
},
"monitor": {
"form": true,
"properties": {
"image": {
"description": "Container image name.",
"form": true,
"title": "image",
"type": "string"
},
"port": {
"description": "Number of port to expose on the host.",
"exclusiveMaximum": 65536,
"exclusiveMinimum": 0,
"form": true,
"multipleOf" : 1,
"title": "port",
"type": "integer"
},
"pullPolicy": {
"description": "Image pull policy.",
"enum": [
"Always",
"IfNotPresent",
"Never"
],
"form": true,
"title": "pullPolicy",
"type": "string"
},
"resources": {
"description": "Compute resources required by this container.",
"title": "resources",
"type": "object"
},
"tag": {
"default": "2.1",
"description": "Release version.",
"form": true,
"title": "tag",
"type": "string"
}
},
"required": [
"image"
],
"type": "object"
},
"reef": {
"form": true,
"properties": {
"debug": {
"description": "Argument --debug to the entrypoint.",
"form": true,
"title": "debug",
"type": "boolean"
},
"image": {
"description": "Container image name.",
"form": true,
"title": "image",
"type": "string"
},
"pullPolicy": {
"description": "Image pull policy.",
"enum": [
"Always",
"IfNotPresent",
"Never"
],
"form": true,
"title": "pullPolicy",
"type": "string"
},
"resources": {
"description": "Compute resources required by this container.",
"title": "resources",
"type": "object"
},
"tag": {
"description": "Release version.",
"form": true,
"title": "tag",
"type": "string"
}
},
"required": [
"debug",
"image",
"tag"
],
"type": "object"
},
"root": {
"form": true,
"properties": {
"config": {
"description": "Host-specific system configuration.",
"form": true,
"title": "config",
"type": "string"
},
"state": {
"description": "Variable state information.",
"form": true,
"title": "state",
"type": "string"
}
},
"required": [
"config",
"state"
],
"type": "object"
},
"tests": {
"properties": {
"vadd": {
"properties": {
"image": {
"description": "Container image name.",
"title": "image",
"type": "string"
},
"platforms": {
"description": "FPGA platforms to test.",
"items": {
"properties": {
"labels": {
"items": {
"type": "string"
},
"type": "array"
},
"name": {
"type": "string"
},
"vendor": {
"type": "string"
},
"version": {
"type": "string"
}
},
"required": [
"name",
"vendor",
"version"
],
"type": "object"
},
"title": "platforms",
"type": "array"
},
"pullPolicy": {
"description": "Image pull policy.",
"enum": [
"Always",
"IfNotPresent",
"Never"
],
"title": "pullPolicy",
"type": "string"
},
"tag": {
"description": "Release version.",
"title": "tag",
"type": "string"
}
},
"required": [
"image",
"tag"
],
"type": "object"
}
},
"required": [
"vadd"
],
"type": "object"
}
},
"required": [
"coral",
"daemon",
"driver",
"fpga-discovery",
"kubelet",
"mkrt",
"monitor",
"reef",
"root",
"tests"
],
"title": "InAccel FPGA Operator",
"type": "object"
}

View File

@ -0,0 +1,92 @@
coral:
# httpsProxy: ...
image: inaccel/coral
logLevel: info
# port: ...
pullPolicy: Always
# resources: ...
# tag: ...
daemon:
debug: false
image: inaccel/daemon
# pullPolicy: ...
# resources: ...
tag: latest
driver:
enabled: true
image: inaccel/driver
# pullPolicy: ...
tag: latest
fpga-discovery:
enabled: true
fullnameOverride: fpga-discovery
image:
tag: v0.10.0-minimal
master:
extraLabelNs:
- inaccel
instance: fpga-discovery
nodeFeatureRule:
createCRD: false
worker:
config:
core:
sources:
- custom
sources:
custom:
- matchOn:
# intel-fpga
- pciId:
device: ["09c4", "0b2b"]
vendor: ["8086"]
# xilinx-fpga
- pciId:
vendor: ["10ee"]
- pciId:
device: ["1042", "f010"]
vendor: ["1d0f"]
name: inaccel/fpga
value: enabled
kubelet: /var/lib/kubelet
# license: ...
mkrt:
image: inaccel/mkrt
# pullPolicy: ...
tag: latest
monitor:
image: inaccel/monitor
# port: ...
pullPolicy: Always
# resources: ...
# tag: ...
reef:
debug: false
image: inaccel/reef
# pullPolicy: ...
# resources: ...
tag: latest
root:
config: /etc/inaccel
state: /var/lib/inaccel
tests:
vadd:
image: inaccel/vadd
# platforms:
# - labels:
# - ...
# name: ...
# vendor: ...
# version: ...
# pullPolicy: ...
tag: latest

View File

@ -1196,6 +1196,63 @@ entries:
- assets/federatorai/federatorai-4.5.100.tgz
version: 4.5.100
fpga-operator:
- annotations:
artifacthub.io/images: |
- image: inaccel/coral:2.1
name: coral
- image: inaccel/daemon:latest
name: daemon
- image: inaccel/driver:latest
name: driver
- image: inaccel/mkrt:latest
name: mkrt
- image: inaccel/monitor:2.1
name: monitor
- image: inaccel/reef:latest
name: reef
- image: inaccel/vadd:latest
name: tests.vadd
artifacthub.io/license: Apache-2.0
artifacthub.io/links: |
- name: Documentation
url: https://docs.inaccel.com
- name: Support
url: https://github.com/inaccel/helm/issues
catalog.cattle.io/certified: partner
catalog.cattle.io/display-name: InAccel FPGA Operator
catalog.cattle.io/namespace: kube-system
catalog.cattle.io/os: linux
catalog.cattle.io/release-name: inaccel
catalog.cattle.io/scope: downstream
category: Infrastructure
apiVersion: v2
appVersion: "2.1"
created: "2022-02-01T00:24:11.035427266+02:00"
dependencies:
- alias: fpga-discovery
condition: fpga-discovery.enabled
name: node-feature-discovery
repository: file://./charts/node-feature-discovery
version: 0.10.0
description: Simplifying FPGA management in Kubernetes
digest: 2378a4bfbbbd1c89488e8d8a6c99ebd88474c7756e7c6d4a2974313086b8b5c0
home: https://inaccel.com
icon: https://en.gravatar.com/userimage/147236320/2a11cd2992b4521ec287587f03fae35c.png?size=1250
keywords:
- fpga
- infrastructure
kubeVersion: '>= 1.18.0-0'
maintainers:
- email: info@inaccel.com
name: InAccel
name: fpga-operator
sources:
- https://docs.inaccel.com
- https://github.com/inaccel/helm
type: application
urls:
- assets/fpga-operator/fpga-operator-2.7.401.tgz
version: 2.7.401
- annotations:
artifacthub.io/license: Apache-2.0
artifacthub.io/links: |