我有2个不同的命名空间: prod-01 和 prod-02 ,我想做的是建立我的 prod-01 的副本。 strong>进入 prod-02 命名空间,并为其pvc保留相同的名称,这样我就不必为每个不同的命名空间维护两组图表。
这是它的样子:
$ kubectl get ns | grep prod
prod-01 Active 178d
prod-02 Active 8d
$
如下所示,每个命名空间都有两对pv:
$ kubectl get pv -o wide | grep prod
prod-01-db-pv 50Gi RWX Retain Bound prod-01/app-db 164d
prod-01-nosql-db-pv 5Gi RWX Retain Bound prod-01/app-nosql-db 149d
prod-02-db-pv 50Gi RWX Retain Available prod-02/app-db 41m
prod-02-nosql-db-pv 5Gi RWX Retain Available prod-02/app-nosql-db 19m
$
以下是显示 prod-01 的pvc的方式:
$ kubectl get pvc --namespace=prod-01
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
app-db Bound prod-01-db-pv 50Gi RWX 164d
app-nosql-db Bound prod-01-nosql-db-pv 5Gi RWX 149d
$
这就是我要完成的工作:
$ kubectl get pvc --namespace=prod-02
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
app-db Pending prod-02-db-pv 0 2m
app-nosql-db Pending prod-02-nosql-db-pv 0 24m
$
如上所示, prod-02 名称空间的pvc永远处于 Pending 状态。
当我将 prod-02 上的pvc名称更改为其他名称时,它们会按预期粘合。
这使我认为,即使pvc位于不同的命名空间并指向不同的pv,也无法在pvc上使用相同的名称。但是,在搜索文档时,我找不到有关此问题的任何证据,并且想知道我是否会丢失一些东西。
因此,为了简单起见,我可以在不同的名称空间中使用多个具有相同名称的pvc(考虑它们使用的是不同的pv)吗?
更新:kubectl describe pvc
的结果
$ kubectl describe pvc app-db --namespace=prod-02
Name: app-db
Namespace: prod-02
StorageClass:
Status: Pending
Volume: prod-02-db-pv
Labels: <none>
Annotations: <none>
Finalizers: []
Capacity: 0
Access Modes:
Events: <none>
$
这也是kubectl get pvc
的输出:
$ kubectl get pvc app-db --namespace=prod-02 -o yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
creationTimestamp: 2018-09-22T22:00:34Z
name: app-db
namespace: prod-02
resourceVersion: "43027607"
selfLink: /api/v1/namespaces/prod-02/persistentvolumeclaims/app-db
uid: ee81b951-beb2-11e8-b972-005056bbded7
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 50Gi
volumeName: prod-02-db-pv
status:
phase: Pending
$
这也是有关光伏的一些细节:
$ kubectl get pv prod-02-db-pv --namespace=prod-02 -o yaml
apiVersion: v1
kind: PersistentVolume
metadata:
creationTimestamp: 2018-09-22T21:15:19Z
name: prod-02-db-pv
resourceVersion: "43020171"
selfLink: /api/v1/persistentvolumes/prod-02-db-pv
uid: 9c07d7a6-beac-11e8-b972-005056bbded7
spec:
accessModes:
- ReadWriteMany
capacity:
storage: 50Gi
claimRef:
apiVersion: v1
kind: PersistentVolumeClaim
name: app-db
namespace: prod-02
nfs:
path: /nfs_server/prod02/db
server: 158.87.52.35
persistentVolumeReclaimPolicy: Retain
status:
phase: Available
$
预先感谢您的帮助!
答案 0 :(得分:2)
PVC是命名空间资源,但不是PV。也就是说,您可以在不同的命名空间中使用多个具有相同名称的PVC。
您配置pv的方式可能有问题。
您可以确定在nfs
属性下的pv配置中使用的IP地址正确吗?
nfs:
path: /nfs_server/prod01/db
server: 158.87.52.35
答案 1 :(得分:0)
在来自OpenShift文档的以下链接中找到了我的问题的原因:
发现问题与在用于创建 prod-02 pv的yaml文件中错误使用 claimRefs 有关,此处为完整说明:
在PVC中指定volumeName不会阻止使用其他PVC 从绑定到指定PV之前。您的索赔将 保持待定状态,直到PV可用为止。
在PV中指定ClaimRef不会阻止指定的PVC 绑定到另一个PV。 PVC可以自由选择其他PV 根据正常的绑定过程进行绑定。因此,要避免 这些情况,并确保您的索赔与您的交易量相关 如果需要,必须确保同时指定了volumeName和claimRef。
因此,在修复 claimRefs 并重新创建我的pv之后,pvc开始按预期方式绑定,即使使用与其他命名空间相同的名称也是如此:-)