这是我们生产环境中的一个问题。我们使用Kubernetes通过Pods部署我们的应用程序。 Pod可能需要一些存储空间来存储文件。
我们使用“ Persistent Volume”和“ Persistent Volume Claim”来表示真实的后端存储服务器。当前,真正的后备存储服务器是“ NFS”。但是“ NFS”不受我们控制,因此我们无法更改NFS配置。
每次,将卷装载到Pod中的uid和gid始终是“ root root”。但是Pod中的进程以非root用户身份运行,该进程无法读取/写入已安装的卷。 我们当前的解决方案是定义一个initContainer,它以root身份运行,并使用命令'chown [udi] [gid] [folder]'更改所有权。 ininContainer必须以超级用户身份运行,这是一个限制。
目前,我们正在尝试在Openshift上部署我们的应用程序。默认情况下,所有Pod(容器)都不能以root用户身份运行。否则,无法创建Pod。
所以我的问题是使用k8s方式或Openshift方式来定义/更改已安装卷的uid和gid。
我尝试了Kubernetes Persistent Volume Claim mounted with wrong gid中谈到的mountOptions
,
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
答案 0 :(得分:0)
如果我们谈论Kubernetes,则可以设置拥有卷的组ID,这可以通过使用Pod Security Context的功能fsGroup
来完成。
我不知道还是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拥有和可写。有关更多详细信息,请参见Ownership Management design document。
您还可以详细了解here,并按照@rajdeepbs29发布于here的步骤进行操作。