

 **Ayude a mejorar esta página** 

Para contribuir a esta guía del usuario, elija el enlace **Edit this page on GitHub** que se encuentra en el panel derecho de cada página.

# Creación de una clase de almacenamiento
<a name="create-storage-class"></a>

Una `StorageClass` en el modo automático de EKS define cómo se aprovisionan automáticamente los volúmenes de Amazon EBS cuando las aplicaciones solicitan almacenamiento persistente. En esta página se explica cómo crear y configurar una `StorageClass` que funcione con el modo automático de Amazon EKS para aprovisionar volúmenes de EBS.

Al configurar una `StorageClass`, puede especificar la configuración predeterminada para los volúmenes de EBS, incluidos el tipo de volumen, el cifrado, las IOPS y otros parámetros de almacenamiento. También puede configurar `StorageClass` para que utilice claves de AWS KMS para la administración del cifrado.

El modo automático de EKS no crea una `StorageClass` en su nombre. Debe crear una `StorageClass` que haga referencia a `ebs.csi.eks.amazonaws.com` para utilizar la capacidad de almacenamiento del modo automático de EKS.

Primero, cree un archivo denominado `storage-class.yaml`:

```
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: auto-ebs-sc
  annotations:
    storageclass.kubernetes.io/is-default-class: "true"
allowedTopologies:
- matchLabelExpressions:
  - key: eks.amazonaws.com/compute-type
    values:
    - auto
provisioner: ebs.csi.eks.amazonaws.com
volumeBindingMode: WaitForFirstConsumer
parameters:
  type: gp3
  encrypted: "true"
```

En segundo lugar, aplique la clase de almacenamiento al clúster.

```
kubectl apply -f storage-class.yaml
```

 **Componentes principales:** 
