GKE on AWS despliega automáticamente la interfaz de almacenamiento de contenedores (CSI) Amazon Elastic Block Store (EBS) y Amazon Elastic File Store (EFS).
Las versiones del controlador de CSI de EBS y del controlador de CSI de EFS están vinculadas a una versión de Kubernetes de GKE en AWS. La versión del controlador suele ser la más reciente disponible cuando se lanza una versión de GKE. Cuando se actualiza el clúster, los controladores se actualizan automáticamente.
Usar la clase de almacenamiento predeterminada
Si creas un PersistentVolumeClaim sin el campo spec.storageClassName
, se aprovisiona un volumen de SSD de uso general (gp2) con la StorageClass predeterminada del controlador CSI de EBS de GKE en AWS.
El siguiente archivo YAML crea una reclamación de volumen persistente (PVC) llamada mypvc
con un tamaño de 30 gibibytes.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mypvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 30Gi
Usar un StorageClass preinstalado diferente
El controlador de CSI de EBS de GKE en AWS también incluye la premium-rwo
StorageClass, que aprovisiona volúmenes de SSD con IOPS aprovisionados (io1
) con un mayor rendimiento.
Para usarlo, especifícalo en el spec.storageClassName
del PVC.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mypvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 30Gi
storageClassName: premium-rwo
Usar un StorageClass personalizado
Si ni la clase de almacenamiento predeterminada ni la premium-rwo
StorageClass se ajustan a tus necesidades, puedes crear StorageClasses adicionales para volúmenes de EBS o usar controladores de interfaz de almacenamiento de contenedores (CSI).
Elige si vas a usar un volumen de EBS u otro controlador de CSI.
Volumen de EBS
En esta pestaña se describe cómo 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 allowVolumeExpansion: true volumeBindingMode: WaitForFirstConsumer
Sustituye
CLASS_NAME
por el nombre de tu nuevo StorageClass.Por ejemplo, el siguiente archivo YAML crea una StorageClass que aprovisiona volúmenes de EBS HDD optimizado para el rendimiento formateados con el sistema de archivos XFS.
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: my-custom-class provisioner: ebs.csi.aws.com allowVolumeExpansion: true volumeBindingMode: WaitForFirstConsumer parameters: csi.storage.k8s.io/fsType: xfs type: st1
StorageClass de EFS personalizado
En esta pestaña se describe cómo crear un StorageClass personalizado para el aprovisionador del controlador CSI de EFS. Consulta la sección Usar un recurso de EFS para ver una lista de los requisitos previos de esta StorageClass. En la página del controlador CSI de EFS se enumeran parámetros de StorageClass adicionales a los que se incluyen en el siguiente manifiesto.
Copia el siguiente manifiesto YAML en un archivo llamado
my-custom-class.yaml
.kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: <var>EFS_STORAGE_CLASS_NAME</var> provisioner: efs.csi.aws.com mountOptions: - tls parameters: provisioningMode: efs-ap fileSystemId: EFS_ID directoryPerms: "700"
Sustituye:
- EFS_STORAGE_CLASS_NAME con el nombre de
StorageClass
. - EFS_ID con el ID de tu sistema de archivos EFS (por ejemplo, fs-12345678a).
Controlador CSI
Puedes especificar otro controlador CSI en el campo
provisioner
.Para crear un StorageClass con otro controlador CSI, puedes usar el ejemplo de YAML que se muestra a continuación.
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: CLASS_NAME provisioner: CSI_DRIVER_NAME allowVolumeExpansion: true volumeBindingMode: WaitForFirstConsumer parameters: ...
Haz los cambios siguientes:
CSI_DRIVER_NAME
con el nombre del controlador de CSI. Por ejemplo,csi.example.com
CLASS_NAME
con el nombre de StorageClass. Por ejemplo,my-custom-class
Configura los subcampos de
parameters
según tu controlador de CSI.- EFS_STORAGE_CLASS_NAME con el nombre de
Aplica el archivo YAML a tu clúster.
kubectl apply -f my-custom-class.yaml
Crear un PersistentVolumeClaim con un StorageClass personalizado
Una vez que se haya creado un StorageClass personalizado, puedes especificarlo en un PVC. En el ejemplo siguiente se crea un PVC llamado
my-pvc
que hace referencia a StorageClassmy-custom-class
.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 30Gi storageClassName: my-custom-class
Definir la clase de almacenamiento predeterminada
GKE on AWS usa una StorageClass predeterminada llamada
standard-rwo
que aprovisiona
volúmenes de EBS gp2. Puedes cambiar el valor predeterminado por otra StorageClass.
Para cambiar la clase de almacenamiento predeterminada, sigue estos pasos:
Actualiza la anotación
is-default-class
destandard-rwo
StorageClass conkubectl patch
.kubectl patch storageclass standard-rwo -p \ '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'
Crea un StorageClass 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 Instalar otros controladores de CSI.Copia el siguiente código 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 allowVolumeExpansion: true volumeBindingMode: WaitForFirstConsumer parameters: type: EBS_VOLUME_TYPE
Haz los cambios siguientes:
EBS_VOLUME_TYPE
: el tipo de volumen de EBS de AWS que crea StorageClass.CLASS_NAME
con el nombre de tu nuevo StorageClass
Por ejemplo, el siguiente archivo YAML crea una clase de almacenamiento predeterminada que aprovisiona volúmenes SSD de uso general (gp3).
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 allowVolumeExpansion: true volumeBindingMode: WaitForFirstConsumer parameters: type: gp3
Aplica la nueva clase personalizada a tu clúster.
kubectl apply -f my-custom-class.yaml
Después de aplicar este manifiesto, GKE on AWS usa la my-custom-default-class
StorageClass para las nuevas solicitudes de almacenamiento.
Hacer referencia a StorageClass en un StatefulSet
Para usar tu nuevo StorageClass, debes hacer referencia a él en el volumeClaimTemplates
de un StatefulSet.
Cuando haces referencia a una StorageClass en la volumeClaimTemplates
especificación de un StatefulSet, Kubernetes proporciona almacenamiento estable mediante PersistentVolumes (PVs).
Kubernetes llama al aprovisionador definido en StorageClass para crear un nuevo volumen de almacenamiento. Una vez aprovisionado el volumen, Kubernetes crea automáticamente un PV.
El siguiente StatefulSet hace referencia a my-custom-class
StorageClass y
proporciona 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
Siguientes pasos
Consulta información sobre los volúmenes persistentes y el aprovisionamiento dinámico en GKE.
Instala controladores de CSI adicionales en tu clúster de GKE en AWS.
Despliega tu primera carga de trabajo con la guía de inicio rápido.