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.
Central de ajuda/ Cloud Container Engine/ Guia de usuário/ Armazenamento/ Elastic Volume Service/ Uso de um disco EVS existente através de um PV estático
Atualizado em 2024-11-28 GMT+08:00

Uso de um disco EVS existente através de um PV estático

O CCE permite que você crie um PV usando um disco EVS existente. Depois que o PV é criado, você pode criar uma PVC e ligá-la ao PV. Esse modo se aplica a cenários em que o armazenamento subjacente está disponível ou é cobrado anualmente/mensalmente..

Pré-requisitos

  • Você criou um cluster e instalou o complemento Armazenamento do contêiner do CCE (Everest) no cluster.
  • Você criou um disco EVS que atende aos seguintes requisitos:
    • O disco EVS existente não pode ser um disco do sistema, um disco DSS ou um disco partilhado.
    • O tipo de dispositivo do disco EVS deve ser SCSI (o tipo de dispositivo padrão é VBD quando você compra um disco EVS).
    • O disco EVS deve estar disponível e não ser usado por outros recursos.
    • A AZ do disco EVS deve ser a mesma do nó do cluster. Caso contrário, o disco EVS não pode ser montado e o pod não pode iniciar.
    • Se o disco EVS estiver encriptado, a chave tem de estar disponível.
    • Somente os discos EVS no projeto empresarial ao qual o cluster pertence e o projeto empresarial padrão são suportados.
    • Discos EVS com partições ou sistemas de arquivos não ext4 não podem ser importados.
  • Se você quiser criar um cluster usando comandos, use kubectl para se conectar ao cluster. Para mais detalhes, consulte Conexão a um cluster usando o kubectl.

Restrições

  • Os discos EVS não podem ser conectados em AZs e não podem ser usados por várias cargas de trabalho, vários pods da mesma carga de trabalho ou várias tarefas. O compartilhamento de dados de um disco compartilhado não é suportado entre nós em um cluster do CCE. Se um disco EVS for atacado a vários nós, podem ocorrer conflitos de I/O e conflitos de cache de dados. Portanto, crie apenas um pod ao criar uma Implementação que use discos EVS.
  • Para clusters anteriores à v1.19.10, se uma política HPA for usada para expandir uma carga de trabalho com discos EVS anexados, os pods existentes não poderão ser lidos ou gravados quando um novo pod for agendado para outro nó.

    Para clusters de v1.19.10 e posterior, se uma política HPA for usada para expandir uma carga de trabalho com discos EVS anexados, um novo pod não poderá ser iniciado porque os discos EVS não podem ser anexados.

