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