En esta página, se explica cómo instalar un controlador de almacenamiento de la interfaz de almacenamiento de contenedores (CSI) en los clústeres de Google Kubernetes Engine (GKE). Esta página no se aplica a los clústeres de GKE Autopilot, que usan automáticamente el controlador CSI de disco persistente de Compute Engine.
Si usas el controlador CSI de disco persistente de Compute Engine en el clúster estándar, te recomendamos implementar el controlador de forma automática para reducir la sobrecarga de administración.
Descripción general
CSI es una API estándar abierta que permite a Kubernetes exponer sistemas de almacenamiento arbitrarios a cargas de trabajo alojadas en contenedores. Los volúmenes de Kubernetes se administran mediante controladores de almacenamiento específicos del proveedor, que siempre se compilaron en objetos binarios de Kubernetes. Antes no se podía usar un controlador de almacenamiento que no se incluyera con Kubernetes. La instalación de un controlador de CSI agrega compatibilidad para un sistema de almacenamiento que no sea compatible de forma nativa con Kubernetes. Además, CSI permite usar funciones de almacenamiento modernas, como instantáneas y cambios de tamaño.
Instala el controlador CSI de un proveedor
Otros proveedores de almacenamiento desarrollan sus propios controladores CSI y son responsables de proporcionar las instrucciones de instalación. En casos simples, la instalación solo puede implicar la implementación de manifiestos en tus clústeres. Consulta la lista de controladores CSI en la documentación de CSI.
Verifica la instalación de un controlador
Después de instalar un controlador CSI, puedes ejecutar uno de los siguientes comandos para verificar la instalación, según la versión de GKE de tu clúster:
1.14+
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}'
Usa un controlador CSI
Para usar un controlador CSI, sigue estos pasos:
Crea una StorageClass de Kubernetes que haga referencia al controlador en su campo
provisioner
, si una StorageClass no se crea para ti como parte de la instalación del controlador. Algunos controladores CSI implementan una StorageClass cuando los instalas.Para aprovisionar almacenamiento, puedes hacer lo siguiente:
- Haz referencia a StorageClass en la especificación
volumeClaimTemplates
de un objeto StatefulSet. - Configúralo como la StorageClass predeterminada del clúster.
- Haz referencia a StorageClass en la especificación
Consideraciones para StorageClass con respaldo de controlador CSI
Cuando crees una StorageClass, ten en cuenta lo siguiente:
- La documentación del controlador CSI debe incluir los parámetros específicos del controlador que proporcionas a tu StorageClass, incluido el nombre del aprovisionador.
- Debes llamar a la StorageClass como sus propiedades, en lugar de por el nombre del controlador o dispositivo específico detrás de ella. Nombrar la StorageClass por sus propiedades te permite crear StorageClases con el mismo nombre en varios clústeres y entornos, y permite que tus aplicaciones obtengan almacenamiento con las mismas propiedades en todos los clústeres.
Ejemplo: StorageClass de referencia en un StatefulSet
En el siguiente ejemplo, se muestra cómo definir un controlador CSI en una StorageClass y, luego, hacer referencia a esta en una carga de trabajo StatefulSet. En el ejemplo, se da por sentado que el controlador ya se instaló en el clúster.
La siguiente es una StorageClass simple llamada premium-rwo
que usa un controlador CSI ficticio, csi.example.com
, como su aprovisionador:
# 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
Se hace referencia a la StorageClass en la especificación volumeClaimTemplates
de StatefulSet.
Cuando haces referencia a StorageClass en la especificación volumeClaimTemplates
de StatefulSet, Kubernetes proporciona almacenamiento estable mediante PersistentVolumes.
Kubernetes llama al aprovisionador definido en la StorageClass para crear un volumen de almacenamiento nuevo. En este caso, Kubernetes llama al proveedor ficticio csi.example.com
, que llama a la API del proveedor, para crear un volumen. Una vez que se aprovisiona el volumen, Kubernetes crea de forma automática un PersistentVolume para representar el almacenamiento.
A continuación, se muestra un StatefulSet simple que hace referencia 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
¿Qué sigue?
- Obtén más información sobre los conceptos de almacenamiento de GKE.