Questa pagina spiega come installare un driver di archiviazione CSI (Container Storage Interface) sui cluster Google Kubernetes Engine (GKE) standard. Questa pagina non si applica ai cluster GKE Autopilot, che utilizzano automaticamente il driver CSI del disco permanente di Compute Engine.
Se utilizzi il driver CSI per il disco permanente di Compute Engine nel cluster standard, ti consigliamo di eseguire automaticamente il deployment del driver per ridurre il sovraccarico di gestione.
Panoramica
CSI è un'API open standard 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 in passato sono stati compilati nei 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 utilizzare funzionalità di archiviazione moderne, come snapshot e ridimensionamento.
Installazione di un driver CSI di un fornitore
Altri fornitori di soluzioni di archiviazione sviluppano i propri driver CSI e sono responsabili della fornitura delle istruzioni di installazione. Nei casi più semplici, l'installazione potrebbe comportare solo il deployment dei manifest nei 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 GKE del tuo cluster:
1,14 e versioni successive
kubectl get csinodes \ -o jsonpath='{range .items[*]} {.metadata.name}{": "} {range .spec.drivers[*]} {.name}{"\n"} {end}{end}'
1.13.x
kubectl get nodes \ -o jsonpath='{.items[*].metadata.annotations.csi\.volume\.kubernetes\.io\/nodeid}'
Utilizzo di un driver CSI
Per utilizzare un driver CSI:
Crea un StorageClass Kubernetes che fa riferimento al driver nel campo
provisioner
, se un StorageClass non viene creato per te nell'ambito dell'installazione del driver. Alcuni driver CSI eseguono il deployment di un StorageClass quando li installi.Per eseguire il provisioning dello spazio di archiviazione, puoi:
- Fai riferimento a StorageClass nella specifica
volumeClaimTemplates
per un oggetto StatefulSet. - Impostala come StorageClass predefinita del cluster.
- Fai riferimento a StorageClass nella specifica
Considerazioni per le classi di archiviazione supportate da un driver CSI
Quando crei una classe di archiviazione, tieni presente quanto segue:
- La documentazione del driver CSI deve includere i parametri specifici del driver che fornisci a StorageClass, incluso il nome del provisioning.
- Devi assegnare il nome a StorageClass in base alle sue proprietà, anziché al nome del driver o dell'appliance specifico sottostante. Assegnare un nome allo StorageClass in base alle sue proprietà ti consente di creare StorageClass con lo stesso nome in più cluster ed ambienti e consente alle tue applicazioni di ottenere spazio di archiviazione con le stesse proprietà in più cluster.
Esempio: fai riferimento a StorageClass in un StatefulSet
L'esempio seguente mostra come definire un driver CSI in un StorageClass e poi fare riferimento al StorageClass in un workload StatefulSet. L'esempio presuppone che il driver sia già stato installato nel cluster.
Di seguito è riportato un semplice oggetto StorageClass denominato premium-rwo
che utilizza un driver CSI immaginario, 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 volumeClaimTemplates
specifica di un StatefulSet.
Quando fai riferimento a un StorageClass nella specifica volumeClaimTemplates
di un StatefulSet, Kubernetes fornisce uno spazio di archiviazione stabile utilizzando i volumi permanenti.
Kubernetes chiama il provisioner definito in StorageClass per creare un nuovo volume
di archiviazione. In questo caso, Kubernetes chiama il provider csi.example.com
immaginario, che chiama l'API del provider, per creare un volume. Dopo aver eseguito il provisioning del volume, Kubernetes crea automaticamente un PersistentVolume 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: premium-rwo # This field references the existing StorageClass
Passaggi successivi
- Scopri di più sui concetti di archiviazione di GKE.