这是我们生产环境中的一个问题。我们使用 Kubernetes 通过 Pod 部署我们的应用程序。Pod 可能需要一些存储空间来存储文件。
我们使用"持久卷">和"持久卷声明"来呈现真正的后端存储服务器。目前,真正的反向存储服务器是"NFS"。但是"NFS"不受我们控制,我们无法更改 NFS 配置。
每次,将卷挂载到 Pod 中的 uid 和 gid 始终是"根根"。但是 Pod 中的进程以非 root 用户身份运行,该进程无法读/写挂载的卷。 我们当前的解决方案是定义一个以 root 身份运行的 initContainer,并使用命令"chown [udi] [gid] [folder]"来更改所有权。有一个限制,即 ininContainer 必须以 root 身份运行。
目前,我们正在尝试在Openshift上部署我们的应用程序。默认情况下,所有 Pod(容器(都不能以 root 身份运行。否则,将无法创建 Pod。
所以我的问题是 k8s 方法或 Openshift 方法来定义/更改挂载卷的 uid 和 gid。 我已经尝试过mountOptions
在 Kubernetes 持久卷声明中讨论过的错误 gidmountOptions: #these options
- uid=1000
- gid=1000
但失败并显示以下错误消息。似乎 NFS 服务器不支持 uid 和 gid 参数。
Warning FailedMount 11s kubelet, [xxxxx.net] MountVolume.SetUp failed for volume "nfs-gid-pv" : mount failed: exit status 32 Mounting command: systemd-run
Mounting arguments: --description=Kubernetes transient mount for /opt/kubernetes/data/kubelet/pods/3c75930a-d3f7-4d55-9996-4d10dcac9549/volumes/kubernetes.io~nfs/nfs-gid-pv --scope -- mount -t nfs -o gid=1999,uid=1999 shc-sma-cd74.hpeswlab.net:/var/vols/itom/itsma/tzhong /opt/kubernetes/data/kubelet/pods/3c75930a-d3f7-4d55-9996-4d10dcac9549/volumes/kubernetes.io~nfs/nfs-gid-pv
Output: Running scope as unit run-22636.scope.
mount.nfs: an incorrect mount option was specified
Warning FailedMount 7s kubelet, [xxxxx.net] MountVolume.SetUp failed for volume "nfs-gid-pv" : mount failed: exit status 32
Mounting command: systemd-run
Mounting arguments: --description=Kubernetes transient mount for /opt/kubernetes/data/kubelet/pods/3c75930a-d3f7-4d55-9996-4d10dcac9549/volumes/kubernetes.io~nfs/nfs-gid-pv --scope -- mount -t nfs -o gid=1999,uid=1999 shc-sma-cd74.hpeswlab.net:/var/vols/itom/itsma/tzhong /opt/kubernetes/data/kubelet/pods/3c75930a-d3f7-4d55-9996-4d10dcac9549/volumes/kubernetes.io~nfs/nfs-gid-pv
Output: Running scope as unit run-22868.scope.
mount.nfs: an incorrect mount option was specified
如果我们谈论 Kubernetes,您可以设置拥有卷的组 ID,这可以通过使用fsGroup
来完成,这是 Pod 安全上下文中的一个功能。
作为或OpenShift我不知道。
apiVersion: v1
kind: Pod
metadata:
name: hello-world
spec:
containers:
# specification of the pod's containers
# ...
securityContext:
fsGroup: 1000
Pod 的安全上下文适用于 Pod 的容器,也适用于 Pod 的卷(如果适用(。具体而言,
fsGroup
和seLinuxOptions
应用于卷,如下所示:
fsGroup
:支持所有权管理的卷被修改为由fsGroup
中指定的 GID 拥有和可写。有关更多详细信息,请参阅所有权管理设计文档。
您也可以在此处阅读有关它的更多信息,并按照此处发布的@rajdeepbs29发布的步骤进行操作。