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/ Object Storage Service/ Uso de um bucket do OBS existente através de um PV estático
Atualizado em 2024-11-28 GMT+08:00

Uso de um bucket do OBS existente através de um PV estático

Esta seção descreve como usar um bucket do Object Storage Service (OBS) existente para criar estaticamente PVs e PVCs e implementar a persistência e o compartilhamento de dados em cargas de trabalho.

Pré-requisitos

  • Você criou um cluster e instalou o complemento Armazenamento do contêiner do CCE (Everest) no cluster.
  • 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.
  • Você criou um bucket do OBS. Um bucket do OBS do tipo de sistema de arquivos paralelo pode ser selecionado somente quando estiver na mesma região do cluster.

Restrições

  • Se forem utilizados volumes do OBS, o grupo proprietário e a permissão do ponto de montagem não podem ser modificados.
  • O CCE permite que sistemas de arquivos paralelos sejam montados usando SDKs ou PVCs do OBS. Se for usada montagem em PVC, a ferramenta obsfs fornecida pelo OBS deve ser usada. Um processo residente de obsfs é gerado cada vez que um volume de armazenamento de objetos gerado a partir de um sistema de arquivos paralelo é montado em um nó.
    Figura 1 Processo residente do obsfs

    Reserve 1 GiB de memória para cada processo de obsfs. Por exemplo, para um nó com 4 vCPUs e 8 GiB de memória, um sistema de arquivos paralelo obsfs deve ser montado em no máximo oito pods.

    • Um processo residente do obsfs é executado em um nó. Se a memória consumida exceder o limite superior do nó, o nó funciona mal. Em um nó com 4 vCPUs e 8 GiB de memória, se mais de 100 pods forem montados em um sistema de arquivos paralelo, o nó não estará disponível. Controle o número de pods montados em um sistema de arquivos paralelo em um único nó.
    • Ao usar obsfs, cumpra com as Restrições de obsfs.
  • Os contêineres de Kata não suportam volumes do OBS.
  • Vários PVs podem usar o mesmo volume de armazenamento do OBS com as seguintes restrições:
    • Não monte todos os PVCs/PVs que usam o mesmo volume de armazenamento de objetos subjacente em um pod. Isso leva a uma falha de inicialização do pod porque nem todas as PVCs podem ser montados no pod devido aos mesmos valores de volumeHandle desses PVs.
    • O parâmetro persistentVolumeReclaimPolicy nos PVs deve ser definido como Retain. Caso contrário, quando um PV for excluído, o volume subjacente associado poderá ser excluído. Neste caso, outros PVs associados ao mau funcionamento do volume subjacente.
    • Se o armazenamento subjacente for usado repetidamente, será necessário manter a consistência dos dados. Ative o isolamento e a proteção do ReadWriteMany na camada de aplicação e evite que vários clientes gravem o mesmo arquivo para evitar a substituição e a perda de dados.

Usar um bucket do OBS existente no console

  1. Efetue logon no console do CCE e acesse 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 OBS.

      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 bucket do OBS através 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 volume de 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.

      OBSb

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

      NOTA:

      Atualmente, apenas sistemas de arquivos paralelos são suportados.

      PV Nameb

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

      Access Modeb

      Os volumes do OBS suportam apenas ReadWriteMany, indicando que um volume de armazenamento pode ser montado em vários nós no modo de 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.

      NOTA:

      Se vários PVs usarem o mesmo volume do OBS, use Retain para evitar a exclusão em cascata de volumes subjacentes.

      Secretb

      Custom: personalize um segredo se você quiser atribuir permissões de usuário diferentes a diferentes dispositivos de armazenamento do OBS. Para mais detalhes, consulte Uso de uma chave de acesso (AK/SK) personalizada para montar um volume do OBS.

      Somente segredos com o rótulo secret.kubernetes.io/used-by = csi podem ser selecionados. O tipo de segredo é cfe/secure-opaque. Se nenhum segredo estiver disponível, clique em Create Secret para criar uma.
      • Name: insira um nome do segredo.
      • Namespace: selecione o namespace onde o segredo está.
      • Access Key (AK/SK): carregue um arquivo de chave no formato .csv. Para mais detalhes, consulte Obter uma chave de acesso.

      Mount Optionsb

      Insira os pares chave-valor do parâmetro de montagem. Para mais detalhes, consulte Configuração das opções de montagem do OBS.

      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 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 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 de armazenamento de objetos existente.

      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 volume do OBS.

    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 Política de recuperação da PV.

