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
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.
|
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.
|
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.
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. |
|
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. |
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.