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.
NotaO 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.
Faça login no ACK console. No painel de navegação à esquerda, escolha .
Na página Marketplace, pesquise por strmvol-csi-driver e clique em seu cartão.
Na página de detalhes do aplicativo, clique em Deploy.
No painel exibido, configure as definições e clique em OK.
Etapa 2: Configurar permissões de acesso ao OSS
-
Crie um usuário do RAM e conceda as permissões necessárias.
-
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.
-
Create a custom policy para acesso ao OSS.
Selecione uma política de somente leitura ou de leitura e gravação e substitua
mybucketpelo nome do seu bucket.-
Política de somente leitura do OSS
-
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" }
-
(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.
Conceda permissões do OSS ao usuário do RAM. Consulte Manage RAM user permissions.
-
A AccessKey criada será armazenada como um Secret para o PV.
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.
Siga as instruções na tela para criar uma AccessKey. Copie e armazene com segurança o AccessKey ID e o AccessKey Secret.
-
-
Crie um secret para armazenar as credenciais de acesso ao OSS.
Substitua
akIdeakSecretpelo 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
-
Crie um PersistentVolume (PV).
-
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
nodeStageSecretRefParâmetro
Obrigatório
Descrição
nameSim
O nome do secret para a AccessKey.
namespaceSim
O namespace do secret da AccessKey.
-
Parâmetros em
volumeAttributesParâmetro
Obrigatório
Descrição
bucketSim
O bucket do OSS a ser montado.
pathNão
O caminho do diretório dentro do bucket do OSS, em relação à raiz do bucket.
ImportanteSelecione um caminho de montagem com base no princípio do menor privilégio.
urlSim
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.comouhttps://oss-{{regionName}}-internal.aliyuncs.com.ImportanteO formato
vpc100-oss-{{regionName}}.aliyuncs.comfoi descontinuado. Atualize para um formato suportado.umaskNão
A máscara de permissão para o sistema de arquivos após a montagem do dispositivo de bloco virtual.
Por exemplo, defina
umaskcomo022para permissões de arquivo755.directModeNã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.
resourceLimitNã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.
-
-
-
Crie o PV.
kubectl create -f strmvol-pv.yaml -
Verifique o status do PV.
kubectl get pv pv-strmvolSaída esperada:
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS VOLUMEATTRIBUTESCLASS REASON AGE pv-strmvol 20Gi ROX Retain Available <unset> 18s
-
-
Crie um PersistentVolumeClaim (PVC).
-
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 -
Crie o PVC.
kubectl create -f strmvol-pvc-static.yaml -
Verifique o status do PVC.
kubectl get pvc pvc-strmvolA 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
-
Crie uma StorageClass.
-
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: ImmediateCampos de
parameters:-
Configuração do secret
Parâmetro
Obrigatório
Descrição
csi.storage.k8s.io/node-stage-secret-nameSim
O nome do secret para a AccessKey.
csi.storage.k8s.io/node-stage-secret-namespaceSim
O namespace do secret da AccessKey.
-
Configuração do volume
Parâmetro
Obrigatório
Descrição
bucketSim
O bucket do OSS a ser montado.
pathNão
O caminho do diretório dentro do bucket do OSS, em relação à raiz do bucket.
ImportanteSelecione um caminho de montagem com base no princípio do menor privilégio.
urlSim
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.comouhttps://oss-{{regionName}}-internal.aliyuncs.com.ImportanteO formato
vpc100-oss-{{regionName}}.aliyuncs.comfoi descontinuado. Atualize para um formato suportado.umaskNão
A máscara de permissão para o sistema de arquivos após a montagem do dispositivo de bloco virtual.
Por exemplo, defina
umaskcomo022para permissões de arquivo755.directModeNã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.
resourceLimitNã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.
-
-
-
Crie a StorageClass.
kubectl create -f strmvol-sc.yaml
-
-
Crie um PVC.
-
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 -
Crie o PVC.
kubectl create -f strmvol-pvc-dynamic.yaml -
Verifique o status do PVC.
kubectl get pvc pvc-strmvolA 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
-
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 -
Crie o StatefulSet.
kubectl create -f strmvol-test.yaml -
Verifique o status do pod.
kubectl get pod -l app=strmvol-testSaída esperada:
NAME READY STATUS RESTARTS AGE strmvol-test-0 1/1 Running 0 14s -
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>