From 96079478a74740e8d063794ffa8524f63e5ddb5e Mon Sep 17 00:00:00 2001 From: Rohit Agarwal Date: Mon, 25 Jun 2018 17:11:24 -0700 Subject: [PATCH] Add nvidia-driver-installer and nvidia-gpu-device-plugin addons. --- cmd/minikube/cmd/config/config.go | 12 +++ .../addons/gpu/nvidia-driver-installer.yaml | 76 +++++++++++++++++++ .../addons/gpu/nvidia-gpu-device-plugin.yaml | 67 ++++++++++++++++ docs/addons.md | 4 + pkg/minikube/assets/addons.go | 14 ++++ 5 files changed, 173 insertions(+) create mode 100644 deploy/addons/gpu/nvidia-driver-installer.yaml create mode 100644 deploy/addons/gpu/nvidia-gpu-device-plugin.yaml diff --git a/cmd/minikube/cmd/config/config.go b/cmd/minikube/cmd/config/config.go index 42fb394f9d7a..554676e5f4fc 100644 --- a/cmd/minikube/cmd/config/config.go +++ b/cmd/minikube/cmd/config/config.go @@ -212,6 +212,18 @@ var settings = []Setting{ validations: []setFn{IsValidAddon}, callbacks: []setFn{EnableOrDisableAddon}, }, + { + name: "nvidia-driver-installer", + set: SetBool, + validations: []setFn{IsValidAddon}, + callbacks: []setFn{EnableOrDisableAddon}, + }, + { + name: "nvidia-gpu-device-plugin", + set: SetBool, + validations: []setFn{IsValidAddon}, + callbacks: []setFn{EnableOrDisableAddon}, + }, { name: "hyperv-virtual-switch", set: SetString, diff --git a/deploy/addons/gpu/nvidia-driver-installer.yaml b/deploy/addons/gpu/nvidia-driver-installer.yaml new file mode 100644 index 000000000000..ad5f2d0d3a9f --- /dev/null +++ b/deploy/addons/gpu/nvidia-driver-installer.yaml @@ -0,0 +1,76 @@ +# Copyright 2018 The Kubernetes Authors All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# The Dockerfile and other source for this daemonset are in +# https://github.com/GoogleCloudPlatform/container-engine-accelerators/tree/master/nvidia-driver-installer/minikube + +apiVersion: apps/v1 +kind: DaemonSet +metadata: + name: nvidia-driver-installer + namespace: kube-system + labels: + k8s-app: nvidia-driver-installer + kubernetes.io/minikube-addons: nvidia-driver-installer + addonmanager.kubernetes.io/mode: Reconcile +spec: + selector: + matchLabels: + k8s-app: nvidia-driver-installer + updateStrategy: + type: RollingUpdate + template: + metadata: + labels: + k8s-app: nvidia-driver-installer + spec: + tolerations: + - key: "nvidia.com/gpu" + effect: "NoSchedule" + operator: "Exists" + volumes: + - name: dev + hostPath: + path: /dev + - name: nvidia-install-dir-host + hostPath: + path: /home/kubernetes/bin/nvidia + - name: root-mount + hostPath: + path: / + initContainers: + - image: k8s.gcr.io/minikube-nvidia-driver-installer@sha256:85cbeadb8bee62a96079823e81915955af0959063ff522ec01522e4edda28f33 + name: nvidia-driver-installer + resources: + requests: + cpu: 0.15 + securityContext: + privileged: true + env: + - name: NVIDIA_INSTALL_DIR_HOST + value: /home/kubernetes/bin/nvidia + - name: NVIDIA_INSTALL_DIR_CONTAINER + value: /usr/local/nvidia + - name: ROOT_MOUNT_DIR + value: /root + volumeMounts: + - name: nvidia-install-dir-host + mountPath: /usr/local/nvidia + - name: dev + mountPath: /dev + - name: root-mount + mountPath: /root + containers: + - image: "gcr.io/google-containers/pause:2.0" + name: pause diff --git a/deploy/addons/gpu/nvidia-gpu-device-plugin.yaml b/deploy/addons/gpu/nvidia-gpu-device-plugin.yaml new file mode 100644 index 000000000000..8d403735bc4e --- /dev/null +++ b/deploy/addons/gpu/nvidia-gpu-device-plugin.yaml @@ -0,0 +1,67 @@ +# Copyright 2018 The Kubernetes Authors All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +apiVersion: apps/v1 +kind: DaemonSet +metadata: + name: nvidia-gpu-device-plugin + namespace: kube-system + labels: + k8s-app: nvidia-gpu-device-plugin + kubernetes.io/minikube-addons: nvidia-gpu-device-plugin + addonmanager.kubernetes.io/mode: Reconcile +spec: + selector: + matchLabels: + k8s-app: nvidia-gpu-device-plugin + template: + metadata: + labels: + k8s-app: nvidia-gpu-device-plugin + annotations: + scheduler.alpha.kubernetes.io/critical-pod: '' + spec: + priorityClassName: system-node-critical + tolerations: + - operator: "Exists" + effect: "NoExecute" + - operator: "Exists" + effect: "NoSchedule" + volumes: + - name: device-plugin + hostPath: + path: /var/lib/kubelet/device-plugins + - name: dev + hostPath: + path: /dev + containers: + - image: "k8s.gcr.io/nvidia-gpu-device-plugin@sha256:0842734032018be107fa2490c98156992911e3e1f2a21e059ff0105b07dd8e9e" + command: ["/usr/bin/nvidia-gpu-device-plugin", "-logtostderr"] + name: nvidia-gpu-device-plugin + resources: + requests: + cpu: 50m + memory: 10Mi + limits: + cpu: 50m + memory: 10Mi + securityContext: + privileged: true + volumeMounts: + - name: device-plugin + mountPath: /device-plugin + - name: dev + mountPath: /dev + updateStrategy: + type: RollingUpdate diff --git a/docs/addons.md b/docs/addons.md index cc181e817457..ea38dc9995f1 100644 --- a/docs/addons.md +++ b/docs/addons.md @@ -15,6 +15,8 @@ $ minikube addons list - ingress: disabled - default-storageclass: enabled - storage-provisioner: enabled +- nvidia-driver-installer: disabled +- nvidia-gpu-device-plugin: disabled # minikube must be running for these commands to take effect $ minikube addons enable heapster @@ -36,6 +38,8 @@ The currently supported addons include: * [CoreDNS](https://github.com/coredns/deployment/tree/master/kubernetes) * [Ingress](https://github.com/kubernetes/ingress-nginx) * [Freshpod](https://github.com/GoogleCloudPlatform/freshpod) +* [nvidia-driver-installer](https://github.com/GoogleCloudPlatform/container-engine-accelerators/tree/master/nvidia-driver-installer/minikube) +* [nvidia-gpu-device-plugin](https://github.com/GoogleCloudPlatform/container-engine-accelerators/tree/master/cmd/nvidia_gpu) If you would like to have minikube properly start/restart custom addons, place the addon(s) you wish to be launched with minikube in the `.minikube/addons` directory. Addons in this folder will be moved to the minikube VM and launched each time minikube is started/restarted. diff --git a/pkg/minikube/assets/addons.go b/pkg/minikube/assets/addons.go index e0e8fb4c31e1..cf3d7b214361 100644 --- a/pkg/minikube/assets/addons.go +++ b/pkg/minikube/assets/addons.go @@ -257,6 +257,20 @@ var Addons = map[string]*Addon{ "freshpod-rc.yaml", "0640"), }, false, "freshpod"), + "nvidia-driver-installer": NewAddon([]*BinDataAsset{ + NewBinDataAsset( + "deploy/addons/gpu/nvidia-driver-installer.yaml", + constants.AddonsPath, + "nvidia-driver-installer.yaml", + "0640"), + }, false, "nvidia-driver-installer"), + "nvidia-gpu-device-plugin": NewAddon([]*BinDataAsset{ + NewBinDataAsset( + "deploy/addons/gpu/nvidia-gpu-device-plugin.yaml", + constants.AddonsPath, + "nvidia-gpu-device-plugin.yaml", + "0640"), + }, false, "nvidia-gpu-device-plugin"), } func AddMinikubeDirAssets(assets *[]CopyableFile) error {