如何在 kubernetes 中使用 --device /dev/video0?

Bor*_*ink 4 docker kubernetes

我有一个 docker 容器,用于将我的网络摄像头的通量转换为 rtsp(docker image: ullaakut/rtspatt)。当我使用--device /dev/video0:/dev/video0.

但是我没有发现任何东西可以帮助我使用 Kubernetes 做同样的事情。我只是想要一种从容器访问网络摄像头的方法......任何人都可以帮助我吗?

Dáv*_*nár 7

目前没有可以--device在 Kubernetes 中使用的配置选项。

有关更多详细信息,请参阅这些讨论:https : //github.com/kubernetes/kubernetes/issues/5607 https://github.com/kubernetes/kubernetes/issues/60748

但是,如果您为 pod 启用特权模式,您可能能够使用主机设备。

https://kubernetes.io/docs/concepts/policy/pod-security-policy/#privileged

这允许容器几乎与主机上运行的进程具有相同的访问权限。这对于想要使用 linux 功能(例如操作网络堆栈和访问设备)的容器很有用。

containers:
- name: foo
  volumeMounts:
  - mountPath: /dev/video0
    name: dev-video0
  securityContext:
    privileged: true
volumes:
- name: dev-video0
  hostPath:
    path: /dev/video0
Run Code Online (Sandbox Code Playgroud)

不确定你是否真的需要volumeMountsand volumes。试着看看它是否在没有它们的情况下工作。

privileged: true从安全的角度来看,使用并不是很理想。

您还应该nodeName在 pod 上设置该属性,以便它始终在一个特定节点上运行(该节点将连接摄像头)。


另一种解决方案可能是使用插件:https : //github.com/bluebeach/k8s-hostdev-plugin

  • David 链接的线程最近有活动,这让我找到了[找到解决方案的人](https://github.com/kubernetes/kubernetes/issues/7890#issuecomment-766088805)。我自己还没有测试过,但看起来很有希望 (2认同)