Estos contenidos se han traducido de forma automática para su comodidad, pero Huawei Cloud no garantiza la exactitud de estos. Para consultar los contenidos originales, acceda a la versión en inglés.
Actualización más reciente 2024-09-10 GMT+08:00

StorageClass

Presentación

StorageClass describe la clasificación de tipos de almacenamiento en un clúster y se puede representar como una plantilla de configuración para crear los PV. Al crear un PVC o un PV, debe especificar StorageClass.

Como usuario, solo necesita especificar storageClassName al definir un PVC para crear automáticamente un PV y almacenamiento subyacente, lo que reduce significativamente la carga de trabajo de creación y mantenimiento de un PV.

Clases de almacenamiento predeterminadas de CCE

A partir de ahora, CCE proporciona clases de almacenamiento como csi-disk, csi-nas y csi-obs de forma predeterminada. Al definir un PVC, puede utilizar un storageClassName para crear automáticamente un PV del tipo correspondiente y crear automáticamente recursos de almacenamiento subyacentes.

Puede ejecutar el siguiente comando kubectl para consultar las clases de almacenamiento que admite CCE. Puede utilizar el complemento de CSI proporcionado por CCE para crear una clase de almacenamiento.

# kubectl get sc
NAME                PROVISIONER                     AGE
csi-disk            everest-csi-provisioner         17d          # Storage class for EVS disks
csi-nas             everest-csi-provisioner         17d          # Storage class for SFS 1.0 file systems
csi-obs             everest-csi-provisioner         17d          # Storage class for OBS buckets
csi-sfsturbo        everest-csi-provisioner         17d          # Storage class for SFS Turbo file systems
csi-local-topology  everest-csi-provisioner         17d          # Local PV
Cada clase de almacenamiento contiene los parámetros predeterminados usados para crear dinámicamente un PV. A continuación se muestra un ejemplo de clase de almacenamiento para los discos de EVS:
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: csi-disk
provisioner: everest-csi-provisioner
parameters:
  csi.storage.k8s.io/csi-driver-name: disk.csi.everest.io
  csi.storage.k8s.io/fstype: ext4
  everest.io/disk-volume-type: SAS
  everest.io/passthrough: 'true'
reclaimPolicy: Delete
allowVolumeExpansion: true
volumeBindingMode: Immediate

Parámetro

Descripción

provisioner

Especifica el proveedor de recursos de almacenamiento, que es el complemento más antiguo para CCE. Establezca este parámetro en everest-csi-provisioner.

parameters

Especifica los parámetros de almacenamiento, que varían según los tipos de almacenamiento.

reclaimPolicy

Especifica el valor de persistentVolumeReclaimPolicy para crear un PV. El valor puede ser Delete o Retain. Si no se especifica reclaimPolicy al crear un objeto de StorageClass, el valor predeterminado es Delete.

  • Delete: indica que un PV creado dinámicamente se destruirá automáticamente.
  • Retain: indica que un PV creado dinámicamente no se destruirá automáticamente.

allowVolumeExpansion

Especifica si el PV de esta clase de almacenamiento admite la expansión de capacidad dinámica. El valor predeterminado es false. La ampliación de la capacidad dinámica se implementa mediante el complemento de almacenamiento subyacente. Esto es solo un interruptor.

volumeBindingMode

Especifica el modo de enlace de volumen, es decir, el momento en que se crea dinámicamente un PV. El valor puede ser Immediate o WaitForFirstConsumer.

  • Immediate: la unión de PV y la creación dinámica se completan cuando se crea un PVC.
  • WaitForFirstConsumer: la unión y la creación de PV se retrasan. Los procesos de la creación y la unión de PV solo se ejecutan cuando el PVC se utiliza en la carga de trabajo.

mountOptions

Este campo debe ser compatible con el almacenamiento subyacente. Si este campo no se admite pero se especifica, se producirá un error en la creación de PV.

Escenarios de aplicaciones de almacenamiento personalizado

