2017-04-05 62 views
0

我有一個NFS裝載包含一些只讀媒體資源,我想將其展示給多個項目。將NFS呈現給多個項目

在具有相同NFS路徑的每個項目中創建一個新PV似乎太笨重。如果其他PVC偶然要求我的資產目錄呢?

除此之外,我不知道如何做到這一點。我怎樣才能做到這一點?

編輯:要清楚 - 我想避免集羣管理干預。創建PV時需要集羣管理員權限。

PV CONFIG從比my_namespace其他不能聲稱對這種PV命名空間

apiVersion: v1 
kind: PersistentVolume 
metadata: 
    annotations: 
    pv.kubernetes.io/bound-by-controller: "yes" 
    creationTimestamp: null 
    labels: 
    app: my_app 
    name: my-assets 
spec: 
    accessModes: 
    - ReadWriteMany 
    capacity: 
    storage: 25Gi 
    claimRef: 
    apiVersion: v1 
    kind: PersistentVolumeClaim 
    name: my-assets 
    namespace: my_namespace 
    resourceVersion: "13480134" 
    uid: ea36d352-1a22-11e7-a443-0050568b4a96 
    nfs: 
    path: /nfs_volume 
    server: nfs_server 
    persistentVolumeReclaimPolicy: Recycle 
status: {} 

的PVC。這是來自不同命名空間的PVC配置,無法使用ReadWriteMany對現有PV進行索賠。

apiVersion: v1 
kind: PersistentVolumeClaim 
metadata: 
    annotations: 
    openshift.io/generated-by: OpenShiftNewApp 
    creationTimestamp: null 
    name: my-assets 
spec: 
    accessModes: 
    - ReadWriteMany 
    resources: 
    requests: 
     storage: 25Gi 
    selector: 
    matchLabels: 
     app: my_app 
    volumeName: my-assets 
status: {} 

回答

0

我不知道你所說的項目是什麼意思,但如果你是指不同的應用程序的Deployments,應以單個PV定義爲NFS有型ReadWriteMany工作。不過,我建議每個部署都要包含一個需要訪問NFS的PV和PVC定義。通過這種方式,可以從部署中明確指出,並且可以分別爲每個應用程序更改它。試想一下,你想改變它的一個應用程序,但不是其他。

下面是一個示例,我用它來爲我的CockroachDB部署中的所有POD進行亞馬遜EFS NFS掛載以寫入備份。我已經將它分成了兩個yamls,但你也可以將它們合併成一個文件。請注意,您可以對所有POD使用相同的PersistentVolumeClaim。

1 cockroachdbPV.yaml

apiVersion: v1 
kind: PersistentVolume 
metadata: 
    name: cockroachdbpv 
spec: 
    capacity: 
    storage: 100Gi 
    accessModes: 
    - ReadWriteMany 
    nfs: 
    server: {amazon path here} 
    path: "/" 
--- 
apiVersion: v1 
kind: PersistentVolumeClaim 
metadata: 
    name: cockroachdbpv 
spec: 
    accessModes: 
    - "ReadWriteMany" 
    resources: 
    requests: 
     storage: 10Gi 

2 cockroachdb.yaml

apiVersion: apps/v1beta1 
kind: StatefulSet 
metadata: 
    name: cockroachdb 
spec: 
    serviceName: "cockroachdb" 
    replicas: 3 
    template: 
    metadata: 
     labels: 
     app: cockroachdb 
     annotations: 
     {...}   
    spec: 
     containers: 
     - name: cockroachdb 
     {...} 
     volumes: 
     {...} 
     - name: efsdir 
      persistentVolumeClaim: 
      claimName: cockroachdbpv 
+0

我認爲kubernetes相當於「項目」是「命名空間」 我看到每個命名空間中的1個PV你的觀點,但我的計劃是要改變不同的選擇環境(Dev Test Prod)。我仍然無法在我認爲應該可能的命名空間內對1個PV進行多次索賠。 (請參閱編輯配置) – thisguy123

+0

是的,這是正常的行爲。您應該能夠在需要訪問的所有Deployments/StatefulSets中使用相同的「claimName」來重用持久性聲明聲明(如我的示例 - 這就是爲什麼我將PV與PVC一起部署在單個文件中的原因)。 –

+0

好吧,回到問題......這是否意味着不可能針對同一個PV進行多個PVC索賠? – thisguy123

0

你只需要列出ReadWriteMany作爲PV定義的access mode和PVC的爲好。

這裏有可用的一個例子: https://github.com/kubernetes/kubernetes/tree/master/examples/volumes/nfs

+0

見編輯。 PVs被定義爲'ReadWriteMany' - 仍然無法聲稱跨越不同的命名空間 – thisguy123

+0

我明白了。不幸的是你的PersistentVolume是一個命名空間對象。從不同的命名空間創建PVC是不可能的 - 這是按預期工作的,不會被修復。 –