(kubectl) Usar um bucket do OBS existente

  1. Use o kubectl para se conectar ao cluster.
  2. Crie um PV.

    1. Crie o arquivo pv-obs.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-obs       # PV name.
      spec:
        accessModes:
        - ReadWriteMany    # Access mode. The value must be ReadWriteMany for OBS.
        capacity:
          storage: 1Gi     # OBS volume capacity.
        csi:
          driver: obs.csi.everest.io        # Dependent storage driver for the mounting.
          driver: obs.csi.everest.io        # Instance type.
          volumeHandle: <your_volume_id>    # Name of the OBS volume.
          volumeAttributes:
            storage.kubernetes.io/csiProvisionerIdentity: everest-csi-provisioner
            everest.io/obs-volume-type: STANDARD
            everest.io/region: <your_region>                        # Region where the OBS volume is.
            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.
          nodePublishSecretRef:            # Custom secret of the OBS volume.
            name: <your_secret_name>       # Custom secret name.
            namespace: <your_namespace>    # Namespace of the custom secret.
        persistentVolumeReclaimPolicy: Retain    # Reclaim policy.
        storageClassName: csi-obs               # Storage class name.
        mountOptions: []                         # Mount options.
      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.

      fsType

      Sim

      Tipos de instância. O valor pode ser obsfs ou s3fs.

      • obsfs: sistema de arquivos paralelo, que é montado usando obsfs (recomendado).
      • s3fs: bucket de objetos, que é montado usando s3fs.

      volumeHandle

      Sim

      Nome do volume do OBS.

      everest.io/obs-volume-type

      Sim

      Classe de armazenamento do OBS.

      • Se fsType for definido como s3fs, STANDARD (bucket padrão) e WARM (bucket de acesso infrequente) serão suportados.
      • Este parâmetro é inválido quando fsType é definido como obsfs.

      everest.io/region

      Sim

      Região onde o bucket do OBS é implementado.

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

      everest.io/enterprise-project-id

      Não

      Opcional.

      ID do projeto empresarial do OBS. 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.

      Como obter: no console do OBS, escolha Buckets ou Parallel File Systems no painel de navegação à esquerda. Clique no nome do bucket do OBS para acessar sua página de detalhes. Na área Basic Information, localize o projeto empresarial e clique nele para acessar o console do projeto empresarial. Copie o ID correspondente para obter o ID do projeto empresarial ao qual o armazenamento de objetos pertence.

      nodePublishSecretRef

      Não

      Chave de acesso (AK/SK) usada para montar o volume de armazenamento do objeto. Você pode usar a AK/SK para criar um segredo e montá-lo no PV. Para mais detalhes, consulte Uso de uma chave de acesso (AK/SK) personalizada para montar um volume do OBS.

      Um exemplo é o seguinte:
      nodePublishSecretRef:
        name: secret-demo
        namespace: default

      mountOptions

      Não

      Opções de montagem. Para mais detalhes, consulte Configuração das opções de montagem do OBS.

      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 vários PVs usarem o mesmo volume do OBS, use Retain para evitar a exclusão em cascata de volumes subjacentes.

      Delete:

      • Se everest.io/reclaim-policy não for especificada, ambos os recursos de PV e de armazenamento 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 armazenamento 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.

      storage

      Sim

      Capacidade de armazenamento, em Gi.

      Para buckets do OBS, esse campo é usado apenas para verificação (não pode estar vazio ou 0). Seu valor é fixado em 1, e qualquer valor que você definir não terá efeito para buckets do OBS.

      storageClassName

      Sim

      O nome da classe de armazenamento dos volumes do OBS é csi-obs.

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

  3. Crie uma PVC.

    1. Crie o arquivo pvc-obs.yaml.
      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
        name: pvc-obs
        namespace: default
        annotations:
          volume.beta.kubernetes.io/storage-provisioner: everest-csi-provisioner
          everest.io/obs-volume-type: STANDARD
          csi.storage.k8s.io/fstype: obsfs
          csi.storage.k8s.io/node-publish-secret-name: <your_secret_name>  # Custom secret name.
          csi.storage.k8s.io/node-publish-secret-namespace: <your_namespace>        # Namespace of the custom secret.
          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.
      spec:
        accessModes:
        - ReadWriteMany                  # The value must be ReadWriteMany for OBS.
        resources:
          requests:
            storage: 1Gi
        storageClassName: csi-obs       # Storage class name, which must be the same as that of the PV.
        volumeName: pv-obs    # PV name.
      Tabela 3 Parâmetros principais

      Parâmetro

      Obrigatório

      Descrição

      csi.storage.k8s.io/node-publish-secret-name

      Não

      Nome do segredo personalizado especificado no PV.

      csi.storage.k8s.io/node-publish-secret-namespace

      Não

      Namespace do segredo personalizado especificado no PV.

      everest.io/enterprise-project-id

      Não

      ID do projeto do OBS.

      Como obter: no console do OBS, escolha Buckets ou Parallel File Systems no painel de navegação à esquerda. Clique no nome do bucket do OBS para acessar sua página de detalhes. Na área Basic Information, localize o projeto empresarial e clique nele para acessar o console do projeto empresarial. Copie o ID correspondente para obter o ID do projeto empresarial ao qual o armazenamento de objetos pertence.

      storage

      Sim

      Capacidade solicitada na PVC, em Gi.

      Para OBS, esse campo é usado apenas para verificação (não pode estar vazio ou 0). Seu valor é fixado em 1, e qualquer valor que você definir não terá efeito para o OBS.

      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 OBS é csi-obs.

      volumeName

      Sim

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

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

  4. Crie uma aplicação.

    1. Crie um arquivo chamado web-demo.yaml. Neste exemplo, o volume do OBS é montado no caminho /data.
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: web-demo
        namespace: default
      spec:
        replicas: 2
        selector:
          matchLabels:
            app: web-demo
        template:
          metadata:
            labels:
              app: web-demo
          spec:
            containers:
            - name: container-1
              image: nginx:latest
              volumeMounts:
              - name: pvc-obs-volume    #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-obs-volume    #Volume name, which can be customized.
                persistentVolumeClaim:
                  claimName: pvc-obs    #Name of the created PVC.
    2. Execute o seguinte comando para criar uma carga de trabalho na qual o volume do OBS está montado:
      kubectl apply -f web-demo.yaml

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