Cuando se utilizan recursos de almacenamiento en CCE, el método más común es especificar storageClassName para definir el tipo de recursos de almacenamiento que se crearán al crear un PVC. La siguiente configuración muestra cómo utilizar un PVC para solicitar un disco de EVS SAS (capacidad alta de E/S) (almacenamiento en bloque).

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-evs-example
  namespace: default
  annotations:
    everest.io/disk-volume-type: SAS
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
  storageClassName: csi-disk

Si necesita especificar el tipo de disco de EVS en CCE, utilice el campo everest.io/disk-volume-type. SAS indica el tipo del disco de EVS.

Lo anterior es un método básico de usar StorageClass. En escenarios del mundo real, puede usar StorageClass para realizar otras operaciones.

Escenario de aplicación

Solución

Procedimiento

Cuando se utiliza annotations para especificar la configuración de almacenamiento, la configuración es compleja. Por ejemplo, el campo everest.io/disk-volume-type se utiliza para especificar el tipo del disco de EVS.

Defina las anotaciones de PVC en el campo parameters de StorageClass. Al compilar un archivo YAML, solo tiene que especificar storageClassName.

Por ejemplo, puede definir el disco de EVS SAS y el disco EVS SSD como una clase de almacenamiento, respectivamente. Si se define una clase de almacenamiento denominada csi-disk-sas, se utiliza para crear el almacenamiento de SAS.

Clase de almacenamiento personalizado

Cuando un usuario migra servicios desde un clúster de Kubernetes creado automáticamente u otros servicios de Kubernetes a CCE, la clase de almacenamiento utilizada en el archivo YAML de la aplicación original es diferente de la utilizada en CCE. Como resultado, un gran número de archivos YAML o paquetes de gráficos Helm necesitan ser modificados cuando se utiliza el almacenamiento, que es complejo y propenso a errores.

Cree una clase de almacenamiento con el mismo nombre que en el archivo YAML de la aplicación original en la centralización de CCE. Después de la migración, no es necesario modificar el storageClassName en el archivo YAML de la aplicación.

Por ejemplo, la clase de almacenamiento de disco de EVS utilizada antes de la migración es disk-standard. Después de migrar servicios a un clúster de CCE, puede copiar el archivo YAML de la clase de almacenamiento csi-disk en el clúster de CCE, cambiar su nombre a disk-standard y crear otra clase de almacenamiento.

storageClassName debe especificarse en el archivo YAML para usar el almacenamiento. Si no es así, no se puede crear el almacenamiento.

Si establece el StorageClass predeterminado en el clúster, puede crear almacenamiento sin especificar el storageClassName en el archivo YAML.

Especificación de un StorageClass predeterminado

Clase de almacenamiento personalizado

Esta sección utiliza la clase de almacenamiento personalizado de discos de EVS como ejemplo para describir cómo definir el disco de EVS SAS y el disco de EVS SSD como una clase de almacenamiento, respectivamente. Por ejemplo, si define una clase de almacenamiento denominada csi-disk-sas que se utiliza para crear almacenamiento de SAS, las diferencias se muestran en la siguiente figura. Al compilar un archivo YAML, solo tiene que especificar storageClassName.

  • Puede personalizar una clase de almacenamiento de capacidad alta de E/S en un archivo YAML. Por ejemplo, el nombre csi-disk-sas indica que el tipo de disco es SAS (capacidad alta de E/S).
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: csi-disk-sas                          # Name of the high I/O storage class, which can be customized.
    parameters:
      csi.storage.k8s.io/csi-driver-name: disk.csi.everest.io
      csi.storage.k8s.io/fstype: ext4
       everest.io/disk-volume-type: SAS            # High I/O EVS disk type, which cannot be customized.
      everest.io/passthrough: "true"
    provisioner: everest-csi-provisioner
    reclaimPolicy: Delete
    volumeBindingMode: Immediate
    allowVolumeExpansion: true                    # true indicates that capacity expansion is allowed.
  • Para una clase de almacenamiento de capacidad ultraalta de E/S, puede establecer el nombre de la clase en csi-disk-ssd para crear un disco de EVS SSD (capacidad ultraalta de E/S).
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: csi-disk-ssd                       # Name of the ultra-high I/O storage class, which can be customized.
    parameters:
      csi.storage.k8s.io/csi-driver-name: disk.csi.everest.io
      csi.storage.k8s.io/fstype: ext4
      everest.io/disk-volume-type: SSD         # Ultra-high I/O EVS disk type, which cannot be customized.
      everest.io/passthrough: "true"
    provisioner: everest-csi-provisioner
    reclaimPolicy: Delete
    volumeBindingMode: Immediate
    allowVolumeExpansion: true

