如何控制 kubernetes PersistentVolumeClaim 绑定到特定的 PersistentVolume?

How do I control a kubernetes PersistentVolumeClaim to bind to a specific PersistentVolume?

我有多个卷和一个声明。我怎样才能告诉声明要绑定到哪个卷?

PersistentVolumeClaim 如何知道要绑定到哪个卷?我可以使用其他一些参数或元数据来控制它吗?

我有以下 PersistentVolumeClaim:

{                                                                                                                 
    "apiVersion": "v1",                                                                                           
    "kind": "PersistentVolumeClaim",                                                                              
    "metadata": {                                                                                                 
        "name": "default-drive-claim"                                                                             
    },                                                                                                            
    "spec": {                                                                                                     
        "accessModes": [                                                                                          
            "ReadWriteOnce"                                                                                       
        ],                                                                                                        
        "resources": {                                                                                            
            "requests": {                                                                                         
                "storage": "10Gi"                                                                                 
            }                                                                                                     
        }                                                                                                         
    }                                                                                                             
}

{                                                                                                                 
    "apiVersion": "v1",                                                                                           
    "kind": "PersistentVolume",
    "metadata": {                                                                                                 
        "name": "default-drive-disk",                                                                             
        "labels": {                                                                                               
             "name": "default-drive-disk"                                                                         
        }
    },      
    "spec": {                                                                                                     
        "capacity": {
            "storage": "10Gi"                                                                                     
        },      
        "accessModes": [                                                                                          
            "ReadWriteOnce"                                                                                       
        ],                                                                                                        
        "gcePersistentDisk": {                                                                                    
            "pdName": "a1-drive",
            "fsType": "ext4"
        }
    }
}

如果我使用以下方法创建声明和卷:

kubectl create -f pvc.json -f pv.json

我得到以下卷和声明列表:

NAME                 LABELS                    CAPACITY   ACCESSMODES   STATUS    CLAIM                         REASON    AGE
default-drive-disk   name=default-drive-disk   10Gi       RWO           Bound     default/default-drive-claim             2s
NAME                  LABELS    STATUS    VOLUME               CAPACITY   ACCESSMODES   AGE
default-drive-claim   <none>    Bound     default-drive-disk   10Gi       RWO           2s

声明如何知道要绑定到哪个卷?

当前的实现不允许您的 PersistentVolumeClaim 以特定的 PersistentVolume 为目标。声明根据其功能(访问模式)和容量绑定到卷。

正在进行 PersistentVolumes 的下一次迭代,其中包括声明中的 PersistentVolumeSelector。这将完全像 Pod 上的 NodeSelector 一样工作。该卷必须与标签选择器匹配才能绑定。这就是您正在寻找的目标。

有关包含 PersistentVolumeSelector 的提案,请参阅 https://github.com/kubernetes/kubernetes/pull/17056