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/ Volumes persistentes locais/ Montagem dinâmica de um PV local para um StatefulSet
Atualizado em 2024-11-28 GMT+08:00

Montagem dinâmica de um PV local para um StatefulSet

Cenários de aplicações

A montagem dinâmica está disponível apenas para a criação de um StatefulSet. Ela é implementada por meio de um modelo de declaração de volume (campo volumeClaimTemplates) e depende da classe de armazenamento para provisionar PVs dinamicamente. Nesse modo, cada pod em um StatefulSet de vários pods está associado a uma PVC e um PV exclusivos. Depois que um pod é reprogramado, os dados originais ainda podem ser montados nele com base no nome da PVC. No modo de montagem comum de uma Implementação, se ReadWriteMany for suportado, vários pods da Implementação serão montados no mesmo armazenamento subjacente.

Pré-requisitos

Montagem dinâmica de 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. No painel de navegação à esquerda, clique em Workloads. No painel direito, clique na guia StatefulSets.
  3. 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 VolumeClaimTemplate (VTC).
  4. Clique em Create PVC. Na caixa de diálogo exibida, configure os parâmetros do modelo de declaração de volume.

    Clique em Create.

    Parâmetro

    Descrição

    PVC Type

    Nesta seção, selecione Local PV.

    PVC Name

    Digite o nome da PVC. Depois que uma PVC é criada, um sufixo é adicionado automaticamente com base no número de pods. O formato é <Custom PVC name>-<Serial number>, por exemplo, example-0.

    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

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

  5. Insira o caminho no qual o volume está montado.

    Tabela 1 Montagem de um volume de armazenamento

    Parâmetro

    Descrição

    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.

  6. Monte e use dinamicamente volumes de armazenamento. Para obter detalhes sobre outros parâmetros, consulte Criação de um StatefulSet. 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.

Montagem dinâmica de um PV local usando kubectl

  1. Use o kubectl para se conectar ao cluster.
  2. Crie um arquivo chamado statefulset-local.yaml. Neste exemplo, o PV local é montado no caminho /data.

    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: statefulset-local
      namespace: default
    spec:
      selector:
        matchLabels:
          app: statefulset-local
      template:
        metadata:
          labels:
            app: statefulset-local
        spec:
          containers:
            - name: container-1
              image: nginx:latest
              volumeMounts:
                - name: pvc-local          # The value must be the same as that in the volumeClaimTemplates field.
                  mountPath: /data         # Location where the storage volume is mounted.
          imagePullSecrets:
            - name: default-secret
      serviceName: statefulset-local       # Headless Service name.
      replicas: 2
      volumeClaimTemplates:
        - apiVersion: v1
          kind: PersistentVolumeClaim
          metadata:
            name: pvc-local
            namespace: default
          spec:
            accessModes:
              - ReadWriteOnce               # The local PV must adopt ReadWriteOnce.
            resources:
              requests:
                storage: 10Gi               # Storage volume capacity.
            storageClassName: csi-local-topology      # StorageClass is local PV.
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: statefulset-local   # Headless Service name.
      namespace: default
      labels:
        app: statefulset-local
    spec:
      selector:
        app: statefulset-local
      clusterIP: None
      ports:
        - name: statefulset-local
          targetPort: 80
          nodePort: 0
          port: 80
          protocol: TCP
      type: ClusterIP
    Tabela 2 Parâmetros principais

    Parâmetro

    Obrigatório

    Descrição

    storage

    Sim

    Capacidade solicitada na PVC, em Gi.

    storageClassName

    Sim

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

  3. Execute o seguinte comando para criar uma carga de trabalho na qual o PV local é montado:

    kubectl apply -f statefulset-local.yaml

    Depois que a carga de trabalho é criada, você pode tentar Verificar a persistência dos dados.

Verificar a persistência dos dados

  1. Exiba a aplicação implementada e os arquivos.

    1. Execute o seguinte comando para exibir o pod criado:
      kubectl get pod | grep statefulset-local
      Saída esperada:
      statefulset-local-0          1/1     Running   0             45s
      statefulset-local-1          1/1     Running   0             28s
    2. Execute o seguinte comando para verificar se o PV local foi montado no caminho /data:
      kubectl exec statefulset-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 statefulset-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 statefulset-local-0 --  touch /data/static

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

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

    Saída esperada:

    lost+found
    static

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

    kubectl delete pod statefulset-local-0

    Saída esperada:

    pod "statefulset-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 statefulset-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.