为Kubernetes(GKE)集群上容器化Julia应用配置存储系统相关问题咨询
问题解答
一、多副本Pod挂载配置方式
无需手动修改每个Pod的配置,直接在Deployment的Pod模板层统一配置存储挂载即可,所有由该Deployment创建的Pod都会自动继承挂载配置。
二、现有PV/PVC配置错误修复
你当前的PV/PVC配置存在两个核心问题会导致绑定失败:
- PV配置的
metadata字段拼写错误(写为了metdata),会导致PV无法正常创建 - GKE默认的
standard-rwo存储类对应普通GCE持久化磁盘,仅支持ReadWriteOnce访问模式,你配置的ReadWriteMany(多节点读写)与存储类能力不兼容,会导致PVC一直处于Pending绑定失败状态
三、GKE场景最优存储方案选择
根据你的业务场景选对应方案即可:
- 若3个Pod不需要共享存储,每个Pod读写独立的数据:建议改用
StatefulSet+volumeClaimTemplate配置,每个副本会自动分配独立的PV,使用默认的standard-rwo存储类即可,无需额外创建资源,适配性最好 - 若3个Pod需要共享同一份存储,所有副本都能读写同一个目录:需要先在GCP创建Filestore实例,使用GKE的
filestore-csi存储类替换当前的standard-rwo,该存储类原生支持ReadWriteMany访问模式,可满足多副本共享存储需求
四、Deployment挂载PVC配置示例
你可以直接修改现有Deployment配置,增加存储挂载字段,示例如下:
apiVersion: "apps/v1" kind: "Deployment" metadata: name: "app" namespace: "default" labels: app: "app" spec: replicas: 3 selector: matchLabels: app: "app" template: metadata: labels: app: "app" spec: # 声明要挂载的PVC volumes: - name: app-storage persistentVolumeClaim: claimName: test-pvc containers: - name: "app-sha256-1" image: "gcr.io/project-1234/github.com/user/app@sha256:b17b8159668d44fec3d" ports: - containerPort: 8080 # 配置容器内挂载路径 volumeMounts: - name: app-storage # 此处替换为你应用homedir()对应的绝对路径下的test目录,比如julia默认root用户的homedir是/root,就填/root/test mountPath: /root/test
注意:如果使用多副本共享存储方案,多Pod同时写入同一个文件时需要添加文件锁避免数据冲突,你当前按运行号创建独立目录的逻辑不会触发该问题,可正常使用。
内容的提问来源于stack exchange,提问作者Mohammad Saad
相关产品推荐
相关产品推荐

