Questa pagina spiega come installare uno spazio di archiviazione Container Storage Interface (CSI) sui cluster Google Kubernetes Engine (GKE) Standard. Questa pagina non si applica ai cluster GKE Autopilot, utilizza automaticamente Driver CSI per il disco permanente di Compute Engine.
Se utilizzi Driver CSI per il disco permanente di Compute Engine nel tuo Cluster standard, consigliamo deployment automatico del driver per ridurre i costi di gestione.
Panoramica
CSI è un'API open standard che consente a Kubernetes di esporre spazi di archiviazione arbitrari ai carichi di lavoro containerizzati. I volumi Kubernetes sono gestiti driver di archiviazione specifici del fornitore, che sono sempre stati compilati in file binari Kubernetes. In precedenza, non era possibile utilizzare un driver di archiviazione non incluso in 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 l'uso di tecnologie di archiviazione quali 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 fornendo istruzioni per l'installazione. In casi semplici, l'installazione potrebbe prevede il deployment di manifest nei tuoi cluster. Consulta l'elenco di CSI driver del documentazione CSI.
Verifica dell'installazione di un driver
Dopo aver installato un driver CSI, puoi verificare l'installazione eseguendone uno dei comandi seguenti, a seconda della configurazione versione:
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 Kubernetes che fa riferimento al driver nel campo
provisioner
, se un oggetto StorageClass non è stato creato automaticamente nell'ambito dell'installazione dei driver. Deployment di alcuni driver CSI 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 parametri specifici del conducente fornito all'oggetto StorageClass, incluso il nome del provisioner.
- Devi denominare l'oggetto StorageClass in base alle sue proprietà, anziché dopo il e il nome del driver o dell'appliance specifica. Denominazione di StorageClass dopo le sue proprietà consente di creare StorageClass con lo stesso nome in più cluster e ambienti e consente alle applicazioni di con le stesse proprietà nei vari cluster.
Esempio: fare riferimento a StorageClass in uno StatefulSet
L'esempio seguente illustra come definire un driver CSI in un oggetto StorageClass e quindi fai riferimento a StorageClass in uno StatefulSet carico di lavoro. Nell'esempio si presuppone che il driver sia già stato installato in un cluster Kubernetes.
Di seguito è riportato un oggetto StorageClass semplice denominato premium-rwo
che utilizza un oggetto
Driver CSI, 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 al valore di StorageClass nell'elemento volumeClaimTemplates
di uno StatefulSet
e la specifica del prodotto.
Quando fai riferimento a un oggetto StorageClass nell'elemento volumeClaimTemplates
di uno StatefulSet
Kubernetes fornisce uno spazio di archiviazione stabile tramite gli oggetti PersistentVolume.
Kubernetes chiama il provisioner definito in StorageClass per creare un nuovo
volume di archiviazione. In questo caso, Kubernetes chiama l'oggetto csi.example.com
fittizio
che chiama l'API del provider per creare un volume. Dopo il
di un singolo volume, Kubernetes crea automaticamente
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.