Este conteúdo foi traduzido por máquina para sua conveniência e a Huawei Cloud não pode garantir que o conteúdo foi traduzido com precisão. Para exibir o conteúdo original, use o link no canto superior direito para mudar para a página em inglês.
Atualizado em 2024-11-28 GMT+08:00

StorageClass

Introdução

StorageClass descreve a classificação dos tipos de armazenamento em um cluster e pode ser representado como um modelo de configuração para criar PVs. Ao criar uma PVC ou PV, especifique StorageClass.

Como usuário, você só precisa especificar storageClassName ao definir uma PVC para criar automaticamente um PV e armazenamento subjacente, reduzindo significativamente a carga de trabalho de criação e manutenção de um PV.

Classes de armazenamento padrão do CCE

A partir de agora, o CCE fornece classes de armazenamento como csi-disk, csi-nas e csi-obs por padrão. Ao definir uma PVC, você pode usar um storageClassName para criar automaticamente um PV do tipo correspondente e criar automaticamente recursos de armazenamento subjacentes.

Execute o seguinte comando kubectl para obter as classes de armazenamento que o CCE suporta. Use o complemento CSI fornecido pelo CCE para criar uma classe de armazenamento.

# kubectl get sc
NAME                PROVISIONER                     AGE
csi-disk            everest-csi-provisioner         17d          # EVS disk
csi-disk-topology   everest-csi-provisioner         17d          # EVS disks created with delayed
csi-nas             everest-csi-provisioner         17d          # SFS 1.0
csi-obs             everest-csi-provisioner         17d          # OBS
csi-sfsturbo        everest-csi-provisioner         17d          # SFS Turbo
csi-local           everest-csi-provisioner         17d          # Local PV
csi-local-topology  everest-csi-provisioner         17d          # Local PV created with delay
Cada classe de armazenamento contém os parâmetros padrão usados para criar dinamicamente um PV. Veja a seguir um exemplo de classe de armazenamento para discos 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

Descrição

provisioner

Especifica o provedor de recursos de armazenamento, que é o complemento everest para CCE. Defina este parâmetro como everest-csi-provisioner.

parameters

Especifica os parâmetros de armazenamento, que variam de acordo com os tipos de armazenamento.

reclaimPolicy

Especifica o valor de persistentVolumeReclaimPolicy para criar um PV. O valor pode ser Delete ou Retain. Se reclaimPolicy não for especificada quando um objeto de StorageClass for criado, o valor padrão será Delete.

  • Delete: indica que um PV criado dinamicamente será destruído automaticamente.
  • Retain: indica que um PV criado dinamicamente não será destruído automaticamente.

allowVolumeExpansion

Especifica se o PV desta classe de armazenamento suporta expansão de capacidade dinâmica. O valor padrão é false. A expansão de capacidade dinâmica é implementada pelo complemento de armazenamento subjacente. Este é apenas um interruptor.

volumeBindingMode

Especifica o modo de vinculação de volume, ou seja, o momento em que um PV é criado dinamicamente. O valor pode ser Immediate ou WaitForFirstConsumer.

  • Immediate: a vinculação e a criação dinâmica de PV são concluídas quando uma PVC é criada.
  • WaitForFirstConsumer: a vinculação e a criação do PV são atrasadas. Os processos de criação e encadernação de PV são executados somente quando a PVC é usada na carga de trabalho.

mountOptions

Este campo deve ser suportado pelo armazenamento subjacente. Se este campo não for suportado, mas for especificado, a criação do PV falhará.

Cenários de aplicações de armazenamento personalizado

Ao usar recursos de armazenamento no CCE, o método mais comum é especificar storageClassName para definir o tipo de recursos de armazenamento a serem criados ao criar uma PVC. A configuração a seguir mostra como usar uma PVC para solicitar um disco EVS (bloco de armazenamento) SAS (I/O alta).

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

Para especificar o tipo de disco EVS no CCE, use o campo everest.io/disk-volume-type. SAS indica o tipo de disco EVS.

O anterior é um método básico de usar StorageClass. Em cenários do mundo real, você pode usar a StorageClass para executar outras operações.

Cenário de aplicação

Solução

Procedimento

Quando anotações são usadas para especificar a configuração de armazenamento, a configuração é complexa. Por exemplo, o campo everest.io/disk-volume-type é usado para especificar o tipo de disco EVS.

Defina anotações de PVC no campo de parameters de StorageClass. Ao compilar um arquivo YAML, você só precisa especificar storageClassName.

Por exemplo, você pode definir o disco EVS SAS e o disco EVS SSD como uma classe de armazenamento, respectivamente. Se uma classe de armazenamento chamada csi-disk-sas for definida, ela será usada para criar armazenamento SAS.

Classe de armazenamento personalizada

