在 Kubernetes 中我可以使用 PersistentVolumeClaim 创建一些存储,稍后可以将其挂载到某个容器中。
但是如果容器中的用户不是 root 用户,那么该用户将无法访问该目录,因为它的所有者是 root。
如何正确地访问这样的卷?(在创建和挂载该卷时未找到任何用户/权限选项。)
但是如果容器中的用户不是 root 用户,那么该用户将无法访问该目录,因为它的所有者是 root。
如何正确地访问这样的卷?(在创建和挂载该卷时未找到任何用户/权限选项。)
首先,找出您的进程正在运行的UID号码。
然后,通过添加 .spec.securityContext.fsGroup
,您可以告诉Kubernetes为您的pod的挂载点chown(有点像)卷:
spec:
...
securityContext:
fsGroup: 2000
fsGroup
:整数类型:适用于 Pod 中所有容器的特殊附加组。某些卷类型允许 Kubelet 更改该卷的所有权,以由 Pod 拥有:1. 所有者 GID 将是 FSGroup;2. 设置 setgid 位(在卷中创建的新文件将归 FSGroup 所有);3. 权限位与 rw-rw---- OR 运算。如果未设置,则 Kubelet 不会修改任何卷的所有权和权限。
我在GKE环境中也遇到了同样的问题。 securityContext 无法解决权限问题。这是我所做的。
RUN adduser -s /bin/sh -u 1100 --disabled-password foo
RUN apk add sudo
RUN mkdir /app
RUN mkdir /app/logs
RUN chown -R foofoo /app /app/logs
RUN chmod -R 777 /app/logs/
USER foo
WORKDIR /app
在部署的yaml文件中将PVC挂载到Pod中。
在GKE工作节点上创建相同的用户,并授予必要的权限以挂载该路径。
/var/lib/docker/volumes/47aa3xxxxxxxxxxxxxxxxxxxx19dc2c864ed99676b/_data