2016-02-12 26 views
5

Questa potrebbe essere una domanda stupida ma non ho trovato molto online e voglio chiarire questo.Condividere rivendicazioni di volume persistenti tra contenitori in Kubernetes/OpenShift

Dati due implementazioni A e B, entrambi con diverse immagini container:

  • Sono distribuiti in due pod differenti (diversa rc, SVC, ecc) in un cluster K8/OpenShift.
  • Entrambi hanno bisogno di accedere allo stesso volume per leggere i file (lasciamo fuori il blocco per ora) o almeno la stessa struttura di directory in quel volume.
  • Montaggio di questo volume utilizzando un PVC (Persistent Volume Claim) supportato da un PV (Persistent Volume) configurato su una condivisione NFS.

Posso confermare che quanto sopra sarebbe effettivamente possibile? Cioè due diversi pod collegati allo stesso volume con lo stesso PVC. Quindi entrambi stanno leggendo dallo stesso volume.

speranza che abbia un senso ...

risposta

6

TL; DR È possibile condividere PV e PVC all'interno dello stesso progetto/spazio dei nomi per i volumi condivisi (nfs, gluster, ecc.), È inoltre possibile accedere al volume condiviso da più project/namespace ma richiede progetto dedicato PV e PVC, in quanto un fotovoltaico è legato al singolo progetto/spazio dei nomi e il PVC è progetto/spazio dei nomi.

Di seguito ho cercato di illustrare il comportamento corrente e il modo in cui PV e PVC sono inclusi in OpenShift. Questi sono semplici esempi che utilizzano NFS come livello di archiviazione persistente.

gli accessModes a questo punto sono solo etichette, non hanno alcuna reale funzionalità in termini di controllo dell'accesso a PV. Di seguito sono riportati alcuni esempi per mostrare questo

il PV è globale nel senso che può essere visto/accesso da qualsiasi progetto/spazio dei nomi, tuttavia una volta che è legato a un progetto, può quindi essere accessibile solo da contenitori dal stesso progetto/namespace

il PVC è specifico del progetto/spazio dei nomi (quindi se si dispone di più progetti è necessario disporre di un nuovo PV e PVC per ogni progetto per connettersi al volume NFS condiviso - non è possibile riutilizzare il PV dal primo progetto)

Esempio 1:
ho 2 baccelli distinte in esecuzione in "default" progetto/NameSpa ce, entrambi con accesso alla stessa condivisione esportata PV e NFS. Entrambi montano e corrono bene.

[[email protected] nfs_error]# oc get pv 
NAME  LABELS CAPACITY ACCESSMODES STATUS CLAIM REASON AGE 
pv-nfs <none> 1Gi  RWO   Bound default/nfs-claim    3m 


[[email protected] nfs_error]# oc get pods <--- running from DEFAULT project, no issues connecting to PV 
NAME    READY  STATUS RESTARTS AGE 
nfs-bb-pod2-pvc 1/1  Running 0   11m 
nfs-bb-pod3-pvc 1/1  Running 0   10m 

Esempio 2:
Ho 2 baccelli distinte in esecuzione in "default" del progetto/spazio dei nomi e tentare di creare un altro pod utilizzando lo stesso PV ma da un nuovo progetto chiamato testproject di accedere allo stesso esportazione NFS . Il terzo pod del nuovo testproject non sarà in grado di collegarsi al PV poiché è già associato al progetto default.

[[email protected] nfs_error]# oc get pv 
NAME  LABELS CAPACITY ACCESSMODES STATUS CLAIM REASON AGE 
pv-nfs <none> 1Gi  RWO   Bound default/nfs-claim    3m 


[[email protected] nfs_error]# oc get pods <--- running from DEFAULT project, no issues connecting to PV 
NAME    READY  STATUS RESTARTS AGE 
nfs-bb-pod2-pvc 1/1  Running 0   11m 
nfs-bb-pod3-pvc 1/1  Running 0   10m 

** Creare un nuovo credito nei confronti del fotovoltaico esistente da un altro progetto (TestProject) e il PVC non riuscirà

[[email protected] nfs_error]# oc get pvc 
NAME  LABELS STATUS VOLUME CAPACITY ACCESSMODES AGE 
nfs-claim <none> Pending          2s 

