如何将多个 k8s 命名空间连接到同一个 PV?

问题描述

在我的 k8s 上,我想运行 3 个具有相同 PV 的命名空间。目前我有一个命名空间设置,我该如何配置命名空间 2 和命名空间 3?

pv.yaml

apiVersion: v1
kind: PersistentVolume
Metadata:
  name: efs-pv
spec:
  capacity:
    storage: 1Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Retain
  storageClassName: efs-sc
  csi:
    driver: efs.csi.aws.com
    volumeHandle: fs-<582a03f3>

claim.yaml

apiVersion: v1
kind: PersistentVolumeClaim
Metadata:
  name: efs-claim
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: efs-sc
  resources:
    requests:
      storage: 1Gi

storageclass.yaml

kind: StorageClass
apiVersion: storage.k8s.io/v1
Metadata:
  name: efs-sc
provisioner: efs.csi.aws.com

解决方法

PVC 可以通过设置 metadata.namespace 放在不同的命名空间中,但 PV 不能。 PVC 将预先绑定到具有相同名称的 PV。我的解决方案只是命名 PV&PVC 对,每个命名空间都不同,例如。 efs-pv-namespace1,efs-pv-namespace2。

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nfs-caelus
  namespace: caelus
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: ""
  resources:
    requests:
      storage: 15Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs-caelus
spec:
  capacity:
    storage: 15Gi
  accessModes:
    - ReadWriteMany
  nfs:
    server: 10.100.15.163
    path: "/"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nfs-nirvana
  namespace: nirvana
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: ""
  resources:
    requests:
      storage: 15Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs-nirvana
spec:
  capacity:
    storage: 15Gi
  accessModes:
    - ReadWriteMany
  nfs:
    server: 10.100.15.163
    path: "/"