kubernetes - 无法写入文件。以 root 身份安装的卷

标签 kubernetes kubernetes-pvc

我正在启动一个需要将数据写入卷的 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/

相关文章:

spring - Websockets + Spring Boot + Kubernetes

kubernetes - 该版本的 kubeadm 仅支持部署控制平面版本 >= 1.16.0 的集群。当前版本 : v1. 12.0 Kubernetes

kubernetes - 如何启动和停止 Kubernetes 1.8.5 集群?

amazon-web-services - 在Pod与具有自己的pvc卷的每个Pod之间使用共享卷有什么优缺点(在有状态集的情况下)?

amazon-web-services - EKS 中的持久存储无法配置卷

azure - 如何获取运行Kubernet服务的VM的外部IP

docker - 如何在 kubernetes 中停止/暂停 pod

azure - 我可以通过标签或选择器而不是名称将 K8s 部署链接到 PVC 吗?

Kubernetes 自动将 storageClassName 添加到 PVC

kubernetes - 连接到 Kubernetes 中的持久卷?