Kubernetes - Volumi
In Kubernetes, un volume può essere considerato come una directory accessibile ai contenitori in un pod. Abbiamo diversi tipi di volumi in Kubernetes e il tipo definisce la modalità di creazione del volume e il suo contenuto.
Il concetto di volume era presente con Docker, tuttavia l'unico problema era che il volume era molto limitato a un particolare pod. Non appena la vita di un pod è terminata, anche il volume è andato perso.
D'altra parte, i volumi creati tramite Kubernetes non sono limitati a nessun contenitore. Supporta uno o tutti i contenitori distribuiti all'interno del pod di Kubernetes. Un vantaggio chiave del volume Kubernetes è che supporta diversi tipi di archiviazione in cui il pod può utilizzarne più di uno contemporaneamente.
Tipi di volume Kubernetes
Ecco un elenco di alcuni volumi Kubernetes popolari:
emptyDir- È un tipo di volume che viene creato quando un pod viene assegnato per la prima volta a un nodo. Rimane attivo finché il pod è in esecuzione su quel nodo. Il volume è inizialmente vuoto ei contenitori nel pod possono leggere e scrivere i file nel volume emptyDir. Una volta che il pod viene rimosso dal nodo, i dati in emptyDir vengono cancellati.
hostPath - Questo tipo di volume monta un file o una directory dal filesystem del nodo host nel tuo pod.
gcePersistentDisk- Questo tipo di volume monta un disco persistente di Google Compute Engine (GCE) nel tuo pod. I dati in un filegcePersistentDisk rimane intatto quando il pod viene rimosso dal nodo.
awsElasticBlockStore- Questo tipo di volume monta un Elastic Block Store di Amazon Web Services (AWS) nel tuo pod. Proprio comegcePersistentDisk, i dati in un file awsElasticBlockStore rimane intatto quando il pod viene rimosso dal nodo.
nfs - An nfsvolume consente di montare un NFS (Network File System) esistente nel pod. I dati in un filenfsil volume non viene cancellato quando il pod viene rimosso dal nodo. Il volume è solo smontato.
iscsi - An iscsi volume consente di montare un volume iSCSI (SCSI over IP) esistente nel pod.
flocker- È un gestore del volume di dati del contenitore in cluster open source. Viene utilizzato per la gestione dei volumi di dati. UNflockervolume consente di montare un set di dati Flocker in un pod. Se il set di dati non esiste in Flocker, devi prima crearlo utilizzando l'API Flocker.
glusterfs- Glusterfs è un filesystem in rete open source. Un volume glusterfs consente di montare un volume glusterfs nel tuo pod.
rbd- RBD sta per Rados Block Device. Unrbdvolume consente di montare un volume del dispositivo a blocchi Rados nel tuo pod. I dati rimangono conservati dopo la rimozione del pod dal nodo.
cephfs - A cephfsvolume consente di montare un volume CephFS esistente nel pod. I dati rimangono intatti dopo la rimozione del pod dal nodo.
gitRepo - A gitRepo volume monta una directory vuota e clona un file git repository in esso per il tuo pod da utilizzare.
secret - A secret volume viene utilizzato per passare informazioni sensibili, come password, ai pod.
persistentVolumeClaim - A persistentVolumeClaimvolume viene utilizzato per montare un PersistentVolume in un pod. PersistentVolumes è un modo per gli utenti di "rivendicare" uno storage durevole (come un PersistentDisk GCE o un volume iSCSI) senza conoscere i dettagli del particolare ambiente cloud.
downwardAPI - A downwardAPIvolume viene utilizzato per rendere disponibili alle applicazioni i dati API verso il basso. Monta una directory e scrive i dati richiesti in file di testo normale.
azureDiskVolume - An AzureDiskVolume viene utilizzato per montare un disco dati di Microsoft Azure in un pod.
Volume persistente e reclamo del volume persistente
Persistent Volume (PV)- È un pezzo di memoria di rete che è stato fornito dall'amministratore. È una risorsa nel cluster che è indipendente da ogni singolo pod che utilizza il PV.
Persistent Volume Claim (PVC)- Lo spazio di archiviazione richiesto da Kubernetes per i suoi pod è noto come PVC. L'utente non ha bisogno di conoscere il provisioning sottostante. Le attestazioni devono essere create nello stesso spazio dei nomi in cui viene creato il pod.
Creazione di volume persistente
kind: PersistentVolume ---------> 1
apiVersion: v1
metadata:
name: pv0001 ------------------> 2
labels:
type: local
spec:
capacity: -----------------------> 3
storage: 10Gi ----------------------> 4
accessModes:
- ReadWriteOnce -------------------> 5
hostPath:
path: "/tmp/data01" --------------------------> 6
Nel codice sopra, abbiamo definito:
kind: PersistentVolume → Abbiamo definito il tipo come PersistentVolume che dice a kubernetes che il file yaml utilizzato è per creare il Persistent Volume.
name: pv0001 → Nome del PersistentVolume che stiamo creando.
capacity: → Questa specifica definirà la capacità del fotovoltaico che stiamo cercando di creare.
storage: 10Gi → Questo dice all'infrastruttura sottostante che stiamo cercando di rivendicare lo spazio 10Gi sul percorso definito.
ReadWriteOnce → Indica i diritti di accesso del volume che stiamo creando.
path: "/tmp/data01" → Questa definizione indica alla macchina che stiamo cercando di creare un volume sotto questo percorso sull'infrastruttura sottostante.
Creazione di PV
$ kubectl create –f local-01.yaml
persistentvolume "pv0001" created
Controllo di PV
$ kubectl get pv
NAME CAPACITY ACCESSMODES STATUS CLAIM REASON AGE
pv0001 10Gi RWO Available 14s
Descrivere PV
$ kubectl describe pv pv0001
Creazione di rivendicazione di volume persistente
kind: PersistentVolumeClaim --------------> 1
apiVersion: v1
metadata:
name: myclaim-1 --------------------> 2
spec:
accessModes:
- ReadWriteOnce ------------------------> 3
resources:
requests:
storage: 3Gi ---------------------> 4
Nel codice sopra, abbiamo definito:
kind: PersistentVolumeClaim → Indica all'infrastruttura sottostante che stiamo cercando di richiedere una quantità di spazio specificata.
name: myclaim-1 → Nome dell'attestazione che stiamo cercando di creare.
ReadWriteOnce → Questo specifica la modalità della dichiarazione che stiamo cercando di creare.
storage: 3Gi → Questo indicherà a kubernetes la quantità di spazio che stiamo cercando di rivendicare.
Creazione di PVC
$ kubectl create –f myclaim-1
persistentvolumeclaim "myclaim-1" created
Ottenere dettagli sul PVC
$ kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESSMODES AGE
myclaim-1 Bound pv0001 10Gi RWO 7s
Descrivi il PVC
$ kubectl describe pv pv0001
Utilizzo di PV e PVC con POD
kind: Pod
apiVersion: v1
metadata:
name: mypod
labels:
name: frontendhttp
spec:
containers:
- name: myfrontend
image: nginx
ports:
- containerPort: 80
name: "http-server"
volumeMounts: ----------------------------> 1
- mountPath: "/usr/share/tomcat/html"
name: mypd
volumes: -----------------------> 2
- name: mypd
persistentVolumeClaim: ------------------------->3
claimName: myclaim-1
Nel codice sopra, abbiamo definito:
volumeMounts: → Questo è il percorso nel contenitore su cui avverrà il montaggio.
Volume: → Questa definizione definisce la definizione del volume che rivendicheremo.
persistentVolumeClaim: → Sotto questo, definiamo il nome del volume che useremo nel pod definito.