Openshift 将NFS呈现给多个项目
我有一个NFS挂载,其中包含一些只读媒体资产,我希望将这些资产呈现给多个项目 在每个项目中使用相同的NFS路径创建一个新的PV似乎太笨拙了。如果其他PVC意外地索取我的资产目录怎么办 除此之外,我不知道怎么做。我怎样才能做到这一点Openshift 将NFS呈现给多个项目,openshift,kubernetes,openshift-origin,Openshift,Kubernetes,Openshift Origin,我有一个NFS挂载,其中包含一些只读媒体资产,我希望将这些资产呈现给多个项目 在每个项目中使用相同的NFS路径创建一个新的PV似乎太笨拙了。如果其他PVC意外地索取我的资产目录怎么办 除此之外,我不知道怎么做。我怎样才能做到这一点 编辑:澄清一下-我想避免集群管理员干预。创建PV时需要群集管理权限 PV配置 apiVersion: v1 kind: PersistentVolume metadata: annotations: pv.kubernetes.io/bound-by-co
编辑:澄清一下-我想避免集群管理员干预。创建PV时需要群集管理权限 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: {}
来自my_命名空间以外的命名空间的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: {}
我不确定您所说的项目是什么意思,但如果您指的是不同应用程序的部署,那么它应该与具有类型为ReadWriteMany的NFS的单个PV定义一起工作。但是,我建议每次需要访问NFS的部署都包含一个PV和PVC定义。通过这种方式,它在部署中是明确的,您可以分别为每个应用程序更改它。想象一下,你想为一个应用程序而不是另一个应用程序更改它 下面是一个示例,我使用它将amazon EFS NFS装载到我的CockroachDB部署中的所有pod中,以编写备份。我把它分成两个YAML,但你也可以把它们折叠成一个文件。请注意,您可以对所有POD使用相同的PersistentVolumeClaim 1只蟑螂BPV.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.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
您只需在PV定义中以及在PVCs中列出
ReadWriteMany
这里有一个例子:
我认为kubernetes相当于“项目”是“名称空间”。我明白你的观点,每个名称空间1 PV,但我的计划是为不同的环境更改选择器(Dev Test Prod)。我仍然无法跨名称空间对1 PV提出多个索赔,我认为这是可能的。(请参见编辑配置)是的,这是正常行为。通过在需要访问的所有部署/状态集中使用相同的“claimName”,您应该能够重用持久卷声明(如我的示例中所示,这就是为什么我将PV与PVC一起部署在一个文件中)。好的,现在回到问题。。。这是否意味着不可能针对同一PV提出多个PVC索赔?要清楚,我想避免群集管理干预。创建PV时需要群集管理权限。但您是否总是使用群集管理在新命名空间中部署新应用?所以PV/PVC的定义可能是其中的一部分?参见编辑。PV被定义为
ReadWriteMany
-仍然无法跨不同的名称空间声明,请参见。不幸的是,PersistentVolume是一个名称空间对象。不可能从不同的名称空间针对它创建一个PVC-这是按预期工作的,不会被修复。