Verificar a persistência e o compartilhamento de dados

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

    1. Execute o seguinte comando para exibir o pod criado:
      kubectl get pod | grep web-demo
      Saída esperada:
      web-demo-846b489584-mjhm9   1/1     Running   0             46s
      web-demo-846b489584-wvv5s   1/1     Running   0             46s
    2. Execute os seguintes comandos em sequência para visualizar os arquivos no caminho /data dos pods:
      kubectl exec web-demo-846b489584-mjhm9 -- ls /data
      kubectl exec web-demo-846b489584-wvv5s -- ls /data

      Se nenhum resultado for retornado para ambos os pods, nenhum arquivo existirá no caminho /data.

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

    kubectl exec web-demo-846b489584-mjhm9 --  touch /data/static

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

    kubectl exec web-demo-846b489584-mjhm9 -- ls /data

    Saída esperada:

    static

  4. Verifique a persistência dos dados.

    1. Execute o seguinte comando para excluir o pod chamado web-demo-846b489584-mjhm9:
      kubectl delete pod web-demo-846b489584-mjhm9

      Saída esperada:

      pod "web-demo-846b489584-mjhm9" deleted

      Após a eliminação, o controlador de Implementação cria automaticamente uma réplica.

    2. Execute o seguinte comando para exibir o pod criado:
      kubectl get pod | grep web-demo
      A saída esperada é a seguinte, na qual web-demo-846b489584-d4d4j é o pod recém-criado:
      web-demo-846b489584-d4d4j   1/1     Running   0             110s
      web-demo-846b489584-wvv5s    1/1     Running   0             7m50s
    3. Execute o seguinte comando para verificar se os arquivos no caminho /data do pod novo foram modificados:
      kubectl exec web-demo-846b489584-d4d4j -- ls /data

      Saída esperada:

      static

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

  5. Verifique o compartilhamento de dados.

    1. Execute o seguinte comando para exibir o pod criado:
      kubectl get pod | grep web-demo
      Saída esperada:
      web-demo-846b489584-d4d4j   1/1     Running   0             7m
      web-demo-846b489584-wvv5s   1/1     Running   0             13m
    2. Execute o seguinte comando para criar um arquivo chamado share no caminho /data de qualquer pod: Neste exemplo, selecione o pod chamado web-demo-846b489584-d4d4j.
      kubectl exec web-demo-846b489584-d4d4j --  touch /data/share
      Verifique os arquivos no caminho /data do pod.
      kubectl exec web-demo-846b489584-d4d4j -- ls /data

      Saída esperada:

      share
      static
    3. Verifique se o arquivo share existe no caminho /data de outro pod (web-demo-846b489584-wvv5s) também para verificar o compartilhamento de dados.
      kubectl exec web-demo-846b489584-wvv5s -- ls /data

      Saída esperada:

      share
      static

      Depois de criar um arquivo no caminho /data de um pod, se o arquivo também for criado no caminho /data do outro pod, os dois pods compartilharão o mesmo volume.

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 OBS.
    • OBS: clique em Select OBS. Na página exibida, selecione o armazenamento do OBS 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: os volumes do SFS suportam apenas ReadWriteMany, indicando que um volume de armazenamento pode ser montado em vários nós no modo de 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.
      NOTA:

      Se vários PVs usarem o mesmo volume de armazenamento subjacente, use Retain para evitar a exclusão em cascata de volumes subjacentes.

    • Custom: personalize um segredo se você quiser atribuir permissões de usuário diferentes a diferentes dispositivos de armazenamento do OBS. Para mais detalhes, consulte Uso de uma chave de acesso (AK/SK) personalizada para montar um volume do OBS.

      Somente segredos com o rótulo secret.kubernetes.io/used-by = csi podem ser selecionados. O tipo de segredo é cfe/secure-opaque. Se nenhum segredo estiver disponível, clique em Create Secret para criar uma.

    • Mount Options: insira os pares chave-valor do parâmetro de montagem. Para mais detalhes, consulte Configuração das opções de montagem do OBS.
  2. Clique em Create.

Atualizar uma chave de acesso

Atualize a chave de acesso do armazenamento de objetos no console do CCE.

  1. Escolha Storage no painel de navegação e clique na guia PersistentVolumeClaims (PVCs). Clique em More na coluna Operation da PVC de destino e selecione Update Access Key.
  2. Carregue um arquivo de chave no formato .csv. Para mais detalhes, consulte Obter uma chave de acesso. Clique em OK.
    NOTA:

    Depois que uma chave de acesso global é atualizada, todos os pods montados com o armazenamento de objetos que usam essa chave de acesso podem ser acessados somente após serem reiniciados.

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.