将NFS呈现给多个项目

时间:2017-04-05 05:42:19

标签: openshift kubernetes openshift-origin

我有一个NFS安装包含一些我想要呈现给多个项目的只读媒体资产。

使用相同的NFS路径在每个项目中创建新的PV似乎太笨重了。如果其他PVC偶然申请我的资产目录怎么办?

除此之外,我还不知道如何做到这一点。我怎么能做到这一点?

编辑:要明确 - 我想避免群集管理员干预。创建PV时需要群集管理员权限。

PV CONFIG

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: {}

来自my_namespace以外的命名空间的PVC无法对此pv提出索赔。这是来自不同命名空间的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: {}

2 个答案:

答案 0 :(得分:0)

我不确定您的项目是什么意思,但如果您指的是Deployments不同的应用程序,它应该使用单个PV定义来处理类型为ReadWriteMany的NFS。但是,我建议每个部署始终包含一个需要访问NFS的PV和PVC定义。这样就可以从部署中明确表示,您可以单独为每个应用程序更改它。想象一下你想为一个应用改变它而不是另一个应用。

以下示例用于将amazon EFS NFS安装到我的CockroachDB部署中用于编写备份的所有POD。我将它分成2个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

答案 1 :(得分:0)

您只需要在PV定义和PVC中将ReadWriteMany列为access mode

这里有一个例子: https://github.com/kubernetes/kubernetes/tree/master/examples/volumes/nfs