46 Commits

Author SHA1 Message Date
Alexandre Peixoto Ferreira
3418560744 Fix documentation for k3s/k8s usage of yaml files
Signed-off-by: Alexandre Peixoto Ferreira <alexandre.ferreira@arm.com>
2023-11-01 09:47:28 -05:00
Alexandre Peixoto Ferreira
6ebcbefa25 Fix CVE-2022-32149, just need recompile (#10)
Signed-off-by: Alexandre Peixoto Ferreira <alexandref75@gmail.com>

Signed-off-by: Alexandre Peixoto Ferreira <alexandref75@gmail.com>
2022-11-22 08:42:28 -06:00
Alexandre Peixoto Ferreira
51fb12e8a0 Update chart version (#9)
Signed-off-by: Alexandre Peixoto Ferreira <alexandref75@gmail.com>
2022-11-16 14:54:45 -06:00
Alexandre Peixoto Ferreira
7effe1975a Remove last reference to gitlab (#8)
Signed-off-by: Alexandre Peixoto Ferreira <alexandref75@gmail.com>
2022-11-16 13:40:46 -06:00
Josh Minor
e386d5d7e0 Fix secrets in helm ci (#7)
Signed-off-by: Josh Minor <josh.minor@arm.com>
2022-11-09 09:32:08 -06:00
Josh Minor
7b03727989 Use common yaml for builds (#6)
* Use common yaml for builds

Signed-off-by: Josh Minor <josh.minor@arm.com>
2022-11-08 17:00:03 -06:00
Alexandre Peixoto Ferreira
91a0f95107 Remove references to gitlab (#5)
Signed-off-by: Alexandre Peixoto Ferreira <alexandref75@gmail.com>
2022-11-07 18:28:32 -06:00
Eric Van Hensbergen
321d7b5820 Switch Docker CI from gitlab to github
Adds buildx signing and helm chart publication.

Signed-off-by: Eric Van Hensbergen <ericvh@gmail.com>
2022-11-07 13:55:54 -06:00
Alexandre Peixoto Ferreira
3b4636fa30 Remove namespace so helm install it (#4)
* Remove namespace so helm install it

Signed-off-by: Alexandre Peixoto Ferreira <alexandref75@gmail.com>

* Fix nodeSelector (Bug #9027 helm)

Signed-off-by: Alexandre Peixoto Ferreira <alexandref75@gmail.com>

Signed-off-by: Alexandre Peixoto Ferreira <alexandref75@gmail.com>
2022-11-07 12:45:38 -06:00
Alexandre Peixoto Ferreira
a45e9c10fd Fix nodeSelector to be smarter.device-manager
Signed-off-by: Alexandre Peixoto Ferreira <alexandref75@gmail.com>
2022-11-06 15:29:53 -06:00
Alexandre Peixoto Ferreira
d364c8b385 add support for valur for nodeSelector
Signed-off-by: Alexandre Peixoto Ferreira <alexandref75@gmail.com>
2022-11-04 09:55:56 -05:00
Alexandre Ferreira
054c2534e1 Fix error on deallocation and provides configMap on the helm chart 2022-11-03 21:39:05 +00:00
Eric Van Hensbergen
5029c6f4b9 Add more detail to chart README.md 2022-11-02 12:54:50 +00:00
Eric Van Hensbergen
64959fa277 Merge branch 'helm-fixes' into 'main'
Fix pullpolicy

See merge request smarter-project/smarter-device-manager!4
2022-10-28 15:21:08 +00:00
Alexandre Ferreira
dd92c7bb3b Fix pullpolicy
Signed-off-by: Eric Van Hensbergen <ericvh@gmail.com>
2022-10-28 15:21:08 +00:00
Eric Van Hensbergen
f70f3731d4 Merge branch 'fix/build-CI' into 'main'
remove 32-bit builds

See merge request smarter-project/smarter-device-manager!3
2022-10-27 14:19:43 +00:00
Eric Van Hensbergen
fc197490de remove 32-bit builds 2022-10-27 14:19:43 +00:00
Eric Van Hensbergen
2d3094dfbb Merge branch 'move-smarter' into 'main'
Move to SMARTER container repository)

See merge request smarter-project/smarter-device-manager!2
2022-10-26 15:41:39 +00:00
Alexandre Peixoto Ferreira
a7876b020d Move to SMARTER container repository)
Signed-off-by: Alexandre Peixoto Ferreira <alexandref75@gmail.com>
2022-10-26 09:24:45 -05:00
Alexandre Ferreira
0036354cc4 Merge branch 'adding-helm' into 'main'
Add helm charts

See merge request smarter-project/smarter-device-manager!1
2022-10-26 14:18:43 +00:00
Alexandre Ferreira
c42e92595f Add helm charts 2022-10-26 14:18:43 +00:00
Alexandre Peixoto Ferreira
fe5dca8f1c Use v1.20.11 in YAML files
Signed-off-by: Alexandre Peixoto Ferreira <alexandref75@gmail.com>
2022-09-11 10:42:00 -05:00
Alexandre Peixoto Ferreira
07f4b88b53 Compile device-manager statically and use scratch base image
Signed-off-by: Alexandre Peixoto Ferreira <alexandref75@gmail.com>
2022-09-11 09:39:34 -05:00
Alexandre Peixoto Ferreira
d65b7208db Fix characteres on filenames not allowed on resources v2
Signed-off-by: Alexandre Peixoto Ferreira <alexandref75@gmail.com>
2022-07-18 13:33:38 -05:00
Alexandre Peixoto Ferreira
fe9b26d283 Fix sanitizing filenames
Signed-off-by: Alexandre Peixoto Ferreira <alexandref75@gmail.com>
2022-07-18 12:45:02 -05:00
Alexandre Peixoto Ferreira
e20fb9b58f Update version tusing an up-to-date alpine image
Signed-off-by: Alexandre Peixoto Ferreira <alexandref75@gmail.com>
2022-07-07 14:33:32 -05:00
Alexandre Ferreira
741d8edc23 Merge branch 'dev' into 'master'
Fix examples to tag 1.20.7

See merge request arm-research/smarter/smarter-device-manager!19
2021-05-18 21:18:07 +00:00
Alexandre Ferreira
261f70121a Fix examples to tag 1.20.7 2021-05-18 16:16:55 -05:00
Alexandre Ferreira
8a304aa5ee Merge branch 'dev' into 'master'
Fix recursion problem

See merge request arm-research/smarter/smarter-device-manager!18
2021-05-18 21:16:01 +00:00
Alexandre Ferreira
1421f564e5 Fix recursion problem 2021-05-18 16:06:16 -05:00
Alexandre Ferreira
567ac37994 Merge branch 'dev' into 'master'
Fix opening /dev/<files> to see if it is a directory (dangerous and it can take too long)

See merge request arm-research/smarter/smarter-device-manager!17
2021-05-18 19:55:29 +00:00
Alexandre Ferreira
a6c2189a98 Fix opening /dev/<files> to see if it is a directory (dangerous and it can take too long) 2021-05-18 14:45:08 -05:00
Alexandre Ferreira
1d718e57be Merge branch 'dev' into 'master'
Fix examples to add the new version

See merge request arm-research/smarter/smarter-device-manager!16
2021-05-18 17:42:05 +00:00
Alexandre Ferreira
733ac32871 Fix examples to add the new version 2021-05-18 12:32:19 -05:00
Alexandre Ferreira
ab97aba78f Merge branch 'dev' into 'master'
Fix access to files on subdirectorties on /dev

See merge request arm-research/smarter/smarter-device-manager!15
2021-05-18 17:22:59 +00:00
Alexandre Ferreira
8adb22dc29 Fix access to files on subdirectorties on /dev 2021-05-18 12:11:31 -05:00
Alexandre Ferreira
2dfd0f1461 Merge branch 'dev' into 'master'
Adding a formal way to contribute to the project

See merge request arm-research/smarter/smarter-device-manager!14
2021-02-23 20:23:16 +00:00
Alexandre Ferreira
841471d149 Bitten by go 1.16 mod changes and k8s kubelet changes of api (1.20 or 0.20). 2021-02-23 14:11:15 -06:00
Alexandre Ferreira
e4f9d53a16 Adding a formal way to contribute to the project 2021-02-23 13:01:56 -06:00
Alexandre Ferreira
7eb7526956 Merge branch 'dev' into 'master'
Dev

See merge request arm-research/smarter/smarter-device-manager!13
2021-01-06 01:35:33 +00:00
Alexandre Ferreira
304807e48e Fix removal of sockets files on shhutdown 2021-01-05 18:43:56 -06:00
Alexandre Ferreira
879085aaed Fix for k3s >= 1.18 2020-06-24 15:16:01 -05:00
Alexandre Ferreira
43009d99cc Merge branch 'update-registry' into 'master'
Update registry with the latest image

See merge request arm-research/smarter/smarter-device-manager!12
2020-06-10 20:36:22 +00:00
Alexandre Ferreira
ee5804f7b8 Update registry with the latest image 2020-06-10 15:26:28 -05:00
Alexandre Ferreira
7a3353216d Merge branch 'k3s-1.18' into 'master'
Add tty to the configmaps and rename yaml files to correspond to uses and README

See merge request arm-research/smarter/smarter-device-manager!11
2020-06-10 16:06:27 +00:00
Alexandre Ferreira
0eab2f36e6 Add tty to the configmaps and rename yaml files to correspond to uses and README 2020-06-10 10:36:18 -05:00
30 changed files with 478 additions and 133 deletions

View File

@@ -0,0 +1,21 @@
name: Docker Image BuildX CI and Publish
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
on:
schedule:
- cron: "19 16 * * *"
push:
branches: ["main"]
# Publish semver tags as releases.
tags: ["v*.*.*"]
pull_request:
branches: ["main"]
workflow_dispatch:
jobs:
build:
uses: smarter-project/reusable-workflows/.github/workflows/smarter-org-docker-buildx.yml@main

14
.github/workflows/smarter-org-helm.yml vendored Normal file
View File

@@ -0,0 +1,14 @@
# release.yaml
name: Release Charts
on:
push:
branches:
- main
jobs:
release:
uses: smarter-project/reusable-workflows/.github/workflows/smarter-org-helm.yml@main
secrets:
GPG_KEYRING_BASE64: ${{ secrets.GPG_KEYRING_BASE64 }}
GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }}

View File

@@ -1,6 +0,0 @@
include:
- project: 'ericvh/gitlab-ci-arm-template'
file: '/.gitlab-ci.yml'
variables:
CI_BUILDX_ARCHS: "linux/amd64,linux/arm64,linux/arm"

16
CONTRIBUTING.md Normal file
View File

@@ -0,0 +1,16 @@
# Contributing to SMARTER
SMARTER is an open-source, software platform for the Edge. Contributions are an important part of the platform, and our goal is to make it as simple as possible to become a contributor.
# Project license, and developer certificate of origin
The SMARTER codebase is licensed under the Apache 2.0 open source license, individual components may have their own licenses.
Please see the LICENSE file in the SMARTER documentation repository for the full text of this license, or the LICENSE file
in respective repositories. New contributions are expected to be lisensed under the Apache 2.0 license or something compatible
with that license.
Please note that we expect contributors to the project to self-certify that they are authorized to contribute code
using the Linux Foundation's Developer Certificate of Origin. See http://developercertificate.org for more details.
Contributors sign-off that they adhere to these requirements by adding a Signed-off-by line to commit messages.
Pull requests for contributions without a signed-off-by line will not be accepted.

View File

@@ -1,4 +0,0 @@
We sincerely appreciate your interest of contributing to this project but for now
we are not able to accept contributions. We expect to change this policy soon and
provide a contribution procedure. We suggest that the project be maintained on a
different branch until the contribution policy is changed.

View File

@@ -5,19 +5,18 @@ RUN apk update && apk upgrade && apk add tar ca-certificates build-base
ENV GOPATH /go ENV GOPATH /go
RUN go version RUN go version
WORKDIR /go/src/smarter-device-management WORKDIR /arm.com/smarter-device-management
COPY . . COPY . .
RUN echo $PATH;export CGO_LDFLAGS_ALLOW='-Wl,--unresolved-symbols=ignore-in-object-files' && \ RUN echo $PATH;export CGO_LDFLAGS_ALLOW='-Wl,--unresolved-symbols=ignore-in-object-files' && \
go install -ldflags="-s -w" -v smarter-device-management go mod init arm.com/smarter-device-management && go mod tidy && go mod vendor && \
CGO_ENABLED=0 go build -ldflags='-s -w -extldflags="-static"' .
FROM alpine FROM scratch
RUN apk update && apk upgrade
WORKDIR /root WORKDIR /root
COPY conf.yaml /root/config/conf.yaml COPY conf.yaml /root/config/conf.yaml
COPY --from=build /go/bin/smarter-device-management /usr/bin/smarter-device-management COPY --from=build /arm.com/smarter-device-management/smarter-device-management /usr/bin/smarter-device-management
CMD ["smarter-device-management","-logtostderr=true","-v=0"] CMD ["/usr/bin/smarter-device-management","-logtostderr=true","-v=0"]

View File

@@ -17,6 +17,10 @@ The smarter-device-manager starts by reading a YAML configuration file. This con
nummaxdevices: 10 nummaxdevices: 10
``` ```
Devices in subdirectories have the slash replaced with underscore in the
resource name, due to kubernetes naming restrictions: e.g. `/dev/net/tun`
becomes `smarter-devices/net_tun`.
The default config file provided will enable most of the devices available on a Raspberry Pi (vers 1-4) or equivalent boards. I2C, SPI, video devices, sound and others would be enabled. The config file can be replaced using a configmap to enable or disable access to different devices, like accelerators, GPUs, etc. The default config file provided will enable most of the devices available on a Raspberry Pi (vers 1-4) or equivalent boards. I2C, SPI, video devices, sound and others would be enabled. The config file can be replaced using a configmap to enable or disable access to different devices, like accelerators, GPUs, etc.
The node will show the devices it recognizes as resources in the node object in Kubernetes. The example below shows a raspberry PI. The node will show the devices it recognizes as resources in the node object in Kubernetes. The example below shows a raspberry PI.
@@ -133,7 +137,7 @@ More than one smarter-device-manager can be used in a single node if required if
## Enabling Access ## Enabling Access
A few examples of yaml files are provided that enable the smarter-device-manager to be deployed in a node. The file smarter-device-management-pod-<>.yaml deploys a single pod on a node; this setup is useful for testing. The file smarter-device-manager-<>.yaml provides a deamonSet configuration that enables pods to be deployed in any node that contains the "smarter-device-manager=enabled" label. The following command inserts the daemonSet in Kubernetes. k3s and k8s put the unix sockets for the device plugin in different directories on the node so the \*-k8s.yaml files should be used on Kubernetes and the \*-k3s.yaml should be used on k3s. A few examples of yaml files are provided that enable the smarter-device-manager to be deployed in a node. The file smarter-device-management-pod-<>.yaml deploys a single pod on a node; this setup is useful for testing. The file smarter-device-manager-<>.yaml provides a deamonSet configuration that enables pods to be deployed in any node that contains the "smarter-device-manager=enabled" label. The following command inserts the daemonSet in Kubernetes. Use the k8s for k8s/k3s/k0s unless using k3s version lower than 1.18. K3s smaller then 1.18 put the unix sockets for the device plugin in different directories on the node so the \*-k3s.yaml files should be used on k3s for those versions.
``` ```
kubectl apply -f smarter-device-manager.yaml kubectl apply -f smarter-device-manager.yaml
@@ -147,3 +151,13 @@ The following command should show the node resources in a similar form as shown
kubectl describe node pike5 kubectl describe node pike5
``` ```
## k3s
K3s < 1.18 stores the plugin interface in a different directory than k8s and so it needs a different yaml file to enable smarter-device-manager to communicate correctly with k3s agent. So use the smart-device-manager-k3s yaml files on this reposistor for k3s < 1.18.
## Using helm
A helm chart that install smarter-device-manager configured for SMARTER is available at chart directory
```
helm install smarter-device-manager chart
```

View File

@@ -4,7 +4,7 @@ package main
import ( import (
"github.com/golang/glog" "github.com/golang/glog"
pluginapi "k8s.io/kubernetes/pkg/kubelet/apis/deviceplugin/v1beta1" pluginapi "k8s.io/kubelet/pkg/apis/deviceplugin/v1beta1"
) )
func check(err error) { func check(err error) {

View File

@@ -0,0 +1,26 @@
# 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
*~
# Various IDEs
.project
.idea/
*.tmproj
.vscode/
# OWNERS file for Kubernetes
OWNERS
# helm-docs templates
*.gotmpl

View File

@@ -0,0 +1,26 @@
apiVersion: v2
name: smarter-device-manager
description: smarter-device-manager chart for SMARTER edge devices
home: https://getsmarter.io
version: 0.0.9
appVersion: v1.20.12
kubeVersion: ">=1.16.0-0"
keywords:
- kubernetes
- device
- hardware
sources:
- https://github.com/smarter-project/smarter-device-manager
icon: https://github.com/smarter-project/documentation/raw/main/ARM1636_Project_Logo_ST2_RGB_V1.png
annotations:
artifacthub.io/changes: |
- Fix template
- Add annotations
artifacthub.io/license: Apache-2.0
artifacthub.io/maintainers: |
- name: Alexandre Ferreira
email: alexandref75@gmail.com
artifacthub.io/prerelease: "false"
artifacthub.io/signKey: |
fingerprint: 71EDA4E3D652DC73EB09E3A5387D298C169CF24E
url: https://smarter-project.github.io/documentation/pgp_keys.asc

View File

@@ -0,0 +1,57 @@
# SMARTER Device Manager
Enables k8s containers to access devices (linux device drivers) available on nodes.
For more information check out https://getsmarter.io
## TL;DR
Assumes that this repository was cloned.
```console
helm install --nsmespace=smarter --create-namespace my-smarter-device-manager charts/smarter-device-manager
```
## Overview
In the IoT world, interaction with the external environment is the reason of existence.
This interaction is done by acquiring data about the environment and, possibly, actuating to achieve the desired objective, with complexity ranging from a simple thermostat to a very complex industrial process control (e.g. chemical plant). In more practical terms, the main CPU interacts directly with those sensors and actuators and the OS (Linux in our case) provides an abstract view in the form of device drivers.
Even though the container runtime allows direct access to device drivers, containers running on Kubernetes in the cloud are not expected to do so since hardware independence is a very useful characteristic to enhance mobility.
Kubernetes primarily manages CPU, memory, storage, and network, while leaving other resources unmanaged.
In IoT environments, applications can have direct access to sensors and actuators, either directly by interfacing with a device driver on the kernel (e.g. digital I/O pins, temperature sensors, analog inputs, microphones, audio output, video cameras) or indirectly through hardware interfaces (like serial ports, I2C, SPI, bluetooth, LoRa, USB and others).
Controlled access to these devices is essential to enable a container-based IoT solution. Smarter-device-manager allows containers to have direct access to host devices in a secure way.
## Values
The configuration.nodeSelector value allows the nodeSelector to be changed in a higher level chart simplyfyng deploying multiple services at the same time; CNI, DNS and device-manager with a single label for example.
## Pre-requisites
- k8s > 1.18 (before this the plugin interface used a different directory which requires a different configuration)
- by default, smarter-device manager uses a node-select to choose which nodes to deploy to, so label your nodes appropriately in order to deploy:
```
kubectl label node mynode01 smarter-device-manager=enabled
```
## Usage Model
The smarter-device-manager starts by reading a YAML configuration file. This configuration file describes, using regular expressions, the files that identify each device that is to be exported and how many access can be done simultaneously. For example, the configuration below finds every V4L device (cameras, video tuners, etc...) available on the host node (/dev/video0, /dev/video1, etc), and adds them as resources (smarter-devices/video0, smarter-devices/video1, etc) that allow up to 10 simulatenous accesses (up to 10 containers can request access to those devices simultaneously).
```
- devicematch: ^video[0-9]*$
nummaxdevices: 10
```
If the config value is provided a configMap is generated and smarter-device-manager will use it. The values.yaml file contains two examples, the first is replicated the config that exists on the container and the second enables nitro-enclaves (AWS nitro).
Devices in subdirectories have the slash replaced with underscore in the
resource name, due to kubernetes naming restrictions: e.g. `/dev/net/tun`
becomes `smarter-devices/net_tun`.
The default config file provided will enable most of the devices available on a Raspberry Pi (vers 1-4) or equivalent boards. I2C, SPI, video devices, sound and others would be enabled. The config file can be replaced using a configmap to enable or disable access to different devices, like accelerators, GPUs, etc.
# Uninstalling the Chart
```
helm delete my-smarter-device-manager
```

View File

@@ -1,50 +1,49 @@
apiVersion: v1
kind: Namespace
metadata:
name: < Replace with the namespace to use >
labels:
name: < Replace with the namespace to use >
---
apiVersion: apps/v1 apiVersion: apps/v1
kind: DaemonSet kind: DaemonSet
metadata: metadata:
name: smarter-device-manager name: {{ .Values.application.appName }}
namespace: < Replace with the namespace to use >
labels: labels:
name: smarter-device-manager name: {{ .Values.application.appName }}
role: agent role: agent
spec: spec:
selector: selector:
matchLabels: matchLabels:
name: smarter-device-manager name: {{ .Values.application.appName }}
updateStrategy: updateStrategy:
type: RollingUpdate type: RollingUpdate
template: template:
metadata: metadata:
labels: labels:
name: smarter-device-manager name: {{ .Values.application.appName }}
annotations: annotations:
node.kubernetes.io/bootstrap-checkpoint: "true" node.kubernetes.io/bootstrap-checkpoint: "true"
spec: spec:
nodeSelector: nodeSelector:
smarter-device-manager : enabled {{- if .Values.nodeSelector }}
{{- toYaml .Values.nodeSelector | nindent 8 }}
{{- else }}
smarter.device-manager: enabled
{{- end }}
tolerations:
- key: "smarter.type"
operator: "Equal"
value: "edge"
effect: "NoSchedule"
priorityClassName: "system-node-critical" priorityClassName: "system-node-critical"
hostname: smarter-device-management hostname: {{ .Values.application.appName }}
hostNetwork: true hostNetwork: true
dnsPolicy: ClusterFirstWithHostNet dnsPolicy: ClusterFirstWithHostNet
imagePullSecrets:
- name: k8sedgeregcred
containers: containers:
- name: smarter-device-manager - name: {{ .Values.application.appName }}
image: registry.gitlab.com/arm-research/smarter/smarter-device-manager/smarter-device-manager:IMAGE_ID image: {{ .Values.image.repository }}:{{ default .Chart.AppVersion .Values.image.tag }}
imagePullPolicy: IfNotPresent imagePullPolicy: {{ .Values.image.pullPolicy }}
securityContext: securityContext:
allowPrivilegeEscalation: false allowPrivilegeEscalation: false
capabilities: capabilities:
drop: ["ALL"] drop: ["ALL"]
resources: resources:
limits: limits:
cpu: 100m cpu: 200m
memory: 15Mi memory: 15Mi
requests: requests:
cpu: 10m cpu: 10m
@@ -55,23 +54,24 @@ spec:
- name: dev-dir - name: dev-dir
mountPath: /dev mountPath: /dev
- name: sys-dir - name: sys-dir
mountPath: /sys mountPath: /sys
{{- if .Values.config }}
- name: config - name: config
mountPath: /root/config mountPath: /root/config
{{- end }}
volumes: volumes:
- name: device-plugin - name: device-plugin
hostPath: hostPath:
path: /var/lib/rancher/k3s/agent/kubelet/device-plugins path: /var/lib/kubelet/device-plugins
- name: dev-dir - name: dev-dir
hostPath: hostPath:
path: /dev path: /dev
- name: sys-dir - name: sys-dir
hostPath: hostPath:
path: /sys path: /sys
{{- if .Values.config }}
- name: config - name: config
configMap: configMap:
name: smarter-device-manager-rpi name: {{ .Values.application.appName }}
- name: config {{- end }}
hostPath:
path: /var/lib/rancher/k3s/agent/kubelet/device-plugins
terminationGracePeriodSeconds: 30 terminationGracePeriodSeconds: 30

View File

@@ -0,0 +1,9 @@
{{- if .Values.config }}
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Values.application.appName }}
data:
conf.yaml: |
{{- toYaml .Values.config | nindent 4 }}
{{- end }}

View File

@@ -0,0 +1,57 @@
#
application:
appName: smarter-device-manager
image:
repository: ghcr.io/smarter-project/smarter-device-manager
# @default -- chart.appVersion
tag: ""
pullPolicy: IfNotPresent
# If a specific configurations is used it can be provided by uncommenting this lines
# config:
# - devicematch: ^snd$
# nummaxdevices: 20
# - devicematch: ^gpiomem$
# nummaxdevices: 40
# - devicematch: ^gpiochip[0-9]*$
# nummaxdevices: 20
# - devicematch: ^hci[0-9]*$
# nummaxdevices: 1
# - devicematch: ^i2c-[0-9]*$
# nummaxdevices: 1
# - devicematch: ^rtc0$
# nummaxdevices: 20
# - devicematch: ^video[0-9]*$
# nummaxdevices: 20
# - devicematch: ^vchiq$
# nummaxdevices: 20
# - devicematch: ^vcsm.*$
# nummaxdevices: 20
# - devicematch: ^ttyUSB[0-9]*$
# nummaxdevices: 1
# - devicematch: ^ttyACM[0-9]*$
# nummaxdevices: 1
# - devicematch: ^ttyTHS[0-9]*$
# nummaxdevices: 1
# - devicematch: ^ttyS[0-9]*$
# nummaxdevices: 1
#
# This example of configmap allows nitro enclaves to be allocated in a pod
# config:
# - devicematch: ^nitro_enclaves$
# nummaxdevices: 1
# - devicematch: ^vsock$
# nummaxdevices: 1
# - devicematch: ^rtc0$
# nummaxdevices: 20
# - devicematch: ^ttyUSB[0-9]*$
# nummaxdevices: 1
# - devicematch: ^ttyACM[0-9]*$
# nummaxdevices: 1
# - devicematch: ^ttyTHS[0-9]*$
# nummaxdevices: 1
# - devicematch: ^ttyS[0-9]*$
# nummaxdevices: 1

View File

@@ -5,6 +5,12 @@
function printHelp() { function printHelp() {
echo $(basename $0)" options:"; echo $(basename $0)" options:";
echo " -A <Architectures to use> # Compiling to ${ARCHS} now, examples: linux/amd64,linux/arm/v7,linux/arm/v6,linux/arm64" echo " -A <Architectures to use> # Compiling to ${ARCHS} now, examples: linux/amd64,linux/arm/v7,linux/arm/v6,linux/arm64"
if [ ${FLAG_NOCACHE} -gt 0 ]
then
echo " -C # Do not use cache"
else
echo " -C # Use cache"
fi
if [ ${FLAG_UPLOADIMAGES} -gt 0 ] if [ ${FLAG_UPLOADIMAGES} -gt 0 ]
then then
echo " -U # Do not upload images - the default is upload the images to the registry" echo " -U # Do not upload images - the default is upload the images to the registry"
@@ -30,7 +36,7 @@ function printHelp() {
} }
BUILD_TAG=$(date -u "+%Y%m%d%H%M%S") BUILD_TAG=$(date -u "+%Y%m%d%H%M%S")
REPOSITORY_NAME="registry.gitlab.com/arm-research/smarter/smarter-device-manager/" REPOSITORY_NAME="ghcr.io/smarter-project/smarter-device-manager/"
IMAGE_NAME="smarter-device-manager" IMAGE_NAME="smarter-device-manager"
DIRECTORY_TO_RUN=. DIRECTORY_TO_RUN=.
@@ -43,8 +49,9 @@ FLAG_UPLOADMANIFEST=1
ADDITIONAL_TAG="" ADDITIONAL_TAG=""
ADDITIONAL_IMAGE_NAME="" ADDITIONAL_IMAGE_NAME=""
PUSH_OPTION="" PUSH_OPTION=""
FLAG_NOCACHE=0
while getopts hA:B:MST:U name while getopts hA:B:MST:UC name
do do
case $name in case $name in
h) h)
@@ -52,6 +59,10 @@ do
exit 0;; exit 0;;
A) A)
ARCHS="$OPTARG";; ARCHS="$OPTARG";;
C)
[ ${FLAG_NOCACHE} -gt 0 ] && FLAG_NOCACHE=0;
[ ${FLAG_NOCACHE} -eq 0 ] && FLAG_NOCACHE=1;
;;
U) U)
[ ${FLAG_UPLOADIMAGES} -gt 0 ] && FLAG_UPLOADIMAGES=0; [ ${FLAG_UPLOADIMAGES} -gt 0 ] && FLAG_UPLOADIMAGES=0;
[ ${FLAG_UPLOADIMAGES} -eq 0 ] && FLAG_UPLOADIMAGES=1; [ ${FLAG_UPLOADIMAGES} -eq 0 ] && FLAG_UPLOADIMAGES=1;
@@ -93,6 +104,13 @@ EOF
fi fi
fi fi
if [ $FLAG_NOCACHE -gt 0 ]
then
CACHE_OPTION="--no-cache"
else
CACHE_OPTION=""
fi
if [ $FLAG_UPLOADIMAGES -gt 0 ] if [ $FLAG_UPLOADIMAGES -gt 0 ]
then then
PUSH_OPTION="--push" PUSH_OPTION="--push"
@@ -100,6 +118,6 @@ else
PUSH_OPTION="--load" PUSH_OPTION="--load"
fi fi
docker buildx build -t "${REPOSITORY_NAME}${IMAGE_NAME}${ADDITIONAL_IMAGE_NAME}:${BUILD_TAG}" --platform=${ARCHS} ${PUSH_OPTION} . docker buildx build ${CACHE_OPTION} -t "${REPOSITORY_NAME}${IMAGE_NAME}${ADDITIONAL_IMAGE_NAME}:${BUILD_TAG}" --platform=${ARCHS} ${PUSH_OPTION} .
exit 0 exit 0

