当我在 kubernetes v1.18 jenkins 的 master pod 中使用此命令挂载 nfs 文件系统时:
root@jenkins-67fff76bb6-q77xf:/# mount -t nfs -o v4 192.168.31.2:/infrastructure/jenkins-share-workspaces /opt/jenkins
mount: permission denied
root@jenkins-67fff76bb6-q77xf:/#
Run Code Online (Sandbox Code Playgroud)
为什么我使用 root 用户时显示权限被拒绝?当我在另一台机器(不在docker中)中使用此命令时,它工作正常,显示服务器端工作正常。这是我在 yaml 中的 kubernetes jenkins master pod 安全文本配置:
securityContext:
runAsUser: 0
fsGroup: 0
Run Code Online (Sandbox Code Playgroud)
今天我尝试了另一个 kubernetes pod 并挂载 nfs 文件系统并抛出相同的错误。看来从主机挂载 NFS 工作正常,而从 kubernetes pod 挂载则存在渗透问题。为什么会出现这种情况呢?NFS 在这个 kubernetes pod 中通过 PVC 绑定 PV 工作正常,为什么它从 docker 挂载失败?我很困惑。
将 nfs 卷挂载到 pod 有两种方法
首先(直接在 pod 规范中):
kind: Pod
apiVersion: v1
metadata:
name: pod-using-nfs
spec:
volumes:
- name: nfs-volume
nfs:
server: 192.168.31.2
path: /infrastructure/jenkins-share-workspaces
containers:
- name: app
image: example
volumeMounts:
- name: nfs-volume
mountPath: /var/nfs
Run Code Online (Sandbox Code Playgroud)
第二(创建持久化 nfs 卷和卷声明):
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs
spec:
capacity:
storage: 1Mi
accessModes:
- ReadWriteMany
nfs:
server: 192.168.31.2
path: "/infrastructure/jenkins-share-workspaces"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nfs
spec:
accessModes:
- ReadWriteMany
storageClassName: ""
resources:
requests:
storage: 1Mi
volumeName: nfs
---
kind: Pod
apiVersion: v1
metadata:
name: pod-using-nfs
spec:
containers:
- name: app
image: example
volumeMounts:
- name: nfs
mountPath: /opt/jenkins
volumes:
- name: nfs
persistentVolumeClaim:
claimName: nfs
Run Code Online (Sandbox Code Playgroud)
编辑:
上面的解决方案是首选解决方案,但如果您确实需要在容器中使用挂载,则需要向 pod 添加功能:
spec:
containers:
- securityContext:
capabilities:
add: ["SYS_ADMIN"]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13176 次 |
| 最近记录: |