Usar um disco EVS existente no console

  1. Efetue logon no console do CCE e clique no nome do cluster para acessar o console do cluster.
  2. Crie estaticamente uma PVC e PV.

    1. Escolha Storage no painel de navegação e clique na guia PersistentVolumeClaims (PVCs). Clique em Create PVC no canto superior direito. Na caixa de diálogo exibida, configure os parâmetros de PVC.

      Parâmetro

      Descrição

      PVC Type

      Neste exemplo, selecione EVS.

      PVC Name

      Digite o nome da PVC, que deve ser exclusivo no mesmo namespace.

      Creation Method

      • Se o armazenamento subjacente estiver disponível, crie um volume de armazenamento ou use um volume de armazenamento existente para criar estaticamente uma PVC com base em se um PV foi criado.
      • Se nenhum armazenamento subjacente estiver disponível, selecione Dynamically provision. Para mais detalhes, consulte Uso de um disco EVS por meio de um PV dinâmico.

      Neste exemplo, selecione Create new para criar um PV e uma PVC ao mesmo tempo no console.

      PVa

      Selecione um PV existente no cluster. Crie um PV com antecedência. Para obter detalhes, consulte "Criação de um volume de armazenamento" em Operações relacionadas.

      Você não precisa especificar esse parâmetro neste exemplo.

      EVSb

      Clique em Select EVS. Na página exibida, selecione o disco EVS que atende aos seus requisitos e clique em OK.

      PV Nameb

      Digite o nome do PV, que deve ser exclusivo no mesmo cluster.

      Access Modeb

      Discos EVS suportam apenas ReadWriteOnce indicando que um volume de armazenamento pode ser montado em um nó no modo leitura/gravação. Para mais detalhes, consulte Modos de acesso a volume.

      Reclaim Policyb

      Você pode selecionar Delete ou Retain para especificar a política de recuperação do armazenamento subjacente quando a PVC é excluída. Para mais detalhes, consulte Política de recuperação da PV.

      a: o parâmetro está disponível quando Creation Method está definido como Use existing.

      b: o parâmetro está disponível quando Creation Method está definido como Create new.

    2. Clique em Create para criar uma PVC e um PV.

      Você pode escolher Storage no painel de navegação e exibir a PVC e o PV criados nas páginas de guia PersistentVolumeClaims (PVCs) e PersistentVolumes (PVs), respectivamente.

  3. Crie uma aplicação.

    1. No painel de navegação à esquerda, clique em Workloads. No painel direito, clique na guia StatefulSets.
    2. Clique em Create Workload no canto superior direito. Na página exibida, clique em Data Storage na área Container Settings e clique em Add Volume para selecionar PVC.
      Monte e use volumes de armazenamento, conforme mostrado na Tabela 1. Para obter detalhes sobre outros parâmetros, consulte Cargas de trabalho.
      Tabela 1 Montagem de um volume de armazenamento

      Parâmetro

      Descrição

      PVC

      Selecione um volume do EVS existente.

      Um volume do EVS não pode ser montado repetidamente em várias cargas de trabalho.

      Mount Path

      Digite um caminho de montagem, por exemplo, /tmp.

      Este parâmetro indica o caminho do contêiner no qual um volume de dados será montado. Não monte o volume em um diretório do sistema como / ou /var/run. Caso contrário, os contêineres estarão com defeito. Monte o volume em um diretório vazio. Se o diretório não estiver vazio, verifique se não há arquivos que afetem a inicialização do contêiner. Caso contrário, os arquivos serão substituídos, causando falhas de inicialização do contêiner ou falhas de criação de carga de trabalho.
      AVISO:

      Se um volume for montado em um diretório de alto risco, use uma conta com permissões mínimas para iniciar o contêiner. Caso contrário, os arquivos de alto risco na máquina host podem ser danificados.

      Subpath

      Digite um subcaminho, por exemplo, tmp, indicando que os dados no caminho de montagem do contêiner serão armazenados na pasta tmp do volume.

      Um subcaminho é usado para montar um volume local para que o mesmo volume de dados seja usado em um único pod. Se este parâmetro for deixado em branco, o caminho raiz é usado por padrão.

      Permission

      • Read-only: você só pode ler os dados nos volumes montados.
      • Read/Write: você pode modificar os volumes de dados montados no caminho. Os dados recém-gravados não serão migrados se o contêiner for migrado, o que pode causar perda de dados.

      Neste exemplo, o disco é montado no caminho /data do contêiner. Os dados de contêiner gerados nesse caminho são armazenados no disco EVS.

      Um disco EVS não compartilhado não pode ser conectado a vários pods em uma carga de trabalho. Caso contrário, os pods não poderão ser iniciados corretamente. Certifique-se de que o número de pods de carga de trabalho seja 1 ao anexar um disco EVS.

    3. Após a configuração, clique em Create Workload.

      Depois que a carga de trabalho for criada, os dados no diretório de montagem do contêiner serão armazenados persistentemente. Verifique o armazenamento referindo-se a Verificar a persistência dos dados.

