docker的privileged 与 k8s的privileged的区别

k8s privileged 起的容器里

mount|grep sys
sysfs on /sys type sysfs (ro,nosuid,nodev,noexec,relatime,seclabel)

/sys是ro只读的

 

docker privileged 起的容器里

mount|grep sys
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime,seclabel)

/sys是rw可读可写

 

具体原因:sysfs is mounted as readonly for privileged container · Issue #24000 · moby/moby

 

k8s 需要先启动网络沙盒,sandbox 容器不是 privileged 的,主容器共用了 sandbox 的部分命名空间,所以没有将 sys 挂载成 rw,简单的做法是在 k8s yaml 里单独再挂载一下 sys

- name: sys
    mountPath: /sys

 

/sys Sysfs文件系统是一个类似于proc文件系统的特殊文件系统,用于将系统中的设备组织成层次结构,并向用户模式程序提供详细的内核数据结构信息。其实,就是在用户态可以通过对sys文件系统的访问,来看内核态的一些驱动或者设备等。

所以/sys是用于对外设以及驱动访问的。所以如果在k8s中,挂载的设备虽然可见,但是不可写,会表现为可以看到挂载设备如npu,但是npu不可用。即/dev下可以看到设备,但是使用设备时会报错。

posted @ 2021-11-26 19:46  鸭子船长  阅读(1677)  评论(0编辑  收藏  举报