Questa pagina spiega come installare uno spazio di archiviazione Container Storage Interface (CSI) nei cluster Google Distributed Cloud.
Panoramica
Container Storage Interface (CSI) è un'API open standard supportata da molti dei principali fornitori di soluzioni di archiviazione 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 hanno storicamente compilati in file binari 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 l'uso di tecnologie di archiviazione quali snapshot e ridimensionamento.
Per utilizzare un driver CSI, devi creare un cluster Kubernetes StorageClass. Imposti il driver CSI come provisioning per StorageClass. Quindi, puoi impostare StorageClass come predefinito del cluster o configurare i carichi di lavoro in modo che utilizzino StorageClass (esempio di StatefulSet).
Installare un driver CSI di un fornitore
I 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.
Per lo spazio di archiviazione di produzione, ti consigliamo di installare un driver CSI da un partner di archiviazione GDC Ready.
Verificare l'installazione di un driver
Dopo aver installato un driver CSI, puoi verificare l'installazione eseguendo:
kubectl get csinodes -o jsonpath='{range .items[*]} \
{.metadata.name}{": "} {range .spec.drivers[*]} {.name}{"\n"} {end}{end}'
Utilizzare un driver CSI
Per utilizzare un driver CSI:
Crea un oggetto StorageClass Kubernetes che fa riferimento al driver nel campo
provisioner
.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 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 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. 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 di assegnare alle tue applicazioni lo spazio di archiviazione con le stesse proprietà in più cluster.
Esempio: fare riferimento a StorageClass in uno StatefulSet
L'esempio seguente mostra 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.
Il seguente semplice oggetto StorageClass, premium-rwo
, 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 al valore di StorageClass nell'elemento volumeClaimTemplates
di uno StatefulSet
la specifica del container.
Quando fai riferimento a un oggetto StorageClass nell'elemento volumeClaimTemplates
di uno StatefulSet
specifica, Kubernetes fornisce spazio di archiviazione stabile tramite oggetti PersistentVolume (PV).
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 aver eseguito il provisioning del volume, Kubernetes crea automaticamente un PV 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 base di Google Distributed Cloud Storage
- Impostare una classe StorageClass predefinita per il cluster