2017-05-22 4 views
0

同じボリュームに対してNFSとPVCを使用して物理ボリュームを作成しました。ただし、PVCは常にPVにバインドする代わりにEBSディスクストレージを作成します。以下のログを参照してください。Kubernetes - PVCがNFS PVをバインドしていない

> kubectl get pv 
NAME  CAPACITY ACCESSMODES RECLAIMPOLICY STATUS  CLAIM  STORAGECLASS REASON AGE 
mynfspv 100Gi  RWX   Retain   Available          7s 

> kubectl get pvc 
NAME  STATUS VOLUME          CAPACITY ACCESSMODES STORAGECLASS AGE 
mynfspvc Bound  pvc-a081c470-3f23-11e7-9d30-024e42ef6b60 100Gi  RWX   default  4s 


> kubectl get pv 
NAME          CAPACITY ACCESSMODES RECLAIMPOLICY STATUS  CLAIM    STORAGECLASS REASON AGE 
mynfspv         100Gi  RWX   Retain   Available            50s 
pvc-a081c470-3f23-11e7-9d30-024e42ef6b60 100Gi  RWX   Delete   Bound  default/mynfspvc default     17s 

をPVCを作成し、NFS-pv.yaml

apiVersion: v1 
kind: PersistentVolume 
metadata: 
    name: mynfspv 
    labels: 
    name: nfs2 
spec: 
    capacity: 
    storage: 100Gi 
    accessModes: 
    - ReadWriteMany 
    persistentVolumeReclaimPolicy: Retain 
    nfs: 
    server: dbc56.efs.us-west-2.amazonaws.com 
    path:/

のnfs-pvc.yaml

kind: PersistentVolumeClaim 
apiVersion: v1 
metadata: 
    name: mynfspvc 
spec: 
    accessModes: 
    - ReadWriteMany 
    resources: 
    requests: 
     storage: 100Gi 

答えて

4

それがどのように見えますあなたは動的なプロビジョニングとデフォルトのstorageclass featを持っていますデフォルトのクラスはAWS ebsです。

$ kubectl get storageclasses 
NAME     TYPE 
standard (default) kubernetes.io/aws-ebs 

これが正しい場合は、問題を解決するためにストレージクラスを指定する必要があると思います。

kind: StorageClass 
apiVersion: storage.k8s.io/v1 
metadata: 
    name: nfs-class 
provisioner: kubernetes.io/fake-nfs 

はあなたが詳細についてはhttps://kubernetes.io/docs/concepts/storage/persistent-volumes/#class-1をチェックアウトすることができ、あなたのPV

kind: PersistentVolumeClaim 
apiVersion: v1 
metadata: 
    name: mynfspvc 
spec: 
    storageClassName: nfs-class 
    accessModes: 
    - ReadWriteMany 
    resources: 
    requests: 
     storage: 100Gi 

とPVC

apiVersion: v1 
kind: PersistentVolume 
metadata: 
    name: mynfspv 
    labels: 
    name: nfs2 
spec: 
    storageClassName: nfs-class 
    capacity: 
    storage: 100Gi 
    accessModes: 
    - ReadWriteMany 
    persistentVolumeReclaimPolicy: Retain 
    nfs: 
    server: dbc56.efs.us-west-2.amazonaws.com 
    path:/

の両方にSTORAGECLASS名を追加します。

+0

私はPVと​​PVCの両方にstorageClassNameを追加するだけで問題を尋ねたので、うまくいきました。しかし、あなたが提案したようにストレージクラス自体を追加しませんでした。簡単に言えば、システムにはデフォルトのaws-ebsというストレージクラスが1つしかありません。 PVとPVCにstorageClassName属性を追加することで、私はそれを働かせました。私はドキュメントに基づいて混乱しています。ここには例があります - https://docs.openshift.org/latest/install_config/persistent_storage/persistent_storage_glusterfs.htmlこれはGlusterFSを使用しますが、storageClassNameはPVまたはPVCに設定されていません。私はこれがどのように機能するのだろうか。 – khuss

+0

私はいつもPV/PVCと一緒に保管庫を使用していますが、保管庫なしでPV/PVCをバインドすることは可能です。私はそれもどちらも文書化されているとは思わない。私は、このセットアップは推奨されたアプローチではないためだと思います。どのようにstorageclassとPV/PVCバインディングが機能するかを完全に理解するために、私は真実のためにソースを調べることをお勧めします:) PVを見つける:https://github.com/kubernetes/kubernetes/blob/755d368c4a2865f3572f7eacfcedd252776227ee/pkg/controller/volume/persistentvolume /index.go#L73 プラグイン: https://github.com/kubernetes/kubernetes/blob/master/plugin/pkg/admission/storageclass/default/admission.go#L80 – ddysher

+0

これは私が遭遇した、まさにですk8s 1.7。私は、動作していなかったPVCとPVを削除してから、PVCにフックしようとしていたすべてのポッドを削除してから、PVとPVCを再作成する必要があることに言及することは重要です。 PVCがPVにロックをかける前にこのサイクルを2-3回繰り返さなければならなかったので、2回以上ヒットするようにしてください。 – Stephan

0

これはどのバージョンのKubeですか?根本的な原因は@ddysherで述べたとおりです。あなたの設定では、get pv {c}の出力に見られるように、 "Default" Storageクラスは "EBS"です。 kube版によると、PVC仕様で 'calim selector'を使うこともできます。参照#https://github.com/kubernetes/community/blob/master/contributors/design-proposals/volume-selectors.md

+0

私は1.6.4を使用しています。 @ddysherへの返信として私のコメントをご覧ください。私は、PVとPVCにstorageClassNameを追加するだけで作業をしました。しかし、私はまだaws-ebsというストレージクラスを1つしか持っていません。 – khuss

関連する問題