GKE en AWS implementa automáticamente el controlador de interfaz de almacenamiento de contenedores (CSI) para Amazon Elastic Block Store (EBS) para aprovisionar y administrar volúmenes de Amazon EBS en sus clústeres.
La versión del controlador CSI de GKE en AWS EBS está vinculada a una versión de GKE en AWS Kubernetes. La versión del controlador suele ser la más reciente disponible cuando se lanza la versión de GKE. Al actualizar el clúster, los controladores se actualizan automáticamente.
Cómo utilizar la clase de almacenamiento predeterminada
La creación de un PersistentVolumeClaim sin el campo spec.storageClassName
establecido aprovisiona un volumen gp2
mediante el GKE predeterminado en el controlador CSI StorageClass de AWS EBS.
El siguiente YAML crea un PersistentVolumeClaim (PVC) llamado mypvc
con un tamaño de 30 gibibytes.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mypvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 30Gi
Cómo utilizar una clase de almacenamiento preinstalada diferente
El controlador CSI de GKE en AWS EBS también incluye la clase de almacenamiento premium-rwo
, que aprovisiona volúmenes io1
de mayor rendimiento.
Puede usarlo especificándolo en spec.storageclassName
del PVC.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mypvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 30Gi
storageclassName: premium-rwo
Cómo utilizar una StorageClass personalizada
Puede crear StorageClasses adicionales para volúmenes EBS o utilizar controladores de interfaz de almacenamiento de contenedores (CSI).
Elija si está utilizando un volumen EBS o un controlador CSI específico.
Volumen EBS
Puedes crear tu propia StorageClass personalizada que especifique un tipo de volumen 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 CSI de GKE en AWS EBS.
Para configurar una StorageClass personalizada, copie 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: WaitForFirstConsumer
Reemplace
CLASS_NAME
con el nombre de su nueva StorageClass.Por ejemplo, el siguiente YAML crea una nueva StorageClass que aprovisiona volúmenes HDD EBS optimizados para 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 volumeBindingMode: WaitForFirstConsumer parameters: csi.storage.k8s.io/fsType: xfs type: st1
Conductor de CSI
Puede especificar un controlador CSI diferente en el campo de
provisioner
.Para crear una StorageClass con otro controlador CSI, puede utilizar el ejemplo YAML a continuación.
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: CLASS_NAME provisioner: CSI_DRIVER_NAME volumeBindingMode: WaitForFirstConsumer parameters: ...
Reemplace lo siguiente:
-
CSI_DRIVER_NAME
con el nombre del controlador CSI, por ejemplo,csi.example.com
-
CLASS_NAME
con el nombre de la StorageClass—por ejemplo,my-custom-class
Configure los subcampos en
parameters
de acuerdo con su controlador CSI.-
Aplique el YAML a su clúster.
kubectl apply -f my-custom-class.yaml
Cómo crear un PersistentVolumeClaim con una StorageClass personalizada
Una vez creada una StorageClass personalizada, puede especificarla en una PVC. El siguiente ejemplo crea una PVC llamada
my-pvc
que 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 clase de almacenamiento predeterminada
GKE en AWS usa una StorageClass predeterminada llamada standard-rwo
que aprovisiona volúmenes EBS gp2 . Puedes cambiar la StorageClass predeterminada a otra.
Para cambiar la clase de almacenamiento predeterminada:
Actualice la anotación
is-default-class
para la StorageClassstandard-rwo
conkubectl patch
.kubectl patch storageclass standard-rwo -p \ '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'
Cree una nueva StorageClass que tenga la anotación
storageclass.kubernetes.io/is-default-class: true
.El siguiente ejemplo de StorageClass utiliza el controlador
ebs.csi.aws.com
. Para instalar otro controlador de almacenamiento, consulte Instalación de un controlador CSI .Copie 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_TYPE
Reemplace lo siguiente:
-
EBS_VOLUME_TYPE
: el tipo de volumen de AWS EBS que crea StorageClass. -
CLASS_NAME
con el nombre de su nueva StorageClass
Por ejemplo, el siguiente YAML crea una nueva StorageClass predeterminada que aprovisiona volúmenes HDD EBS optimizados para rendimiento formateados 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: st1
-
Aplique la nueva clase personalizada a su clúster.
kubectl apply -f my-custom-class.yaml
Después de aplicar este manifiesto, GKE en AWS usa my-custom-default-class
StorageClass para nuevas solicitudes de almacenamiento.
Hacer referencia a StorageClass en un StatefulSet
Para utilizar su nueva StorageClass, debe hacer referencia a ella en un volumeClaimTemplates
de StatefulSet.
Al hacer referencia a una StorageClass en la especificación volumeClaimTemplates
de un StatefulSet, Kubernetes proporciona almacenamiento estable mediante PersistentVolumes (PV). Kubernetes llama al aprovisionador definido en la 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 la my-custom-class
StorageClass 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?
Obtenga información sobre los volúmenes persistentes en GKE .
Instale controladores de almacenamiento en su clúster de GKE en AWS.
Implemente su primera carga de trabajo con el inicio rápido .