使用 ReadOnlyMany 访问模式初始化动态配置的共享卷

Initializing a dynamically provisioned shared volume with ReadOnlyMany access mode

我的 GKE 部署包括 N pods(可能在不同的节点上)和一个共享卷,它是 dynamically provisioned by pd.csi.storage.gke.io 并且是 GCP 中的永久磁盘。我需要在 pods 上线之前用数据初始化这个磁盘。

我的问题是我需要将 accessModes 设置为 ReadOnlyMany 并能够以只读模式将其安装到不同节点上的所有 pods,我认为这会有效使其无法以写模式挂载到 initContainer.

这个问题有解决办法吗? Answer to this question 针对每个 pod 都安装了自己的磁盘的情况提出了一个很好的解决方案,但由于我的数据非常大,我需要在所有 pods 之间共享一个磁盘。

...I need to have one disk shared among all pods

您可以试试 Filestore。首先,您创建一个 FileStore instance and save your data on a FileStore volume. Then you install FileStore driver on your cluster. Finally you share the data with pods that needs to read the data using a PersistentVolume referring 上面的 FileStore 实例和卷。

使用 GKE 1.21 及更高版本,您可以在集群中启用 managed Filestore CSI driver。您可以为新集群启用驱动程序

gcloud container clusters create CLUSTER_NAME \
    --addons=GcpFilestoreCsiDriver ...

或更新现有集群:

gcloud container clusters update CLUSTER_NAME \
   --update-addons=GcpFilestoreCsiDriver=ENABLED

完成后,创建一个存储空间 class(或让平台管理员创建):

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: filestore-example
provisioner: filestore.csi.storage.gke.io
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
parameters:
  tier: standard
  network: default

之后,您可以使用 PVC 和动态配置:

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: podpvc
spec:
  accessModes:
  - ReadWriteMany
  storageClassName: filestore-example
  resources:
    requests:
      storage: 1Ti