O ossfs 1.0 oferece suporte ao dynamic provisioning, que cria automaticamente um volume persistente (PV) e monta um OSS Bucket com base em uma StorageClass e em uma PersistentVolumeClaim (PVC). Esse recurso elimina a configuração manual de PV
, simplifica significativamente o gerenciamento de armazenamento e é ideal para ambientes multilocatários ou cenários que exigem provisionamento de armazenamento frequente e sob demanda.
tmpfile
Requisitos
Seu cluster e componentes CSI (csi-plugin e csi-provisioner) devem atender aos seguintes requisitos:
-
Para autenticação usando RAM Roles for Service Accounts (RRSA): Seu cluster deve estar na versão 1.26 ou posterior, e a versão do CSI deve ser v1.30.4 ou posterior.
Se você utilizou o recurso RRSA em uma versão anterior à v1.30.4, consulte {{XREF_0}} para adicionar a configuração de autorização da função RAM necessária.
Para autenticação usando AccessKey: Para garantir a estabilidade da montagem, recomendamos a versão v1.18.8.45 ou posterior do CSI.
Para atualizar seu cluster, consulte {{XREF_1}}. Para atualizar os componentes CSI, consulte {{XREF_2}}.
A partir do CSI v1.30.4-*, {{XREF_3}} .
Etapa 1: Escolher um método de autenticação
Para garantir que seu cluster possa acessar recursos do OSS Bucket de forma segura e em conformidade, configure primeiro um método de autenticação.
{{XREF_4}}: Concede dinamicamente aos Pods funções RAM temporárias e com rotação automática para permitir isolamento de permissões granular no nível da aplicação. Este método é mais seguro.
{{XREF_5}}: Armazena chaves estáticas de longo prazo em um Secret. Este método é mais simples de configurar, mas menos seguro.
Para clusters executando a versão 1.26 ou posterior, recomendamos a autenticação RRSA para evitar reinicializações de cargas de trabalho e remontagens do ossfs causadas pela rotação de AccessKey.
Este exemplo pressupõe que o cluster e o {{XREF_6}} estejam na mesma conta Alibaba Cloud. Para {{XREF_7}}, recomendamos o uso da autenticação RRSA.
RRSA
1. Ativar RRSA para seu cluster
Na página ACK Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em Cluster Information.
-
Na aba Basic Information, na seção Security and Auditing, clique em Enabled à direita de RRSA OIDC. Siga as instruções na tela para ativar o RRSA fora do horário de pico.
Quando o status do cluster mudar de Updating para Running, o RRSA estará ativado.
ImportanteApós ativar o RRSA, o período máximo de validade dos tokens ServiceAccount recém-criados no cluster fica limitado a 12 horas.
2. Criar e autorizar uma função RAM
Crie uma função RAM que seus Pods possam assumir para acesso autenticado via RRSA ao volume de armazenamento OSS.
AccessKey
Crie um usuário RAM com permissões para acessar o OSS Bucket de destino e obtenha um AccessKey para esse usuário.
-
Crie um usuário RAM. Pule esta etapa se já possuir um usuário RAM.
Acesse a página Create User no RAM Console e siga as instruções na tela para criar um usuário RAM. Especifique parâmetros como nome de logon e senha.
-
Crie uma política de acesso.
Este exemplo segue o princípio do menor privilégio. {{XREF_13}} para conceder acesso ao OSS Bucket de destino. É possível conceder permissões somente leitura ou leitura/gravação.
-
Acesse a página Create Policy no RAM Console, alterne para o JSON Editor e configure o script da política.
Política somente leitura
Substitua
<myBucketName>pelo nome real do bucket.tmpfilePolítica de leitura/gravação do OSS
Substitua
<myBucketName>pelo nome real do bucket.tmpfileSe desejar criar um PV no console, você também precisará da permissão
oss:ListBuckets.tmpfile (Opcional) Se você usar um CMK ID específico gerenciado pelo KMS para criptografar objetos OSS, também deverá conceder permissões do KMS ao usuário RAM. Para mais informações, consulte {{XREF_14}}.
-
-
Anexe a política de acesso ao usuário RAM.
Acesse a página Users no RAM Console, localize o usuário criado e, na coluna Actions, clique em Add Permissions.
Na seção Policies, pesquise e selecione a política de acesso criada.
-
O AccessKey criado será armazenado como um Secret para o PV.
Acesse a página Users no RAM Console, clique no nome do seu usuário RAM e, na seção AccessKey, clique em Create AccessKey.
Siga as instruções na tela para criar um AccessKey. Copie e armazene com segurança o AccessKey ID e o AccessKey Secret.
Etapa 2: Criar uma StorageClass
Crie uma StorageClass para definir um modelo de provisionamento de volumes persistentes.
Método RRSA
-
Crie um arquivo chamado
sc-oss.yaml.tmpfileParâmetro
Descrição
bucketO bucket OSS a ser montado.
regionAo usar a assinatura OSS v4, defina este valor como a região OSS onde o bucket está localizado. Para consultar a região OSS, consulte {{XREF_15}}.
Quando este parâmetro é definido,
v4é usado automaticamente como versão da assinatura OSS.pathA versão do componente CSI deve ser v1.14.8.32-c77e277b-aliyun ou posterior.
O caminho de montagem relativo ao diretório raiz do bucket. O valor padrão é
/, que monta o bucket inteiro.Se a {{XREF_16}} for anterior a 1.91, o
pathespecificado deve existir no bucket OSS. Para mais informações, consulte {{XREF_17}}.urlO {{XREF_18}} do OSS Bucket a ser montado.
Use um endpoint interno se o nó de montagem e o bucket estiverem na mesma região, ou se houver uma conexão VPC estabelecida.
Use um endpoint público se o nó de montagem e o bucket estiverem em regiões diferentes.
Os formatos comuns para diferentes portas de acesso são:
Formato de rede interna:
https://oss-{{regionName}}-internal.aliyuncs.com.O formato de endpoint interno
vpc100-oss-{{regionName}}.aliyuncs.comfoi descontinuado. Migre para o novo formato prontamente.Formato de rede pública:
https://oss-{{regionName}}.aliyuncs.com.
Por questões de segurança, recomendamos {{XREF_19}}. Para usar HTTP, substitua o prefixo
https://nos formatos acima porhttp://.authTypeDefina este parâmetro como
rrsapara usar RRSA na autenticação.roleNameA função RAM que você criou ou modificou.
Para configurar permissões diferentes para StorageClasses distintas, crie múltiplas funções RAM e especifique valores
roleNamediferentes em cada StorageClass.otherOptsParâmetros personalizados para o volume persistente OSS, no formato
-o -o. Exemplo:-o umask=022 -o max_stat_cache_size=100000 -o allow_other.provisionerO tipo de driver. Este valor é fixo em
ossplugin.csi.alibabacloud.comao usar o plug-in CSI do Alibaba Cloud OSS.reclaimPolicyA política de recuperação para volumes persistentes provisionados dinamicamente. Volumes persistentes OSS suportam apenas
Retain, o que significa que, ao excluir uma PVC, o volume persistente correspondente e os dados no bucket OSS não são excluídos.volumeBindingModeO modo de vinculação de volume.
Volumes persistentes OSS não exigem afinidade de nó baseada em zona de disponibilidade. Você pode usar o valor padrão
Immediate.volumeAsO modo de acesso ao volume. O valor padrão é
sharepath. Valores válidos:sharepath: Todos os volumes persistentes compartilham o mesmo caminho de montagem. Os dados são armazenados em<bucket>:<path>/.subpath: Cria um subdiretório dedicado para cada volume persistente visando isolar dados. Os dados são armazenados em<bucket>:<path>/<pv-name>/.Este parâmetro entra em vigor apenas quando a versão do componente CSI é 1.31.3 ou posterior.
sigVersionA versão da assinatura para solicitações enviadas ao servidor OSS.
"v1"(Padrão): Usa {{XREF_22}} do OSS."v4"(Recomendado): Usa {{XREF_23}} do OSS.
-
Crie a StorageClass.
tmpfile
Método AccessKey
kubectl
1. Criar uma StorageClass
-
Crie um Secret no mesmo namespace da sua aplicação.
Substitua
akIdeakSecretpelo seu AccessKey ID e AccessKey Secret.tmpfile -
Crie a StorageClass.
-
Crie um arquivo chamado
sc-oss.yaml.tmpfileParâmetro
Descrição
nameO nome da StorageClass.
bucketO bucket OSS a ser montado.
regionAo usar a assinatura OSS v4, defina este valor como a região OSS onde o bucket está localizado. Para consultar a região OSS, consulte {{XREF_24}}.
Quando este parâmetro é definido,
v4é usado automaticamente como versão da assinatura OSS.pathA versão do componente CSI deve ser v1.14.8.32-c77e277b-aliyun ou posterior.
O caminho de montagem relativo ao diretório raiz do bucket. O valor padrão é
/, que monta o bucket inteiro.Se a {{XREF_25}} for anterior a 1.91, o
pathespecificado deve existir no bucket OSS. Para mais informações, consulte {{XREF_26}}.urlO {{XREF_27}} do OSS Bucket a ser montado.
Use um endpoint interno se o nó de montagem e o bucket estiverem na mesma região, ou se houver uma conexão VPC estabelecida.
Use um endpoint público se o nó de montagem e o bucket estiverem em regiões diferentes.
Os formatos comuns para diferentes portas de acesso são:
Formato de rede interna:
https://oss-{{regionName}}-internal.aliyuncs.com.O formato de endpoint interno
vpc100-oss-{{regionName}}.aliyuncs.comfoi descontinuado. Migre para o novo formato prontamente.Formato de rede pública:
https://oss-{{regionName}}.aliyuncs.com.
Por questões de segurança, recomendamos {{XREF_28}}. Para usar HTTP, substitua o prefixo
https://nos formatos acima porhttp://.csi.storage.k8s.io/node-publish-secret-nameO nome do Secret que armazena as informações do AccessKey.
csi.storage.k8s.io/node-publish-secret-namespaceO namespace onde o Secret que armazena as informações do AccessKey está localizado.
otherOptsParâmetros personalizados para o volume persistente OSS, no formato
-o -o. Exemplo:-o umask=022 -o max_stat_cache_size=100000 -o allow_other.provisionerO tipo de driver. Este valor é fixo em
ossplugin.csi.alibabacloud.comao usar o plug-in CSI do Alibaba Cloud OSS.reclaimPolicyA política de recuperação para volumes persistentes provisionados dinamicamente. Volumes persistentes OSS suportam apenas
Retain, o que significa que, ao excluir uma PVC, o volume persistente correspondente e os dados no bucket OSS não são excluídos.volumeBindingModeO modo de vinculação de volume.
Volumes persistentes OSS não exigem afinidade de nó baseada em zona de disponibilidade. Você pode usar o valor padrão
Immediate.volumeAsO modo de acesso ao volume. O valor padrão é
sharepath. Valores válidos:sharepath: Todos os volumes persistentes compartilham o mesmo caminho de montagem. Os dados são armazenados em<bucket>:<path>/.subpath: Cria um subdiretório dedicado para cada volume persistente visando isolar dados. Os dados são armazenados em<bucket>:<path>/<pv-name>/.Este parâmetro entra em vigor apenas quando a versão do componente CSI é 1.31.3 ou posterior.
sigVersionA versão da assinatura para solicitações enviadas ao servidor OSS.
"v1"(Padrão): Usa {{XREF_31}} do OSS."v4"(Recomendado): Usa {{XREF_32}} do OSS.
-
Crie a StorageClass.
tmpfile
-
Console
-
Armazene o AccessKey de {{XREF_33}} como um Secret para o volume persistente.
Na página ACK Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em .
-
Clique em Create from YAML e siga as instruções na tela para criar o Secret.
tmpfile
Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em .
-
Na página StorageClasses, clique em Create, defina PV Type como OSS e siga as instruções na tela para configurar a StorageClass.
Parâmetro
Descrição
Certificado de acesso
O Secret usado para acessar o OSS, contendo o AccessKey ID e o AccessKey Secret.
Bucket ID:
O bucket OSS a ser utilizado.
O console exibe apenas os buckets que o AccessKey configurado pode acessar.
Caminho OSS
A versão do componente CSI deve ser v1.14.8.32-c77e277b-aliyun ou posterior.
O caminho de montagem relativo ao diretório raiz do bucket. O valor padrão é
/, que monta o bucket inteiro.Se a {{XREF_34}} for anterior a 1.91, o
pathespecificado deve existir no bucket OSS. Para mais informações, consulte {{XREF_35}}.Volume Mode
O modo de acesso ao volume. O padrão é Shared Directory. Valores válidos:
O modo Subdirectory entra em vigor apenas quando a versão do componente CSI é 1.31.3 ou posterior. Caso contrário, o modo Shared Directory é utilizado.
Shared Directory (
sharepath): Todos os volumes persistentes compartilham o mesmo caminho de montagem. Os dados são armazenados em<bucket>:<path>/.Subdirectory (
subpath): Cria um subdiretório dedicado para cada volume persistente visando isolar dados. Os dados são armazenados em<bucket>:<path>/<pv-name>/.
Endpoint
O endpoint de acesso para o bucket OSS.
Use um endpoint interno se os nós do cluster e o bucket estiverem na mesma região, ou se houver uma conexão Virtual Private Cloud (VPC) estabelecida.
Use um endpoint público se o nó de montagem e o bucket estiverem em regiões diferentes.
Os formatos comuns para diferentes endpoints de acesso são:
Interno:
http://oss-{{regionName}}-internal.aliyuncs.comouhttps://oss-{{regionName}}-internal.aliyuncs.com.NotaO formato de endpoint de acesso interno
vpc100-oss-{{regionName}}.aliyuncs.comfoi descontinuado. Migre para o novo formato assim que possível.Público:
http://oss-{{regionName}}.aliyuncs.comouhttps://oss-{{regionName}}.aliyuncs.com.
Por padrão, o console usa HTTP para acessar o OSS via rede interna. Para usar HTTPS, crie o PV utilizando {{XREF_36}}.
Política de recuperação
A política de recuperação para volumes persistentes provisionados dinamicamente. Volumes persistentes OSS suportam apenas
Retain, o que significa que, ao excluir uma PVC, o volume persistente correspondente e os dados no bucket OSS não são excluídos.Optional Parameters:
Parâmetros personalizados para o volume persistente OSS, no formato
-o -o. Exemplo:-o umask=022 -o max_stat_cache_size=100000 -o allow_other.
Etapa 3: Criar uma PVC
Crie uma PVC para solicitar recursos de armazenamento dinamicamente. O plug-in CSI cria automaticamente um PV com base na StorageClass.
kubectl
-
Crie um arquivo chamado
pvc-oss.yaml:tmpfileParâmetro
Descrição
accessModesEspecifica o modo de acesso. Os valores suportados são
ReadOnlyManyeReadWriteMany.Se definido como
ReadOnlyMany, o ossfs monta o bucket OSS no modo somente leitura.storageA capacidade solicitada do volume. Este valor não limita a capacidade real do volume OSS.
storageClassNameO nome da StorageClass.
-
Crie a PVC:
tmpfile -
Verifique se a PVC foi criada e está no estado Bound:
tmpfileSaída esperada:
tmpfile
Console
Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em .
-
Na página Persistent Volume Claims, clique em Create. Defina PVC Type como OSS e configure os parâmetros.
Parâmetro
Descrição
Allocation Mode
Selecione Use StorageClass.
Existing Storage Class
Clique em Select Storage Class e escolha a StorageClass criada anteriormente.
Capacidade
A capacidade solicitada do volume. Este valor não limita a capacidade real do volume OSS.
Access Mode
Especifica o modo de acesso. Os valores suportados são
ReadOnlyManyeReadWriteMany.Se definido como
ReadOnlyMany, o ossfs monta o bucket OSS no modo somente leitura.
Etapa 4: Criar uma aplicação e montar um volume
Para montar o volume, referencie a PVC na sua aplicação.
kubectl
-
Crie um arquivo
oss-workload.yaml.tmpfile -
Crie a aplicação.
tmpfile -
Verifique a montagem.
-
Confirme se os Pods estão em execução.
tmpfile -
Acesse um Pod e verifique o ponto de montagem.
tmpfileA saída deve listar os arquivos no caminho de montagem do OSS.
-
Console
Na página ACK Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em .
No canto superior direito da página Deployments, clique em Create from Image.
-
Clique em Create from Image e siga as instruções na tela para configurar os parâmetros da aplicação.
Os principais parâmetros estão descritos na tabela a seguir. Para os demais parâmetros, utilize os valores padrão. Para mais informações, consulte {{XREF_39}}.
Página de configuração
Parâmetro
Descrição
Basic Information
Replicas:
O número de réplicas de Pod para o Deployment.
Container
Nome da imagem
O endereço da imagem do contêiner para a aplicação, como
anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6.Required Resources
A quantidade de vCPU e memória a ser alocada para cada contêiner.
Volume
Clique em Add PVC e configure os parâmetros.
Mount Source: Selecione a PVC criada anteriormente.
Container Path: O caminho dentro do contêiner onde o volume será montado, como
/data.
Labels and Annotations
Rótulo do Pod
Por exemplo, defina a chave como 'app' e o valor como 'nginx'.
-
Verifique o status de implantação da aplicação.
Na página Deployments, clique no nome da sua aplicação. Na aba Pods, verifique se os Pods apresentam status Running.
Etapa 5: Verificar armazenamento compartilhado e persistente
Verificar armazenamento compartilhado
Para verificar o armazenamento compartilhado, crie um arquivo em um Pod e visualize-o em outro.
-
Obtenha os nomes dos Pods da aplicação.
tmpfile -
Este exemplo utiliza o Pod
oss-workload-66fbb85b67-d****:-
ReadWriteMany: Crie o arquivo tmpfile no caminho/data.tmpfile ReadOnlyMany: Envie o arquivotmpfilepara o caminho correspondente no bucket OSS usando o console OSS ou {{XREF_40}}.
-
-
Verifique a presença do arquivo no caminho de montagem de outro Pod.
Tome como exemplo um Pod chamado
oss-workload-66fbb85b67-l****com o caminho de montagemdata.tmpfileA presença do arquivo na saída confirma que os Pods podem compartilhar dados.
tmpfileSe não visualizar a saída esperada, certifique-se de que a versão do {{XREF_41}} seja v1.20.7 ou posterior.
Verificar armazenamento persistente
Para verificar o armazenamento persistente, exclua um Pod e confirme se o arquivo permanece após a recriação automática do Pod.
-
Exclua um Pod da aplicação. O controlador de Deployment o recriará automaticamente.
tmpfile -
Verifique o status dos Pods. Aguarde até que o novo Pod inicie e fique como
Running.tmpfile -
Visualize os arquivos no caminho
/data.Este exemplo usa um Pod chamado
oss-workload-66fbb85b67-z****com o caminho de montagemdata.tmpfileA saída mostra que o arquivo
tmpfileainda existe, confirmando que os dados persistem mesmo após a recriação do Pod.tmpfile
Impactos conhecidos
-
Riscos de integridade de dados
Risco de consistência em gravações simultâneas: Para melhorar a estabilidade de gravação, recomendamos atualizar o {{XREF_42}} para v1.28 ou posterior. No entanto, em cenários de gravação simultânea em arquivo único, o recurso de "upload por sobrescrita" do OSS ainda pode sobrescrever dados. Garanta a consistência dos dados na camada de aplicação.
Risco de sincronização de dados e exclusão acidental: Quando um volume é montado, excluir ou modificar arquivos no caminho de montagem em um Pod de aplicação ou nó host sincroniza essas alterações diretamente com os arquivos de origem no OSS Bucket. Para evitar exclusão acidental de dados, recomendamos ativar {{XREF_43}} para seu OSS Bucket.
-
Riscos de estabilidade da aplicação
-
Risco de OOM: Ao executar uma operação
readdir(como o comandolsem um script shell) em um grande número de arquivos (por exemplo, mais de 100.000, dependendo da memória do nó) pela primeira vez, o ossfs carrega todos os metadados de uma vez e consome muita memória. Isso pode causar OOM Killed no processo e tornar o ponto de montagem indisponível.Para mitigar esse risco, recomendamos montar um subdiretório do OSS Bucket ou otimizar sua estrutura de diretórios.
-
Tempo de montagem estendido: Configurar
securityContext.fsgroupem uma aplicação faz com que o kubelet modifique recursivamente as permissões de arquivo (chmod/chown) ao montar um volume. Se o volume contiver muitos arquivos, o tempo de montagem aumenta significativamente, podendo causar atrasos graves na inicialização do Pod.Se precisar configurar este parâmetro, mas quiser reduzir o tempo de montagem, consulte {{XREF_44}}.
-
Risco de invalidação de chave (Autenticação AccessKey): Se um AccessKey referenciado por um PV tornar-se inválido ou suas permissões forem alteradas, a aplicação associada perde o acesso imediatamente.
Para restaurar o acesso, atualize as credenciais no Secret e reinicie o Pod da aplicação para forçar uma remontagem. Isso causa interrupção do serviço, portanto execute esta operação durante uma janela de manutenção. Para mais informações, consulte {{XREF_45}}.
-
-
Riscos de custo
Custos de partes: Ao enviar arquivos maiores que 10 MB, o ossfs realiza upload multipartido, dividindo o arquivo em partes. Se um upload for interrompido inesperadamente, por exemplo devido à reinicialização da aplicação, você deve {{XREF_46}} ou {{XREF_47}} para evitar custos de armazenamento decorrentes de partes incompletas.
Liberação de recursos
-
Excluir cargas de trabalho
Ação: Exclua todas as cargas de trabalho, como Deployments e StatefulSets, que usam a PVC. Isso interrompe os Pods e desmonta o volume.
Comando de exemplo:
kubectl delete deployment <your-deployment-name>
-
Excluir a PVC
Ação: Exclua a PVC. A política de recuperação (
reclaimPolicy) para volumes OSS provisionados dinamicamente suporta apenasRetain. Ao excluir a PVC, seu PV vinculado entra no estadoReleased, e o bucket OSS backend retém totalmente o subdiretório e os dados correspondentes.Comando de exemplo:
kubectl delete pvc <your-pvc-name>
-
Excluir o PV
Ação: Exclua o PV no estado
Released. Esta operação remove apenas o objeto de recurso PV do Kubernetes e não exclui nenhum dado no bucket OSS backend.Comando de exemplo:
kubectl delete pv <your-pv-name>
-
Excluir a StorageClass e o Secret (opcional)
Ação: Exclua a StorageClass e o Secret associado se não forem mais necessários. Esta operação remove apenas os objetos de recurso do Kubernetes e não afeta o bucket OSS backend.
Comandos de exemplo:
kubectl delete sc <your-storageclass-name>,kubectl delete secret <your-secret-name>
Documentos relacionados
Gerencie volumes OSS usando CNFS para melhorar desempenho e QoS. Para mais informações, consulte {{XREF_48}}.
Ative a criptografia no lado do servidor para proteger dados sensíveis em repouso no OSS. Para mais informações, consulte {{XREF_49}}.
Para perguntas frequentes sobre ossfs e OSS, consulte {{XREF_50}} e {{XREF_51}}.
Ative {{XREF_52}} e configure alertas para detectar prontamente anomalias de volume ou gargalos de desempenho.
O ossfs 1.0 oferece consistência de dados mais forte para gravações aleatórias e simultâneas do que {{XREF_53}}. No entanto, o ossfs 2.0 oferece melhor desempenho para leituras e gravações sequenciais.