(kubectl) Usar um disco EVS existente

  1. Use o kubectl para se conectar ao cluster.
  2. Crie um PV. Se um PV tiver sido criado no cluster, ignore esta etapa.

    1. Crie o arquivo pv-evs.yaml.
      apiVersion: v1
      kind: PersistentVolume
      metadata:
        annotations:
          pv.kubernetes.io/provisioned-by: everest-csi-provisioner
          everest.io/reclaim-policy: retain-volume-only         # (Optional) The PV is deleted while the underlying volume is retained.
        name: pv-evs    # PV name.
        labels:
          failure-domain.beta.kubernetes.io/region: <your_region>   # Region of the node where the application is to be deployed.
          failure-domain.beta.kubernetes.io/zone: <your_zone>       # AZ of the node where the application is to be deployed.
      spec:
        accessModes:
          - ReadWriteOnce     # Access mode. The value must be ReadWriteOnce for EVS disks.
        capacity:
          storage: 10Gi       # EVS disk capacity, in the unit of Gi. The value ranges from 1 to 32768.
        csi:
          driver: disk.csi.everest.io     # Dependent storage driver for the mounting.
          fsType: ext4
          volumeHandle: <your_volume_id>   # Volume ID of the EVS disk.
          volumeAttributes:
            everest.io/disk-mode: SCSI           # Device type of the EVS disk. Only SCSI is supported.
            everest.io/disk-volume-type: SAS     # EVS disk type.
            storage.kubernetes.io/csiProvisionerIdentity: everest-csi-provisioner
            everest.io/crypt-key-id: <your_key_id>    # (Optional) Encryption key ID. Mandatory for an encrypted disk.
            everest.io/enterprise-project-id: <your_project_id>  # (Optional) Enterprise project ID. If an enterprise project is specified, use the same enterprise project when creating a PVC. Otherwise, the PVC cannot be bound to a PV.
        persistentVolumeReclaimPolicy: Delete    # Reclaim policy.
        storageClassName: csi-disk              # Storage class name. The value must be csi-disk for EVS disks.
      Tabela 2 Parâmetros principais

      Parâmetro

      Obrigatório

      Descrição

      everest.io/reclaim-policy: retain-volume-only

      Não

      Opcional.

      Atualmente, apenas retain-volume-only é suportado.

      Este campo é válido somente quando a versão do everest for 1.2.9 ou posterior e a política de recuperação for Delete. Se a política de recuperação for Delete e o valor atual for retain-volume-only, o PV associado será excluído enquanto o volume de armazenamento subjacente for retido, quando uma PVC for excluída.

      failure-domain.beta.kubernetes.io/region

      Sim

      Região onde o cluster está localizado.

      Para obter detalhes sobre o valor da region, consulte Regiões e pontos de extremidade.

      failure-domain.beta.kubernetes.io/zone

      Sim

      AZ onde o volume do EVS é criado. Deve ser a mesma que a AZ planejada para a carga de trabalho.

      Para obter detalhes sobre o valor da zone, consulte Regiões e pontos de extremidade.

      volumeHandle

      Sim

      ID do volume do disco EVS.

      Para obter o ID do volume, faça logon no Cloud Server Console. No painel de navegação, escolha Elastic Volume Service > Disks. Clique no nome do disco EVS de destino para acessar sua página de detalhes. Na página de guia Summary, clique no botão copiar após ID.

      everest.io/disk-volume-type

      Sim

      Tipos de disco EVS. Todas as letras estão em maiúsculas.
      • SAS: I/O alta
      • SSD: I/O ultra-alta
      • GPSSD: SSD de uso geral
      • ESSD: SSD extremo

      everest.io/crypt-key-id

      Não

      Obrigatório quando o disco EVS é criptografado. Insira o ID da chave de criptografia selecionada durante a criação do disco EVS.

      Para obter o ID da chave de criptografia, faça logon no Cloud Server Console. No painel de navegação, escolha Elastic Volume Service > Disks. Clique no nome do disco EVS de destino para acessar sua página de detalhes. Na página de guia Summary, copie o valor de KMS Key ID na área Configuration Information.

      everest.io/enterprise-project-id

      Não

      Opcional.

      ID do projeto empresarial do disco EVS. Se um projeto empresarial for especificado, use o mesmo projeto empresarial ao criar uma PVC. Caso contrário, a PVC não pode ser vinculado a um PV.

      Para obter o código do projeto empresarial, efetue logon no Cloud Server Console. No painel de navegação, escolha Elastic Volume Service > Disks. Clique no nome do disco EVS de destino para acessar sua página de detalhes. Na página de guia Summary, clique no projeto empresarial em Management Information para acessar o console do projeto empresarial. Copie o ID correspondente para obter o ID do projeto corporativo ao qual o disco EVS pertence.

      persistentVolumeReclaimPolicy

      Sim

      Uma política de recuperação é suportada quando a versão do cluster é ou posterior a 1.19.10 e a versão do everest é ou posterior a 1.2.9.

      As políticas de recuperação Delete e Retain são suportadas. Para mais detalhes, consulte Política de recuperação da PV. Se for necessária uma alta segurança de dados, selecione Retain para impedir que os dados sejam excluídos por engano.

      Delete:

      • Se everest.io/reclaim-policy não for especificada, o volume de PV e EVS serão excluídos quando uma PVC for excluída.
      • Se everest.io/reclaim-policy estiver definida para retain-volume-only, quando uma PVC for excluída, o PV será excluído, mas os recursos do EVS serão retidos.

      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.

      storageClassName

      Sim

      O nome da classe de armazenamento para discos EVS é csi-disk.

    2. Execute o seguinte comando para criar um PV:
      kubectl apply -f pv-evs.yaml

  3. Crie uma PVC.

    1. Crie o arquivo pvc-evs.yaml.
      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
        name: pvc-evs
        namespace: default
        annotations:
            everest.io/disk-volume-type: SAS    # EVS disk type.
          everest.io/crypt-key-id: <your_key_id>    # (Optional) Encryption key ID. Mandatory for an encrypted disk.
          everest.io/enterprise-project-id: <your_project_id>  # (Optional) Enterprise project ID. If an enterprise project is specified, use the same enterprise project when creating a PVC. Otherwise, the PVC cannot be bound to a PV.
        labels:
          failure-domain.beta.kubernetes.io/region: <your_region>   # Region of the node where the application is to be deployed.
          failure-domain.beta.kubernetes.io/zone: <your_zone>       # AZ of the node where the application is to be deployed.
      spec:
        accessModes:
        - ReadWriteOnce               # The value must be ReadWriteOnce for EVS disks.
        resources:
          requests:
            storage: 10Gi             # EVS disk capacity, ranging from 1 to 32768. The value must be the same as the storage size of the existing PV.
        storageClassName: csi-disk    # Storage class type for EVS disks.
        volumeName: pv-evs            # PV name.
      Tabela 3 Parâmetros principais

      Parâmetro

      Obrigatório

      Descrição

      failure-domain.beta.kubernetes.io/region

      Sim

      Região onde o cluster está localizado.

      Para obter detalhes sobre o valor da region, consulte Regiões e pontos de extremidade.

      failure-domain.beta.kubernetes.io/zone

      Sim

      AZ onde o volume do EVS é criado. Deve ser a mesma que a AZ planejada para a carga de trabalho.

      Para obter detalhes sobre o valor da zone, consulte Regiões e pontos de extremidade.

      storage

      Sim

      Capacidade solicitada na PVC, em Gi.

      O valor deve ser o mesmo que o tamanho de armazenamento do PV existente.

      volumeName

      Sim

      Nome do PV, que deve ser o mesmo que o nome do PV em 1.

      storageClassName

      Sim

      Nome da classe de armazenamento, que deve ser o mesmo que a classe de armazenamento do PV em 1.

      O nome da classe de armazenamento dos volumes do EVS é csi-disk.

    2. Execute o seguinte comando para criar uma PVC:
      kubectl apply -f pvc-evs.yaml

  4. Crie uma aplicação.

    1. Crie um arquivo chamado web-evs.yaml. Neste exemplo, o volume do EVS é montado no caminho /data.
      apiVersion: apps/v1
      kind: StatefulSet
      metadata:
        name: web-evs
        namespace: default
      spec:
       replicas: 1            # The number of workload replicas that use the EVS volume must be 1.
        selector:
          matchLabels:
            app: web-evs
        serviceName: web-evs   # Headless Service name.
        template:
          metadata:
            labels:
              app: web-evs
          spec:
            containers:
            - name: container-1
              image: nginx:latest
              volumeMounts:
              - name: pvc-disk    # Volume name, which must be the same as the volume name in the volumes field.
                mountPath: /data  # Location where the storage volume is mounted.
            imagePullSecrets:
              - name: default-secret
            volumes:
              - name: pvc-disk    # Volume name, which can be customized.
                persistentVolumeClaim:
                  claimName: pvc-evs    # Name of the created PVC.
      ---
      apiVersion: v1
      kind: Service
      metadata:
        name: web-evs   # Headless Service name.
        namespace: default
        labels:
          app: web-evs
      spec:
        selector:
          app: web-evs
        clusterIP: None
        ports:
          - name: web-evs
            targetPort: 80
            nodePort: 0
            port: 80
            protocol: TCP
        type: ClusterIP
    2. Execute o seguinte comando para criar uma carga de trabalho na qual o volume do EVS está montado:
      kubectl apply -f web-evs.yaml

      Depois que a carga de trabalho for criada, os dados no diretório de montagem do contêiner serão armazenados persistentemente. Verifique o armazenamento referindo-se a Verificar a persistência dos dados.

