我正在启动一个需要将数据写入卷的 Pod(配备非 Root 用户)。音量来自 PVC。
pod 定义很简单
kind: Pod
apiVersion: v1
metadata:
name: task-pv-pod
spec:
volumes:
- name: task-pv-storage
persistentVolumeClaim:
claimName: test-pvc
containers:
- name: task-pv-container
image: jnlp/jenkins-slave:latest
command: ["/bin/bash"]
args: ["-c", "sleep 500"]
ports:
- containerPort: 80
name: "http-server"
volumeMounts:
- mountPath: "/usr/share/nginx/html"
name: task-pv-storage
当我 exec
进入 Pod 并尝试写入 /usr/share/nginx/html
我明白了
jenkins@task-pv-pod:/usr/share/nginx/html$ touch test
touch: cannot touch ‘test’: Permission denied
查看目录的权限
jenkins@task-pv-pod:~$ ls -ld /usr/share/nginx/html
drwxr-xr-x 3 root root 4096 Mar 29 15:52 /usr/share/nginx/html
很明显,只有 root 用户可以写入 /usr/share/nginx/html
但这不是我想要的。
有没有办法更改已安装卷的权限?
最佳答案
您可以考虑使用initContainer来装载您的卷并更改权限。 initContainer 将在主容器启动之前运行。这种用法的通常模式是使用 busybox 镜像(~22 MB)来安装卷并在目录上运行 chown 或 chmod。当 Pod 的主容器运行时,卷将拥有正确的所有权/访问权限。
或者,您可以考虑使用 initContainer 来注入(inject)正确的文件,如 this example 中所示。 .
希望这有帮助!
关于kubernetes - 无法写入文件。以 root 身份安装的卷,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55420635/