92
main.go
View File

@@ -14,7 +14,7 @@ import (
"github.com/fsnotify/fsnotify" "github.com/fsnotify/fsnotify"
"github.com/golang/glog" "github.com/golang/glog"
"gopkg.in/yaml.v2" "gopkg.in/yaml.v2"
pluginapi "k8s.io/kubernetes/pkg/kubelet/apis/deviceplugin/v1beta1" pluginapi "k8s.io/kubelet/pkg/apis/deviceplugin/v1beta1"
) )
var confFileName string var confFileName string
@@ -55,18 +55,60 @@ func init() {
flag.Parse() flag.Parse()
} }
func readDevDirectory(dirToList string) (files []string, err error) { func readDevDirectory(dirToList string, allowedRecursions uint8) (files []string, err error) {
f, err := os.Open(dirToList) var foundFiles []string
if err != nil {
return nil, err
}
files, err = f.Readdirnames(-1)
f.Close()
if err != nil {
return nil, err
}
return files, nil fType, err := os.Stat(dirToList)
if err != nil {
return nil, err
}
if !fType.IsDir() {
return nil, nil
}
f, err := os.Open(dirToList)
if err != nil {
return nil, err
}
files, err = f.Readdirnames(-1)
if err != nil {
f.Close()
return nil, err
}
f.Close()
for _, subDir := range files {
foundFiles = append(foundFiles, subDir)
if allowedRecursions > 0 {
filesDir, err := readDevDirectory(dirToList+"/"+subDir,allowedRecursions-1)
if err == nil {
for _, fileName := range filesDir {
foundFiles = append(foundFiles, subDir+"/"+fileName)
}
}
}
}
return foundFiles, nil
}
func sanitizeName(path string) string {
sanitizeChar := func(r rune) rune {
switch {
case r >= 'A' && r <= 'Z':
return r
case r >= 'a' && r <= 'z':
return r
case r >= '0' && r <= '9':
return r
case r == '_':
return r
case r == '-':
return r
}
return '_'
}
return strings.Map(sanitizeChar, path)
} }
func findDevicesPattern(listDevices []string, pattern string) ([]string,error) { func findDevicesPattern(listDevices []string, pattern string) ([]string,error) {
@@ -102,13 +144,13 @@ func main() {
} }
glog.V(0).Info("Reading existing devices on /dev") glog.V(0).Info("Reading existing devices on /dev")
ExistingDevices, err := readDevDirectory("/dev") ExistingDevices, err := readDevDirectory("/dev",10)
if err != nil { if err != nil {
glog.Errorf(err.Error()) glog.Errorf(err.Error())
os.Exit(1) os.Exit(1)
} }
ExistingDevicesSys, err := readDevDirectory("/sys/devices") ExistingDevicesSys, err := readDevDirectory("/sys/devices",0)
if err != nil { if err != nil {
glog.Errorf(err.Error()) glog.Errorf(err.Error())
os.Exit(1) os.Exit(1)
@@ -151,9 +193,10 @@ func main() {
if len(foundDevices) > 0 { if len(foundDevices) > 0 {
for _, deviceToCreate := range foundDevices { for _, deviceToCreate := range foundDevices {
var newDevice DeviceInstance var newDevice DeviceInstance
deviceSafeName := sanitizeName(deviceToCreate)
newDevice.deviceType = deviceFileType newDevice.deviceType = deviceFileType
newDevice.deviceName = "smarter-devices/" + deviceToCreate newDevice.deviceName = "smarter-devices/" + deviceSafeName
newDevice.socketName = pluginapi.DevicePluginPath + "smarter-" + deviceToCreate + ".sock" newDevice.socketName = pluginapi.DevicePluginPath + "smarter-" + deviceSafeName + ".sock"
newDevice.deviceFile = "/dev/" + deviceToCreate newDevice.deviceFile = "/dev/" + deviceToCreate
newDevice.numDevices = deviceToTest.NumMaxDevices newDevice.numDevices = deviceToTest.NumMaxDevices
listDevicesAvailable = append(listDevicesAvailable, newDevice) listDevicesAvailable = append(listDevicesAvailable, newDevice)
@@ -193,17 +236,17 @@ L:
} }
var err error var err error
for _, devicesInUse := range listDevicesAvailable { for id, _ := range listDevicesAvailable {
switch devicesInUse.deviceType { switch listDevicesAvailable[id].deviceType {
case deviceFileType : case deviceFileType :
devicesInUse.devicePluginSmarter = NewSmarterDevicePlugin(devicesInUse.numDevices, devicesInUse.deviceFile, devicesInUse.deviceName, devicesInUse.socketName) listDevicesAvailable[id].devicePluginSmarter = NewSmarterDevicePlugin(listDevicesAvailable[id].numDevices, listDevicesAvailable[id].deviceFile, listDevicesAvailable[id].deviceName, listDevicesAvailable[id].socketName)
if err = devicesInUse.devicePluginSmarter.Serve(); err != nil { if err = listDevicesAvailable[id].devicePluginSmarter.Serve(); err != nil {
glog.V(0).Info("Could not contact Kubelet, retrying. Did you enable the device plugin feature gate?") glog.V(0).Info("Could not contact Kubelet, retrying. Did you enable the device plugin feature gate?")
break break
} }
case nvidiaSysType : case nvidiaSysType :
devicesInUse.devicePluginNvidia = NewNvidiaDevicePlugin(devicesInUse.numDevices, devicesInUse.deviceName,"NVIDIA_VISIBLE_DEVICES", devicesInUse.socketName, devicesInUse.deviceId) listDevicesAvailable[id].devicePluginNvidia = NewNvidiaDevicePlugin(listDevicesAvailable[id].numDevices, listDevicesAvailable[id].deviceName,"NVIDIA_VISIBLE_DEVICES", listDevicesAvailable[id].socketName, listDevicesAvailable[id].deviceId)
if err = devicesInUse.devicePluginNvidia.Serve(); err != nil { if err = listDevicesAvailable[id].devicePluginNvidia.Serve(); err != nil {
glog.V(0).Info("Could not contact Kubelet, retrying. Did you enable the device plugin feature gate?") glog.V(0).Info("Could not contact Kubelet, retrying. Did you enable the device plugin feature gate?")
break break
} }
@@ -234,13 +277,18 @@ L:
default: default:
glog.V(0).Infof("Received signal \"%v\", shutting down.", s) glog.V(0).Infof("Received signal \"%v\", shutting down.", s)
for _, devicesInUse := range listDevicesAvailable { for _, devicesInUse := range listDevicesAvailable {
glog.V(0).Info("Stopping device ", devicesInUse.deviceName)
switch devicesInUse.deviceType { switch devicesInUse.deviceType {
case deviceFileType : case deviceFileType :
glog.V(0).Info("Smarter device type")
if devicesInUse.devicePluginSmarter != nil { if devicesInUse.devicePluginSmarter != nil {
glog.V(0).Info("Stopping device")
devicesInUse.devicePluginSmarter.Stop() devicesInUse.devicePluginSmarter.Stop()
} }
case nvidiaSysType : case nvidiaSysType :
glog.V(0).Info("Nvidia device type")
if devicesInUse.devicePluginNvidia != nil { if devicesInUse.devicePluginNvidia != nil {
glog.V(0).Info("Stopping device")
devicesInUse.devicePluginNvidia.Stop() devicesInUse.devicePluginNvidia.Stop()
} }
} }

View File

@@ -13,7 +13,7 @@ import (
"github.com/golang/glog" "github.com/golang/glog"
"golang.org/x/net/context" "golang.org/x/net/context"
"google.golang.org/grpc" "google.golang.org/grpc"
pluginapi "k8s.io/kubernetes/pkg/kubelet/apis/deviceplugin/v1beta1" pluginapi "k8s.io/kubelet/pkg/apis/deviceplugin/v1beta1"
) )
var passDeviceSpecs = flag.Bool("pass-device-specs", false, "pass the list of DeviceSpecs to the kubelet on Allocate()") var passDeviceSpecs = flag.Bool("pass-device-specs", false, "pass the list of DeviceSpecs to the kubelet on Allocate()")
@@ -182,6 +182,10 @@ func (m *NvidiaDevicePlugin) PreStartContainer(context.Context, *pluginapi.PreSt
return &pluginapi.PreStartContainerResponse{}, nil return &pluginapi.PreStartContainerResponse{}, nil
} }
func (m *NvidiaDevicePlugin) GetPreferredAllocation(context.Context, *pluginapi.PreferredAllocationRequest) (*pluginapi.PreferredAllocationResponse, error) {
return &pluginapi.PreferredAllocationResponse{}, nil
}
func (m *NvidiaDevicePlugin) cleanup() error { func (m *NvidiaDevicePlugin) cleanup() error {
if err := os.Remove(m.socket); err != nil && !os.IsNotExist(err) { if err := os.Remove(m.socket); err != nil && !os.IsNotExist(err) {
return err return err

View File

@@ -13,7 +13,7 @@ import (
"github.com/golang/glog" "github.com/golang/glog"
"golang.org/x/net/context" "golang.org/x/net/context"
"google.golang.org/grpc" "google.golang.org/grpc"
pluginapi "k8s.io/kubernetes/pkg/kubelet/apis/deviceplugin/v1beta1" pluginapi "k8s.io/kubelet/pkg/apis/deviceplugin/v1beta1"
) )
const ( const (
@@ -94,6 +94,7 @@ func (m *SmarterDevicePlugin) Start() error {
// Stop the gRPC server // Stop the gRPC server
func (m *SmarterDevicePlugin) Stop() error { func (m *SmarterDevicePlugin) Stop() error {
glog.V(0).Infof("Stopping server with socket ",m.socket)
if m.server == nil { if m.server == nil {
return nil return nil
} }
@@ -101,6 +102,7 @@ func (m *SmarterDevicePlugin) Stop() error {
m.server.Stop() m.server.Stop()
m.server = nil m.server = nil
close(m.stop) close(m.stop)
glog.V(0).Info("Server stopped with socket ",m.socket)
return m.cleanup() return m.cleanup()
} }
@@ -178,7 +180,12 @@ func (m *SmarterDevicePlugin) PreStartContainer(context.Context, *pluginapi.PreS
return &pluginapi.PreStartContainerResponse{}, nil return &pluginapi.PreStartContainerResponse{}, nil
} }
func (m *SmarterDevicePlugin) GetPreferredAllocation(context.Context, *pluginapi.PreferredAllocationRequest) (*pluginapi.PreferredAllocationResponse, error) {
return &pluginapi.PreferredAllocationResponse{}, nil
}
func (m *SmarterDevicePlugin) cleanup() error { func (m *SmarterDevicePlugin) cleanup() error {
glog.V(0).Info("Removing file ",m.socket)
if err := os.Remove(m.socket); err != nil && !os.IsNotExist(err) { if err := os.Remove(m.socket); err != nil && !os.IsNotExist(err) {
return err return err
} }

View File

@@ -15,7 +15,7 @@ spec:
nodeName: smarter-jetson-xavier-4bcc2584 nodeName: smarter-jetson-xavier-4bcc2584
containers: containers:
- name: smarter-device-manager - name: smarter-device-manager
image: registry.gitlab.com/arm-research/smarter/smarter-device-manager/smarter-device-manager:IMAGE_ID image: ghcr.io/smarter-project/smarter-device-manager:v1.20.11
imagePullPolicy: IfNotPresent imagePullPolicy: IfNotPresent
securityContext: securityContext:
allowPrivilegeEscalation: false allowPrivilegeEscalation: false

View File

@@ -15,7 +15,7 @@ spec:
nodeName: <replace with node to run> nodeName: <replace with node to run>
containers: containers:
- name: smarter-device-manager - name: smarter-device-manager
image: registry.gitlab.com/arm-research/smarter/smarter-device-manager/smarter-device-manager:IMAGE_ID image: ghcr.io/smarter-project/smarter-device-manager:v1.20.11
imagePullPolicy: IfNotPresent imagePullPolicy: IfNotPresent
securityContext: securityContext:
allowPrivilegeEscalation: false allowPrivilegeEscalation: false

View File

@@ -1,43 +0,0 @@
apiVersion: v1
kind: Pod
metadata:
name: smarter-device-management
namespace: default
spec:
# Mark this pod as a critical add-on; when enabled, the critical add-on
# scheduler reserves resources for critical add-on pods so that they can
# be rescheduled after a failure.
# See https://kubernetes.io/docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods/
priorityClassName: "system-node-critical"
hostNetwork: true
dnsPolicy: ClusterFirstWithHostNet
hostname: smarter-device-management
nodeName: <replace with node to run>
containers:
- name: smarter-device-manager
image: registry.gitlab.com/arm-research/smarter/smarter-device-manager/smarter-device-manager:IMAGE_ID
imagePullPolicy: IfNotPresent
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop: ["ALL"]
resources:
limits:
cpu: 100m
memory: 10Mi
requests:
cpu: 10m
memory: 10Mi
volumeMounts:
- name: device-plugin
mountPath: /var/lib/kubelet/device-plugins
- name: dev-dir
mountPath: /dev
volumes:
- name: device-plugin
hostPath:
path: /var/lib/kubelet/device-plugins
- name: dev-dir
hostPath:
path: /dev
terminationGracePeriodSeconds: 30

View File

@@ -12,10 +12,10 @@ spec:
hostNetwork: true hostNetwork: true
dnsPolicy: ClusterFirstWithHostNet dnsPolicy: ClusterFirstWithHostNet
hostname: smarter-device-management hostname: smarter-device-management
nodeName: smarter-jetson-xavier-4bcc2584 nodeName: <replace with node to run>
containers: containers:
- name: smarter-device-manager - name: smarter-device-manager
image: registry.gitlab.com/arm-research/smarter/smarter-device-manager/smarter-device-manager:IMAGE_ID image: ghcr.io/smarter-project/smarter-device-manager:v1.20.11
imagePullPolicy: IfNotPresent imagePullPolicy: IfNotPresent
securityContext: securityContext:
allowPrivilegeEscalation: false allowPrivilegeEscalation: false
@@ -38,7 +38,7 @@ spec:
volumes: volumes:
- name: device-plugin - name: device-plugin
hostPath: hostPath:
path: /var/lib/rancher/k3s/agent/kubelet/device-plugins path: /var/lib/kubelet/device-plugins
- name: dev-dir - name: dev-dir
hostPath: hostPath:
path: /dev path: /dev

View File

@@ -22,3 +22,11 @@ data:
nummaxdevices: 20 nummaxdevices: 20
- devicematch: ^vcsm.*$ - devicematch: ^vcsm.*$
nummaxdevices: 20 nummaxdevices: 20
- devicematch: ^ttyUSB[0-9]*$
nummaxdevices: 1
- devicematch: ^ttyACM[0-9]*$
nummaxdevices: 1
- devicematch: ^ttyTHS[0-9]*$
nummaxdevices: 1
- devicematch: ^ttyS[0-9]*$
nummaxdevices: 1

View File

@@ -22,5 +22,13 @@ data:
nummaxdevices: 20 nummaxdevices: 20
- devicematch: ^vcsm.*$ - devicematch: ^vcsm.*$
nummaxdevices: 20 nummaxdevices: 20
- devicematch: ^ttyUSB[0-9]*$
nummaxdevices: 1
- devicematch: ^ttyACM[0-9]*$
nummaxdevices: 1
- devicematch: ^ttyTHS[0-9]*$
nummaxdevices: 1
- devicematch: ^ttyS[0-9]*$
nummaxdevices: 1
- devicematch: nvidia-gpu - devicematch: nvidia-gpu
nummaxdevices: 20 nummaxdevices: 20

View File

@@ -34,7 +34,7 @@ spec:
dnsPolicy: ClusterFirstWithHostNet dnsPolicy: ClusterFirstWithHostNet
containers: containers:
- name: smarter-device-manager - name: smarter-device-manager
image: registry.gitlab.com/arm-research/smarter/smarter-device-manager/smarter-device-manager:IMAGE_ID image: ghcr.io/smarter-project/smarter-device-manager:v1.20.11
imagePullPolicy: IfNotPresent imagePullPolicy: IfNotPresent
securityContext: securityContext:
allowPrivilegeEscalation: false allowPrivilegeEscalation: false

View File

@@ -0,0 +1,72 @@
apiVersion: v1
kind: Namespace
metadata:
name: < Replace with the namespace to use >
labels:
name: < Replace with the namespace to use >
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: smarter-device-manager
namespace: < Replace with the namespace to use >
labels:
name: smarter-device-manager
role: agent
spec:
selector:
matchLabels:
name: smarter-device-manager
updateStrategy:
type: RollingUpdate
template:
metadata:
labels:
name: smarter-device-manager
annotations:
node.kubernetes.io/bootstrap-checkpoint: "true"
spec:
nodeSelector:
smarter-device-manager : enabled
priorityClassName: "system-node-critical"
hostname: smarter-device-management
hostNetwork: true
dnsPolicy: ClusterFirstWithHostNet
containers:
- name: smarter-device-manager
image: ghcr.io/smarter-project/smarter-device-manager:v1.20.11
imagePullPolicy: IfNotPresent
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop: ["ALL"]
resources:
limits:
cpu: 100m
memory: 15Mi
requests:
cpu: 10m
memory: 15Mi
volumeMounts:
- name: device-plugin
mountPath: /var/lib/kubelet/device-plugins
- name: dev-dir
mountPath: /dev
- name: config
mountPath: /root/config
- name: sys-dir
mountPath: /sys
volumes:
- name: device-plugin
hostPath:
path: /var/lib/rancher/k3s/agent/kubelet/device-plugins
- name: dev-dir
hostPath:
path: /dev
- name: sys-dir
hostPath:
path: /sys
- name: config
configMap:
name: smarter-device-manager-rpi
terminationGracePeriodSeconds: 30

View File

@@ -32,11 +32,9 @@ spec:
hostname: smarter-device-management hostname: smarter-device-management
hostNetwork: true hostNetwork: true
dnsPolicy: ClusterFirstWithHostNet dnsPolicy: ClusterFirstWithHostNet
imagePullSecrets:
- name: k8sedgeregcred
containers: containers:
- name: smarter-device-manager - name: smarter-device-manager
image: registry.gitlab.com/arm-research/smarter/smarter-device-manager/smarter-device-manager:IMAGE_ID image: ghcr.io/smarter-project/smarter-device-manager:v1.20.11
imagePullPolicy: IfNotPresent imagePullPolicy: IfNotPresent
securityContext: securityContext:
allowPrivilegeEscalation: false allowPrivilegeEscalation: false

View File

@@ -34,7 +34,7 @@ spec:
dnsPolicy: ClusterFirstWithHostNet dnsPolicy: ClusterFirstWithHostNet
containers: containers:
- name: smarter-device-manager - name: smarter-device-manager
image: registry.gitlab.com/arm-research/smarter/smarter-device-manager/smarter-device-manager:IMAGE_ID image: ghcr.io/smarter-project/smarter-device-manager:v1.20.11
imagePullPolicy: IfNotPresent imagePullPolicy: IfNotPresent
securityContext: securityContext:
allowPrivilegeEscalation: false allowPrivilegeEscalation: false
@@ -52,10 +52,10 @@ spec:
mountPath: /var/lib/kubelet/device-plugins mountPath: /var/lib/kubelet/device-plugins
- name: dev-dir - name: dev-dir
mountPath: /dev mountPath: /dev
- name: sys-dir
mountPath: /sys
- name: config - name: config
mountPath: /root/config mountPath: /root/config
- name: sys-dir
mountPath: /sys
volumes: volumes:
- name: device-plugin - name: device-plugin
hostPath: hostPath:

View File

@@ -32,11 +32,9 @@ spec:
hostname: smarter-device-management hostname: smarter-device-management
hostNetwork: true hostNetwork: true
dnsPolicy: ClusterFirstWithHostNet dnsPolicy: ClusterFirstWithHostNet
imagePullSecrets:
- name: k8sedgeregcred
containers: containers:
- name: smarter-device-manager - name: smarter-device-manager
image: registry.gitlab.com/arm-research/smarter/smarter-device-manager/smarter-device-manager:IMAGE_ID image: ghcr.io/smarter-project/smarter-device-manager:v1.20.11
imagePullPolicy: IfNotPresent imagePullPolicy: IfNotPresent
securityContext: securityContext:
allowPrivilegeEscalation: false allowPrivilegeEscalation: false

View File

@@ -32,11 +32,9 @@ spec:
hostname: smarter-device-management hostname: smarter-device-management
hostNetwork: true hostNetwork: true
dnsPolicy: ClusterFirstWithHostNet dnsPolicy: ClusterFirstWithHostNet
imagePullSecrets:
- name: k8sedgeregcred
containers: containers:
- name: smarter-device-manager - name: smarter-device-manager
image: registry.gitlab.com/arm-research/smarter/smarter-device-manager/smarter-device-manager:IMAGE_ID image: ghcr.io/smarter-project/smarter-device-manager:v1.20.11
imagePullPolicy: IfNotPresent imagePullPolicy: IfNotPresent
securityContext: securityContext:
allowPrivilegeEscalation: false allowPrivilegeEscalation: false