すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:OSS ボリュームの使用

最終更新日:Jun 22, 2026

Alibaba Cloud Object Storage Service (OSS) は、画像、音声、動画ファイルなどの非構造化データを格納するための、大規模でセキュア、低コスト、高信頼性のサービスです。この記事では、ACK Serverless クラスターで PersistentVolumeClaim (PVC) を使用して、OSS バケットを ECI Pod にマウントする方法について説明します。

前提条件

ACK サーバーレスクラスターが必要です。詳細については「クラスターの作成」をご参照ください。

注意事項

  • OSS は共有ストレージを提供します。単一の OSS バケットを複数の Pod にマウントできます。

  • マウントディレクトリに 1,000 を超えるファイルを保存しないでください。ファイル数が多すぎると、ossfs が過剰なメモリを消費し、Pod でメモリ不足 (OOM) エラーが発生する可能性があります。

操作手順

  1. OSS バケット情報を取得します。

    OSS バケットがない場合は、OSS コンソールで作成します。詳細については、「バケットの作成」をご参照ください。

    1. OSSコンソールにログインします。左側のナビゲーションペインで、バケットリスト をクリックします。

    2. バケットリスト ページで、対象のバケットの名前をクリックします。

    3. バケット詳細ページで、概要 タブをクリックします。アクセスポート セクションで、ターゲットエンドポイントをコピーします。

      • バケットとクラスターが同じリージョンにある場合は、VPC エンドポイントをコピーします。

      • バケットとクラスターが異なるリージョンにある場合は、インターネットエンドポイントをコピーします。

  2. 承認方法を選択してください。

    • 方法 1 (推奨):RAM ロールを使用します。

      RAM ロールを作成し、権限を付与します。ロールを作成する際、Principal Typeクラウドサービス に、Principal Name[ECS] に設定します。次に、AliyunOSSFullAccess ポリシーをロールにアタッチします。詳細については、「信頼できる Alibaba Cloud サービス用の RAM ロールの作成」および「RAM ロールへの権限付与」をご参照ください。

    • 方法 2:アクセスキーペアを使用します。

      AccessKey ID と AccessKey Secret を取得します。詳細については、「アクセスキーペアの取得」をご参照ください。

  3. 次の内容で test-ack-oss.yaml ファイルを作成します。

    説明

    この例では VPC 環境を使用します。VPC アクセスの場合、インスタンス、コンテナイメージリポジトリ、および OSS エンドポイントが、中国 (北京) など、同じリージョンにあることを確認してください。

    リージョンをまたいで OSS をマウントしたり、イメージをプルしたりする必要がある場合は、インターネットアクセスを設定し、次のコード内の image アドレスまたは OSS の url を対応するインターネットアクセス形式に変更する必要があります。

    • imageregistry.cn-beijing.aliyuncs.com/eci_open/nginx:1.14.2 に設定します。

    • url: パブリックエンドポイントに設定します。

    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>"

    上記の例では、認可に RAM ロールを使用しています。 AccessKey を使用して直接認可する必要がある場合は、ramRole: "<your RAM Role Name>" を次の YAML に置き換えます。

          akId: "<your AccessKey ID>"
          akSecret: "<your AccessKey Secret>"
    説明

    クロスアカウントの OSS バケットをマウントするには、対象アカウントの AccessKey ID と AccessKey Secret を設定します。

    以下の OSS 関連のパラメーターを volumeAttributes に設定する必要があります。

    パラメーター

    説明

    bucket

    OSS バケットの名前。

    path

    マウントするバケット内のサブディレクトリのパスです。 デフォルトは / で、バケット全体がマウントされます。 たとえば、これを /data に設定すると、バケット内の data ディレクトリのみがマウントされます。

    url

    手順 1 で取得した OSS エンドポイントです。

    • バケットとクラスターが同じリージョンにある場合は、VPC エンドポイントを使用します。

    • バケットとクラスターが異なるリージョンにある場合は、インターネットエンドポイントを使用します。

    otherOpts

    OSS をマウントする際、-o <オプション> の形式でカスタムパラメーターを入力できます。 例: -o max_stat_cache_size=0 -o allow_other

    ramRole

    認可に使用する RAM ロール。

    akId

    認可に使用する AccessKey ID。

    akSecret

    認可に使用する AccessKey Secret。

  4. 次のコマンドを実行して、ECI Pod を作成し、OSS ボリュームをマウントします。

    kubectl create -f test-ack-oss.yaml
  5. 次のコマンドを実行して Pod を確認します。

    kubectl get pods -o wide

    以下のような出力が表示されます。

    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>

    Pod 内のファイルディレクトリを表示します。OSS のマウントディレクトリ /cache-test が作成されていることがわかります。最初の Pod に書き込まれたファイルは 2 番目の Pod で表示できます。これは、2 つの Pod が 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

関連ドキュメント

OSS ボリュームの詳細については、「OSS ボリュームの概要」をご参照ください。