kubernetes 如何定义Pod中挂载卷的uid、gid

vshtjzan  于 2023-03-29  发布在  Kubernetes
关注(0)|答案(1)|浏览(227)

这是我们生产环境中的问题,我们使用Kubernetes通过Pod部署我们的应用,Pod可能需要一些存储空间来存储文件。
我们使用'Persistent Volume'和'Persistent Volume Claim'来表示真实的的后端存储服务器。目前真正的后端存储服务器是'NFS'。但'NFS'不受我们控制,我们无法更改NFS配置。
每次挂载到Pod中的卷的uid和gid都是root root,但是Pod中的进程是以非root用户的身份运行的,进程无法读取/写入挂载的卷。我们目前的解决方案是定义一个initContainer,它以root身份运行,并使用命令'chown [udi] [gid] [folder]'来更改所有权。有一个限制,即ininContainer必须以root身份运行。
目前,我们正在尝试在Openshift上部署我们的应用程序。默认情况下,所有的Pod(容器)都不能以root身份运行。否则,Pod将无法创建。
所以我的问题是,一个k8s的方式或Openshift的方式来定义/更改的uid和gid的挂载卷。
mountOptions: #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
jjjwad0x

jjjwad0x1#

如果我们谈论Kubernetes,您可以设置拥有卷的组ID,这可以通过使用fsGroup来完成,这是Pod Security Context的一个功能。
至于OpenShift,我不知道。

apiVersion: v1
kind: Pod
metadata:
  name: hello-world
spec:
  containers:
  # specification of the pod's containers
  # ...
  securityContext:
    fsGroup: 1000

Pod的安全上下文适用于Pod的容器,也适用于Pod的卷(如果适用)。具体来说,fsGroupseLinuxOptions适用于卷,如下所示:

你也可以在这里阅读更多关于它的信息,并按照@rajdeepbs29发布的步骤操作。

相关问题