mirror of
https://gitlab.com/arm-research/smarter/smarter-device-manager.git
synced 2025-04-17 20:08:41 +00:00
Compare commits
No commits in common. "master" and "v1.1.1" have entirely different histories.
@ -1,16 +0,0 @@
|
|||||||
# 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.
|
|
4
CONTRIBUTIONS
Normal file
4
CONTRIBUTIONS
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
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.
|
13
Dockerfile
13
Dockerfile
@ -5,18 +5,19 @@ 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 /arm.com/smarter-device-management
|
WORKDIR /go/src/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 mod init arm.com/smarter-device-management && go mod tidy && go mod vendor && \
|
go install -ldflags="-s -w" -v smarter-device-management
|
||||||
CGO_ENABLED=0 go build -ldflags='-s -w -extldflags="-static"' .
|
|
||||||
|
|
||||||
FROM scratch
|
FROM alpine
|
||||||
|
|
||||||
|
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 /arm.com/smarter-device-management/smarter-device-management /usr/bin/smarter-device-management
|
COPY --from=build /go/bin/smarter-device-management /usr/bin/smarter-device-management
|
||||||
|
|
||||||
CMD ["/usr/bin/smarter-device-management","-logtostderr=true","-v=0"]
|
CMD ["smarter-device-management","-logtostderr=true","-v=0"]
|
@ -17,10 +17,6 @@ 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.
|
||||||
|
2
argus.go
2
argus.go
@ -4,7 +4,7 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/golang/glog"
|
"github.com/golang/glog"
|
||||||
pluginapi "k8s.io/kubelet/pkg/apis/deviceplugin/v1beta1"
|
pluginapi "k8s.io/kubernetes/pkg/kubelet/apis/deviceplugin/v1beta1"
|
||||||
)
|
)
|
||||||
|
|
||||||
func check(err error) {
|
func check(err error) {
|
||||||
|
22
compile.sh
22
compile.sh
@ -5,12 +5,6 @@
|
|||||||
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"
|
||||||
@ -49,9 +43,8 @@ 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:UC name
|
while getopts hA:B:MST:U name
|
||||||
do
|
do
|
||||||
case $name in
|
case $name in
|
||||||
h)
|
h)
|
||||||
@ -59,10 +52,6 @@ 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;
|
||||||
@ -104,13 +93,6 @@ 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"
|
||||||
@ -118,6 +100,6 @@ else
|
|||||||
PUSH_OPTION="--load"
|
PUSH_OPTION="--load"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
docker buildx build ${CACHE_OPTION} -t "${REPOSITORY_NAME}${IMAGE_NAME}${ADDITIONAL_IMAGE_NAME}:${BUILD_TAG}" --platform=${ARCHS} ${PUSH_OPTION} .
|
docker buildx build -t "${REPOSITORY_NAME}${IMAGE_NAME}${ADDITIONAL_IMAGE_NAME}:${BUILD_TAG}" --platform=${ARCHS} ${PUSH_OPTION} .
|
||||||
|
|
||||||
exit 0
|
exit 0
|
||||||
|
92
main.go
92
main.go
@ -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/kubelet/pkg/apis/deviceplugin/v1beta1"
|
pluginapi "k8s.io/kubernetes/pkg/kubelet/apis/deviceplugin/v1beta1"
|
||||||
)
|
)
|
||||||
|
|
||||||
var confFileName string
|
var confFileName string
|
||||||
@ -55,60 +55,18 @@ func init() {
|
|||||||
flag.Parse()
|
flag.Parse()
|
||||||
}
|
}
|
||||||
|
|
||||||
func readDevDirectory(dirToList string, allowedRecursions uint8) (files []string, err error) {
|
func readDevDirectory(dirToList string) (files []string, err error) {
|
||||||
var foundFiles []string
|
f, err := os.Open(dirToList)
|
||||||
|
if err != nil {
|
||||||
fType, err := os.Stat(dirToList)
|
return nil, err
|
||||||
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)
|
files, err = f.Readdirnames(-1)
|
||||||
|
f.Close()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return files, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func findDevicesPattern(listDevices []string, pattern string) ([]string,error) {
|
func findDevicesPattern(listDevices []string, pattern string) ([]string,error) {
|
||||||
@ -144,13 +102,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",10)
|
ExistingDevices, err := readDevDirectory("/dev")
|
||||||
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",0)
|
ExistingDevicesSys, err := readDevDirectory("/sys/devices")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
glog.Errorf(err.Error())
|
glog.Errorf(err.Error())
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
@ -193,10 +151,9 @@ 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/" + deviceSafeName
|
newDevice.deviceName = "smarter-devices/" + deviceToCreate
|
||||||
newDevice.socketName = pluginapi.DevicePluginPath + "smarter-" + deviceSafeName + ".sock"
|
newDevice.socketName = pluginapi.DevicePluginPath + "smarter-" + deviceToCreate + ".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)
|
||||||
@ -236,17 +193,17 @@ L:
|
|||||||
}
|
}
|
||||||
|
|
||||||
var err error
|
var err error
|
||||||
for id, _ := range listDevicesAvailable {
|
for _, devicesInUse := range listDevicesAvailable {
|
||||||
switch listDevicesAvailable[id].deviceType {
|
switch devicesInUse.deviceType {
|
||||||
case deviceFileType :
|
case deviceFileType :
|
||||||
listDevicesAvailable[id].devicePluginSmarter = NewSmarterDevicePlugin(listDevicesAvailable[id].numDevices, listDevicesAvailable[id].deviceFile, listDevicesAvailable[id].deviceName, listDevicesAvailable[id].socketName)
|
devicesInUse.devicePluginSmarter = NewSmarterDevicePlugin(devicesInUse.numDevices, devicesInUse.deviceFile, devicesInUse.deviceName, devicesInUse.socketName)
|
||||||
if err = listDevicesAvailable[id].devicePluginSmarter.Serve(); err != nil {
|
if err = devicesInUse.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 :
|
||||||
listDevicesAvailable[id].devicePluginNvidia = NewNvidiaDevicePlugin(listDevicesAvailable[id].numDevices, listDevicesAvailable[id].deviceName,"NVIDIA_VISIBLE_DEVICES", listDevicesAvailable[id].socketName, listDevicesAvailable[id].deviceId)
|
devicesInUse.devicePluginNvidia = NewNvidiaDevicePlugin(devicesInUse.numDevices, devicesInUse.deviceName,"NVIDIA_VISIBLE_DEVICES", devicesInUse.socketName, devicesInUse.deviceId)
|
||||||
if err = listDevicesAvailable[id].devicePluginNvidia.Serve(); err != nil {
|
if err = devicesInUse.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
|
||||||
}
|
}
|
||||||
@ -277,18 +234,13 @@ 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()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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/kubelet/pkg/apis/deviceplugin/v1beta1"
|
pluginapi "k8s.io/kubernetes/pkg/kubelet/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,10 +182,6 @@ 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
|
||||||
|
@ -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/kubelet/pkg/apis/deviceplugin/v1beta1"
|
pluginapi "k8s.io/kubernetes/pkg/kubelet/apis/deviceplugin/v1beta1"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@ -94,7 +94,6 @@ 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
|
||||||
}
|
}
|
||||||
@ -102,7 +101,6 @@ 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()
|
||||||
}
|
}
|
||||||
@ -180,12 +178,7 @@ 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
|
||||||
}
|
}
|
||||||
|
@ -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:v1.20.11
|
image: registry.gitlab.com/arm-research/smarter/smarter-device-manager:v1.1.1
|
||||||
imagePullPolicy: IfNotPresent
|
imagePullPolicy: IfNotPresent
|
||||||
securityContext:
|
securityContext:
|
||||||
allowPrivilegeEscalation: false
|
allowPrivilegeEscalation: false
|
||||||
|
@ -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:v1.20.11
|
image: registry.gitlab.com/arm-research/smarter/smarter-device-manager:v1.1.1
|
||||||
imagePullPolicy: IfNotPresent
|
imagePullPolicy: IfNotPresent
|
||||||
securityContext:
|
securityContext:
|
||||||
allowPrivilegeEscalation: false
|
allowPrivilegeEscalation: false
|
||||||
|
@ -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:v1.20.11
|
image: registry.gitlab.com/arm-research/smarter/smarter-device-manager:v1.1.1
|
||||||
imagePullPolicy: IfNotPresent
|
imagePullPolicy: IfNotPresent
|
||||||
securityContext:
|
securityContext:
|
||||||
allowPrivilegeEscalation: false
|
allowPrivilegeEscalation: false
|
||||||
@ -33,8 +33,6 @@ 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
|
|
||||||
volumes:
|
volumes:
|
||||||
- name: device-plugin
|
- name: device-plugin
|
||||||
hostPath:
|
hostPath:
|
||||||
@ -42,7 +40,4 @@ spec:
|
|||||||
- name: dev-dir
|
- name: dev-dir
|
||||||
hostPath:
|
hostPath:
|
||||||
path: /dev
|
path: /dev
|
||||||
- name: sys-dir
|
terminationGracePeriodSeconds: 30
|
||||||
hostPath:
|
|
||||||
path: /sys
|
|
||||||
terminationGracePeriodSeconds: 30
|
|
||||||
|
@ -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:v1.20.11
|
image: registry.gitlab.com/arm-research/smarter/smarter-device-manager:v1.1.1
|
||||||
imagePullPolicy: IfNotPresent
|
imagePullPolicy: IfNotPresent
|
||||||
securityContext:
|
securityContext:
|
||||||
allowPrivilegeEscalation: false
|
allowPrivilegeEscalation: false
|
||||||
|
@ -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:v1.20.11
|
image: registry.gitlab.com/arm-research/smarter/smarter-device-manager:v1.1.1
|
||||||
imagePullPolicy: IfNotPresent
|
imagePullPolicy: IfNotPresent
|
||||||
securityContext:
|
securityContext:
|
||||||
allowPrivilegeEscalation: false
|
allowPrivilegeEscalation: false
|
||||||
|
@ -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:v1.20.11
|
image: registry.gitlab.com/arm-research/smarter/smarter-device-manager:v1.1.1
|
||||||
imagePullPolicy: IfNotPresent
|
imagePullPolicy: IfNotPresent
|
||||||
securityContext:
|
securityContext:
|
||||||
allowPrivilegeEscalation: false
|
allowPrivilegeEscalation: false
|
||||||
|
@ -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:v1.20.11
|
image: registry.gitlab.com/arm-research/smarter/smarter-device-manager:v1.1.1
|
||||||
imagePullPolicy: IfNotPresent
|
imagePullPolicy: IfNotPresent
|
||||||
securityContext:
|
securityContext:
|
||||||
allowPrivilegeEscalation: false
|
allowPrivilegeEscalation: false
|
||||||
|
@ -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:v1.20.11
|
image: registry.gitlab.com/arm-research/smarter/smarter-device-manager:v1.1.1
|
||||||
imagePullPolicy: IfNotPresent
|
imagePullPolicy: IfNotPresent
|
||||||
securityContext:
|
securityContext:
|
||||||
allowPrivilegeEscalation: false
|
allowPrivilegeEscalation: false
|
||||||
|
@ -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:v1.20.11
|
image: registry.gitlab.com/arm-research/smarter/smarter-device-manager:v1.1.1
|
||||||
imagePullPolicy: IfNotPresent
|
imagePullPolicy: IfNotPresent
|
||||||
securityContext:
|
securityContext:
|
||||||
allowPrivilegeEscalation: false
|
allowPrivilegeEscalation: false
|
||||||
|
Loading…
x
Reference in New Issue
Block a user