+  `provisioner: ebs.csi.eks.amazonaws.com`: utiliza el modo automático de EKS
+  `allowedTopologies`: al especificar `matchLabelExpressions` para que coincida con `eks.amazonaws.com/compute-type:auto`, se asegurará de que los pods no se programarán en nodos no automáticos si sus pods necesitan que un volumen se aprovisione automáticamente con el Modo automático.
+  `volumeBindingMode: WaitForFirstConsumer`: retrasa la creación del volumen hasta que un pod lo necesite
+  `type: gp3`: especifica el tipo de volumen de EBS
+  `encrypted: "true"`: EBS cifrará todos los volúmenes creados con la `StorageClass`. EBS utilizará el alias de clave de `aws/ebs` predeterminado. Para obtener más información, consulte [Cómo funciona el cifrado de Amazon EBS](https://docs.aws.amazon.com/ebs/latest/userguide/how-ebs-encryption-works.html) en la Guía del usuario de Amazon EBS. Este valor es opcional, pero recomendado.
+  `storageclass.kubernetes.io/is-default-class: "true"`: Kubernetes utilizará esta clase de almacenamiento de forma predeterminada, a menos que se especifique una clase de volumen diferente en una reclamación de volumen persistente. Este valor es opcional. Tenga cuidado al establecer este valor si va a migrar desde un controlador de almacenamiento diferente.

## Utilice una clave de KMS autoadministrada para cifrar los volúmenes de EBS
<a name="_use_self_managed_kms_key_to_encrypt_ebs_volumes"></a>

Para utilizar una clave de KMS autoadministrada para cifrar los volúmenes de EBS automatizados mediante el modo automático de EKS, deberá:

1. Crear una clave de KMS autoadministrada.
   + Para obtener más información, consulte [Cómo crear una clave de KMS de cifrado simétrico](https://docs.aws.amazon.com/kms/latest/developerguide/create-symmetric-cmk.html) o [Cómo Amazon Elastic Block Store (Amazon EBS) usa KMS](https://docs.aws.amazon.com/kms/latest/developerguide/services-ebs.html) en la Guía del usuario de KMS.

1. Cree una nueva política que permita el acceso a la clave de KMS.
   + Utilice la política de IAM de muestra que aparece a continuación para crear la política. Inserte el ARN de la nueva clave de KMS autoadministrada. Para obtener más información, consulte [Cómo crear roles y asociar políticas (consola)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions_create-policies.html) en la Guía de usuario de IAM AWS.

1. Asocie la política al rol de clúster de EKS.
   + Utilice la consola de AWS para buscar el ARN del rol de clúster de EKS. La información del rol aparece en la sección **Descripción general**. Para obtener más información, consulte [Rol de IAM del clúster de Amazon EKS](cluster-iam-role.md).

1. Actualice la `StorageClass` de modo que haga referencia al ID de la clave de KMS en el campo `parameters.kmsKeyId`.

### Ejemplo de política de IAM de KMS autoadministrada
<a name="_sample_self_managed_kms_iam_policy"></a>

Actualice los siguientes valores de la política que aparece a continuación:
+  `<account-id>`: el ID de la cuenta de AWS, como `111122223333` 
+  `<aws-region>`: la región de AWS del clúster, como `us-west-2` 

```
{
  "Version":"2012-10-17",		 	 	 
  "Id": "key-auto-policy-3",
  "Statement": [
      {
          "Sid": "Enable IAM User Permissions",
          "Effect": "Allow",
          "Principal": {
              "AWS": "arn:aws:iam::123456789012:root"
          },
          "Action": "kms:*",
          "Resource": "*"
      },
      {
        "Sid": "Allow access through EBS for all principals in the account that are authorized to use EBS",
        "Effect": "Allow",
        "Principal": {
            "AWS": "*"
        },
        "Action": [
            "kms:Encrypt",
            "kms:Decrypt",
            "kms:ReEncrypt*",
            "kms:GenerateDataKey*",
            "kms:CreateGrant",
            "kms:DescribeKey"
        ],
        "Resource": "*",
        "Condition": {
            "StringEquals": {
                "kms:CallerAccount": "123456789012",
                "kms:ViaService": "ec2.us-east-1.amazonaws.com"
            }
        }
    }
  ]
}
```

### Ejemplo de `StorageClass` de KMS autoadministrada
<a name="_sample_self_managed_kms_storageclass"></a>

```
parameters:
  type: gp3
  encrypted: "true"
  kmsKeyId: <custom-key-arn>
```

## Referencia de los parámetros de `StorageClass`
<a name="_storageclass_parameters_reference"></a>

Para obtener información general sobre los recursos de `StorageClass` de Kubernetes, consulte [Clases de almacenamiento](https://kubernetes.io/docs/concepts/storage/storage-classes/) en la documentación de Kubernetes.

La sección `parameters` del recurso `StorageClass` es específica de AWS. Utilice la siguiente tabla para revisar las opciones disponibles.


| Parameters | Valores | Predeterminado | Descripción | 
| --- | --- | --- | --- | 
|  “csi.storage.k8s.io/fstype”  |  xfs, ext2, ext3, ext4  |  ext4  |  Tipo de sistema de archivos que se formateará durante la creación del volumen. Este parámetro distingue entre mayúsculas y minúsculas.  | 
|  “tipo”  |  io1, io2, gp2, gp3, sc1, st1, standard, sbp1, sbg1  |  gp3  |  Tipo de volumen de EBS.  | 
|  “iopsPerGB”  |  |  |  Operaciones de E/S por segundo por GiB. Se puede especificar para los volúmenes IO1, IO2 y GP3.  | 
|  “allowAutoIOPSPerGBIncrease”  |  true, false  |  false  |  Si es `"true"`, el controlador CSI aumenta las IOPS de un volumen si `iopsPerGB * <volume size>` es demasiado bajo para ajustarse en el rango de IOPS admitido por AWS. Esto permite que el aprovisionamiento dinámico siempre se realice correctamente, incluso si el usuario especifica una capacidad de PVC o un valor de `iopsPerGB` demasiado bajo. Por otro lado, esto puede generar costos adicionales, ya que dichos volúmenes tienen IOPS más altas que las solicitadas en `iopsPerGB`.  | 
|  “iops”  |  |  |  Operaciones de E/S por segundo. Se puede especificar para los volúmenes IO1, IO2 y GP3.  | 
|  “rendimiento”  |  |  125  |  El rendimiento se indica en MB/s. Solo es efectivo cuando se especifica el tipo de volumen gp3.  | 
|  “cifrado”  |  true, false  |  false  |  Especifica si el volumen debe estar cifrado o no. Los valores válidos son “verdadero” o “falso”.  | 
|  “blockExpress”  |  true, false  |  false  |  Habilita la creación de volúmenes io2 Block Express.  | 
|  “kmsKeyId”  |  |  |  El ARN completo de la clave que se va a utilizar al cifrar el volumen. Si no se especifica, AWS utilizará la clave de KMS predeterminada para la región en la que se encuentra el volumen. Será una clave generada automáticamente y se llamará `/aws/ebs`, si no se modifica.  | 
|  “blockSize”  |  |  |  El tamaño del bloque que se utilizará al formatear el sistema de archivos subyacente. Solo se admite en nodos de Linux y con fstype `ext2`, `ext3`, `ext4` o `xfs`.  | 
|  “inodeSize”  |  |  |  El tamaño del nodo de índice que se utilizará al formatear el sistema de archivos subyacente. Solo se admite en nodos de Linux y con fstype `ext2`, `ext3`, `ext4` o `xfs`.  | 
|  “bytesPerInode”  |  |  |  Los `bytes-per-inode` que se utilizarán al formatear el sistema de archivos subyacente. Solo se admite en nodos de Linux y con fstype `ext2`, `ext3` y `ext4`.  | 
|  “numberOfInodes”  |  |  |  Los `number-of-inodes` que se utilizarán al formatear el sistema de archivos subyacente. Solo se admite en nodos de Linux y con fstype `ext2`, `ext3` y `ext4`.  | 
|  “ext4BigAlloc”  |  true, false  |  false  |  Cambia el sistema de archivos `ext4` de modo que utilice la asignación de bloques en clústeres, para lo que habilita la opción de formateo `bigalloc`. Advertencia: es posible que `bigalloc` no sea completamente compatible con el núcleo de Linux del nodo.  | 
|  “ext4ClusterSize”  |  |  |  El tamaño del clúster que se utilizará al formatear un sistema de archivos `ext4`cuando la característica `bigalloc` esté habilitada. Nota: El parámetro `ext4BigAlloc` debe estar establecido en “verdadero”.  | 

Para obtener más información, consulte [Controlador de CSI de AWS EBS](https://github.com/kubernetes-sigs/aws-ebs-csi-driver/blob/master/docs/parameters.md) en GitHub.

## Consideraciones
<a name="_considerations"></a>

**nota**  
Solo puede implementar cargas de trabajo que dependan de las clases de almacenamiento del modo automático de EKS en los nodos del modo automático de EKS. Si tiene un clúster con varios tipos de nodos, debe configurar sus cargas de trabajo para que se ejecuten únicamente en los nodos del modo automático de EKS. Para obtener más información, consulte [Cómo controlar si una carga de trabajo se implementa en nodos del modo automático de EKS](associate-workload.md).

La capacidad de almacenamiento en bloques del modo automático de EKS es diferente a la del controlador de CSI de EBS.
+ Aprovisionamiento estático
  + Si desea utilizar volúmenes de EBS creados externamente con el modo automático de EKS, tendrá que agregar manualmente una etiqueta `eks:eks-cluster-name` con la clave AWS y el valor del nombre del clúster.
+ Taint de inicio de nodos
  + No puede usar la característica de taint de inicio de nodos para evitar la programación de pods antes de que la capacidad de almacenamiento esté lista.
+ Etiquetas personalizadas en volúmenes aprovisionados dinámicamente
  + No puede utilizar la marca de la CLI de etiquetas adicionales para configurar etiquetas personalizadas en volúmenes de EBS aprovisionados dinámicamente
  + Puede utilizar el etiquetado de `StorageClass` para agregar etiquetas personalizadas. El modo automático de EKS agregará etiquetas a los recursos de AWS asociados. Deberá actualizar el rol de IAM del clúster para las etiquetas personalizadas. Para obtener más información, consulte [Etiquetas personalizadas de AWS para los recursos del modo automático de EKS](auto-learn-iam.md#tag-prop).
+ Métricas de rendimiento detalladas de EBS
  + No puede acceder a las métricas de Prometheus para obtener el rendimiento detallado de EBS

## Instale el complemento de controlador de instantáneas de CSI
<a name="_install_csi_snapshot_controller_add_on"></a>

El modo automático de EKS es compatible con el complemento de Amazon EKS de controlador de instantáneas de CSI.

 AWS sugiere configurar este complemento para que se ejecute en el grupo de nodos del `system` integrado.

Para obtener más información, consulte:
+  [Ejecución de complementos esenciales en instancias dedicadas](critical-workload.md) 
+  [Cómo habilitar o desactivar los NodePools integrados](set-builtin-node-pools.md) 
+  [Habilitación de la funcionalidad de instantáneas para volúmenes de CSI](csi-snapshot-controller.md) 

### Para instalar el controlador de instantáneas en el grupo de nodos del sistema
<a name="auto-install-snapshot-controller"></a>

1. Abra el clúster de EKS en la consola de AWS

1. En la pestaña **Complementos**, seleccione **Obtener más complementos** 

1. Seleccione el **Controlador de instantáneas de CSI** y luego **Siguiente** 

1. En la página **Configuración de los ajustes de los complementos seleccionados**, seleccione **Ajustes de configuración opcionales** para ver el **Esquema de configuración del complemento** 

   1. Inserte el siguiente yaml para asociar el controlador de instantáneas al grupo de nodos del `system`. El controlador de instantáneas incluye una tolerancia a la taint `CriticalAddonsOnly`.

      ```
      {
              "nodeSelector": {
                  "karpenter.sh/nodepool": "system"
              }
      }
      ```

   1. Seleccione **Siguiente**. 

1. Revise la configuración del complemento y, a continuación, seleccione **Crear** 