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 open standard supportata da molti dei principali fornitori di archiviazione che consente a Kubernetes di esporre sistemi di archiviazione arbitrari a carichi di lavoro containerizzati.
I volumi Kubernetes sono gestiti da driver di archiviazione specifici del fornitore, che sono stati storicamente compilati in 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 che non è supportato in modo nativo da Kubernetes. Inoltre, CSI consente l'utilizzo di moderne funzionalità di archiviazione, come gli snapshot e il ridimensionamento.
Per utilizzare un driver CSI, devi creare un oggetto StorageClass Kubernetes. Imposti 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 spazio di archiviazione sviluppano i propri driver CSI e sono responsabili di fornire le istruzioni di installazione. In casi semplici, l'installazione potrebbe prevedere solo il deployment di manifest nei tuoi cluster. Consulta l'elenco dei driver CSI nella documentazione CSI.
Per l'archiviazione di produzione, consigliamo di installare un driver CSI da un partner di archiviazione GKE Enterprise Ready.
Verificare 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:
Creare un oggetto StorageClass Kubernetes che fa riferimento al driver nel campo
provisioner
.Per eseguire il provisioning dello spazio di archiviazione, puoi:
- Fare riferimento a StorageClass nella specifica
volumeClaimTemplates
per un oggetto StatefulSet. - Impostalo come StorageClass predefinito del cluster.
- Fare riferimento a StorageClass nella specifica
Considerazioni per StorageClass 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 che fornisci a StorageClass, incluso il nome del provisioner.
- Devi assegnare un nome a StorageClass in base alle sue proprietà, anziché dopo il nome del driver o dell'appliance specifico sottostante. 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: riferimento StorageClass in uno StatefulSet
L'esempio seguente modella come definire un driver CSI in un oggetto StorageClass e come fare riferimento all'oggetto StorageClass in un carico di lavoro StatefulSet. L'esempio presuppone che il driver sia già stato installato nel cluster.
Di seguito è riportato un oggetto StorageClass semplice 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 a 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 nell'oggetto StorageClass per creare un nuovo volume di archiviazione. In questo caso, Kubernetes chiama il provider csi.example.com
fittizio, che chiama l'API del provider, per creare un volume. Dopo aver eseguito il provisioning del volume, Kubernetes crea automaticamente un volume permanente per rappresentare l'archiviazione.
Di seguito è riportato 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
- Scopri di più sui concetti di archiviazione di GKE su Bare Metal
- Impostare un valore predefinito di StorageClass per il cluster