2016-08-28 7 views
2

私は3つのノードで構成されたGCEコンテナクラスタを持っています。すべてのノード上で、私はそのようなPODを実行します。PersistentVolumeClaimは複数のPersistentVolumeにバインドできますか?

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" 

私が気づいたことは主張ということです私が作成したボリュームのうちの1つにのみ境界があるので、私のPODSのうちの1つだけが正常に展開されます。私が期待していたのは、この主張がPODによって使用された場合、セレクタルールに一致する1つの利用可能なボリュームがバインドされていることを発見したということでした。 つまり、私がPersistentVolumeClaimsを解釈したのは、PODが、PVCスペックと一致するPersistentVolumesセット内の使用可能なボリュームを検索するという主張を使用することです。それは私の質問です:

異なるPersistentVolumesに接続する同じPODのdifferenteインスタンスで同じPersistentVolumeClaimを使用できますか?または、クレームが作成されて他のボリュームにバインドできない場合、クレームは1つのボリュームにのみバインドされますか?

正解が2番目の場合、PODごとにクレームを作成し、すべてのボリュームに特定のPODを作成しないように、Whitoutを展開したときにPersistentVolume(選択したフォームセット)に動的にバインドさせる私は接続する必要がありますか?

答えて

3

PersistentVolumeClaimは、その要求を満たす特定のストレージインスタンスを予約します。その同じPersistentVolumeClaimを複数のPodsで使用すると、Podsのそれぞれで同じバインドPersistentVolumeを使用しようとしますが、これはgcePersistentDiskの場合は不可能です。

Podごとに別々のPersistentVolumClaimを作成してみてください。

Persistent Volumes docLifecycleのセクションにはすばらしい概要があります。

+0

私はそれぞれ異なるPersistentVolumeClaimを使って3種類の 'Pods'を作成しなければなりません.3回同じ' Pod'を複製する 'Deployment'を使うことはできません。 – Paolone

+0

デプロイメントでは、正しいことです。私は[PetSet](http://kubernetes.io/docs/user-guide/petset/)オブジェクトがあなたが探しているストレージ抽象化のタイプを提供していると信じています(しかし、PetSetsはかなり新しく、私はよく知られていません)。 –

+0

「ペット」は私が必要とするものだと思います。「ペットセット」は「クラスタ化されたアプリケーション」とも呼ばれます(http://kubernetes.io/docs/user-guide/petset/#what-is-a-pet-私が構築しようとしているものです。私はそれらを使用する方法を調査します。 – Paolone

関連する問題