diff --git a/modules/k3s/daemon-sets/default.nix b/modules/k3s/daemon-sets/default.nix new file mode 100644 index 0000000..d681a4d --- /dev/null +++ b/modules/k3s/daemon-sets/default.nix @@ -0,0 +1,8 @@ +{ cfg, lib, inputs, ... }: +let + manifests = [ + ./fuse-devPlug.nix + ]; + imported = map ( n: import n { inherit cfg lib inputs; } ) manifests; +in + lib.foldl' lib.recursiveUpdate {} imported \ No newline at end of file diff --git a/modules/k3s/daemon-sets/fuse-devPlug.nix b/modules/k3s/daemon-sets/fuse-devPlug.nix new file mode 100644 index 0000000..da3f755 --- /dev/null +++ b/modules/k3s/daemon-sets/fuse-devPlug.nix @@ -0,0 +1,160 @@ +{ ... }: +{ + fuse-devPlug.contents = [ + { + apiVersion = "apps/v1"; + kind = "DaemonSet"; + metadata = { + name = "generic-device-plugin"; + namespace = "kube-system"; + labels = { + "app.kubernetes.io/name" = "generic-device-plugin"; + }; + }; + spec = { + selector = { + matchLabels = { + "app.kubernetes.io/name" = "generic-device-plugin"; + }; + }; + template = { + metadata = { + labels = { + "app.kubernetes.io/name" = "generic-device-plugin"; + }; + }; + spec = { + priorityClassName = "system-node-critical"; + tolerations = [ + { + operator = "Exists"; + effect = "NoExecute"; + } + { + operator = "Exists"; + effect = "NoSchedule"; + } + ]; + containers = [ + { + image = "squat/generic-device-plugin"; + args = [ + "--device" + '' + name: serial + groups: + - paths: + - path: /dev/ttyUSB* + - paths: + - path: /dev/ttyACM* + - paths: + - path: /dev/tty.usb* + - paths: + - path: /dev/cu.* + - paths: + - path: /dev/cuaU* + - paths: + - path: /dev/rfcomm* + '' + "--device" + '' + name: video + groups: + - paths: + - path: /dev/video0 + '' + "--device" + '' + name: fuse + groups: + - count: 10 + paths: + - path: /dev/fuse + '' + "--device" + '' + name: audio + groups: + - count: 10 + paths: + - path: /dev/snd + '' + "--device" + '' + name: capture + groups: + - paths: + - path: /dev/snd/controlC0 + - path: /dev/snd/pcmC0D0c + - paths: + - path: /dev/snd/controlC1 + mountPath: /dev/snd/controlC0 + - path: /dev/snd/pcmC1D0c + mountPath: /dev/snd/pcmC0D0c + - paths: + - path: /dev/snd/controlC2 + mountPath: /dev/snd/controlC0 + - path: /dev/snd/pcmC2D0c + mountPath: /dev/snd/pcmC0D0c + - paths: + - path: /dev/snd/controlC3 + mountPath: /dev/snd/controlC0 + - path: /dev/snd/pcmC3D0c + mountPath: /dev/snd/pcmC0D0c + '' + ]; + name = "generic-device-plugin"; + resources = { + requests = { + cpu = "50m"; + memory = "10Mi"; + }; + limits = { + cpu = "50m"; + memory = "20Mi"; + }; + }; + ports = [ + { + containerPort = 8080; + name = "http"; + } + ]; + securityContext = { + privileged = true; + }; + volumeMounts = [ + { + name = "device-plugin"; + mountPath = "/var/lib/kubelet/device-plugins"; + } + { + name = "dev"; + mountPath = "/dev"; + } + ]; + } + ]; + volumes = [ + { + name = "device-plugin"; + hostPath = { + path = "/var/lib/kubelet/device-plugins"; + }; + } + { + name = "dev"; + hostPath = { + path = "/dev"; + }; + } + ]; + }; + }; + updateStrategy = { + type = "RollingUpdate"; + }; + }; + } + ]; +} \ No newline at end of file diff --git a/modules/k3s/deployments/storage-combo.nix b/modules/k3s/deployments/storage-combo.nix index ee4e17a..66922ce 100644 --- a/modules/k3s/deployments/storage-combo.nix +++ b/modules/k3s/deployments/storage-combo.nix @@ -13,7 +13,6 @@ template = { metadata = { labels.app = "storage-combo"; - annotations."cdi.k8s.io/cdi.nyxerinys.dev/fuse" = "rw"; }; spec = { hostUsers = false; diff --git a/modules/k3s/manifests.nix b/modules/k3s/manifests.nix index f18c7cd..df026e8 100644 --- a/modules/k3s/manifests.nix +++ b/modules/k3s/manifests.nix @@ -2,7 +2,7 @@ let manifests = [ ./deployments - # ./services + ./daemon-sets ]; imported = map ( n: import n { inherit cfg lib inputs; } ) manifests; in