Installazione di un driver Container Storage Interface

Questa pagina spiega come installare un driver di archiviazione Container Storage Interface (CSI) nei cluster creati utilizzando il software Google Distributed Cloud solo per VMware.

Panoramica

CSI è un'API standard aperta che consente a Kubernetes di esporre sistemi di archiviazione arbitrari ai workload containerizzati. Quando esegui il deployment di un driver di archiviazione compatibile con CSI in un cluster, il cluster può connettersi direttamente a un dispositivo di archiviazione compatibile senza dover passare attraverso lo spazio di archiviazione vSphere.

I volumi Kubernetes sono gestiti da driver di archiviazione specifici del fornitore, che storicamente sono stati compilati in file binari Kubernetes. In precedenza, non era possibile utilizzare un driver di archiviazione non incluso in Kubernetes. L'installazione di un driver CSI aggiunge il supporto per un sistema di archiviazione non supportato in modo nativo da Kubernetes. Inoltre, CSI consente l'utilizzo di funzionalità di archiviazione moderne, come snapshot e ridimensionamento.

Per utilizzare un driver CSI, devi creare una StorageClass Kubernetes. Imposti il driver CSI come provisioner per StorageClass. In seguito, puoi impostare StorageClass come predefinita del cluster o configurare i workload in modo che utilizzino StorageClass (esempio di StatefulSet).

Prima di iniziare

Per impostazione predefinita, Google Distributed Cloud utilizza i datastore vSphere utilizzando il driver vsphereVolume integrato. Inoltre, i driver integrati per NFS e iSCSI possono collegare e montare i volumi esistenti sui tuoi workload.

Installazione del driver CSI di un fornitore

I fornitori di spazio di archiviazione sviluppano i propri driver CSI e sono responsabili di fornire le istruzioni di installazione. In casi semplici, l'installazione potrebbe comportare solo il deployment dei manifest nei cluster. Consulta l'elenco dei driver CSI nella documentazione di CSI.

Verifica dell'installazione di un driver

Dopo aver installato un driver CSI, puoi verificare l'installazione eseguendo il seguente comando:

kubectl get csidrivers --kubeconfig KUBECONFIG

Utilizzo di un driver CSI

Per utilizzare un driver CSI:

  1. Crea un oggetto StorageClass Kubernetes che faccia riferimento al driver nel campo provisioner.

  2. Per eseguire il provisioning dello spazio di archiviazione, puoi:

Considerazioni per le classi StorageClass supportate da un driver CSI

Quando crei un oggetto StorageClass, tieni presente quanto segue:

  • La documentazione del driver CSI deve includere i parametri specifici del driver che fornisci alla tua StorageClass, incluso il nome del provisioner.
  • Devi assegnare alla classe StorageClass un nome che rifletta le sue proprietà, anziché il nome del driver o dell'appliance specifico che la supporta. Assegnare un nome alla classe StorageClass in base alle sue proprietà ti consente di creare classi StorageClass con lo stesso nome in più cluster e ambienti e consente alle tue applicazioni di ottenere spazio di archiviazione con le stesse proprietà nei cluster.

Esempio: fai riferimento a StorageClass in un StatefulSet

L'esempio seguente mostra come definire un driver CSI in una StorageClass e poi fare riferimento alla StorageClass in un workload StatefulSet. L'esempio presuppone che il driver sia già stato installato nel cluster.

Di seguito è riportato un semplice StorageClass denominato premium-rwo che utilizza un driver CSI fittizio, csi.example.com, come provisioner:

fast-sc.yaml

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: premium-rwo
provisioner: csi.example.com # CSI driver
parameters: # You provide vendor-specific parameters to this specification
  type: example-parameter # Be sure to follow the vendor's instructions
  datastore: my-datastore
reclaimPolicy: Retain
allowVolumeExpansion: true

Fai riferimento alla classe StorageClass nella specifica volumeClaimTemplates di uno StatefulSet.

Quando fai riferimento a un oggetto StorageClass nella specifica volumeClaimTemplates di uno StatefulSet, Kubernetes fornisce uno spazio di archiviazione stabile utilizzando oggetti PersistentVolume (PV). Kubernetes chiama il provisioner definito in StorageClass per creare un nuovo volume di archiviazione. In questo caso, Kubernetes chiama il provider fittizio csi.example.com, che chiama l'API del provider per creare un volume. Dopo il provisioning del volume, Kubernetes crea automaticamente un PV per rappresentare lo spazio di archiviazione.

Ecco un semplice StatefulSet che fa riferimento a StorageClass:

statefulset.yaml

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: registry.k8s.io/nginx-slim:0.8
        volumeMounts:
        - name: www
          mountPath: /usr/share/nginx/html
  volumeClaimTemplates: # This is the specification in which you reference the StorageClass
  - metadata:
      name: www
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 1Gi
      storageClassName: fast # This field references the existing StorageClass

Passaggi successivi