Questa pagina spiega come installare un driver di archiviazione Container Storage Interface (CSI) sui cluster Google Kubernetes Engine (GKE) Standard. Questa pagina non si applica ai cluster GKE Autopilot, che utilizzano automaticamente il driver CSI per il disco permanente di Compute Engine.
Se utilizzi il driver CSI per il disco permanente di Compute Engine nel tuo cluster Standard, ti consigliamo di eseguire il deployment automatico del driver per ridurre l'overhead per la gestione.
Panoramica
CSI è un'API standard aperta 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 storicamente sono stati compilati in programmi binari di Kubernetes. In precedenza, non potevi 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. CSI consente anche l'uso di funzionalità di archiviazione moderne come snapshot e ridimensionamento.
Installazione del driver CSI di un fornitore
Gli altri fornitori di servizi di archiviazione sviluppano i propri driver CSI e sono responsabili di fornire le istruzioni per l'installazione. In casi semplici, l'installazione potrebbe prevedere solo il deployment di manifest nei cluster. Consulta l'elenco dei driver CSI nella documentazione CSI.
Verifica dell'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 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}'
Utilizzare un driver CSI
Per utilizzare un driver CSI:
Crea un oggetto StorageClass di Kubernetes che fa riferimento al driver nel suo campo
provisioner
, se un oggetto StorageClass non viene creato per te come parte dell'installazione del driver. Alcuni driver CSI distribuiscono un oggetto StorageClass al momento dell'installazione.Per eseguire il provisioning dello spazio di archiviazione, puoi:
- Fai riferimento a StorageClass nella specifica
volumeClaimTemplates
per un oggetto StatefulSet. - Impostalo come StorageClass predefinito del cluster.
- Fai riferimento a StorageClass nella specifica
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 conducente forniti all'oggetto StorageClass, incluso il nome del provisioner.
- Devi assegnare un nome all'oggetto StorageClass in base alle relative proprietà, anziché dopo il nome del driver o dell'appliance specifica sottostante. Denominare StorageClass dopo le sue proprietà consente di creare 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 vari cluster.
Esempio: fare riferimento a StorageClass in uno StatefulSet
L'esempio seguente mostra come definire un driver CSI in un oggetto StorageClass e quindi 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 oggetto 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
Puoi fare riferimento al valore di 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.
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 chiama l'API del provider, per creare un volume. Dopo 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.