reclaimPolicy: indica las políticas de recuperación del almacenamiento en la nube subyacente. El valor puede ser Delete o Retain.

  • Delete: Cuando se elimina un PVC, se eliminan tanto el PV como el disco de EVS.
  • Retain: Cuando se elimina un PVC, el PV y los recursos de almacenamiento subyacentes no se eliminan. En su lugar, debe eliminar manualmente estos recursos. Después de eso, el PV está en el estado Released y no puede estar ligado al PVC de nuevo.

Si se requiere una alta seguridad de los datos, se recomienda seleccionar Retain para evitar que los datos se eliminen por error.

Una vez completada la definición, ejecute los comandos kubectl create para crear recursos de almacenamiento.

# kubectl create -f sas.yaml
storageclass.storage.k8s.io/csi-disk-sas created
# kubectl create -f ssd.yaml
storageclass.storage.k8s.io/csi-disk-ssd created

Consulte StorageClass de nuevo. El resultado del comando es el siguiente:

# kubectl get sc
NAME                PROVISIONER                     AGE
csi-disk            everest-csi-provisioner         17d
csi-disk-sas        everest-csi-provisioner         2m28s
csi-disk-ssd        everest-csi-provisioner         16s
csi-disk-topology   everest-csi-provisioner         17d
csi-nas             everest-csi-provisioner         17d
csi-obs             everest-csi-provisioner         17d
csi-sfsturbo        everest-csi-provisioner         17d

Especificación de un StorageClass predeterminado

Puede especificar una clase de almacenamiento como clase predeterminada. De esta manera, si no especifica storageClassName al crear un PVC, el PVC se crea utilizando la clase de almacenamiento predeterminada.

Por ejemplo, para especificar csi-disk-ssd como la clase de almacenamiento predeterminada, edite el archivo YAML de la siguiente manera:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: csi-disk-ssd
  annotations:
    storageclass.kubernetes.io/is-default-class: "true"   # Specifies the default storage class in a cluster. A cluster can have only one default storage class.
parameters:
  csi.storage.k8s.io/csi-driver-name: disk.csi.everest.io
  csi.storage.k8s.io/fstype: ext4
  everest.io/disk-volume-type: SSD
  everest.io/passthrough: "true"
provisioner: everest-csi-provisioner
reclaimPolicy: Delete
volumeBindingMode: Immediate
allowVolumeExpansion: true

Elimine el disco csi-disk-ssd creado, ejecute el comando kubectl create para crear un disco csi-disk-ssd de nuevo y, a continuación, consulte la clase de almacenamiento. La siguiente información aparecerá en la pantalla.

# kubectl delete sc csi-disk-ssd
storageclass.storage.k8s.io "csi-disk-ssd" deleted
# kubectl create -f ssd.yaml
storageclass.storage.k8s.io/csi-disk-ssd created
# kubectl get sc
NAME                     PROVISIONER                     AGE
csi-disk                 everest-csi-provisioner         17d
csi-disk-sas             everest-csi-provisioner         114m
csi-disk-ssd (default)   everest-csi-provisioner         9s
csi-disk-topology        everest-csi-provisioner         17d
csi-nas                  everest-csi-provisioner         17d
csi-obs                  everest-csi-provisioner         17d
csi-sfsturbo             everest-csi-provisioner         17d