Verificar a persistência dos dados

  1. Visualize a aplicação implementado e os arquivos de volume do EVS.

    1. Execute o seguinte comando para exibir o pod criado:
      kubectl get pod | grep web-evs
      Saída esperada:
      web-evs-0                  1/1     Running   0               38s
    2. Execute o seguinte comando para verificar se o volume do EVS foi montado no caminho /data:
      kubectl exec web-evs-0 -- df | grep data

      Saída esperada:

      /dev/sdc              10255636     36888  10202364   0% /data
    3. Execute o seguinte comando para exibir os arquivos no caminho /data:
      kubectl exec web-evs-0 -- ls /data

      Saída esperada:

      lost+found

  2. Execute o seguinte comando para criar um arquivo chamado static no caminho /data:

    kubectl exec web-evs-0 --  touch /data/static

  3. Execute o seguinte comando para exibir os arquivos no caminho /data:

    kubectl exec web-evs-0 -- ls /data

    Saída esperada:

    lost+found
    static

  4. Execute o seguinte comando para excluir o pod chamado web-evs-0:

    kubectl delete pod web-evs-0

    Saída esperada:

    pod "web-evs-0" deleted

  5. Após a exclusão, o controlador de StatefulSet cria automaticamente uma réplica com o mesmo nome. Execute o seguinte comando para verificar se os arquivos no caminho /data foram modificados:

    kubectl exec web-evs-0 -- ls /data

    Saída esperada:

    lost+found
    static

    Se o arquivo static ainda existir, os dados no volume de EVS podem ser armazenados persistentemente.

