Todos os produtos
Search
Central de documentação

Container Service for Kubernetes:Usar volumes do OSS

Última atualização: Jun 27, 2026

O Alibaba Cloud Object Storage Service (OSS) é um serviço massivo, seguro, de baixo custo e altamente confiável para armazenar dados não estruturados, como imagens, áudio e arquivos de vídeo. Este artigo descreve como montar um bucket do OSS em um Pod ECI usando uma PersistentVolumeClaim (PVC) em um cluster ACK Serverless.

Pré-requisitos

É necessário ter um cluster ACK Serverless. Para mais informações, consulte Criar um cluster.

Observações de uso

  • O OSS oferece armazenamento compartilhado. É possível montar um único bucket do OSS em vários Pods.

  • Evite armazenar mais de 1.000 arquivos no diretório de montagem. Se a quantidade de arquivos for muito alta, o ossfs pode consumir memória excessiva e causar um erro de Out of Memory (OOM) no Pod.

Procedimento

  1. Obtenha as informações do seu bucket do OSS.

    Caso ainda não tenha um bucket do OSS, crie um no console do OSS. Para mais informações, consulte Criar um bucket.

    1. Faça login no console do OSS. No painel de navegação à esquerda, clique em Bucket List.

    2. Na página Bucket List, clique em nome do bucket desejado.

    3. Na página de detalhes do bucket, clique em aba Overview. Na seção Access Port, copie o endpoint desejado.

      • Se o bucket e o cluster estiverem na mesma região, copie o endpoint da VPC.

      • Se o bucket e o cluster estiverem em regiões diferentes, copie o endpoint da Internet.

  2. Escolha um método de autorização.

  3. Crie um arquivo chamado test-ack-oss.yaml com o seguinte conteúdo.

    Nota

    Este exemplo utiliza um ambiente de VPC. Para acesso via VPC, certifique-se de que a instância, o repositório de imagens de contêiner e o endpoint do OSS estejam na mesma região, como China (Pequim).

    Se precisar montar o OSS ou baixar imagens entre regiões, configure o acesso à internet e altere o endereço da image ou a url do OSS para o formato de acesso à internet correspondente no código abaixo.

    • image: Defina como registry.cn-beijing.aliyuncs.com/eci_open/nginx:1.14.2.

    • url: O endpoint público.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: test-ack-oss
      labels:
        alibabacloud.com/eci: "true"
    spec:
      replicas: 2
      selector:
        matchLabels:
          alibabacloud.com/eci: "true"
      template:
        metadata:
          labels:
            alibabacloud.com/eci: "true"
        spec:
          containers:
          - name: nginx
            image: registry-vpc.cn-beijing.aliyuncs.com/eci_open/nginx:1.14.2
            ports:
            - containerPort: 80
            volumeMounts:
              - name: cache-volume
                mountPath: /cache-test
          volumes:
            - name: cache-volume
              persistentVolumeClaim:
                claimName: oss-pvc
    ---
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: oss-pvc
    spec:
      storageClassName: test
      accessModes:
        - ReadWriteMany
      resources:
        requests:
          storage: 5Gi
      selector:
        matchLabels:
          alicloud-pvname: pv-oss
    ---
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: oss-csi-pv
      labels:
        alicloud-pvname: pv-oss
    spec:
      storageClassName: test
      capacity:
        storage: 5Gi
      accessModes:
        - ReadWriteMany
      persistentVolumeReclaimPolicy: Retain
      csi:
        driver: ossplugin.csi.alibabacloud.com
        volumeHandle: oss-csi-pv
        volumeAttributes:
          bucket: "oss-test"
          url: "oss-cn-beijing-internal.aliyuncs.com"
          otherOpts: "-o max_stat_cache_size=0 -o allow_other"
          ramRole: "<your RAM Role Name>"

    O exemplo anterior usa uma função do RAM para autorização. Se precisar usar um AccessKey para autorização direta, substitua ramRole: "<your RAM Role Name>" pelo seguinte YAML:

          akId: "<your AccessKey ID>"
          akSecret: "<your AccessKey Secret>"
    Nota

    Para montar um bucket do OSS de outra conta, configure o AccessKey ID e o AccessKey Secret da conta de destino.

    Os seguintes parâmetros relacionados ao OSS devem ser configurados em volumeAttributes:

    Parâmetro

    Descrição

    bucket

    Nome do bucket do OSS.

    path

    Caminho do subdiretório no bucket a ser montado. O padrão é /, que monta o bucket inteiro. Por exemplo, definir isso como /data monta apenas o diretório data no bucket.

    url

    Endpoint do OSS obtido na Etapa 1.

    • Use o endpoint da VPC se o bucket e o cluster estiverem na mesma região.

    • Use o endpoint da Internet se o bucket e o cluster estiverem em regiões diferentes.

    otherOpts

    Ao montar o OSS, insira parâmetros personalizados no formato -o -o . Exemplo: -o max_stat_cache_size=0 -o allow_other.

    ramRole

    Função do RAM usada para autorização.

    akId

    AccessKey ID usado para autorização.

    AccessKeySecret

    AccessKey Secret usado para autorização.

  4. Execute o comando a seguir para criar os Pods ECI e montar o volume do OSS.

    kubectl create -f test-ack-oss.yaml
  5. Execute o comando a seguir para verificar os Pods.

    kubectl get pods -o wide

    A saída esperada é semelhante à seguinte:

    NAME                              READY   STATUS    RESTARTS   AGE     IP              NODE                           NOMINATED NODE   READINESS GATES
    test-ack-oss-655db9d64d-5q7d9     1/1     Running   0          46s     172.16.XX.XXX   virtual-kubelet-cn-****-k   <none>           <none>
    test-ack-oss-655db9d64d-m5vct     1/1     Running   0          46s     172.16.XX.XXX   virtual-kubelet-cn-****-k   <none>           <none>

    Visualize o diretório de arquivos no Pod. Note que o diretório de montagem /cache-test do OSS foi criado. Os arquivos gravados no primeiro Pod aparecem no segundo Pod, o que indica que ambos compartilham o armazenamento do OSS.

    shell@Alicloud:~$ kubectl exec -it test-ack-oss-655db9d64d-5q7d9 -- bash
    root@test-ack-oss-655db9d64d-5q7d9:/# ls
    bin  boot  cache-test  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
    root@test-ack-oss-655db9d64d-5q7d9:/# ls /cache-test
    root@test-ack-oss-655db9d64d-5q7d9:/# echo "hell oss">/cache-test/ack-oss
    root@test-ack-oss-655db9d64d-5q7d9:/# ls /cache-test
    ack-oss
    root@test-ack-oss-655db9d64d-5q7d9:/# cat /cache-test/ack-oss
    hell oss
    root@test-ack-oss-655db9d64d-5q7d9:/# exit
    exit
    shell@Alicloud:~$ kubectl exec -it test-ack-oss-655db9d64d-m5vct -- bash
    root@test-ack-oss-655db9d64d-m5vct:/# ls /cache-test
    ack-oss
    root@test-ack-oss-655db9d64d-m5vct:/# cat /cache-test/ack-oss
    hell oss

Documentos relacionados

Para mais informações sobre volumes do OSS, consulte Visão geral de volumes do OSS.