1

我正在启动一个需要将数据写入卷的 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但这不是我想要的。

有没有办法更改已安装卷的权限?

4

2 回答 2

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
...
于 2019-03-30T15:08:47.817 回答
1

您可以考虑使用initContainer来挂载您的卷并更改权限。initContainer 将在主容器启动之前运行。这种用法的通常模式是使用一个 busybox 映像(~22 MB)来挂载卷并在目录上运行 chown 或 chmod。当您的 pod 的主容器运行时,卷将具有正确的所有权/访问权限。

或者,您可以考虑使用 initContainer 注入正确的文件,如本示例所示。

希望这可以帮助!

于 2019-03-29T17:06:57.070 回答