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

Uso de um PV local através de um PV dinâmico

Pré-requisitos

Restrições

  • Os PVs locais são suportados apenas quando a versão do cluster é v1.21.2-r0 ou posterior e a versão do complemento everest é 2.1.23 ou posterior. Recomenda-se a versão 2.1.23 ou posterior.
  • Excluir, remover, redefinir ou dimensionar um nó fará com que os dados de PVC/PV do PV local associado ao nó sejam perdidos, que não podem ser restaurados ou usados novamente. Para obter detalhes, consulte Remoção de um nó, Exclusão de um nó, Redefinição de um nó e Redução de um nó. Nesses cenários, o pod que usa o PV local é despejado do nó. Um novo pod será criado e permanece no estado pendente. Isso ocorre porque a PVC usada pelo pod tem um rótulo de nó, devido ao qual o pod não pode ser programado. Depois que o nó é redefinido, o pod pode ser agendado para o nó de redefinição. Nesse caso, o pod está sempre no estado de criação porque o volume lógico subjacente correspondente à PVC não existe.
  • Não exclua manualmente o pool de armazenamento correspondente nem desanexe discos de dados do nó. Caso contrário, exceções como perda de dados podem ocorrer.
  • Um PV local não pode ser montado em várias cargas de trabalho ou trabalhos ao mesmo tempo.

Criar automaticamente um PV local no console

  1. Efetue logon no console do CCE e clique no nome do cluster para acessar o console do cluster.
  2. Crie dinamicamente uma PVC e um 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

      Nesta seção, selecione Local PV.

      PVC Name

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

      Creation Method

      Você só pode selecionar Dynamically provision para criar uma PVC, PV e armazenamento subjacente no console no modo de cascata.

      Storage Classes

      A classe de armazenamento de PVs locais é csi-local-topology.

      Access Mode

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

      Storage Pool

      Exibir o pool de armazenamento importado. Para obter detalhes sobre como importar um novo volume de dados para o pool de armazenamento, consulte Importação de um PV para um pool de armazenamento.

      Capacity (GiB)

      Capacidade do volume de armazenamento solicitado.

    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.

      O modo de vinculação de volume da classe de armazenamento local (chamada csi-local-topology) é vinculação tardia (ou seja, o valor de volumeBindingMode é WaitForFirstConsumer). Nesse modo, a criação e a vinculação do PV são atrasadas. O PV correspondente é criado e vinculado somente quando a PVC é usada durante a criação da carga de trabalho.

  3. Crie uma aplicação.

    1. No painel de navegação à esquerda, clique em Workloads. No painel direito, clique na guia Deployments.
    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 em 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 PV local existente.

      Um PV local 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, arquivos de alto risco no 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 PV local.

    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) Criar automaticamente um PV local

  1. Use o kubectl para se conectar ao cluster.
  2. Use StorageClass para criar dinamicamente uma PVC e um PV.

    1. Crie o arquivo pvc-local.yaml.
      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
        name: pvc-local
        namespace: default
      spec:
        accessModes:
          - ReadWriteOnce             # The local PV must adopt ReadWriteOnce.
        resources:
          requests:
            storage: 10Gi             # Size of the local PV.
        storageClassName: csi-local-topology    # StorageClass is local PV.
      Tabela 2 Parâmetros principais

      Parâmetro

      Obrigatório

      Descrição

      storage

      Sim

      Capacidade solicitada na PVC, em Gi.

      storageClassName

      Sim

      Nome da classe de armazenamento. O nome da classe de armazenamento do PV local é csi-local-topology.

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

  3. Crie uma aplicação.

    1. Crie um arquivo chamado web-demo.yaml. Neste exemplo, o PV local é montado no caminho /data.
      apiVersion: apps/v1
      kind: StatefulSet
      metadata:
        name: web-local
        namespace: default
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: web-local
        serviceName: web-local   # Headless Service name.
        template:
          metadata:
            labels:
              app: web-local
          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-local    #Name of the created PVC.
      ---
      apiVersion: v1
      kind: Service
      metadata:
        name: web-local   # Headless Service name.
        namespace: default
        labels:
          app: web-local
      spec:
        selector:
          app: web-local
        clusterIP: None
        ports:
          - name: web-local
            targetPort: 80
            nodePort: 0
            port: 80
            protocol: TCP
        type: ClusterIP
    2. Execute o seguinte comando para criar uma carga de trabalho na qual o PV local é montado:
      kubectl apply -f web-local.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. Exibir a aplicação implementada e os arquivos locais.

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

      Saída esperada:

      /dev/mapper/vg--everest--localvolume--persistent-pvc-local          10255636     36888  10202364   0% /data
    3. Execute o seguinte comando para exibir os arquivos no caminho /data:
      kubectl exec web-local-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-local-0 --  touch /data/static

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

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

    Saída esperada:

    lost+found
    static

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

    kubectl delete pod web-local-0

    Saída esperada:

    pod "web-local-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-local-0 -- ls /data

    Saída esperada:

    lost+found
    static

    Se o arquivo static ainda existir, os dados no PV local podem ser armazenados persistentemente.

Operações relacionadas

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

Operação

Descrição

Procedimento

Visualização de 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 PV de destino para exibir os eventos gerados dentro de uma hora (os dados do evento são mantidos por uma hora).

Exibição de 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.