2016-08-28 6 views
2

У меня есть кластер контейнеров GCE, состоящий из 3 узлов. На каждом узле я бегу 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 PersistentVolumes, соответствующий спецификациям PVC. Так вот на мой вопрос:

Может ли тот же PersistentVolumeClaim использовать разные экземпляры одного и того же POD для подключения к различным PersistentVolumes? Или требование связано с одним и только одним томом после его создания и не может привязываться к какому-либо другому тому?

Если правильный ответ является вторым, как я могу заставить POD динамически привязываться к PersistentVolume (выбранному формам набора) при развертывании без создания претензии на POD и, таким образом, избегать создания определенного POD для каждого тома Мне нужно подключиться?

ответ

3

A PersistentVolumeClaim резервирует определенный экземпляр хранилища, который удовлетворяет его запросу. Используя тот же самый PersistentVolumeClaim в нескольких Pods, будет пытаться использовать те же самые ограничения PersistentVolume в каждом из Pods, что невозможно в случае gcePersistentDisk.

Попробуйте создать отдельный PersistentVolumClaim для каждого Pod.

Раздел Persistent Volumes doc обеспечивает хороший обзор.

+0

Таким образом, я должен создать 3 разных 'Pods', каждый из которых использует другой' PersistentVolumeClaim', я не могу использовать 'Deployment' выше, который реплицирует 3 раза один и тот же' Pod', верно? – Paolone

+0

С развертыванием это правильно. Я полагаю, что объект [PetSet] (http://kubernetes.io/docs/user-guide/petset/) предоставляет тип абстракции для хранения, который вы ищете (но PetSets довольно новые, и я не так привык). –

+0

Я думаю, что «Домашние животные» - это то, что мне нужно: «PetSets» также упоминаются как «кластерные приложения»] (http://kubernetes.io/docs/user-guide/petset/#what-is-a-pet- set), это именно то, что я пытаюсь построить. Я исследую, как их использовать. – Paolone