【问题标题】:How to define the uid, gid of a mounted volume in PodPod中如何定义挂载卷的uid、gid
【发布时间】:2020-10-03 17:56:57
【问题描述】:

这是我们生产环境中的一个问题。我们使用 Kubernetes 通过 Pod 部署我们的应用程序。 Pod 可能需要一些存储空间来存储文件。

我们使用“Persistent Volume”和“Persistent Volume Claim”来呈现真正的后端存储服务器。目前,真正的后端存储服务器是“NFS”。但是“NFS”不受我们控制,我们无法更改 NFS 配置。

每次挂载到 Pod 中的卷的 uid 和 gid 始终是“root root”。但是 Pod 中的进程以非 root 用户身份运行,该进程无法读取/写入挂载的卷。 我们当前的解决方案是定义一个以 root 身份运行的 initContainer,并使用命令 'chown [udi] [gid] [folder]' 来更改所有权。 ininContainer 有一个限制,必须以 root 身份运行。

目前,我们正尝试在 Openshift 上部署我们的应用程序。默认情况下,所有 Pod(容器)都不能以 root 身份运行。否则创建 Pod 失败。

所以我的问题是使用 k8s 方式或 Openshift 方式来定义/更改已安装卷的 uid 和 gid。 我已经尝试过mountOptions Kubernetes Persistent Volume Claim mounted with wrong gid 中谈到的mountOptions: #these options - uid=1000 - gid=1000
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

【问题讨论】:

    标签: kubernetes nfs persistent-volumes persistent-volume-claims


    【解决方案1】:

    如果我们谈论 Kubernetes,您可以设置拥有该卷的组 ID,这可以通过使用 fsGroupPod Security Context 的一个功能)来完成。

    As 还是 OpenShift 我不知道。

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

    Pod 的安全上下文适用于 Pod 的容器,如果适用,也适用于 Pod 的卷。具体而言,fsGroupseLinuxOptions 应用于 Volumes,如下所示:

    您还可以阅读更多关于它的信息here 并按照@rajdeepbs29 发布的here 发布的步骤操作。

    【讨论】:

    • 谢谢。我已经尝试过fsGroup。它不适用于 NFS。它仅适用于 emptyDir。
    • 解决您的问题的唯一方法是您已经在使用的初始化容器。有人提到了here
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多