Questa pagina spiega come installare un driver di archiviazione di Container Storage Interface (CSI) nei cluster GKE On-Prem.
Panoramica
CSI è un'API standard aperta che consente a Kubernetes di esporre sistemi di archiviazione arbitrari ai carichi di lavoro containerizzati. Quando esegui il deployment di un driver di archiviazione compatibile con la CSI in un cluster GKE On-Prem, il cluster può connettersi direttamente a un dispositivo di archiviazione compatibile senza dover passare attraverso l'archiviazione vSphere.
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 che non è supportato in modo nativo da Kubernetes. Inoltre, CSI consente l'uso di funzionalità di archiviazione moderne, come snapshot e ridimensionamento.
Per utilizzare un driver CSI, devi creare un oggetto StorageClass Kubernetes. Hai impostato il driver CSI come provisioner per StorageClass. Quindi, puoi impostare StorageClass come predefinito del cluster o configurare i tuoi carichi di lavoro per utilizzare StorageClass (esempio di StatefulSet).
Prima di iniziare
Per impostazione predefinita, GKE On-Prem utilizza i datastore vSphere tramite il driver vSphereVolume integrato. Inoltre, i driver integrati per NFS e iSCSI possono collegare e montare volumi esistenti ai tuoi carichi di lavoro.
Installazione del driver CSI di un fornitore
I fornitori di spazio di archiviazione sviluppano i propri driver CSI, ed è loro responsabile di fornire istruzioni per l'installazione. In casi semplici, l'installazione potrebbe coinvolgere solo il deployment dei manifest nei tuoi cluster. Consulta l'elenco dei driver CSI nella documentazione di CSI.
Verificare l'installazione di un driver
Dopo aver installato un driver CSI, puoi verificare l'installazione eseguendo uno dei seguenti comandi, a seconda della versione on-prem di GKE del tuo cluster:
1.2.0-gke.5
kubectl get csinodes \ -o jsonpath='{range .items[*]} {.metadata.name}{": "} {range .spec.drivers[*]} {.name}{"\n"} {end}{end}'
1.1.0-gke.6
kubectl get nodes \ -o jsonpath='{.items[*].metadata.annotations.csi\.volume\.kubernetes\.io\/nodeid}'
Utilizzo di un driver CSI
Per utilizzare un driver CSI:
Creare un oggetto StorageClass di Kubernetes che fa riferimento al driver nel suo campo
provisioner
.Per eseguire il provisioning dello spazio di archiviazione, puoi:
- Fai riferimento alla classe StorageClass nella specifica
volumeClaimTemplates
per un oggetto StatefulSet. - Impostalo come StorageClass predefinito del cluster.
- Fai riferimento alla classe StorageClass nella specifica
Considerazioni sulle classi di archiviazione supportate da un driver CSI
Quando crei un oggetto StorageClass, tieni presente quanto segue:
- La documentazione relativa al driver CSI deve includere i parametri specifici del driver che fornisci alla tua classe di archiviazione, incluso il nome del provisioner.
- Il nome della classe di archiviazione deve essere quello delle sue proprietà e non il nome del driver o dell'appliance specifica a cui è assegnato. Denominare l'oggetto StorageClass con le sue proprietà ti consente di creare oggetti StorageClass con lo stesso nome in più cluster e ambienti e in più applicazioni da recuperare con lo stesso spazio di archiviazione nei vari cluster.
Esempio: riferimento a StorageClass in uno StatefulSet
L'esempio seguente mostra come definire un driver CSI in un oggetto StorageClass e fare riferimento a StorageClass in un carico di lavoro 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 di crittografia lato client fittizio, csi.example.com
, come suo 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 spazio di archiviazione stabile utilizzando gli oggetti PersistentVolume (PV).
Kubernetes chiama il provisioner definito in StorageClass per creare un nuovo volume di archiviazione. In questo caso, Kubernetes chiama il fornitore fittizio csi.example.com
, che richiama l'API del provider, per creare un volume. Dopo aver eseguito il provisioning del volume, Kubernetes crea automaticamente un volume permanente per rappresentare lo spazio di archiviazione.
Ecco un semplice StatefulSet che fa riferimento all'oggetto 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
- Scopri di più sui concetti dell'archiviazione on-prem di GKE
- Imposta un oggetto StorageClass predefinito per il tuo cluster