Google cloud platform GKE:使用基于磁盘的只读GCP持久性PV时,无法以只读方式装载/dev/sdb

Google cloud platform GKE:使用基于磁盘的只读GCP持久性PV时,无法以只读方式装载/dev/sdb,google-cloud-platform,google-kubernetes-engine,Google Cloud Platform,Google Kubernetes Engine,我正在尝试将基于现有GCP持久磁盘的PV以只读方式装载到pod上。 我的配置看起来像这样(为了保密,部分配置被屏蔽) 然后,在pod定义中: volumeMounts: - mountPath: /app/models subPath: models name: data-and-models-v readOnly: true - [...] volumes: - name: data-and-models-v

我正在尝试将基于现有GCP持久磁盘的PV以只读方式装载到pod上。 我的配置看起来像这样(为了保密,部分配置被屏蔽)

然后,在pod定义中:

  volumeMounts:
      - mountPath: /app/models
        subPath: models
        name: data-and-models-v
        readOnly: true
      - [...]
volumes:
  - name: data-and-models-v
    persistentVolumeClaim:
      claimName: data-and-models-pvc
      readOnly: true
但是,当我申请kubectl时,pod从未创建,我遇到了以下事件:

0s          Warning   FailedMount              pod/lipsync-api-67c784dfb7-4tlln                 MountVolume.MountDevice failed for volume "data-and-models-pv" : rpc error: code = Internal desc = Failed to format and mount device from ("/dev/disk/by-id/google-g-lipsync-data-and-models") to ("/var/lib/kubelet/plugins/kubernetes.io/csi/pv/data-and-models-pv/globalmount") with fstype ("ext4") and options ([]): mount failed: exit status 32
Mounting command: mount
Mounting arguments: -t ext4 -o defaults /dev/disk/by-id/google-g-lipsync-data-and-models /var/lib/kubelet/plugins/kubernetes.io/csi/pv/data-and-models-pv/globalmount
Output: mount: /var/lib/kubelet/plugins/kubernetes.io/csi/pv/data-and-models-pv/globalmount: cannot mount /dev/sdb read-only.
如果我手动ssh到作为支持pod的节点的VM中,我可以观察到向装载选项添加noload可以使我成功装载磁盘:

sudo mount -o ro,noload,defaults /dev/sdb .
但是我不知道有什么方法可以让库伯内特使用这个额外的挂载选项


我如何才能成功地让GKE将这个磁盘装载到我的pod上?

我今天在只读模式下遇到了同样的问题。希望我的经验能给你一些想法

我有两个快照,一个是别人创建的,另一个是我创建的。两个磁盘上的文件相同

但是当我挂载由另一个创建的屏幕截图提供的磁盘时,
只读
工作正常。但我的错误和你的一样

因此,我在没有
只读
模式的情况下登录pod,以查看两个磁盘之间的差异。我发现唯一的区别是好的有
userId:1003
groupId 1004
,而我的是
root:root
。所以我在我的磁盘上运行了
chown1003:1004-R./
,用它创建了一个新的快照,然后它工作得很顺利


我还没有找到原因,但至少它起了作用。如果我弄明白了,我会告诉你。

持久性磁盘是用文件系统分区和格式化的吗?@JohnHanley是的。它使用ext4进行分区和格式化,并填充文件
/dev/sdb
/作为整个磁盘。使用类似于
/dev/sdb1
@JohnHanley的文件系统装载分区对不起,我误解了这个问题。磁盘没有分区(没有分区表),只是作为一个整体格式化。更新:这是第二天早上,磁盘现在可以工作了。同时,我只将磁盘装载到另一个虚拟机上,找到了一个深埋在其中的文件,拥有600(rw-------)权限,并将其更改为664(rw-rw-r--)。我怀疑这是修复它的原因…我刚刚检查了root用户的uid/gid,它是
0:0
,所以可能是问题所在?我必须承认,这真的很奇怪,我以为我无法使用用户/组
0:0
,但我尝试了1001:1001,它也不起作用。。。不知何故,它一定是
1003:1004
?非常有趣。。。你能找出这些用户id和组id在你的设置中对应的是什么吗?只是检查了权限。。。在我的例子中,磁盘已经有1003:1004,但在我的例子中,它们实际上对应于系统的另一个用户。1003:1004在我的pod中不存在,用户和组都不存在。也许它需要一些新的uid和gid?您是否尝试将所有权更改为某个不存在的用户/组?
sudo mount -o ro,noload,defaults /dev/sdb .