Todos os produtos
Search
Central de documentação

Container Service for Kubernetes:Otimize a leitura de arquivos pequenos do OSS com volumes strmvol

Última atualização: Jun 27, 2026

Em aplicações containerizadas, o método convencional para montar dados de armazenamento de objetos utiliza um sistema de arquivos baseado em Filesystem in Userspace (FUSE), como o ossfs. No entanto, essa abordagem frequentemente apresenta desempenho insuficiente em cenários de leitura intensiva que envolvem milhões de arquivos pequenos, como carregamento de conjuntos de dados para treinamento de IA ou análise de logs de séries temporais, nos quais alto throughput e baixa latência são críticos. Para esses casos de uso, recomendamos uma solução de dispositivo de bloco virtual. Ao montar dados de armazenamento de objetos diretamente com um volume strmvol, você otimiza significativamente o desempenho de leitura de arquivos pequenos.

Notas de uso

Volumes strmvol

  • Use apenas endpoints internos para acessar dados do OSS.

  • Durante a inicialização de um dispositivo de bloco virtual, o sistema constrói um índice completo de metadados de arquivos. Esse processo consome recursos do nó e mantém o pod da aplicação no estado ContainerCreating. O tempo e os recursos necessários são diretamente proporcionais à quantidade de arquivos no caminho de montagem do bucket do OSS.

    • Ao selecionar um caminho de montagem de bucket do OSS, siga o princípio do menor privilégio.

      Se o Negócio A acessa conteúdo em /app/a/ em um bucket do OSS e o Negócio B acessa conteúdo em /app/b/, crie volumes separados para o Negócio A e o Negócio B com caminhos de destino de montagem /app/a/ e /app/b/, respectivamente.

    • Para obter informações sobre o tempo e a sobrecarga de recursos durante a inicialização, consulte Construção de índice de metadados.

  • As configurações no PersistentVolume (PV) limitam o consumo de recursos do dispositivo de bloco virtual durante seu ciclo de vida de montagem, exceto na fase de inicialização. Reserve recursos suficientes no nó.

  • Um único dispositivo de bloco virtual tem capacidade de 16 TiB; portanto, o caminho montado do OSS também está limitado a 16 TiB de dados.