Especificación de un proyecto de empresa para clases de almacenamiento

CCE permite especificar un proyecto de empresa al crear discos de EVS y PVC de OBS. Los recursos de almacenamiento creados (discos de EVS y OBS) pertenecen al proyecto de empresa especificado. El proyecto de empresa puede ser el proyecto de empresa al que pertenece el cluster o el proyecto de empresa por defecto.

Si no especifica ningún proyecto de empresa, el proyecto de empresa de StorageClass se utiliza de forma predeterminada. Los recursos de almacenamiento creados mediante las clases de almacenamiento csi-disk y csi-obs de CCE pertenecen al proyecto de empresa predeterminado.

Si desea que los recursos de almacenamiento creados a partir de las clases de almacenamiento estén en el mismo proyecto de empresa que el clúster, puede personalizar una clase de almacenamiento y especificar el ID del proyecto de empresa, como se muestra a continuación.

Para utilizar esta función, el complemento everest debe actualizarse a 1.2.33 o posterior.

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: csi-disk-epid      #Customize a storage class name.
provisioner: everest-csi-provisioner
parameters:
  csi.storage.k8s.io/csi-driver-name: disk.csi.everest.io
  csi.storage.k8s.io/fstype: ext4
  everest.io/disk-volume-type: SAS
  everest.io/enterprise-project-id: 86bfc701-9d9e-4871-a318-6385aa368183  #Specify the enterprise project ID.
  everest.io/passthrough: 'true'
reclaimPolicy: Delete
allowVolumeExpansion: true
volumeBindingMode: Immediate

Verificación

  • Utilice csi-disk-sas para crear un PVC.
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name:  sas-disk
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 10Gi
      storageClassName: csi-disk-sas

    Cree una clase de almacenamiento y vea sus detalles. Como se muestra a continuación, el objeto se puede crear y el valor de STORAGECLASS es csi-disk-sas.

    # kubectl create -f sas-disk.yaml 
    persistentvolumeclaim/sas-disk created
    # kubectl get pvc
    NAME       STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    sas-disk   Bound    pvc-6e2f37f9-7346-4419-82f7-b42e79f7964c   10Gi       RWO            csi-disk-sas   24s
    # kubectl get pv
    NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM                     STORAGECLASS   REASON   AGE
    pvc-6e2f37f9-7346-4419-82f7-b42e79f7964c   10Gi       RWO            Delete           Bound       default/sas-disk          csi-disk-sas            30s

    Vea los detalles de PVC en la consola de CCE. En la página de detalles de PV, puede ver que el tipo de disco es con capacidad alta de E/S.

  • Si no se especifica storageClassName, se utiliza la configuración predeterminada, como se muestra a continuación.
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name:  ssd-disk
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 10Gi

    Cree y vea el recurso de almacenamiento. Puede ver que la clase de almacenamiento de PVC ssd-disk es csi-disk-ssd, lo que indica que csi-disk-ssd se usa de forma predeterminada.

    # kubectl create -f ssd-disk.yaml 
    persistentvolumeclaim/ssd-disk created
    # kubectl get pvc
    NAME       STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    sas-disk   Bound    pvc-6e2f37f9-7346-4419-82f7-b42e79f7964c   10Gi       RWO            csi-disk-sas   16m
    ssd-disk   Bound    pvc-4d2b059c-0d6c-44af-9994-f74d01c78731   10Gi       RWO            csi-disk-ssd   10s
    # kubectl get pv
    NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM                     STORAGECLASS   REASON   AGE
    pvc-4d2b059c-0d6c-44af-9994-f74d01c78731   10Gi       RWO            Delete           Bound       default/ssd-disk          csi-disk-ssd            15s
    pvc-6e2f37f9-7346-4419-82f7-b42e79f7964c   10Gi       RWO            Delete           Bound       default/sas-disk          csi-disk-sas            17m

    Vea los detalles de PVC en la consola de CCE. En la página de detalles del PV, puede ver que el tipo de disco es con capacidad ultraalta de E/S.