2016-08-28 64 views
2

我有一個由3個節點組成的GCE容器集羣。在每一個節點上運行我這樣一個POD:PersistentVolumeClaim可以綁定到多個PersistentVolumes嗎?

apiVersion: extensions/v1beta1 
kind: Deployment 
metadata: 
    name: test-deployment 
spec: 
    replicas: 3 
    template: 
    metadata: 
     labels: 
     app: none 
     track: stable 
    spec: 
     containers: 
     - name: hello 
      image: gcr.io/persistent-volumes-test/alpine:v1.2 
      resources: 
      limits: 
       cpu: 0.2 
       memory: "10Mi" 
      volumeMounts: 
      - mountPath: "/persistentDisk" 
      name: persistent-disk 
      ports: 
      - containerPort: 65535 
      name: anti-affinity 
      hostPort: 65535 
     volumes: 
     - name: persistent-disk 
      persistentVolumeClaim: 
      claimName: myclaim 

定義「反親和力」端口確保每個POD在不同的節點上運行的把戲。我創建這樣定義3個PersistentVolume:

kind: PersistentVolume 
apiVersion: v1 
metadata: 
    name: persistent-volume-1 
    annotations: 
     volume.beta.kubernetes.io/storage-class: "slow" 
    labels: 
     release: "dev" 
spec: 
    capacity: 
     storage: 10Gi 
    accessModes: 
     - ReadWriteOnce 
    persistentVolumeReclaimPolicy: Retain 
    gcePersistentDisk: 
     pdName: persistent-disk-1 
     fsType: ext4 

和他們很好部署

NAME     CAPACITY ACCESSMODES STATUS  CLAIM    REASON AGE 
persistent-volume-1 10Gi  RWO   Released default/myclaim    13h 
persistent-volume-2 10Gi  RWO   Released default/myclaim    5h 
persistent-volume-3 10Gi  RWO   Available        5h 

的要求定義如下:

kind: PersistentVolumeClaim 
apiVersion: v1 
metadata: 
    name: myclaim 
    annotations: 
    volume.beta.kubernetes.io/storage-class: "slow" 
spec: 
    accessModes: 
    - ReadWriteOnce 
    resources: 
    requests: 
     storage: 10Gi 
    selector: 
    matchLabels: 
     release: "dev" 

我注意到的是,索賠僅限於我創建的其中一個卷,因此,只有一個PODS可以成功部署。我所期望的是,當POD使用時,可以找到一個可用卷綁定到匹配選擇器規則。 換句話說,我對PersistentVolumeClaims的解釋是,POD使用聲明來搜索一個集合中的可用卷。o符合PVC規格的PersistentVolumes。所以這是我的問題:

可以使用相同的PersistentVolumeClaim由同一個POD的不同實例連接到不同的PersistentVolumes?或者,一旦它被創建並且不能綁定到其他任何卷,它就會綁定到一個且只有一個捲上?

如果正確的答案是第二個,我怎樣才能讓POD動態綁定到一個PersistentVolume(選擇一個集合),當部署時沒有創建每個POD的聲明,從而避免爲每個音量創建一個特定的POD我需要連接到?

回答

3

A PersistentVolumeClaim保留滿足其請求的特定存儲實例。在多個Pods中使用相同的PersistentVolumeClaim將嘗試在Pods的每一箇中使用相同的綁定PersistentVolume,這在gcePersistentDisk的情況下將不可能。

嘗試爲每個Pod創建一個單獨的PersistentVolumClaim

Persistent Volumes docLifecycle部分提供了一個很好的概述。

+0

因此,我必須創建3個不同的'Pods',每個使用不同的'PersistentVolumeClaim',我不能使用上面重複3次相同'Pod'的'Deployment',對嗎? – Paolone

+0

通過部署,這是正確的。我相信[PetSet](http://kubernetes.io/docs/user-guide/petset/)對象提供了您正在尋找的存儲抽象類型(但PetSets非常新,而且我並不熟悉)。 –

+0

我覺得'Pets'是我需要的:'PetSets'也被稱爲[「羣集應用程序」](http://kubernetes.io/docs/user-guide/petset/#what-is-a-pet-設置)這正是我想要建立的。我將研究如何使用它們。 – Paolone

相關問題