** nfs-reclamo sarà mai legarsi al PV PV-NFS perché non si può vedere dal suo attuale portata del progetto

Esempio 3:

ho 2 baccelli distinti in esecuzione in "default "progettare e quindi creare un altro PV e PVC e Pod da testproject. Entrambi i progetti saranno in grado di accedere alla stessa quota esportata NFS ma ho bisogno di un PV e PVC in ciascuno dei progetti.

[[email protected] nfs_error]# oc get pv 
NAME  LABELS CAPACITY ACCESSMODES STATUS  CLAIM     REASON AGE 
pv-nfs <none> 1Gi  RWX   Bound  default/nfs-claim     14m 
pv-nfs2 <none> 1Gi  RWX   Bound  testproject/nfs-claim2    9m 



[[email protected] nfs_error]# oc get pods --all-namespaces 
NAMESPACE  NAME    READY  STATUS RESTARTS AGE 
default  nfs-bb-pod2-pvc 1/1  Running 0   11m 
default  nfs-bb-pod3-pvc 1/1  Running 0   11m 
testproject nfs-bb-pod4-pvc 1/1  Running 0   15s 

** preavviso, ora ho tre baccelli che funzionano allo stesso volume NFS condiviso tra due progetti, ma avevo bisogno di due fotovoltaici di come essi sono tenuti ad un unico progetto, e 2 del PVC, uno per ogni progetto e NFS PV sto cercando di accedere

Esempio 4:

Se io by-pass PV e PVC, posso collegare ai volumi NFS condivisi direttamente da qualsiasi progetto utilizzando le NFS il plugin direttamente

volumes: 
- name: nfsvol 
    nfs: 
    path: /opt/data5 
    server: nfs1.rhs 

Ora, la sicurezza del volume è un altro strato in cima a questo, utilizzando gruppi supplementari (per l'archiviazione condivisa, cioè nfs, gluster, ecc ...), gli amministratori e gli sviluppatori devono essere ulteriormente in grado di gestire e controllare l'accesso alla condivisione Sistema NFS.

Speranza che aiuta

+0

Grazie questo aiuta assegnare. –

+0

@DonovanMuller: Sto anche cercando di utilizzare lo stesso PV per più pod, funziona bene, ma penso che anche i dati siano condivisi tra i pod in questo caso. Qui la mia preoccupazione principale è se PV contiene diciamo 2 GB di dati, tutti i dati saranno disponibili per i pod che stanno usando questo PV, che è ciò che non vogliamo. Pod dovrebbe avere solo i suoi dati, non altri '. Ho fatto questa domanda anche qui http://stackoverflow.com/questions/36624034/openshift-persistent-volumes, ma nessuna risposta. Sarebbe molto utile se puoi chiarire questo. Grazie in anticipo! – priyank

+0

@screenlay: apprezzerebbe anche i tuoi pensieri per la mia domanda precedente. grazie mille! – priyank

0

per quanto ne so, vincolante un PV più volte non è supportato. Puoi utilizzare l'origine del volume (NFS nel tuo caso) direttamente per il tuo caso d'uso.

+0

Sulla base di questo (http://kubernetes.io/v1.1/examples/nfs/) sembra davvero possibile? Nell'esempio ci sono due rc che usano lo stesso pvc. –

+0

È possibile associare i PV ovunque si desideri, ma il fornitore di volume stesso può rifiutare una richiesta di collegamento per l'accesso simultaneo (per Ceph, EBS o GCE). NFS non ha garanzie: se vuoi impedire che NFS venga usato da due pod contemporaneamente, avrai bisogno della tua scherma/blocco. – Clayton

+0

@Clayton: Sto anche provando a usare lo stesso PV per più pod, funziona bene, ma penso che anche i dati siano condivisi tra i pod in questo caso. Qui la mia preoccupazione principale è se PV contiene diciamo 2 GB di dati, tutti i dati saranno disponibili per i pod che stanno usando questo PV, che è ciò che non vogliamo. Pod dovrebbe avere solo i suoi dati, non altri '. Ho posto questa domanda anche qui stackoverflow.com/questions/36624034/..., ma nessuna risposta. Sarebbe molto utile se puoi chiarire questo. Grazie in anticipo! – priyank

Problemi correlati