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.