Los clústeres de GKE en AWS implementan automáticamente el controlador de Container Storage Interface (CSI) para Amazon Elastic Block Store (EBS) con el objetivo de aprovisionar y administrar volúmenes de Amazon EBS en tus clústeres.
La versión del controlador de CSI de EBS de GKE en AWS está vinculada a una versión de Kubernetes de GKE en AWS. La versión del controlador suele ser la más reciente disponible en el momento en que se lanza la versión de GKE. Cuando se actualiza el clúster, los controladores se actualizan de forma automática.
Cómo usar la StorageClass predeterminada
La creación de una PersistentVolumeClaim sin el campo spec.storageClassName aprovisiona un volumen gp2 mediante la StorageClass predeterminada del controlador de CSI de EBS de GKE en AWS.
El siguiente YAML crea una PersistentVolumeClaim (PVC) llamada mypvc con un tamaño de 30 gibibytes.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mypvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 30Gi
Cómo usar una StorageClass preinstalada diferente
El controlador de CSI de EBS de GKE en AWS también incluye la StorageClass premium-rwo, que aprovisiona volúmenes io1 de mayor capacidad de procesamiento.
Puedes usarlo si lo especificas en el spec.storageclassName de la PVC.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mypvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 30Gi
storageclassName: premium-rwo
Cómo usar una StorageClass personalizada
Puedes crear StorageClasses adicionales para volúmenes de EBS o usar controladores de la interfaz de almacenamiento de contenedores (CSI).
Elige si usarás un volumen de EBS o un controlador de CSI específico.
Volumen de EBS
Puedes crear tu propia StorageClass personalizada que especifique un tipo de volumen de EBS, un tipo de sistema de archivos y otros parámetros. Puedes encontrar parámetros adicionales de StorageClass en la página de GitHub del controlador de CSI de EBS de GKE en AWS.
Para configurar una StorageClass personalizada, copia el siguiente manifiesto YAML en un archivo llamado
my-custom-class.yaml.apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: CLASS_NAME provisioner: ebs.csi.aws.com volumeBindingMode: WaitForFirstConsumerReemplaza
CLASS_NAMEpor el nombre de tu StorageClass nueva.Por ejemplo, el siguiente YAML crea una nueva StorageClass que aprovisiona volúmenes de EBS de HDD con capacidad de procesamiento optimizada formateados con el sistema de archivos XFS.
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: my-custom-class provisioner: ebs.csi.aws.com volumeBindingMode: WaitForFirstConsumer parameters: csi.storage.k8s.io/fsType: xfs type: st1Controlador de CSI
Puedes especificar un controlador de CSI diferente en el campo
provisioner.Para crear una StorageClass con otro controlador de CSI, puedes usar el siguiente ejemplo de YAML.
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: CLASS_NAME provisioner: CSI_DRIVER_NAME volumeBindingMode: WaitForFirstConsumer parameters: ...Reemplaza lo siguiente:
CSI_DRIVER_NAMEcon el nombre del controlador de CSI, por ejemplo,csi.example.comCLASS_NAMEcon el nombre de la StorageClass, por ejemplo,my-custom-class
Configura los subcampos en
parameterssegún tu controlador de CSI.Aplica el YAML a tu clúster.
kubectl apply -f my-custom-class.yaml
Cómo crear una PersistentVolumeClaim con una StorageClass personalizada
Una vez que se crea una StorageClass personalizada, puedes especificarla en una PVC. En el siguiente ejemplo, se crea una PVC llamada
my-pvcque hace referencia a la StorageClassmy-custom-class.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 30Gi storageclassName: my-custom-class
Cómo configurar la StorageClass predeterminada
GKE en AWS usa una StorageClass predeterminada llamada standard-rwo que aprovisiona volúmenes de EBS gp2. Puedes cambiar la StorageClass predeterminada a otra.
Para cambiar la StorageClass predeterminada, haz lo siguiente:
Actualiza la anotación
is-default-classpara la StorageClassstandard-rwoconkubectl patch.kubectl patch storageclass standard-rwo -p \ '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'Crea una StorageClass nueva que tenga la anotación
storageclass.kubernetes.io/is-default-class: true.En el siguiente ejemplo de StorageClass, se usa el controlador
ebs.csi.aws.com. Para instalar otro controlador de almacenamiento, consulta Instala un controlador CSI.Copia el siguiente YAML en un archivo llamado
my-custom-class.yaml.apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: CLASS_NAME annotations: storageclass.kubernetes.io/is-default-class: true provisioner: ebs.csi.aws.com volumeBindingMode: WaitForFirstConsumer parameters: type: EBS_VOLUME_TYPEReemplaza lo siguiente:
EBS_VOLUME_TYPE: el tipo de volumen de EBS de AWS que crea la StorageClass.CLASS_NAMEcon el nombre de tu StorageClass nueva
Por ejemplo, el siguiente YAML crea una nueva StorageClass predeterminada que aprovisiona volúmenes de EBS de HDD con capacidad de procesamiento optimizada con el sistema de archivos XFS.
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: my-custom-default-class annotations: storageclass.kubernetes.io/is-default-class: "true" provisioner: ebs.csi.aws.com volumeBindingMode: WaitForFirstConsumer parameters: csi.storage.k8s.io/fsType: xfs type: st1Aplica la nueva clase personalizada a tu clúster.
kubectl apply -f my-custom-class.yaml
Después de aplicar este manifiesto, GKE en AWS usa la StorageClass my-custom-default-class para las solicitudes de almacenamiento nuevas.
Haz referencia al StorageClass en un StatefulSet
Para usar la StorageClass nueva, debes hacer referencia a ella en un volumeClaimTemplates de StatefulSet.
Cuando haces referencia a la StorageClass en la especificación volumeClaimTemplates de StatefulSet, Kubernetes proporciona almacenamiento estable mediante PersistentVolumes (PV).
Kubernetes llama al aprovisionador definido en la StorageClass para crear un volumen de almacenamiento nuevo. Una vez que se aprovisiona el volumen, Kubernetes crea un PV de forma automática.
El siguiente StatefulSet hace referencia a la StorageClass my-custom-class y aprovisiona un volumen de 1 gibibyte:
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web
spec:
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: my-custom-class # This field references the existing StorageClass
¿Qué sigue?
Obtén más información sobre los volúmenes persistentes en GKE.
Instala los controladores de almacenamiento en tu clúster de GKE en AWS.
Implementa tu primera carga de trabajo con la guía de inicio rápido.