Todos os produtos
Search
Central de documentação

Container Service for Kubernetes:Optimize OSS small file reads with strmvol volumes

Última atualização: Oct 21, 2026

Em cenários com contêineres, sistemas de arquivos tradicionais baseados em FUSE (como o ossfs) costumam ser usados para montar dados de armazenamento de objetos. Para cargas de trabalho com leitura intensiva de arquivos pequenos — como o carregamento de conjuntos de dados de treinamento de IA ou a análise de logs de séries temporais que precisam percorrer rapidamente milhões de arquivos pequenos — as abordagens tradicionais têm dificuldade em atender aos requisitos de alto throughput e baixa latência. Recomendamos o uso de dispositivos de bloco virtuais: monte os dados do armazenamento de objetos diretamente por meio de volumes strmvol para otimizar 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, o dispositivo de bloco virtual cria um índice de metadados de arquivos. Isso consome recursos do nó e mantém o pod no estado ContainerCreating. O tempo e os recursos consumidos aumentam de acordo com a quantidade de arquivos no caminho de montagem.

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

      Se a Aplicação A acessar /app/a/ e a Aplicação B acessar /app/b/ no mesmo bucket, crie volumes separados com os caminhos de montagem /app/a/ e /app/b/.

    • Para saber mais sobre a sobrecarga de inicialização, consulte Metadata index construction.

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

  • Cada dispositivo de bloco virtual tem capacidade de 16 TiB, o que limita o caminho montado do OSS a 16 TiB de dados.

Requisitos de cluster e nós

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

  • Os nós requerem o kernel 4.19 ou posterior. Recomendação: pelo menos 4 vCPUs e 8 GiB de memória.

  • Sistemas operacionais suportados: Alibaba Cloud Linux 3, Alibaba Cloud Linux 2 e CentOS 7. Para obter o melhor desempenho de acesso a dados com o sistema operacional erofs, use o Alibaba Cloud Linux 3.

    Nota

    O CentOS 7 e o Alibaba Cloud Linux 2 atingiram o fim de vida útil (EOL). Consulte [[Product Change] Announcement on the Discontinuation of Support for Alibaba Cloud Linux 2 and CentOS 7](t2602809.xdita#).

  • Não é possível montar volumes strmvol em pods serverless em nós virtuais.

Pré-requisitos

Etapa 1: Implantar o strmvol-csi-driver

O strmvol-csi-driver é executado de forma independente do csi-provisioner e do csi-plugin gerenciados pelo ACK.

  1. Faça login no ACK console. 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 do aplicativo, clique em Deploy.

  4. No painel exibido, configure as definições e clique em OK.

Etapa 2: Configurar permissões de acesso ao OSS

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

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

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

    2. Create a custom policy para acesso ao OSS.

      Selecione uma política de somente leitura ou de leitura e gravação 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 e gravação do OSS

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

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

    4. Conceda permissões do OSS ao usuário do RAM. Consulte Manage RAM user permissions.

    5. A AccessKey criada será armazenada como um Secret para o PV.

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

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

  2. Crie um secret para armazenar as credenciais de acesso ao OSS.

    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.

      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

        O nome do secret para a AccessKey.

        namespace

        Sim

        O namespace do secret da AccessKey.

      • Parâmetros em volumeAttributes

        Parâmetro

        Obrigatório

        Descrição

        bucket

        Sim

        O bucket do OSS a ser montado.

        path

        Não

        O caminho do diretório dentro do bucket do OSS, em relação à raiz do bucket.

        Importante

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

        url

        Sim

        O endpoint interno do OSS. Deve corresponder ao endpoint na página Visão Geral do bucket no console do OSS. Formatos comuns:

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

        Importante

        O formato vpc100-oss-{{regionName}}.aliyuncs.com foi descontinuado. Atualize para um formato suportado.

        umask

        Não

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

        Por exemplo, defina umask como 022 para permissões de arquivo 755.

        directMode

        Não

        Especifica se o modo direto deve ser ativado.

        • "true": Ativa o modo direto, desabilitando o pré-carregamento de dados e o cache local. Adequado para cenários de leitura aleatória, como a leitura em lote 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. Use esta opção se o seu aplicativo não tiver um padrão de acesso específico.

        resourceLimit

        Não

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

        Por exemplo, "2c4g" significa até 2 vCPUs e 4 GiB de memória.

        Nota
        • A memória é usada para pré-carregamento e armazenamento em cache de dados. No modo direto, o uso de memória é muito menor do que o valor predefinido.

        • Para sistemas que não sejam Alibaba Cloud Linux 3, o desempenho de leitura varia pouco conforme a configuração. Limites altos de recursos não são recomendados. Consulte Data read performance tests.

    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.

      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 mostra que o PVC 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.

      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

      Campos de parameters:

      • Configuração do secret

        Parâmetro

        Obrigatório

        Descrição

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

        Sim

        O nome do secret para a AccessKey.

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

        Sim

        O namespace do secret da AccessKey.

      • Configuração do volume

        Parâmetro

        Obrigatório

        Descrição

        bucket

        Sim

        O bucket do OSS a ser montado.

        path

        Não

        O caminho do diretório dentro do bucket do OSS, em relação à raiz do bucket.

        Importante

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

        url

        Sim

        O endpoint interno do OSS. Deve corresponder ao endpoint na página Visão Geral do bucket no console do OSS. Formatos comuns:

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

        Importante

        O formato vpc100-oss-{{regionName}}.aliyuncs.com foi descontinuado. Atualize para um formato suportado.

        umask

        Não

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

        Por exemplo, defina umask como 022 para permissões de arquivo 755.

        directMode

        Não

        Especifica se o modo direto deve ser ativado.

        • "true": Ativa o modo direto, desabilitando o pré-carregamento de dados e o cache local. Adequado para cenários de leitura aleatória, como a leitura em lote 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. Use esta opção se o seu aplicativo não tiver um padrão de acesso específico.

        resourceLimit

        Não

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

        Por exemplo, "2c4g" significa até 2 vCPUs e 4 GiB de memória.

        Nota
        • A memória é usada para pré-carregamento e armazenamento em cache de dados. No modo direto, o uso de memória é muito menor do que o valor predefinido.

        • Para sistemas que não sejam Alibaba Cloud Linux 3, o desempenho de leitura varia pouco conforme a configuração. Limites altos de recursos não são recomendados. Consulte Data read performance tests.

    2. Crie a StorageClass.

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

    1. Crie um arquivo chamado strmvol-pvc-dynamic.yaml.

      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 mostra o PVC vinculado a um PV provisionado automaticamente.

      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 um aplicativo e montar o volume

  1. Crie um arquivo chamado strmvol-test.yaml.

    Este StatefulSet cria um pod que usa o PVC pvc-strmvol, montado em /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 do pod.

    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 os dados do OSS estão acessíveis.

    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

strmvol client performance tests