Installa un driver di interfaccia Container Storage

Questa pagina spiega come installare un driver di archiviazione Container Storage Interface (CSI) nei cluster GKE su Bare Metal.

Panoramica

Container Storage Interface (CSI) è un'API standard aperta supportata da molti dei principali fornitori di archiviazione che consente a Kubernetes di esporre sistemi di archiviazione arbitrari ai carichi di lavoro containerizzati.

I volumi Kubernetes sono gestiti da driver di archiviazione specifici del fornitore, che storicamente sono stati compilati nei programmi binari di 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 di usare funzionalità di archiviazione moderne, come snapshot e ridimensionamento.

Per utilizzare un driver CSI, devi creare un oggetto StorageClass di Kubernetes. Imposta il driver CSI come provisioner per StorageClass. Quindi, puoi impostare StorageClass come predefinito del cluster o configurare i tuoi carichi di lavoro per l'utilizzo di StorageClass (esempio StatefulSet).

Installa il driver CSI di un fornitore

I fornitori di servizi di archiviazione sviluppano i propri driver CSI, a cui sono responsabili di fornire istruzioni di installazione. In casi semplici, l'installazione potrebbe riguardare solo il deployment di manifest nei tuoi cluster. Consulta l'elenco dei driver CSI nella documentazione CSI.

Per l'archiviazione in produzione, consigliamo di installare un driver CSI da un partner di archiviazione GDCV Ready.

Verifica l'installazione di un driver

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

kubectl get csinodes -o jsonpath='{range .items[*]} \
    {.metadata.name}{": "} {range .spec.drivers[*]} {.name}{"\n"} {end}{end}'

Utilizza un driver CSI

Per utilizzare un driver CSI:

  1. Creare un oggetto StorageClass Kubernetes che fa riferimento al driver nel suo campo provisioner.

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

Considerazioni sulle classi di archiviazione supportate da un driver CSI

Quando crei un oggetto StorageClass, considera quanto segue:

  • La documentazione del driver CSI deve includere i parametri specifici del driver forniti a StorageClass, incluso il nome del provisioner.
  • Devi assegnare un nome all'oggetto StorageClass in base alle relative proprietà, anziché in base al nome dell'appliance o del driver specifico. L'assegnazione di un nome a StorageClass in base alle sue proprietà consente di creare StorageClass con lo stesso nome in più cluster e ambienti e consente alle applicazioni di ottenere spazio di archiviazione con le stesse proprietà in tutti i cluster.

Esempio: fare riferimento a StorageClass in un StatefulSet

L'esempio seguente modella come definire un driver CSI in un oggetto StorageClass per poi fare riferimento a StorageClass in un carico di lavoro StatefulSet. L'esempio presuppone che il driver sia già stato installato nel cluster.

Il seguente oggetto StorageClass semplice, premium-rwo, 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 all'oggetto 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 tramite oggetti PersistentVolume (PV). Kubernetes chiama il provisioner definito in StorageClass per creare un nuovo volume di archiviazione. In questo caso, Kubernetes chiama il provider csi.example.com fittizio, che effettua una chiamata all'API del provider, per creare un volume. Dopo aver eseguito il provisioning del volume, Kubernetes crea automaticamente un volume permanente per rappresentare l'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: premium-rwo # This field references the existing StorageClass

Passaggi successivi