Requisitos de cluster e nó

  • O cluster deve ser um cluster ACK gerenciado Pro ou um cluster ACK dedicado executando Kubernetes 1.20 ou posterior. O plug-in de armazenamento deve ser um plug-in Container Storage Interface (CSI).

  • Os nós devem usar a versão de kernel 4,19 ou posterior. Recomendamos especificações de recursos de pelo menos 4 vCPU e 8 GiB de memória.

  • Sistemas operacionais de nó suportados: Alibaba Cloud Linux 3, Alibaba Cloud Linux 2 e CentOS 7. Para otimizar o desempenho de acesso a dados com o sistema operacional erofs, recomendamos o uso do Alibaba Cloud Linux 3.

    Nota

    O CentOS 7 e o Alibaba Cloud Linux 2 atingiram o fim de vida útil (EOL). Para mais informações, consulte [[Alteração de Produto] Anúncio sobre a descontinuação do suporte para Alibaba Cloud Linux 2 e CentOS 7](t2602809.xdita#).

  • Não é possível montar volumes strmvol em um pod serverless agendado em um nó virtual.

Pré-requisitos

Etapa 1: Implantar o strmvol-csi-driver

Para usar volumes strmvol, implante um driver CSI separado, o componente strmvol-csi-driver. Após a implantação, esse driver CSI opera independentemente e não entra em conflito com os componentes csi-provisioner e csi-plugin gerenciados pelo ACK.

  1. Faça login no console do ACK. No painel de navegação à esquerda, escolha Marketplace > Marketplace.

  2. Na página Marketplace, pesquise por strmvol-csi-driver e clique em seu cartão.

  3. Na página de detalhes da aplicação, clique em Deploy no canto superior direito.

  4. No painel exibido, configure as informações básicas e os parâmetros e clique em OK.

Etapa 2: Configurar permissões de acesso ao OSS

  1. Crie um usuário RAM e conceda as permissões necessárias.

    1. Crie um usuário RAM. Pule esta etapa se já possuir um usuário RAM.

      Acesse a página Criar Usuário no Console RAM e siga as instruções na tela para criar um usuário RAM. Especifique parâmetros como nome de login e senha.

    2. Crie uma política personalizada para acesso ao OSS. Para mais informações, consulte Criar uma política personalizada.

      Escolha entre as seguintes políticas de permissão de somente leitura e leitura/gravação conforme suas necessidades e substitua mybucket pelo nome do seu bucket.

      • Política de somente leitura do OSS

        Clique para visualizar a política de somente leitura

        {
            "Statement": [
                {
                    "Action": [
                        "oss:Get*",
                        "oss:List*"
                    ],
                    "Effect": "Allow",
                    "Resource": [
                        "acs:oss:*:*:mybucket",
                        "acs:oss:*:*:mybucket/*"
                    ]
                }
            ],
            "Version": "1"
        }
      • Política de leitura/gravação do OSS

        Clique para visualizar a política de leitura/gravação

        {
            "Statement": [
                {
                    "Action": "oss:*",
                    "Effect": "Allow",
                    "Resource": [
                        "acs:oss:*:*:mybucket",
                        "acs:oss:*:*:mybucket/*"
                    ]
                }
            ],
            "Version": "1"
        }
    3. (Opcional) Se você criptografa objetos do OSS com uma chave mestra de cliente (CMK) do Key Management Service (KMS), também deve conceder permissões do KMS ao usuário RAM. Para mais informações, consulte Criptografar volumes ossfs 1.0.

    4. Conceda as permissões do OSS ao usuário RAM. Para mais informações, consulte Gerenciar permissões de usuário RAM.

    5. O AccessKey criado será armazenado como um Secret para o PV.

      1. Acesse a página Usuários no Console RAM, clique em seu nome de usuário RAM e, na seção AccessKey, clique em Create AccessKey.

      2. Siga as instruções na tela para criar um AccessKey. Copie e armazene com segurança o AccessKey ID e o AccessKey Secret.

  2. Crie um secret para armazenar as credenciais de autenticação para acesso aos dados do OSS.

    O comando abaixo é um exemplo. Substitua akId e akSecret pelo seu AccessKey ID e AccessKey secret.

    kubectl create -n default secret generic strmvol-secret --from-literal='akId=xxxxxx' --from-literal='akSecret=xxxxxx'

Montar um volume strmvol

Etapa 1: Criar um volume strmvol

Volume estático

  1. Crie um PersistentVolume (PV).

    1. Crie um arquivo chamado strmvol-pv.yaml com o seguinte conteúdo.

      apiVersion: v1
      kind: PersistentVolume
      metadata:
        name: pv-strmvol
      spec:
        capacity:
        # The mounted OSS path can store a maximum of 16 TiB of data.
          storage: 20Gi
        # Only the ReadOnlyMany access mode is supported.
        accessModes:
          - ReadOnlyMany
        # To prevent accidental data loss, only the Retain policy is supported. 
        persistentVolumeReclaimPolicy: Retain
        csi:
          driver: strmvolplugin.csi.alibabacloud.com
          volumeHandle: pv-strmvol
          # Use the secret created in the prerequisite steps.
          nodeStageSecretRef:
            name: strmvol-secret
            namespace: default
          volumeAttributes:
            bucket: cnfs-oss-test
            path: /subpath
            # strmvol volumes only support accessing OSS data over an internal network.
            url: oss-cn-hangzhou-internal.aliyuncs.com
            umask: "000"
            directMode: "false"
            resourceLimit: "2c4g"
      • Parâmetros em nodeStageSecretRef

        Parâmetro

        Obrigatório

        Descrição

        name

        Sim

        Nome do secret que armazena as informações do AccessKey.

        namespace

        Sim

        Namespace do secret que contém as informações do AccessKey.

      • Parâmetros em volumeAttributes

        Parâmetro

        Obrigatório

        Descrição

        bucket

        Sim

        Bucket do OSS a ser montado.

        path

        Não

        Caminho do diretório a ser montado dentro do bucket do OSS. Este caminho é relativo à raiz do bucket.

        Importante

        Selecione um caminho de montagem baseado no princípio do menor privilégio.

        url

        Sim

        Endpoint interno para o OSS. Deve corresponder ao endpoint exibido na página Visão Geral do bucket no console do OSS. Formatos comuns para endpoints internos incluem:

        http://oss-{{regionName}}-internal.aliyuncs.com ou https://oss-{{regionName}}-internal.aliyuncs.com.

        Importante

        O formato de endpoint interno vpc100-oss-{{regionName}}.aliyuncs.com está obsoleto. Atualize para um novo formato o mais rápido possível.

        umask

        Não

        Máscara de permissão para o sistema de arquivos após a montagem do dispositivo de bloco virtual.

        Por exemplo, para definir as permissões padrão de arquivo como 755, defina umask como 022.

        directMode

        Não

        Define se o modo direto deve ser ativado.

        • "true": Ativa o modo direto, que desabilita o pré-busca de dados e o cache local. Adequado para cenários de leitura aleatória, como leitura em lote aleatória de conjuntos de dados de treinamento.

        • "false": Desativa o modo direto (padrão). Adequado para cenários de uso geral, como leituras sequenciais de arquivos pequenos ou leituras de arquivos grandes. Se sua aplicação não tiver um padrão específico de acesso a dados, mantenha este modo desativado.

        resourceLimit

        Não

        Recursos máximos do nó que o dispositivo de bloco virtual pode consumir.

        Por exemplo, "2c4g" indica que o dispositivo de bloco virtual pode usar até 2 vCPUs e 4 GiB de memória do nó.

        Nota
        • A memória é usada principalmente para pré-busca de dados e cache local. Quando o modo direto está ativado, o uso de memória é significativamente menor que o valor predefinido.

        • Para sistemas operacionais diferentes do Alibaba Cloud Linux 3, o desempenho de leitura é semelhante independentemente da configuração. Portanto, limites altos de recursos não são recomendados. Para mais informações, consulte Testes de desempenho de leitura de dados.

    2. Crie o PV.

      kubectl create -f strmvol-pv.yaml
    3. Verifique o status do PV.

      kubectl get pv pv-strmvol

      Saída esperada:

      NAME         CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   VOLUMEATTRIBUTESCLASS   REASON   AGE
      pv-strmvol   20Gi       ROX            Retain           Available                          <unset>                          18s
  2. Crie um PersistentVolumeClaim (PVC).

    1. Crie um arquivo chamado strmvol-pvc-static.yaml com o seguinte conteúdo.

      kind: PersistentVolumeClaim
      apiVersion: v1
      metadata:
        name: pvc-strmvol
        namespace: default
      spec:
        # The following settings must match the PV configuration.
        accessModes:
          - ReadOnlyMany
        resources:
          requests:
            storage: 20Gi
        volumeName: pv-strmvol
    2. Crie o PVC.

      kubectl create -f strmvol-pvc-static.yaml
    3. Verifique o status do PVC.

      kubectl get pvc pvc-strmvol

      A saída esperada mostra que o PVC agora está vinculado ao PV.

      NAME            STATUS   VOLUME       CAPACITY   ACCESS MODES   STORAGECLASS   VOLUMEATTRIBUTESCLASS   AGE
      pvc-strmvol-2   Bound    pv-strmvol   20Gi       ROX                           <unset>                 16s

Volume dinâmico

  1. Crie uma StorageClass.

    1. Crie um arquivo chamado strmvol-sc.yaml com o seguinte conteúdo.

      apiVersion: storage.k8s.io/v1
      kind: StorageClass
      metadata:
        name: strmvol-test
      parameters:
        # Use the secret created in the prerequisite steps.
        csi.storage.k8s.io/node-stage-secret-name: strmvol-secret  
        csi.storage.k8s.io/node-stage-secret-namespace: default
        bucket: cnfs-oss-test 
        path: /subpath
        # strmvol volumes only support accessing OSS data over an internal network.
        url: oss-cn-hangzhou-internal.aliyuncs.com 
        umask: "000"
        directMode: "false"
        resourceLimit: "2c4g"
      provisioner: strmvolplugin.csi.alibabacloud.com
      # To prevent accidental data loss, only the Retain policy is supported. 
      reclaimPolicy: Retain
      volumeBindingMode: Immediate

      Os parâmetros em parameters são descritos da seguinte forma:

      • Configuração do Secret

        Parâmetro

        Obrigatório

        Descrição

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

        Sim

        Nome do secret que armazena as informações do AccessKey.

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

        Sim

        Namespace do secret que contém as informações do AccessKey.

      • Configuração do volume

        Parâmetro

        Obrigatório

        Descrição

        bucket

        Sim

        Bucket do OSS a ser montado.

        path

        Não

        Caminho do diretório a ser montado dentro do bucket do OSS. Este caminho é relativo à raiz do bucket.

        Importante

        Selecione um caminho de montagem baseado no princípio do menor privilégio.

        url

        Sim

        Endpoint interno para o OSS. Deve corresponder ao endpoint exibido na página Visão Geral do bucket no console do OSS. Formatos comuns para endpoints internos incluem:

        http://oss-{{regionName}}-internal.aliyuncs.com ou https://oss-{{regionName}}-internal.aliyuncs.com.

        Importante

        O formato de endpoint interno vpc100-oss-{{regionName}}.aliyuncs.com está obsoleto. Atualize para um novo formato o mais rápido possível.

        umask

        Não

        Máscara de permissão para o sistema de arquivos após a montagem do dispositivo de bloco virtual.

        Por exemplo, para definir as permissões padrão de arquivo como 755, defina umask como 022.

        directMode

        Não

        Define se o modo direto deve ser ativado.

        • "true": Ativa o modo direto, que desabilita o pré-busca de dados e o cache local. Adequado para cenários de leitura aleatória, como leitura em lote aleatória de conjuntos de dados de treinamento.

        • "false": Desativa o modo direto (padrão). Adequado para cenários de uso geral, como leituras sequenciais de arquivos pequenos ou leituras de arquivos grandes. Se sua aplicação não tiver um padrão específico de acesso a dados, mantenha este modo desativado.

        resourceLimit

        Não

        Recursos máximos do nó que o dispositivo de bloco virtual pode consumir.

        Por exemplo, "2c4g" indica que o dispositivo de bloco virtual pode usar até 2 vCPUs e 4 GiB de memória do nó.

        Nota
        • A memória é usada principalmente para pré-busca de dados e cache local. Quando o modo direto está ativado, o uso de memória é significativamente menor que o valor predefinido.

        • Para sistemas operacionais diferentes do Alibaba Cloud Linux 3, o desempenho de leitura é semelhante independentemente da configuração. Portanto, limites altos de recursos não são recomendados. Para mais informações, consulte Testes de desempenho de leitura de dados.

    2. Crie a StorageClass.

      kubectl create -f strmvol-sc.yaml
  2. Crie um PVC.

    1. Crie um arquivo chamado strmvol-pvc-dynamic.yaml com o seguinte conteúdo.

      kind: PersistentVolumeClaim
      apiVersion: v1
      metadata:
        name: pvc-strmvol
        namespace: default
      spec:
        # Only the ReadOnlyMany access mode is supported.
        accessModes:
          - ReadOnlyMany
        # Specify the StorageClass.
        storageClassName: strmvol-test
        resources:
          requests:
            # The mounted OSS path can store a maximum of 16 TiB of data.
            storage: 20Gi
    2. Crie o PVC.

      kubectl create -f strmvol-pvc-dynamic.yaml
    3. Verifique o status do PVC.

      kubectl get pvc pvc-strmvol

      A saída esperada mostra que o PVC está vinculado a um PV provisionado automaticamente pelo driver CSI.

      NAME          STATUS   VOLUME                                         CAPACITY   ACCESS MODES   STORAGECLASS   VOLUMEATTRIBUTESCLASS   AGE
      pvc-strmvol   Bound    strmvol-d8d1d22a-e1d7-4caa-b875-54f378dec769   20Gi       ROX            strmvol-test   <unset>                 3m

Etapa 2: Criar uma aplicação e montar o volume

  1. Crie um arquivo chamado strmvol-test.yaml com o seguinte conteúdo.

    O exemplo YAML a seguir cria um StatefulSet com um pod. O pod solicita recursos de armazenamento usando um PVC chamado pvc-strmvol, e o caminho de montagem é /data.

    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: strmvol-test
      namespace: default
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: strmvol-test
      template:
        metadata:
          labels:
            app: strmvol-test
        spec:
          containers:
          - name: nginx
            image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
            ports:
            - containerPort: 80
            volumeMounts:
            - name: pvc-strmvol
              mountPath: /data
          volumes:
            - name: pvc-strmvol
              persistentVolumeClaim:
                claimName: pvc-strmvol
  2. Crie o StatefulSet.

    kubectl create -f strmvol-test.yaml
  3. Verifique o status de implantação do pod no StatefulSet.

    kubectl get pod -l app=strmvol-test

    Saída esperada:

    NAME             READY   STATUS    RESTARTS   AGE
    strmvol-test-0   1/1     Running   0          14s
  4. Verifique se o ponto de montagem é um dispositivo de bloco e se a aplicação consegue acessar os dados no OSS.

    kubectl exec -it strmvol-test-0 -- sh -c "df /data && ls /data"

    Saída esperada:

    Filesystem     1K-blocks  Used Available Use% Mounted on
    /dev/ublkb1        24812 24812         0 100% /data
    <data in OSS mount path>

Documentação relacionada

Testes de desempenho do cliente strmvol