device-plugins: Add fuse-device-plugin DaemonSet
The *fuse-device-plugin* handles mapping the `/dev/fuse` device into unprivileged containers, e.g. for `buildah`. Although *fuse-device-plugin* was recommended by Red Hat in their blog post [How to use Podman inside of Kubernetes][0], it's probably not the best choice any more. It's working for now, giving me the ability to build container images in Kubernetes without running `buildah` in a privileged container, but I will probably investigate replacing it with the [generic-device-plugin][1] eventually. [0]: https://www.redhat.com/sysadmin/podman-inside-kubernetes [1]: https://github.com/squat/generic-device-plugindch-webhooks-secrets
parent
f7a8f391ea
commit
934c07ceba
|
@ -0,0 +1,28 @@
|
||||||
|
# Device Plugins
|
||||||
|
|
||||||
|
Kubernetes [Device Plugins][0] are processes that map device nodes into
|
||||||
|
unprivileged containers. They provide an alternative to manually bind-mounting
|
||||||
|
devices using pod volumes, which typically requires granting container
|
||||||
|
processes more privileges than they would otherwise need.
|
||||||
|
|
||||||
|
|
||||||
|
## `fuse-device-plugin`
|
||||||
|
|
||||||
|
The [fuse-device-plugin][1] is a simple plugin that maps the `/dev/fuse` device
|
||||||
|
node into a container. This device node is required in order to use [FUSE][2]
|
||||||
|
filesystems. [Buildah][3], for example, used an FUSE implementation of
|
||||||
|
OverlayFS when building container images in an unprivileged container.
|
||||||
|
|
||||||
|
As of October 2023, Upsteam development of the `fuse-device-plugin` appears to
|
||||||
|
have stalled, and its "official" container image is several years old at this
|
||||||
|
point. While the project itself is simple and probably does not need much
|
||||||
|
maintenance, running a container based on an operating system that old is quite
|
||||||
|
dangerous. As such, I've created created [my own container image][4] for it
|
||||||
|
that gets rebuilt and updated automatically.
|
||||||
|
|
||||||
|
|
||||||
|
[0]: https://kubernetes.io/docs/concepts/extend-kubernetes/compute-storage-net/device-plugins/
|
||||||
|
[1]: https://github.com/kuberenetes-learning-group/fuse-device-plugin/tree/master
|
||||||
|
[2]: https://en.wikipedia.org/wiki/Filesystem_in_Userspace
|
||||||
|
[3]: https://buildah.io/
|
||||||
|
[4]: https://git.pyrocufflink.net/ContainerImages/fuse-device-plugin
|
|
@ -0,0 +1,30 @@
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: DaemonSet
|
||||||
|
metadata:
|
||||||
|
name: fuse-device-plugin
|
||||||
|
namespace: kube-system
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
name: fuse-device-plugin
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
name: fuse-device-plugin
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- image: git.pyrocufflink.net/containerimages/fuse-device-plugin
|
||||||
|
name: fuse-device-plugin
|
||||||
|
securityContext:
|
||||||
|
allowPrivilegeEscalation: false
|
||||||
|
capabilities:
|
||||||
|
drop:
|
||||||
|
- ALL
|
||||||
|
volumeMounts:
|
||||||
|
- name: device-plugin
|
||||||
|
mountPath: /var/lib/kubelet/device-plugins
|
||||||
|
hostNetwork: true
|
||||||
|
volumes:
|
||||||
|
- name: device-plugin
|
||||||
|
hostPath:
|
||||||
|
path: /var/lib/kubelet/device-plugins
|
Loading…
Reference in New Issue