我正在纺一个Pod(由非根用户创建),该Pod需要将数据写入卷。体积来自PVC。
吊舱定义很简单
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
,但这不是我想要的。
是否可以更改已安装卷的权限?
答案 0 :(得分:1)
您可以考虑使用 initContainer 来安装卷并更改权限。 initContainer将在主容器启动之前运行。这种用法的通常模式是使用busybox映像(〜22 MB)来挂载卷并在目录上运行chown或chmod。当pod的主容器运行时,这些卷将具有正确的所有权/访问权限。
或者,您可以考虑使用initContainer注入正确的文件,如this example所示。
希望这会有所帮助!
答案 1 :(得分:1)
安全上下文定义Pod或容器的特权和访问控制设置。只需尝试securityContext:
kind: Pod
apiVersion: v1
metadata:
name: task-pv-pod
spec:
securityContext:
fsGroup: $jenkins_uid
volumes:
- name: task-pv-storage
persistentVolumeClaim:
claimName: test-pvc
...