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下可以看到設備,但是使用設備時會報錯。