Quando um usuário migra serviços de um cluster do Kubernetes criado automaticamente ou de outros serviços do Kubernetes para o CCE, a classe de armazenamento usada no arquivo YAML da aplicação original é diferente daquela usada no CCE. Como resultado, um grande número de arquivos YAML ou pacotes de gráficos Helm precisam ser modificados quando o armazenamento é usado, o que é complexo e propenso a erros.

Crie uma classe de armazenamento com o mesmo nome do arquivo YAML da aplicação original na centralização do CCE. Após a migração, não é necessário modificar o storageClassName no arquivo YAML da aplicação.

Por exemplo, a classe de armazenamento em disco EVS usada antes da migração é disk-standard. Depois de migrar serviços para um cluster do CCE, você pode copiar o arquivo YAML da classe de armazenamento csi-disk no cluster do CCE, alterar seu nome para disk-standard e criar outra classe de armazenamento.

storageClassName deve ser especificado no arquivo YAML para usar o armazenamento. Caso contrário, o armazenamento não pode ser criado.

Se você definir a StorageClass padrão no cluster, poderá criar armazenamento sem especificar storageClassName no arquivo YAML.

Especificação de uma classe de armazenamento padrão

Classe de armazenamento personalizada

Esta seção usa a classe de armazenamento personalizada de discos EVS como um exemplo para descrever como definir o disco EVS SAS e o disco EVS SSD como uma classe de armazenamento, respectivamente. Por exemplo, se você definir uma classe de armazenamento chamada csi-disk-sas, que é usada para criar armazenamento SAS, as diferenças serão mostradas na figura a seguir. Ao compilar um arquivo YAML, você só precisa especificar storageClassName.

  • Você pode personalizar uma classe de armazenamento de alta I/O em um arquivo YAML. Por exemplo, o nome csi-disk-sas indica que o tipo de disco é SAS (alta I/O).
    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 uma classe de armazenamento de I/O ultra-alta, você pode definir o nome da classe como csi-disk-ssd para criar um disco EVS SSD (I/O ultra-alta).
    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 as políticas de recuperação do armazenamento em nuvem subjacente. O valor pode ser Delete ou Retain.

  • Delete: quando uma PVC é excluída, ambos o PV e o disco EVS são excluídos.
  • Retain: quando uma PVC é excluída, o PV e os recursos de armazenamento subjacentes não são excluídos. Em vez disso, você deve excluir manualmente esses recursos. Depois disso, o PV está no estado Released e não pode ser vinculado à PVC novamente.

Se for necessária uma alta segurança de dados, selecione Retain para impedir que os dados sejam excluídos por engano.

Após a conclusão da definição, execute os comandos kubectl create para criar recursos de armazenamento.

# 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 novamente. A saída do comando é a seguinte:

# 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

Especificação de uma classe de armazenamento padrão

Você pode especificar uma classe de armazenamento como a classe padrão. Dessa forma, se você não especificar storageClassName ao criar um PVC, o PVC será criado usando a classe de armazenamento padrão.

Por exemplo, para especificar csi-disk-ssd como a classe de armazenamento padrão, edite seu arquivo YAML da seguinte forma:

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

Exclua o disco csi-disk-ssd criado, execute o comando kubectl create para criar um disco csi-disk-ssd novamente e, em seguida, consulte a classe de armazenamento. As seguintes informações são exibidas.

# 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

Especificação de um projeto empresarial para classes de armazenamento

O CCE permite especificar um projeto empresarial ao criar discos EVS e PVCs do OBS. Os recursos de armazenamento criados (discos do EVS e do OBS) pertencem ao projeto empresarial especificado. O projeto empresarial pode ser o projeto empresarial ao qual o cluster pertence ou o projeto empresarial padrão.

Se você não especificar nenhum projeto empresarial, o projeto empresarial em StorageClass será usado por padrão. Os recursos de armazenamento criados usando as classes de armazenamento csi-disk e csi-obs do CCE pertencem ao projeto empresarial padrão.

Se desejar que os recursos de armazenamento criados a partir das classes de armazenamento estejam no mesmo projeto empresarial que o cluster, você poderá personalizar uma classe de armazenamento e especificar o ID do projeto empresarial, conforme mostrado abaixo.

Para usar essa função, o complemento everest deve ser atualizado para a versão 1.2.33 ou 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

Verificação

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

    Crie uma classe de armazenamento e exiba seus detalhes. Como mostrado abaixo, o objeto pode ser criado e o valor de STORAGECLASS é 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

    Veja os detalhes do PVC no console do CCE. Na página de detalhes do PV, você pode ver que o tipo de disco é de I/O alta.

  • Se storageClassName não for especificado, a configuração padrão será usada, conforme mostrado abaixo.
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name:  ssd-disk
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 10Gi

    Crie e visualize o recurso de armazenamento. Você pode ver que a classe de armazenamento do PVC ssd-disk é csi-disk-ssd, indicando que o csi-disk-ssd é usado por padrão.

    # 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

    Veja os detalhes do PVC no console do CCE. Na página de detalhes do PV, você pode ver que o tipo de disco é de I/O ultra-alta.