2015-12-15 11 views
5

Bu https://github.com/kubernetes/kubernetes/issues/7438#issuecomment-97148195 yılında K8S maintainers'ı tarafından tartışıldı: Kullanıcıların belirli PV istemeye izinBir PVC belirli bir PV'ye bağlanabilir mi?

ben buna inanmıyorum onlara

arasındaki mesafeyi kırar. Kullanıcıların bir düğüm seçmesine izin veriyoruz. Yaygın olan vakası değil, bunun bir nedeni var.

Nasıl sona erdi? > 1 PV'lerin ve PVC'nin https://github.com/kubernetes/kubernetes/tree/master/examples/nfs'daki gibi olması gereken amaç nedir?

Biz NFS kullanıyorum ve biz server IP'yi tutmak ve orada path çünkü PersistentVolume kullanışlı soyutlamadır. Ancak bir PersistentVolumeClaim, path yeniden kullanımını engelleyerek PV yeterli boyutta alır.

bir PVC spec blokta volumeName ayarlayabilir miyim (https://github.com/kubernetes/kubernetes/pull/7529 bakınız) fakat hiç fark etmez.

cevap

9

Orada burada, bugün PVC'ye kadar PV'leri-bağlama öncesi için bir yoldur gösteren bir örnektir:

:

1) sonradan yaratacak bir PVC başvuran bir ClaimRef alanına sahip bir PV nesne oluşturun pv.yaml içeren

$ kubectl create -f pv.yaml 
persistentvolume "pv0003" created 

:

apiVersion: v1 
kind: PersistentVolume 
metadata: 
    name: pv0003 
spec: 
    capacity: 
    storage: 5Gi 
    accessModes: 
    - ReadWriteOnce 
    persistentVolumeReclaimPolicy: Recycle 
    claimRef: 
    namespace: default 
    name: myclaim 
    nfs: 
    path: /tmp 
    server: 172.17.0.2 

2) Sonra aynı isimde PVC oluşturun:

kind: PersistentVolumeClaim 
apiVersion: v1 
metadata: 
    name: myclaim 
spec: 
    accessModes: 
    - ReadWriteOnce 
    resources: 
    requests: 
     storage: 5Gi 

3) PV ve PVC hemen bağlı edilmelidir:

$ kubectl get pvc 
NAME  STATUS VOLUME CAPACITY ACCESSMODES AGE 
myclaim Bound  pv0003 5Gi  RWO   4s 
$ ./cluster/kubectl.sh get pv 
NAME  CAPACITY ACCESSMODES STATUS CLAIM    REASON AGE 
pv0003 5Gi  RWO   Bound  default/myclaim    57s 

Biz de bazı uygulama belirli özelliklerine göre belirli depolama seçmek için kullanıcılar sağlayacak olan "Hacim Seçicileri" tanıtan planlıyoruz (özgül örneğin, ya da sizin durumunuzda, 1: 1 PV'yi PVC haritalamaya zorlamak için bir yol).

Bkz. https://github.com/kubernetes/kubernetes/issues/18333.

+0

Bu iddialı bir tik emin olmak için. Hacim Seçmenleri, hangi önerinin uygulandığına bakılmaksızın yapılabileceğine göre, mimarinin revizyonunu önceden yapabilir miydi? – solsson

+0

Yep. Https://github.com/kubernetes/kubernetes/issues/18359 adresine bakın, uygulamayı bağımsız olarak ele alacaktır. –

+0

# 18359 kaymakam olur. 1.2 ile birlikte, sanırım bunu 1.3'e getirmeyi umuyoruz. – solsson

0

@ jayme'nin düzenlemesinin orijinal yanıtla uyumlu olduğunu düşünmüyorum.

Sadece PVC'de proposal, label selectors olarak belgelenmiş olmasına rağmen, Kubernetes 1.3.0 ile çalışıyor gibi görünüyor.

labels dışında özdeş olan iki birimi tanımlayan bir example yazdım. Her iki iddiaların herhangi tatmin edecek, ama ne zaman iddialar o bağımlı bölmelerin biri başlamaz anlaşıldı

selector: 
    matchLabels: 
     id: test2 

belirtin ve test1 PV ilişkisiz kalır.

$ kubectl create -f volumetest.yml 
$ sleep 5 
$ kubectl get pods 
NAME        READY  STATUS RESTARTS AGE 
volumetest1      1/1  Running 0   8m 
volumetest1-conflict    0/1  Pending 0   8m 
$ kubectl get pv 
NAME  CAPACITY ACCESSMODES STATUS  CLAIM   REASON AGE 
pv1  1Gi  RWO   Available       8m 
pv2  1Gi  RWO   Bound  default/test    8m 
+0

Kubernetes 1.3.0'daki PetSet'in (http://kubernetes.io/docs/user-guide/petset/) etiket seçicisiz deterministik haritalamayı çözdüğünü düşünüyorum. Orijinal kullanım durumlarımı ele alıyor. Çoğaltma denetleyicilerinden veya dağıtımlarından gelen podlar, kalıcı bir depolama alanına sahip değildi. – solsson

1

Şimdi burada detay https://kubernetes.io/docs/tasks/configure-pod-container/configure-persistent-volume-storage

Kopyalanan örnek kodu Bkz

(en azından Kubernetes 1.7.x itibaren) storageClassName kullanabilirsiniz:

örneğin minikube için test edilebilir kuyu

 
kind: PersistentVolume 
apiVersion: v1 
metadata: 
    name: task-pv-volume 
    labels: 
    type: local 
spec: 
    storageClassName: manual 
    capacity: 
    storage: 10Gi 
    accessModes: 
    - ReadWriteOnce 
    hostPath: 
    path: "/tmp/data" 
--- 
kind: PersistentVolumeClaim 
apiVersion: v1 
metadata: 
    name: task-pv-claim 
spec: 
    storageClassName: manual 
    accessModes: 
    - ReadWriteOnce 
    resources: 
    requests: 
     storage: 3Gi 
İlgili konular