Operações relacionadas

Você também pode executar as operações listadas em Tabela 4.
Tabela 4 Operações relacionadas

Operação

Descrição

Procedimento

Criar um volume de armazenamento (PV)

Crie um PV no console do CCE.

  1. Escolha Storage no painel de navegação e clique na guia PersistentVolumes (PVs). Clique em Create Volume no canto superior direito. Na caixa de diálogo exibida, configure os parâmetros.
    • Volume Type: selecione EVS.
    • EVS: clique em Select EVS. Na página exibida, selecione o disco EVS que atende aos seus requisitos e clique em OK.
    • PV Name: digite o nome do PV, que deve ser exclusivo no mesmo cluster.
    • Access Mode: discos EVS suportam apenas ReadWriteOnce indicando que um volume de armazenamento pode ser montado em um nó no modo leitura/gravação. Para mais detalhes, consulte Modos de acesso a volume.
    • Reclaim Policy: Delete ou Retain. Para mais detalhes, consulte Política de recuperação da PV.
  2. Clique em Create.

Expandir a capacidade de um disco EVS

Expanda rapidamente a capacidade de um disco EVS montado no console do CCE.

Somente a capacidade de discos EVS de pagamento por uso pode ser expandida no console do CCE. Para expandir a capacidade de discos EVS anuais/mensais, clique no nome do volume para ir para o console do EVS.

  1. Escolha Storage no painel de navegação e clique na guia PersistentVolumeClaims (PVCs). Clique em More na coluna Operation do PVC de destino e selecione Scale-out.
  2. Insira a capacidade a ser adicionada e clique em OK.

Visualizar eventos

Você pode visualizar nomes de eventos, tipos de eventos, número de ocorrências, eventos do Kubernetes, horário da primeira ocorrência e horário da última ocorrência da PVC ou PV.

  1. Escolha Storage no painel de navegação e clique na guia PersistentVolumeClaims (PVCs) ou PersistentVolumes (PVs).
  2. Clique em View Events na coluna Operation da PVC ou do PV de destino para exibir os eventos gerados em uma hora (os dados do evento são mantidos por uma hora).

Exibir um arquivo YAML

Você pode visualizar, copiar e fazer download dos arquivos YAML de uma PVC ou um PV.

  1. Escolha Storage no painel de navegação e clique na guia PersistentVolumeClaims (PVCs) ou PersistentVolumes (PVs).
  2. Clique em View YAML na coluna Operation da PVC ou PV de destino para exibir ou fazer download do YAML.